[밑시딥1] InceptionNet의 아이디어 – 8장

밑시딥 8장은 이후에 배울 내용의 개론이므로, 이번 포스트는 InceptionNet에 대해 정리하였다.

InceptionNet이란?

InceptionNet은 1×1, 3×3, 5×5의 filter 중 어느 것이 좋을 지 몰라 병렬로 모두 사용한 뒤 concat해주는 모델이다.

단, 각 필터를 통과할 때 feature map의 사이즈가 변동되면 Concat할 수 없으므로 적절히 Padding과 Stride를 준다.

실제 구현에서는 위 사진 처럼 구현하면 파라미터의 수가 너무 많아져서 3×3, 5×5 Filter통과 전에 1×1 Filter로 채널 수를 줄여주고, filter를 통과 시킨다. 다만 3×3 max pooling은 먼저 통과한 뒤 1×1로 채널수를 줄이는 데, 이것은 Concat 후 바로 GAP를 하게 되면 Pooling layer를 연속으로 통과하게 되므로 3×3 Max pooling 후 1×1를 해주는 것이다. (아래사진참고)

Auxiliary Classifiers

Inception Net에는 Auxiliary classifiers 라는 특이한 모듈이 존재한다. Vanishing Gradient를 방지하기 위해 Conv layer를 모두 통과한 후 loss를 구해주는 것이 아닌 중간에 Feature Map를 빼서 classifier해서 loss에 더해준다. 아이디어는 참신하나, 현재에는 사용하지 않는 방식이다.

참고로, Auxiliary Classifier는 Weight에 너무 큰 영향을 주지 않도록 0.3를 곱해 적용한다.

InceptionNet V2, V3

InceptionNet V2에서 나온 아이디어는 훌륭해서 아직도 CNN에서 많이 활용되고 있다. CNN모델의 발전을 보면 성능은 유지하면서 파라미터수를 최대한 줄여, 줄인 파라미터로 더 효율적인 곳에 투자하는 방식으로 발전이 되는 것 같다. V2도 파라미터를 줄이기 위해 특별한 방법을 사용한다.

5×5 filter를 3×3 filter를 두 번 통과 해서 같은 효과를 얻자는 것이다. 이렇게 하면 5×5와 같은 Receptive field를 가지면서 파라미터수는 줄여줄 수 있게 된다.(왼쪽그림)

이것을 확장시키면 “NxN의 Filter를 1xN, Nx1 filter두개로 대체한다.”라는 생각도 할 수 있게 된다.(오른쪽그림)

이렇게 큰 사이즈의 Filter를 비교적 작은 사이즈의 필터 여러개로 대체하면 무조건 좋기만 할까? 앞서 말했듯 작은 사이즈의 필터 여러개로 나누면, 파라미터수를 줄일 수 있고, 그렇게 줄인 파라미터로 레이어를 깊게 만든다거나 성능에 영향을 미치는 모듈에 더 투자해줄 수 있다. 하지만 여러개의 필터로 나누면 통과하는 레이어수가 많아지면서 추론시 속도가 줄어드는 단점이 있다.

이외에도 feature Map의 사이즈를 줄일 때, Max Pooling 대신에 Stride : 2를 이용해 줄이는 방법 등의 참신한 아이디어들이 있는 모델이 InceptionNet이다.

Leave a Comment