[논문 리뷰] Inception V2, V3

2022.02.27 18:30 2,797 Views

이번에는 Inception-v2, v3(Rethinking the Inception Architecture for Computer Vision)에 대해 정리해보려고 합니다. 공부하는 학생인 만큼 틀린 점이 있을 수 있으니 있다면 지적이나 피드백 부탁드립니다. 본 포스팅은 데이콘 서포터즈 "데이크루" 1기 활동의 일환입니다.  


Rethinking the Inception Architecture for Computer Vision

매우 깊은 CNN이 주류가 되면서 발전이 이루어졌지만 모델의 크기나 계산 효율성 때문에 한계가 있었습니다. Mobile vision이나 big-data scenarios와 같은 다양한 상황에도 적용하고자 추가되는 계산량을 적절하게 분해하고 최대한 효율적으로 사용하려고 합니다. 제안한 방법으로 ILSVRC 2012 daset으로 top1 error가 17.2%, top5 error가 3.58%를 달성했다고 합니다.

 

Factorizing Convolutions with Large Filter Size

다양한 상황에서 convolution을 분해하는 방법, 그 중에서도 정답의 계산 효율성을 증가하는 방향으로 찾아본다고 합니다. Inception은 fully convolutional하기 때문에 각 가중치는 활성 당 한 곱에 대응된다고 하고 그래서 계산이 줄면 파라미터의 수도 줄어든다고 합니다. 적절한 분해를 하면 disentangled parameter를 얻을 수 있고 이 덕분에 빠른 학습이 가능하다고 합니다. 


3.1. Factorization into smaller convolutions

큰 필터를 사용한 convolution은 계산적인 측면에서 비용이 많이 나가는 경향이 있습니다. 5*5 convolution의 경우 동일한 조건의 3*3 convolution에 비해 25/9배(약 3배) 정도의 비용이 나감을 알 수 있습니다. 물론 5*5 초반 계층에서 멀리 떨어진 유닛 간의 신호 종속성을 확인할 수 있어 필터 크기를 줄이면 그만큼 표현력을 위한 비용이 커지게 됩니다. 그래서 논문에서는 5*5 convolution과 동일한 input size와 output depth를 가지면서 더 적은 파라미터를 가진 multi-layer 네트워크로 대체할 방법을 고민합니다. Vision network 이기 때문에 fully-connected component를 2-layer convolution으로 대체해 translation invariance를 이용하는 것이 문제없다고 합니다. translation invariance는 입력에 shift가 일어나도 변함 없이 학습 패턴을 파악하는 convolution 방식의 특성을 말하는 것입니다. 그래서 5*5 convolution을 3*3 convolution 2개로 분해합니다. 인접한 unit간의 가중치를 공유함으로써 파라미터 수를 줄여줍니다. 단순히 5*5 convolution을 하는 것과 2개의 3*3 convolution을 하는 것의 차이는 3*3*2 / 5*5 로 약 0.7배 정도 감소합니다. 

3x3 convolution을 2번 사용하여 5x5 convolution을 분해할 때, 첫 번째 3x3은 linear activation, 두 번째 3x3은 ReLU activation을 사용하는 것과 둘 다 ReLU activation을 사용하는 것을 실험합니다. 아래 그래프가 그 결과입니다. 두 3x3 convolution에 ReLU를 사용한 것이 정확도가 더 높았습니다. 추가적으로 배치 정규화(Batch normalization)을 사용하면 더 정확도가 높아지게 됩니다.

결과적으로 3*3 convolution보다 큰 필터는 3*3 convolution으로 분해하는 것이 좋고 실제, 아래 그림처럼 inception에서는 5*5 convolution을 두 개의 3*3 conv로 대체해 사용하고 있습니다. 













3.2. Spatial Factorization into Asymmetric Convolutions

2*2 convolution과 같이 더 작은 단위로 factorizing을 할 수 있지만 이 방법보다는, n*1과 같은 asymmetric convolution을 사용하는 것이 훨씬 좋다고 합니다. 아래 그림처럼 3*1 convolution 뒤에 1*3 convolution을 사용한 2-layer를 sliding하는 것과 3*3 convolution의, receptive field는 동일하다고 합니다. 

그럼에도 이렇게 1*n, n*1 두개의 layer를 사용하는 것이 33%( (3+3)/3*3 ) 더 비용이 절감된다고 합니다. 이에 반해 3*3을 2*2로 분해하면 11% (2*2*2 / 3*3)밖에 절감이 안 된다고 합니다. n*n convolution은 1*n 뒤에 n*1 convolution이 오는 형태로 대체할 수 있으며, 여기서 n이 커짐에 따라 계산 비용 절감이 극적으로 증가한다고 주장할 수 있습니다. 실험을 통해 이를 알아본 결과, grid-size가 큰 초반부 layer에서는 효과가 잘 나오지 않지만 중후반부 layer에서는 7*1, 1*7 convolution을 사용하면 좋은 효과를 얻을 수 있다고 합니다. Feature map size가 12 ~ 20 정도일 때 좋은 결과가 있었다고 합니다. 

n*n >> 1*n, n*1 분할 예시 


Utility of Auxiliary Classifiers

GoogLeNet에서 Auxiliary Classifier를 활용하면 신경망이 수렴하는데 도움을 준다고 소개했습니다. 하지만, 이를 실험해본 결과 효과가 없었다고 합니다.. 다만 Auxiliary Classifier에 drop out이나 batch norm이 있다면, main classifier의 성능이 향상되는 결과가 나와 Auxiliary Classifier는 성능 향상보다는 정규화 효과가 있을 것으로 추측합니다. 


Efficient Grid Size Reduction

일반적인 CNN은 feature map의 사이즈를 줄이기 위해 pooling 연산을 사용합니다. 또한, representational bottleneck을 피하기 위해 필터 수를 증가시킵니다. 예시로 d*d 크기를 가진 k개 feature map은 pooling layer를 거쳐 (d/2)* (d/2) 크기의 2k개 feature map이 됩니다. 연산량은 각각 2(dk)^2, 2(dk/2)^2가 되기 때문에 연산량을 감소시켜주지만 representation도 감소시킨다고 합니다. (정보 손실) 

왼쪽이 pooling을 거쳐 d/2 크기 연산, 오른쪽이 d 크기 일 때의 연산

논문에서는 stride 2를 지닌 pooling layer와 conv layer를 병렬로 사용해 이를 해결합니다. 

위 그림처럼 구성한다고 합니다. 우측 구조 역시 같은 방법이지만 연산보다는 grid size 중심으로 본 그림이라고 합니다. 


Inception-v2

앞서 설명한 내용을 적용해 만든 Inception v2입니다. Inception v2는 42-layer나 되지만, 연산량은 GoogLeNet에 비해 2.5배만 높고 VGG보다 효율적이라고 합니다. Inception에서는 conv 연산에서 zero-padding을 적용했고 이외에는 zero-padding을 적용하지 않았습니다.

표에 포함된 figure 5, 6, 7 은 아래에 다시 한 번 첨부합니다. 설명은 언급했던 내용이라 생략하겠습니다. (왼쪽부터 figure 5, 6, 7입니다.) 



이후 Label Smoothing이 나오는데 모델의 일반화 성능을 높이는 기법입니다. 이 부분은 생략하겠습니다. 관련해서 작동 원리나 왜 효과적인지 등에 관한 내용은 따로 정리해보려고 합니다. 그리고 나서 학습 방법에 대해 간략히 나오는데 TensorFlow 분산 학습 시스템에서 50개의 모델 복제본을 사용했고 학습 시 사용한 파라미터들에 대해 소개됩니다. 이후에는 lower resolution image에 대해 성능을 측정해봤고 소개된 방법으로 학습하는데 오래 걸리긴 하지만 성능은 high resolution에 근접한다고 합니다. 


Experimental Results and Comparisons

여기서 Inception V3가 언급되는데 V2 구조에 각종 기법을 추가해 성능을 측정하고 최고 성능을 나타내는 모델을 V3로 명시했습니다.

 

이 표에 있는 마지막 V2가 V3라고 언급합니다. 그래서 V3는 RMSProp, Label Smoothing, Factorized 등이 다 적용된 V2라고 생각하면 될 것 같습니다. 

최종적으로 보면 ILSVRC 2012데이터에 대해 top1 error 17.2%, top5 error 3.58%로 우수한 성능을 보이고 있습니다. 


Conclusions

당시 최고의 에러율을 상당히 개선시켰으며, 2014 ILSVRC GoogLeNet ensemble error대비 거의 절반으로 줄였다고 합니다. 또한, 79*79 size 같이 lower resolution에서도 높은 성능을 얻을 수 있었다고 합니다. 높은 성능을 유지하면서도 낮은 비용을 들여 네트워크를 설계한 것입니다.

 

참고자료

[1] https://arxiv.org/pdf/1512.00567.pdf

[2] https://wikidocs.net/119792