아래 그림은 Stanford의 cs231n의 강의 자료의 한페이지로, 대부분 강의자료나 블로그 글 등을 보면 ILSVRC를 통해 제안된 AlexNet을 시작으로 VGG, GoogLeNet, ResNet 정도 까지는 잘 설명이 되어있음. 하지만, 실제 딥러닝 연구의 붐이 불기 시작한 2016년 이후에 발표된 수많은 연구들에 대해선 한 곳에 잘 모아 놓은 자료가 거의 없어서 아래 출처의 필자(HOYA012)가 블로그에 친절히 정리하였다고함. (감사합니다!!)
Image Classfication 성능을 높이기 위해 다양한 시도들이 있는데, 그 중 CNN(Convolutional Neural Network) Architecture에 초점을 두고, 각 Architecture들의 구조와 특징, ImageNet 데이터셋에 대한 성능 정도의 지표들을 요약하여 설명 하였음.
1990년대 ~ 2015년 까지의 연구들
LeNet-5, 1998
Image Classification에 거의 보편적으로 사용되는 Convolutional Neural Network(CNN)을 최초로 제안한 논문인 Yann LeCun의 LeNet-5 는, 그 당시 Classifier로 주로 사용되던 fully-connected multi-layer network(MLP)가 가지는 한계점인 input의 pixel수가 많아지면 parameter가 기하 급수적으로 증가하는 문제, local 한 distortion(예, image를 1pixel shift)에 취약한 문제 등을 지적하며, 이러한 문제를 해결 할 수 있는 Convolutional Neural Network 구조를 처음 제안 하였음. Input을 1차원적으로 바라보던 관점에서 2차원으로 확장하였고, parameter sharing을 통해 input의 pixel수가 증가해도 parameter 수가 변하지 않는다는 특징을 가지고 있음.
손 글씨 인식을 위해 제안된 arhitecture이고, 1990년대 당시에는 지금 수준의 컴퓨팅 파워에 비해 현저히 연산 자원이 부족했기 때문에 32x32라는 작은 사이즈의 이미지를 input으로 사용하고 있음. Layer의 개수도 Conv layer 2개, FC layer 3개로 굉장히 적은 개수의 layer를 사용하고 있음. 이 architecture의 이름은 저자인 LeCun의 이름과 Network를 합쳐서 LeNet이란 이름으로 부르게 되었다고 함.
AlexNet, 2012
AlexNet은 ImageNet 데이터셋을 이용하여 Classification 성능을 겨루는 대회인 ILSVRC대회가 2010년 부터 매년 열렸는데, SuperVision이라는 팀이 2012년 압도적인 성능으로 우승을 하게되면서 유명해진 architecture가 바로 AlexNet임. 2012년 NIPS에 발표된 논문이며, 저자의 이름 Alex와 Network을 합쳐서 AlexNet이라는 이름을 갖게 되었음.
224 x 224크기의 RGB 3-channel image를 input으로 사용하며 아래와 같은 architecture구조를 갖고있음. 그림을 보면 특이한 점이 2갈래로 나뉘어져서 연산을 수행하며, 중간중간 결과를 공유하는 것을 알 수 있는데, 이러한 구조를 가지게 된 이유는 그 당시에 사용한 GPU인 GTX580이 3GB의 VRAM을 가지고 있어, 하나의 GPU로 실험을 하기엔 메모리가 부족하여서라고 함.
Multi GPU Training 외에도 3가지 특징이 있는데, 첫째로는 Activation funtion으로 ReLUs(Rectified Linear Units)를 사용(ReLU 자체를 처음 제안한 논문은 아니였음)하 였으며, 둘째로는 최근엔 거의 사용하지 않는 normalization 테크닉인 LRN(Local Response Normalization)을 사용하였고, 마지막으로는 Pooling의 kenel size를 stride보다 크게 하는 Overlapping Pooling을 사용하였다는 특징이 있음. 이 외에도 Dropout, PCA를 이용한 data augmentation등의 기법들도 사용 하였음
ZFNET, 2013
ZFNet은 ILSVRC 2013대회에서 우승한 Clarifai팀의 Zeiler와 Fergus의 이름을 따서 지어진 architecture로, AlexNet을 기반으로 첫 Conv layer의 filter size를 11에서 7로, stride를 4에서 2로 바꾸고, 그 뒤의 Conv layer들의 filter의 개수르는 키워주는 등 약간의 튜닝을 거쳤음. 이 논문은 architecture에 집중하기 보다는, 학습이 진행됨에 따라 feture map을 시각화 하는 방법과, 모델이 어느 영역을 보고 예측을 하는지 관찰하기 위한 Occlusion기반의 attribution 기법 등 시각화 측면에 집중한 논문이라고 할 수 있음
VGG, 2014
VGG는 옥스포드 연구진에서 2014년에 발표한 논문으로, ILSVRC 2014 대회에서 2위의 성적을 거두었으며, 저자들의 소속인 Visual Geometry Group에서 이름을 따왔음. 이전 방식들과는 다르게 비교적 작은 크기인 3x3 convolution filter를 깊게 쌓는다는 것이 VGG의 핵심이며, AlexNet, ZFNet은 8개의 layer를 사용하였다면 VGG는 11개, 13개, 16개, 19개 등 더 많은 수의 layer를 사용하고 있음. 이렇게 3x3 filter를 중첩하여 쌓는 이유는, 3개의 3x3 conv layer를 중첩하면 1개의 7x7 conv layer와 receptive field가 같아지지만, activation function을 더 많이 사용할 수 있어서 더많은 비 선형성을 얻을 수 있고, parameter수도 줄어드는 효과들 얻을 수 있음. (3x3x3 = 27 < 7x7 =49)
GoogLeNet(Inception), 2014
GoogLeNet은 VGG와 같은 해에 제안이 되었고, ILSVRC 2014대회에서 1위를 한 architecture로, Inception architecture라는 예명도 가지고 있음. 이전 Network들은 대학 연구팀에서 주로 제안이 된 반면, GoogLeNet을 기점으로 거대 기업들이 뛰어들었다는 점이 주목할 부분임. 이름은 Google과 LeNet을 합쳐서 지었다고 함.
총 22개의 layer로 구성이 되어있으며 굉장히 길고 복잡한 구조로 구성이 되어 있음. GoogLeNet의 주요 특징들은 NIN(Network in Network), 2014 논문의 영향을 많이 받아서 제안되었다고 함.
우선 Inception Module이라 불리는 블럭 구조를 제안하였는데, 기존에는 각 layer간에 하나의 convolution연산, 하나의 pooling연산으로 연결을 하였다면, inception module은 총 4가지 서로 다른 연산을 거친뒤 feature map을 channel 방향으로 합치는 concatenation을 이용하고 있다는 점이 가장 큰 특징이다. 다양한 receptive filed를 표한하기 위해 1x1, 3x3, 5x5 convolution 연산을 섞어서 사용하였는데, 이 방식을 Naïve inception module이라고 부름. 여기에 추가로 3x3 conv, 5x5 conv 연산이 많은 연산량을 차지하기 때문에 두 conv연산 앞에 1x1 conv 연산을 추가하여서 feature map 개수를 줄인 다음, 다시 3x3 conv 연산과 5x5 conv연산을 수행하여 feature map개수를 키워주는 bottleneck 구조를 추가한 Inception with dimension reduction 방식을 제안하였고, 이 덕에 연산량을 절반 이상 줄일 수 있었음
GoogLeNet은 Inception module을 총 9번 쌓아서 구성이 되며, 3번째와 6번째 Inception module뒤에 classifier를 추가로 붙여서 총 3개의 classifier를 사용하였고, 이를 Auxiliary Classifier라 부름. 가장 뒷 부분에 classifier 하나가 존재하면 input과 가까운 쪽(앞 쪽)에는 gradient가 잘 전파되지 않을 수 있는데, Network의 중간 부분, 앞 부분에 추가로 softmax classifier를 붙여주어 vanishing gradient를 완화 시킬 수 있다고 주장하고 있음. 다만 Auxiliary classifier로 구한 loss는 보조적인 역할을 맡고 있으므로, 기존 가장 뒷 부분에 존재하던 classifier 보단 전체적으로 적은 영향을 주기 위해 0.3을 곱하여 total loss에 더하는 식으로 사용을 하였다고 함. 학습 단계에만 사용이 되고 inference 단계에선 사용이 되지 않는데, 그 이유로는 inference 시에 사용하면 성능 향상이 미미 하기 때문이라고 함.
마지막으로 CNN의 대부분의 parameter를 차지하고 있은 Fully-Connected Layer를 NIN논문에서 제안된 방식인 GAP(Global Average Pooling)으로 대체하여 parameter수를 크게 줄이는 효과를 얻었음. GAP란 각 feature map의 모든 element의 평균을 구하여 하나의 node로 바꿔주는 연산을 뜻하며, feature map 개수만큼의 node를 output으로 출력하게 됨. GoogLeNet에서는 GAP를 거쳐 총 1024개의 node를 만든 뒤 class개수 (ImageNet=1000)의 output을 출력하도록 하나의 Fully-Connected layer만 사용하여 classifier를 구성하였고, 그 덕에 Alexnet, ZFNet, VGG등에 비해 훨씬 적은 수의 parmeter를 갖게 되었음.
ResNet, 2015
ResNet은 Microsoft Research에서 제안한 구조로 ILSVRC 2015대회에서 1위를 하였고, 지금도 널리 사용되는 매우 유명한 architecture임. Architecture의 이름은 본 논문에서 제안한 핵심 아이디어인 Residual Block에서 유래하였으며, 실제로도 이 Residual Block하나만 알면 architecture를 이해 할 수 있을 정도로 단순하면서 효과적인 구조를 제안하였음. Resnet은 3x3 conv가 반복된다는 점에서 VGG와 유사한 구조를 가지고 있으며, Layer의 개수에 따라 ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152등 5가지 버전으로 나타내었으며, ILSVRC 2015대회에서는 ResNet-152로 1위를 차지하였음. Layer의 개수를 많이 사용할수록 연산량과 parameter의 개수는 커지지만 정확도도 좋아지는 효과를 얻을 수 있음.
출처: https://hoya012.github.io/blog/deeplearning-classification-guidebook-1/
Deep Learning Image Classification Guidebook [1] LeNet, AlexNet, ZFNet, VGG, GoogLeNet, ResNet
딥러닝을 이용한 Image Classification 연구들을 시간 순으로 정리하여 가이드북 형태로 소개드릴 예정입니다. 1편에서는 최초 Convolutional Neural Network(CNN) Architecture 연구인 LeNet부터 2015년 제안된 ResNet
hoya012.github.io
'데이터사이언스 > 딥러닝' 카테고리의 다른 글
Classification Project (Colab) (0) | 2022.07.25 |
---|---|
Object Detection Tensorflow API (Colab) #2_모델학습 (0) | 2022.07.18 |
Object Detection Tensorflow API (Colab) #1_사전작업 (0) | 2022.07.18 |
Image Labeling (0) | 2022.07.18 |
PreActResNet, 2016 (0) | 2022.06.24 |