이번 논문은 googlenet입니다 googlenet은 2014년도 논문으로써
최근 읽어보던 논문들에 비하면 예전 논문이지만
inception module 관련해서 알아두면 좋을 것 같아 공부를 진행하였습니다
우선 googlenet은 2014년도 VGGnet과 같은 시기에 나온 논문으로써
해당 논문 또한 네트워크의 깊이가 정확도에 큰 영향을 주며
추가적은 연산을 늘리지 않으며 깊이(layer)와 너비(채널 개수)를 늘려가는 것에 중점을 두었으며
총 22개 layer로 구성되었습니다
해당 논문에서 최근 3년간 딥러닝이 많이 개선되었으며
개선은 새로운 아이디어와 알고리즘, 신경망이 큰 비중을 차지했다 말하고 있습니다
기존 alexnet과 비교하면 parameter은 약 12배 가량 감소하였으며
해당 논문에서는 모바일과 임베디드 환경을 고려하여 1억 5000만번의 연산 이내로 구성하였습니다
논문에서 deep 하다라는 말이 자주 나오는데 이는 inception module라는 새로운 차원의 구조가 도입되었으며
기존보다 더 많은 layer의 모델이라는 의미입니다
기존 모델들의 구성은 여러개의 convolution layer을 쌓은 다음 max pooling이나 FC layer을 그 위에 넣은 구조였습니다
overfitting을 막기 위해서 dropout을 적용하였으며 깊은 구조를 가지기 위하여 노력하였고
이전 논문들에서 MAX-pooling이 detection과 localization에 효과가 있음을 증명하였고
해당 논문 또한 pooling을 사용하였습니다
network in network라는 모델에서 영감을 받았으며 해당 모델은 convolution 진행시 각 network 사이에
mlp를 삽입하여 진행한다는 논문인데 googlenet은 이에 영감을 받아 inception module 사이 inception module을
구성하였습니다
또한 해당 논문에서 사용한 1*1 convolution과 ReLu activation 또한 사용하였습니다
1*1 convolution layer은 병목현상을 해결하기 위해 차원 감소를 목적으로 도입되었으며
성능 저하 없이 network의 width를 증가시킵니다
성능을 증가시키기 위해서는 모델의 크기를 키워야 하는데(depth & width)
너무 많은 파라미터로 overfitting에 취약하며(고성능의 모델에 적은 양의 training data 가 적용되었기 때문)
많은 파라키터들로 인하여 계산량이 많다는 단점을 지닙니다
이러한 문제점들을 해결하기 위하여 기존 dense한 connection들을 sparse한 connection으로 바꾸는 방법을 고안하였으며
좌측이 sparse 한 connection이며 우측이 dense한 connection입니다
해당 논문에서는 sparse connection 을 통하여 dropout과 같은 효과를 기대하였으나
해당 시기 sparse connection 연산이 많이 연구되지 않아 매우 비효율 적 이었으며
따라서 100배정도의 연산이 줄었지만 cache missing과 overhead등으로 사실상 dense와 거의 비슷한 성능을 보여주었습니다
sparse 한 matrix 연산을 dense 하게 해보려 시도하였지만 잘 되지 않았습니다
inception module에 관한 내용입니다
1*1 3*3 5*5 3개의 필터의 출력을 concatenation
계산량을 줄이기 위하여 3*3 , 5*5 이전 1*1 필터의 사용으로 차원을 줄여주며
pooling 사용의 경우 localization , detection 등에서 좋은 성능을 보여주기 때문에 사용하였으며
max pooling이후의 1*1 conv의 경우 pooling시 차원 축소가 되지 않으므로 pooling 한 결과의 차원을 적당량 사용해 주기 위해 구성합니다
아래는 1*1 convolution layer의 연산량 감소를 보여주는 부분입니다
좌측의 경우 5*5*192*28*28*32 약 1억 2천만번의 연산이 필요하며
우측의 경우 28*28*16*192 = 약 240만 + *5*16*28*28*32 = 약 1000만 총 1240만번의 연산이 필요합니다
실제 사용되어진 inception module은 우측의 (b)모델이며 1*1convolution이 들어간 모습을 볼 수 있습니다
총 22 layer 의 model 이며
효과적 메모리 사용을 위해서 low layer – cnn high layer-inception module을 사용합니다
Depp network에서는 vanishing gradient 문제 발생할 수 있으므로
auxiliary classifiers 을 사용합니다
auxiliary classifiers = 중간중간 결과를 출력해 역전파를 통해 gradient 를 역전파 하여 정규화 효과를 가지며
지나치게 영향을 주는 것을 막기 위하여 0.3 곱한 값을 사용합니다
4(a),4(b)에 위치하고 5*5(stride3) average pooling 입력 사용
70% dropout 시키며 , 차원축소를 위한 128개의 1*1 filter 사용
1024 FC layer , softmax 분류기를 가집니다
최종 결과 출력 단에는 Global average pooling 사용되며 이 결과 top1 정확도가 0.6 % 증가합니다
실제 GoogLeNet의 구성 모습입니다 low layer에는 cnn high layer에는 inception module이 적용되었으며
back propagation을 위한 auxiliary classifiers의 구성 또한 확인할수 있습니다
해당 모델의 전반적인 구성 표 입니다 3*3 reduce 부분은 3*3을 최적화 시키기 위한 1*1의 채널 수라 보시면 될 듯 합니다
0.9 momentum , learning rate 8 epoch마다 4% 씩 감소시키며
학습 이미지 비율 – 4:3 3:4 사이에서 랜덤하게 사용됩니다
원본의 8%~100% 사이의 이미지를 랜덤하게 사용합니다
photometric distortions(광학보정)이 적용되며
이미지 resize를 위한 다양한 보간법을 사용합니다
classification 부분 결과를 보면
120만개 training set , 5만개 validation set ,10만개 test set
7개의 모델로 앙상블을 진행하였으며
총 4개(256,288,320,352)로 crop 진행하였습니다
4개의 scale 에서 3장의 정사각형 이미지 선택(왼쪽,중앙,오른쪽)
각 정사각형 이미지에서 각 모서리 + 중앙2장 총 6장의 224*224 이미지 crop
좌우반전 총 1개의 이미지를 4*3*6*2=144 이미지 추출합니다
결과를 확인하면 GoogLeNet이 가장 좋은 성능을 보여주며
앙상블과 crop의 개수를 증가할수록 좋은 성능을 보여줍니다
detection 부분 결과입니다
Detection 부분에서도 뛰어난 성능을 가집니다
2013년 대비 정확도가 거의 2배 증가하였으며
Bounding box regression을 미리 훈련하지 않았음에도 뛰어난 성능을 보여줍니다
Deep insight가 가장 높은 정확도를 보여주나 해당 방식은 앙상블 적용시 정확도의 차이가 거의 없으나
GoogLeNet 방식은 앙상블을 진행하였을때 정확도가 큰 폭으로 개선되었습니다ㅣ
'논문리뷰' 카테고리의 다른 글
Mobilenet 논문리뷰 (0) | 2022.01.12 |
---|---|
SSD: Single Shot MultiBox Detector 논문리뷰 (0) | 2021.12.15 |
You Only Look Once(YOLO) v1 논문 리뷰 (0) | 2021.12.01 |
Resnet 논문리뷰 (0) | 2021.11.23 |
Faster RCNN 논문리뷰 (0) | 2021.11.16 |