티스토리 뷰

이번 포스트에서는 https://up-one-coding.tistory.com/10에서 Real image와 Fake image를 분류하기 위해 사용된 MobileNetV2의 주요 특징인 Inverted Residuals와 Linear Bottlenecks에 대해 포스트 하겠습니다. 우선 MobilenetV2은 기존 Computer Vision 관련 알고리즘이 가지고 있던 많은 연산 요구량으로 인해 모바일과 임베디드 상에서 상용이 어려운 문제를 해결할 수 있는 모델입니다. 

 

1. Depthwise Separable Convolutions

MobileNetV2는 CNN(합성곱 신경망)을 기반으로 만들어진 모델이기에 Input image에서 특징을 추출해 Feature Map을 생성하기 위한 연산을 걸쳐야 합니다. 하지만 기존 Convolution layer은 많은 양의 파라미터를 한꺼번에 연산 처리하기 때문에 파라미터 수가 크다는 문제점이 있습니다. Depthwise Separable Convolutions은 기존 Convolution 연산을 두 개의 layer로 분리해 처리하는 것입니다.

 

첫 번째 layer로 Depthwise Convolution은 input channel 당 하나의 convolution filter을 적용하여 특징을 추출하는 것입니다. 기존 Convolution은 특정 채널만의 Spatial Feature을 추출하는 것은 불가능하기 때문에 파라미터 수가 많아질 수밖에 없습니다. 하지만 Depthwise Convolution은 아래의 그림과 같이 채널 방향의 Convolution 연산은 진행하지 않고 공간 방향의 연산만 진행하여 특정 채널만의 Spatial Feature을 추출할 수 있게끔 구조화되었습니다.

Depthwise Convolution

 

두 번째 layer Pointwise Convolution은 input channels의 linear combinations을 계산하여 하나의 값을 도출하는 것입니다. 이 연산의 효과로  Input image의 feature을 1개의 채널로 압축하여 다음 layer의 계산량과 파라미터 수를 줄일 수 있는 것입니다.

Pointwise Convolution

 

이 두 개의 layer을 합친 Depthwise Separable Convolutions은  기존 Convolutions 보다 8-9배 더 적은 파라미터 수를 가지는 효과를 얻을 수 있습니다. 

 

2. Linear Bottlenecks

https://up-one-coding.tistory.com/13에서 ReLu함수는 입력값이 0이하인 구간은 미분이 불가능하여 Gradient Vanishing 문제점이 있다는 것을 언급하였습니다. 따라서 입력값이 ReLu 함수 계층을 거치면 정보가 손실되는 단점이 있습니다. Linear Bottlenecks은 ReLu 함수의 입력값이 양수일 때의 변환 과정처럼 고차원의 데이터를 저차원의 데이터로 압축했을 때 특정 정보를 그대로 유지할 수 있게끔 하는 역할을 합니다. 딥러닝에서 고차원의 데이터를 저차원의 데이터로 압축해 특징을 추출하는 것을 mainfold라고 지칭합니다. 즉, 활성화함수 Relu의 특성을 빌려 Convolution block에 Linear Bottlenecks layer을 추가하여 주요 특징을 보존하여 다음 계층을 전달하게끔 하는 것입니다.

 

Separable with linear bottleneck

 

3. Inverted Residual Block

CNN에서 가장 대두되는 문제점은 Feature Map으로 압축된 정보를 어떻게 손실 없이 확장시킬 수 있는지입니다. 정보량과 연산 속도는 서로 Trade-Off 관계이기에 그 중간 지점을 찾아 모델링하는 것은 어려운 일입니다. MobileNetV2의 Inverted Residuals Block은 압축된 정보를 키운 후 다시 압축하는 형태를 가집니다. 이 의미는 앞서 언급된 Linear Bottleneck으로 추출된 feature가 저차원의 layer에 저장되어 있다고 가정하고 Skip Connection을 통해 feature을 더 깊은 layer로 바로 전달한다는 것입니다.

 

기존 모델에서는 압축된 정보를 더 깊은 layer로 전달하기 위해서는 순차적으로 모든 layer을 걸쳐 전달되는 구조를 사용했습니다. 하지만 이 구조는 연산 속도가 느려지고 파라미터 수도 많아지는 문제점을 초래했습니다. 이 문제점을 해결하기 위해 먼저 Residual Block이 등장했습니다. Residual Block은 wide 한 형태의 Input Image의 feature을 압축하고 다시 확장시키는 구조입니다. 

Residual Block

 

반면 Inverted Residual Block은 Linear Bottleneck으로 압축한 저차원의 정보를 Skip Connection을 통해 더 깊은 layer로 전달하는 구조입니다. wide한 형태의 Input Image의 feature 대신 이미 압축한 저차원의 정보를 사용하는 이유는 이미 중요한 정보는 Linear Bottleneck을 통해 저차원에 압축되어 있다고 가정하기 때문입니다. 중요한 정보는 저차원에 압축되어 있기 때문에 이것을 바로 Skip Connection과 합쳐도 정확도는 유지된 채 연산량을 줄일 수 있기 때문입니다. 

Inverted Residual Block

 

 

MobileNetV2는 CNN이 가지고 있던 많은 연산양과 파라미터 수로 인한 복잡한 모델 구조를 경량화함과 동시에 정확도는 그대로 유지한 구조로 볼 수 있습니다. 제 프로젝트(https://up-one-coding.tistory.com/10)에서도 MobileNetV2이 가장 성능이 좋았던 이유는 압축된 얼굴 이미지의 특징을 더 깊은 layer로 정보 손실 없이 전달하여 Real image와 Fake image을 잘 분류할 수 있게 했기 때문인 거 같습니다. 

TAG more
글 보관함
최근에 올라온 글