본문 바로가기

Machine Learning/Vision

Popular CNN Architecture (1) - AlexNet, VGG

반응형



현 시대의 비전분야에 CNN아키텍쳐 사용에 시발점이된 AlexNet에서 15년도 ICLR 우승작인 ResNet에 이르기까지 대략적으로 큰 획을 그은 대표적인 아키텍쳐는 크게 4가지가 있었다.

이번 포스팅에서는 4종의 아키텍쳐중 AlexNet과 VGGNet에 대해 간략하게 알아볼 것이다.

각각의 아키텍쳐들은 시간이 지날수록 error rate이 감소하고, depth가 깊어지는 경향이 있다.
다시말해, 일반적으로 layer의 depth가 깊어질수록 성능이 좋아질 여지가 높아짐. (무조건적으로 성능이 좋아지는 것은 아님)

AlexNet
1. 구조


기존 activation function(tanh, sigmoid 등)에 비해서 ReLU를 사용했을때, 더 빠른 속도로 수렴하는 효과적인 성능을 보임.
(지금까지도 Classification에서는 웬만하면 ReLU를 쓴다)

Regularization technique중 하나.
output으로 나온 conv feature map에서 일정부분만 높게 나오게함. neuron이 firing이 됬을때, 그 주변의 neuron의 firing을 억제함. 어떤 conv feature map의 일정 부분만 높은 값을 가지게하고 나머지를 낮게함.

2.Regularization


Regularization중에 가장 큰 부분은 두 가지가 있음. ( overfit, training data에 과적합 을 피하기 위함.) 
-Data augmentation
-Dropout

(1) Regularization - Data augmentation

Label preserving transformation.

만약 숫자라면, flip을 하면 안됨. (가령, 6을 뒤집으면 6이 될 수 없음.)
물체가 무엇인지 알고, domain을 명확히 파악하여 데이터를 처리해야함.

AlexNet에서는 256x256의 이미지를 224x224의 patch로 추출하여, 2048배의 image로 늘려서 사용함
가령, 1만장의 image를 약 2천만장의 이미지로 늘려 사용함.

각 RGB 채널에 특정 값을 더해서 변형의 데이터를 얻어냄. 더하는 정도는 학습된 데이터내에서 해당 채널의 값의 변화정도를 얻어내고 이에 비례하여 노이즈를 주어 추가적인 데이터를 얻어냄.

(2) Regularization - Dropout (*현재 통용되는 Dropout과 다름)

일반적인 지금의 Dropout 방식 : 어떤 레이어의 일정 비율 만큼의 노드를 랜덤하게 0으로 만듦. ( node off )

여기선 이와 달리 output * 0.5로 출력하는 방식을 dropout으로 지칭함.

★parameter 갯수 계산은 항상 NN 아키텍쳐 분석에 있어서 중요함.


VGG


간단한 구조와 방식에 비해 아주 좋은 성능을 보여줌. 
논문의 주된 목적은 고정된 input에 대해 일반적인 layer들로 모델을 만들때, 어떤식으로 해야 좋은 결과가 나올지에 대한 분석을 한것에 있었음.

이 논문 이후 기본적인 neural net 구조가 conv 3x3 stride1을 사용하고 max-pooling이나 average-pooling을 통해 spatial한 부분을 조절함.

다른것들 보다 VGG 16, 19가 성능이 좋으며, VGG 특성상 단순한 아키텍쳐라서 자주 이용하는 편이다. (layer가 16개, 19개)

하지만, 이 모델 역시 한계점이 있었는데, conv와 pooling layer를 거치면서, input의 WxH는 감소하는데, channel(depth, filter갯수)는 증가하는 구조였다. 이로 인해, 다른 구간보다 초기 conv layer단에서, 파라메터 수 는 적은데 비해, 메모리 가용량(WxHxD와 비례)이 높게 된다.

또한, 뒷단에서는 input이 작아져서 memory 가용량이 적어지지만, depth가 점점 깊어짐에 따라, parameter수(WxHxD_이전x필터수)가 기하급수 적으로 증가한다


문제는 이러한 parameter가 FC layer에서 더 커지게 된다. VGG 16모델을 예로 들면, 마지막단의 maxpool을 거치고나면, 7x7x512의 인풋이 FC layer로 들어가게 된다.


여기서, FC layer 의 경우 1x1x4096이므로, FClayer에서 사용되는 filter는 7x7x512가 4096개( output 채널의 수 )만큼 필요하다

결국, 해당 레이어의 parameter수는 7x7x512x4096 = 102,760,448 약 1억개가 필요해진다.


결국, VGG-16 모델에서는 forward path에서만 메모리 사용량이 24M *4byte(픽셀당 4byte) ~=93MB / image 가 필요해진다. 학습이 포함된다면, 여기에 *2를 한, 약 190MB의 용량이 필요하다.

뿐만아니라, parameter를 총 138M개나 사용하게 된다.


image에 대한 생성되는 용량은 해당 모델에서 해결할 수 없지만, parameter 수는 간단한 트릭으로 줄일 수 있었는데, 뒷단의 7x7x512 parameter를 1x1x512 단일 column으로 바꾸게 된다면, 다소 해결되긴 한다. (average pooling)




요약


VGG는 간단한 모델로써 현재에도 사랑받는 모델이다.


하지만, 일반적으로 사용할때 메모리 사용량이 여타 모델에 비해 압도적으로 높은 편이다. 

또한, parameter 역시 매우 많다. 종종 pretrained VGG model이 다른 model에 비해 용량이 큰 이유도 이러한 문제점 때문이다.

반응형

'Machine Learning > Vision' 카테고리의 다른 글

Popular CNN Architecture (3) - ResNet  (0) 2019.01.08
Popular CNN Architecture (2) - GoogLeNet  (0) 2019.01.07