논문 읽기/Classification

[논문 읽기] MobileNetV2(2018) 리뷰, MobileNetV2: Inverted Residuals and Linear Bottlenecks

AI 꿈나무 2021. 3. 21. 22:16
반응형

 안녕하세요! 이번에 읽어볼 논문은 MobileNetV2: Inverted Residuals and Linear Bottlenecks 입니다.

 

 MobileNetV2는 MobileNetV1의 후속작 입니다. MobileNetV1에 대해 궁금하신 분은 아래 포스팅을 참고해주세요.

 

[논문 읽기] MobileNet(2017) 리뷰, Efficient Convolutional Neural Networks for Mobile Vision Applications

 이번에 읽어볼 논문은 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Application 입니다.  MobileNet은 Depthwise separable convolution을 활용하여 모델을 경량화했습니다. Xcept..

deep-learning-study.tistory.com

 

 MobileNetV1을 잠깐 복습하자면, MobileNetV1은 Depthwise separable convolution 구조를 활용하여 모델 경량화에 집중한 모델입니다. MobileNetV2는 Depthwise separable convolution을 수정한 구조를 제안합니다. 제안된 Convolution Block은 Inverted Residuals와 Linear Bottlenecks를 사용하여 성능을 향상시킵니다. 그리고 이 Block을 차곡차곡 쌓은 것이 MobileNetV2 입니다. Inverted Residuals와 Linear Bottlenecks를 사용한 Convolution block이 무엇인지 살펴보겠습니다.

 

ReLU로 인한 정보 손실

 Inverted Residuals와 Linear Bottlenecks는 ReLU 함수를 거치게 되면 정보가 손실된다는 것에 영감을 받아 이를 최소화하기 위해 제안되었습니다. 따라서 ReLU 정보 손실에 대해 먼저 알아보겠습니다. 입력 값이 채널수가 적은 ReLU 함수 계층을 거치면 정보가 손실됩니다(0이하의 값은 사라집니다). 반면에 입력 값이 채널수가 많은 ReLU 함수 계층을 거치면 정보가 보존됩니다(나중에 다시 합쳐지기 때문인것 같습니다). 따라서 ReLU 함수를 사용할 때는 해당 레이어에 많은 채널 수를 사용하고, 해당 레이어에 채널 수가 적다면 선형 함수를 사용합니다. 이것이 Inverted Residuals와 Linear Bottleneck의 등장 배경입니다.

 

 아래 그림은 입력값에 ReLU 함수를 적용한 것입니다. 출력 채널이 작은 경우에 정보가 소실되고, 크면 클수록 정보를 보존한다는 것을 실험적으로 증명합니다.

 

Convolution Block for MobileNetV2

 아래 그림은 MobileNetV1과 MobileNetV2에서 사용하는 Convolution block 입니다. stride=2는 down sampling을 위해 사용하는 블락입니다.

 

 

 아래 그림은 MobileNetV2 블락을 시각화 한것입니다.

 

 MobileNetV2 블락을 자세히 살펴보겠습니다.

 

(1) Linear Bottlenecks

 Bottleneck 구조는 ResNet에서 연산량 감소를 위해 제안된 구조입니다. 이 BottleNeck 구조에 채널 수가 적은 레이어는 linear 함수를 사용합니다. 채널 수가 적은 레이어에 비선형 함수 ReLU를 사용하면 정보손실이 발생하기 때문입니다. 아래 그림은 비선형 함수와 선형 함수를 사용했을 때의 성능 표입니다. 선형 함수의 성능이 더 좋네요.

 

 

 

(2) Inverted residuals

기존 BottleNeck

 기존의 BottleNeck 구조는 첫 번째 1x1 conv layer에서 채널 수를 감소시키고 3x3 conv로 전달합니다. 채널 수가 감소된 레이어에서 ReLU 함수를 사용하면 정보 손실이 발생하게 됩니다. 따라서 첫 번째 레이어에서 입력값의 채널 수를 증가시키고 3x3conv layer로 전달합니다.

 

(3) ReLU6

 MobileNetV2와 MobileNetV1에서는 ReLU6 함수를 사용합니다. MobileNetV1 논문에서는 이 애기가 나오진 않지만 사용했나 보네요. 연산량 감소 효과가 있다고 합니다.

 

 

 최종적으로 MobileNetV2 convolution block은 아래와 같은 연산을 합니다.

 k채널 입력값은 1x1 conv를 거쳐서 tk 채널로 확장되고 3x3conv에 전달됩니다. 그리고 linear 1x1 conv를 거쳐서 k'로 채널 수가 감소합니다.

 

MobileNetV2 architecture

 첫 번째 레이어는 일반적인 conv를 사용하고, 그 이후에 18개의 convolution block을 쌓았습니다.

 

Performance

 다른 경량화 모델과 비교한 성능입니다. 파라미터수와 정확도 모두 뛰어나네요.

 

 경량화 모델간의 연산량에 따른 정확도 비교입니다.


참고자료

[1] arxiv.org/abs/1801.04381

[2] blog.airlab.re.kr/2019/07/mobilenetv2

[3] towardsdatascience.com/review-mobilenetv2-light-weight-model-image-classification-8febb490e61c

반응형