[Classification] Deep Learning with Depthwise Separable Convolutions : Xception 논문 리뷰

tobigs1415 이미지 세미나·2021년 5월 12일
4

Tobigs1415 Image Semina

목록 보기
5/16
post-thumbnail

투빅스 14기 장혜림

Introduction

  • Xception : eXtreme Inception
  • 기존 Inception

1x1 convolution을 통해 cross-channel correlation을 학습하고, 이후 3x3, 5x5 convolution을 통해서 spatial correlation을 학습한다.

  • cross-channel correlation: 입력 채널들 간의 관계 학습
    1x1 convolution(=pointwise convolution)을 통해서 학습 가능

  • spatial correlation: filter와 특정 채널 사이의 관계 학습 (공간적인 특성 학습)

일반적인 convolution은 하나의 filter로 cross-channel correlation과 spatial correlation을 동시에 학습함

Inception은 이를 분리해서 학습함으로써 모델의 성능을 높일 수 있었다고 함
Xception의 저자는 이러한 분리를 더 강하게 해보자! 라는 아이디어로 출발

Xception

1) 먼저 Inception module을 단순화시킴

2) 해당 Inception module을 large 1x1 convolution으로 재구성하고 output channel이 겹치지 않는 부분에 대해서 spatial convolution(3x3)이 오는 형태로 재구성함

Figure2와 Figure3는 서로 동일한 형태
(branch 1은 input에 대해 1x1 conv를 수행하고, output channels에 대해서 3x3 convolution을 수행하는데, branch 2, branch 3 역시 동일한 과정을 거치고, 마지막으로 각 결과를 concat)

3) 기존에는 3,4개의 branch로 나눠서 각 branch에 대해서 spatial convolution 연산을 수행한 후 concat하였다면, Xception은 3,4개로 나누는 것이 아니라 각 output channel에 대해서 spatial convolution을 수행함

tensorflow/Inception_v3

그렇게 함으로써 cross-channel correlation과 spatial correlation을 완전하게 분리시켜서 학습할 수 있다고 생각함(hypothesis)

Xception with Depthwise Separable Convolution

  • Xception이 학습하는 과정
    1) 1x1 conv를 통해 cross-channel correlation 학습
    2) 각 output channel에 대해서 spatial correlation 학습

위와 같은 학습을 위해 Depthwise Separable Convolution을 사용함

Depthwise Separable Convolution

depthwise convolution을 수행한 후에 pointwise convolution을 수행함으로써 일반적인 convolution 보다 연산량을 줄임

  • depthwise convolution: 각 channel마다의 spatial feature를 추출하기 위한 방식. 일반적인 convolution은 한 개의 filter가 channel 전체에 convolution을 연산하는 반면에, depthwise convolution은 한 개의 filter가 한 개의 channel만 연산을 함

    M개의 channel이 있으면 첫번째 channel인 (DF,DF,M1D_F, D_F, M_1)에 대해서 (DK,DK,1D_K, D_K, 1) filter가 존재. 최종적으로는 총 M개의 filter가 존재하게 됨. output volume = (DG,DG,MD_G, D_G, M)

  • pointwise convolution: 1x1 convolution

    depthwise convolution의 output인 (DG,DG,MD_G, D_G, M)을 input으로 받아서 N개의 (1,1,M) filter를 사용하여 convolution 연산. output volume = (DG,DG,ND_G, D_G, N)

얼마만큼 연산량을 줄였는가?

depthwise separable convolution의 연산량 계산하기 전에, 먼저 일반적인 convolution 연산량을 살펴보도록 하겠습니다.

한 개의 filter가 input의 한 위치에서 곱연산을 수행할 때의 연산량은 DK2×MD^2_K\times M
이동할 수 있는 위치의 경우의 수는 output의 height ×\times width인 DG×DGD_G\times D_G
하나의 filter가 하나의 input을 처리하는 데 필요한 연산량은 DG2×DK2×MD^2_G\times D^2_K\times M
N개의 filter가 input을 처리하는 데 필요한 연산량은 N×DG2×DK2×MN\times D^2_G\times D^2_K\times M

이제 depthwise separable convolution의 연산량을 살펴보도록 하겠습니다.

전체 연산량 = depthwise convolution 연산량 + pointwise convolution 연산량

1) depthwise convolution 연산량
한 개의 filter가 input의 한 위치에서 곱연산을 수행할 때의 연산량은 DK2D^2_K
이동할 수 있는 위치의 경우의 수는 output의 height ×\times width인 DG×DGD_G\times D_G
하나의 filter가 하나의 channel 전체를 처리하는 데 필요한 연산량은 DG2×DK2D^2_G\times D^2_K
channel이 총 M개가 있으므로 filter가 input을 처리하는 데 필요한 총 연산량은 M×DG2×DK2M\times D^2_G\times D^2_K

2) pointwise convolution 연산량
한 개의 filter가 input의 한 위치에서 곱연산을 수행할 때의 연산량은 MM
이동할 수 있는 위치의 경우의 수는 output의 height ×\times width인 DG×DGD_G\times D_G
하나의 filter가 하나의 input을 처리하는 데 필요한 연산량은 DG2×MD^2_G\times M
N개의 filter가 input을 처리하는 데 필요한 연산량은 N×DG2×MN\times D^2_G\times M

일반적인 convolution 연산량과 비교를 해보면, output channel의 수가 1024이고 filter의 size가 3x3일 때, 약 191\over 9만큼 연산량이 줄어들었음

  • Xception with Depthwise Separable Convolution

다시 기억을 되살려보면 Xception은 1x1 conv를 통해 cross-channel correlation 학습을 하고 각 output channel에 대해서 spatial convolution을 수행함

그러나, depthwise separable convolution(depthwise->pointwise) 순서대로 convolution을 수행해도 상관이 없다고 함

We argue that the first difference is unimportant, in particular because these operations are meant to be used in a stacked setting

그리고 Xception 코드를 보면, tensorflow에서 제공하는 depthwise separable convolution을 그대로 사용하는 것을 볼 수 있음

keras-team/xception

Xception 구조

  • Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning(Feb 2016) : Inception에 ResNet을 결합한 모델을 제시했었음

Xception 구조는 residual connection이 있는 depthwise separble convolution의 linear stack으로 볼 수 있음

Result

  • ImageNet dataset(1000-class single-label classification)

Inception-v3와 동일한 optimization configuration 사용했고, Xception에 최적화된 hyperparameter를 조정하려는 시도를 하지 않았음. 즉 inception-v3에 맞춰진 최적값이었는데 비슷한 수의 파라미터를 가지면서 정확도를 향상시킴. 저자는 모델의 parameter를 효율적으로 사용했다고 말함

  • JFT dataset(17000-class single-label classification, internal Google dataset)
    JFT에 대해 학습된 모델의 성능 평가는 보조 dataset인 FastEval14k 사용

  • non-linearity
    기존의 inception은 1x1 conv 이후와 spatial conv 이후 모두 non-linearity로 ReLU를 수행하는데, Xception의 경우 activiation을 사용하지 않는 것이 더 성능이 좋았음

    저자는 이에 대해서 spatial convolution이 적용되는 intermediate feature space의 depth가 non-linearity의 실용성에 매우 중요하게 작용된다고 말함

    즉, Inception module에 있는 deep feature space(여러 개의 channel)의 경우에는 non-linearity가 도움이 되지만, shallow feature space(1-channel)의 경우에는 오히려 정보 손실로 인해 해로울 수가 있다고 함

Inception-v1

Xception 활용

DeepLab V3+ Encoder로 Xception 제안

  • DeepLab 시리즈는 semantic segmentation 알고리즘으로, atrous convolution 활용하는 것을 제안한 모델

    DeepLab V1
    Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs. ICLR 2015.
    DeepLab V2
    DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs. TPAMI 2017.
    DeepLab V3
    Rethinking Atrous Convolution for Semantic Image Segmentation. arXiv 2017.
    DeepLab V3+
    Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation. arXiv 2018.

  • atrous convolution: filter 내부에 빈 공간(trous=hole)을 두고 convolution 수행

    빈 공간에 대해서는 0으로 채워져서 계산됨


filter 사이의 간격을 dilation rate이라고 함 (예시 그림: dilation rate=2)

이를 통해 일반적인 convolution과 동일한 computational cost를 가지고도 더 넓은 receptive field를 가질 수 있음

DeepLab은 pooling layer 대신에 atrous convolution을 이용하여 receptive field를 확장시켜 조밀한 예측을 수행하고자 함

DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs

  • DeepLab V3+: Depthwise Separable Convolution과 Atrous Convolution을 결합한 Atrous Separable Convolution의 활용 제안

Spatial Pyramid Pooling 적용: multi-scale에 잘 대응하기 위한 방법으로 여러개의 확장 비율을 사용해서 atrous convolution을 수행한 후 concat 시킴

DeepLab V2, DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs

Encoder의 backbone으로 MSRA의 Xception 모델을 변형하여 사용

JFT dataset-pretrained Xception이 가장 좋은 성능을 보임

Reference

profile
2021 투빅스 14, 15기 이미지 세미나입니다😀

4개의 댓글

comment-user-thumbnail
2021년 5월 18일

투빅스 14기 김상현
이번 강의는 Xception 논문 리뷰로 장혜림님께서 진행해주셨습니다.

  • Xception은 extreme Inception으로 Inception 모듈에서 cross-channel correlation과 spatial correlation을 분리해 학습하는 것을 좀 더 강화한 모델이다.
  • Xception은 cross-channel correlation과 spatial correlation을 분리하여 학습시키기 위해 1x1 conv로 cross-channel correlation을 학습한 후 각각의 output channel에 대해 spatial correlation을 학습한다.
  • 이와 같은 학습을 위해 depth-wise convolution을 수행한 후 point-wise convolution을 수행했다. 이를 depth-wise separable convolution이라 한다. Depth-wise separable convolution은 기존의 convolution연산 보다 연산량이 적다는 이점이 있다.
  • Depth-wise separable convolution과 Xception 모듈의 연산 순서가 다르지만 논문의 저자들은 순서가 중요하지 않다는 것을 주장하며 기존의 depth-wise separable convolution을 이용해 Xception 모듈을 구현했다. 특히 이를 가능하게 한 이유 중 한가지 이유는 depth-wise와 pixel-wise 연산 사이의 non-linearity function이 없을 때 더 성능이 좋았기 때문이다. 즉, 중간의 non-linearity function이 빠지면서 순서에 영향을 아예 받지 않게 되었다.
  • Xception 모델은 당시 SOTA 모델들과 비교했을 때, 비교적 적은 파라미터를 사용해서 높은 성능을 보여줬다. 또한 이런 우수성을 바탕으로 Xception 모델은 segmentation 모델 등에서도 backbone network로 사용되었다.

Xception모델의 원리와 Xception 모듈의 연산 방법에 대해 자세하게 설명해주셔서 Xception 모델에 대해 이해할 수 있었습니다. 또한, classification이외에 task에도 해당 모듈이 사용되는 모델을 소개해주셨습니다.
유익한 강의 감사합니다.

답글 달기

투빅스 14기 김민경

  • 기존의 convolution은 cross-channel correlation과 spatial correlation을 동시에 학습

  • Inception은 이를 분리해서 1x1 convolution을 통해 cross-channel correlation을 학습하고, 이후 3x3, 5x5 convolution을 통해서 spatial correlation을 학습

  • Xception은 이러한 분리를 더 강하게 해보자는 아이디어에서 출발
    1) 하나의 크기의 convolution 사용, avg pooling x => Inception module을 단순화
    2) 해당 Inception module을 large 1x1 convolution으로 재구성, output channel이 겹치지 않는 부분에 대해 spatial convolution(3x3)이 오는 형태로 재구성 => cross-channel correlation과 spatial correlation을 완전하게 분리

  • Xception VS. Depthwise Separable Convolution

  • Xception은 연산 순서가 1x1 convolution -> 3x3 convolution, depthwise separable convolution은 3x3 convolution -> 1x1 convolution (반대)

  • but, Xception에서 depthwise separable convolution 연산 순서대로 해도 상관 x

  • 기존의 Inception은 1x1 convolution, 3x3 convolution 사이에 ReLU를 넣어줌으로써 non-linearity 추가, depthwise separable convolution은 non-linearity x

  • Xception 활용 : DeepLab V3+ Encoder로 Xception 제안

  • Semantic Segmentation 알고리즘인 DeepLab 시리즈는 atrous convolution(내부에 빈 공간을 두고 convolution)을 활용하는 것을 제안한 모델들.

  • DeepLab V3+은 pooling layer 대신에 atrous convolution을 이용 + 변형된 Xception을 인코더로 이용해서 좋은 성능을 보여줌.

Inception 기반 모델인 Xception의 아이디어 흐름을 자세히 설명해주셨고, Xception을 활용함으로써 좋은 성능을 달성한 DeepLab V3+ 논문도 소개해 주셔서 매우 흥미로운 강의였습니다. 감사합니다:)

답글 달기

투빅스 14기 서아라
3주차 강의는 Xception 리뷰로, 장혜림님께서 진행해주셨습니다.
Inception

  • 1X1 convolution을 통해 cross-channel correlation을 학습하고, 이후 3X3, 5X5 convolution을 통해서 spatial correlation을 학습한다.
  • 여기서 cross-channel correlation 이란, 입력 채널들 간의 관계를 학습하는 것을 의미하고, 1X1 convolution을 통해서 학습이 가능하다.
  • 일반적인 convolution은 하나의 filter로 cross-channel correlation과 spatial correlation을 학습하는데, Inception은 이를 분리하여 학습함으로써 모델의 성능을 높일 수 있었다고 한다.

Xception

  • Xception의 저자는 이러한 분리를 더 강하게 해보자는 아이디어에서 출발하였다.
  • Inception module을 large 1x1 convolution으로 재구성 하고 output channel이 겹치지 않는 부분에 대해서 3x3 spatial convolution이 오는 형태로 재구성하였다.
  • depthwise convolution을 수행한 후 pointwise convolution을 수행하여 일반적인 convolution 보다 연산량을 줄일 수 있었다. (일반적인 convolution 연산량과 비교를 해보면 output channel = 1024, filter size=3x3일 때, 약 1/9 만큼 연산량이 줄어들었음)
  • depthwise convolution: 각 channel 마다의 spatial feature을 추출하기 위한 방식
  • pointwise convolution: 1X1 convolution
  • depthwise->pointwise, pointwise->depthwise의 순서는 상관 없다고 한다.

DeepLab V3+ Encoder로 Xception 제안

  • DeepLab 시리즈는 semantic segmentation 알고리즘이며, Encoder의 backbone으로 MSRA의 Xception 모델을 변형하여 사용하였다고 한다.

Inception의 upgrade version인 Xception, 그리고 이를 활용한 DeepLab V3에 대한 정리를 깔끔하게 해주셔서 두 모델에 대하여 더 잘 이해할 수 있게 된 것 같습니다. 좋은 발표 감사합니다!:D

답글 달기
comment-user-thumbnail
2021년 5월 19일

투빅스 14기 민거홍
3주차 첫번째 강의는 Xception 논문 리뷰였으며, 혜림님이 진행해주셨습니다.

  • Xception에서는 전반적인 연산량을 줄어주는 Depthwise separable convolution를 제시하였습니다.
  • cross-channel correlation과 spatial correlation을 분리시켜 학습하는 방법을 제시하였습니다.
  • 효과적으로 파라미터를 사용할 수 있어 컴퓨팅 자원이 상대적으로 한정적인 곳에서도 어느정도 활용될 수 있을 것 같습니다.
  • Spatial Pyramid Pooling을 적용시켰습니다. 이는 여러개의 확장 비율을 사용해서 atrous convolution을 수행한 후 concat 시키는 방법론을 뜻합니다.
  • 추후 MobileNet의 토대가 되는 연구였습니다.
    새로운 관점을 제시해준 강의였던 것 같습니다. 좋은 강의 감사합니다.
답글 달기