(Alexnet) ImageNet Classification with Deep Convolutional Neural Networks

nips
nips2012
classification
imagenet

#1

2012년에 이미지넷에서 1등을 하면서, 딥러닝 열기에 가속화를 시킨 기념비적인(?) 논문입니다. 주로 Neural Network Architecture 설계와 Implementation에 대해 소개하고 있습니다.

ILSVRC2010 : Top1 Error 37.5%, Top5 Error 17.0%
ILSVRC2012 : Top1 Error, Top5 Error 15.3%

  • 참고로 ILSVRC2012 2등은 Top5 Error가 26.2%로 차이가 많이 납니다

Introduction

이 논문이 나올 당시에 상황은 이렇습니다.

  • 작은 사이즈 데이터(mnist)와 같은 곳에서는 error rate이 올라갈 데까지 올라갔음
  • mnist의 경우 error rate 0.3% 정도
  • LabelMe나 ImageNet, VOC 같은 대규모 데이터셋이 공개되기 시작
  • '딥러닝’에 대한 가능성을 어느정도 보여주었던 상황
  • 하지만 대부분 학습하기 쉬운 수준의 작고 단순한 형태의 CNN 위주

이 논문은

  • 당시 가장 큰 규모의 CNN 구조 제안 : Conv5 + FC3 = 7 Layer Neural Network
  • ImageNet이라는 대규모 데이터셋에 대해 학습해 최고의 성능
    • 1천 5백만 이미지, 22,000 카테고리
  • GPU 를 통해 가속화
  • DropOut이나 ReLU 같은 다른 논문에서 제안된 방법론들을 네트워크 설계에 잘 차용

의 의의를 가지고 있습니다.

Network Architecture

image

Input Layer : 224 Width x 224 Height x 3 Channel Image
Convolution 1 : 96 Channel x 11x11 Filter + LRN + Pooling
Convolution 2 : 256 Channel x 5x5 Filter + LRN + Pooling
Convolution 3 : 384 Channel x 3x3 Filter
Convolution 4 : 384 Channel x 3x3 Filter
Convolution 5 : 192 Channel x 3x3 Filter + Pooling
Fully-Connected 1 : 4096
Fully-Connected 2 : 4096
Output Layer : 1000 Class

모든 Layer는 Relu Activation을 사용했고, 표준편차 0.01의 Zero-Mean Normal Distribution으로 Initialization 했습니다.

FC1, FC2 에는 0.5 비율의 Dropout 을 추가했습니다.

아래와 같은 LRN = Locally Response-Normalization Layer를 1, 2, 5 Convolutional Layer의 Pooling 직전에 삽입했습니다. Generalization에 도움을 주었다고 평가하고, 성능에 0.2% 정도의 영향을 주었습니다.

image

Stride=2에 Filter=3의 Overlapping Pooling을 Conv1, Conv2, Conv5 뒤에서 사용했습니다. Overlapping Pooling이 Overfit 방지에 도움을 주었다고 설명했습니다.

이미지에 대해서는 Translation, Cropping 등의 Augmentation 처리하였습니다.

SGD를 이용해서 5~6일 정도의 학습 시간을 가졌다고 합니다.

  • batch 128
  • momentum 0.9
  • weight decay 0.0005

Result

ILSVRC2010 : Top1 Error 37.5%, Top5 Error 17.0%
ILSVRC2012 : Top1 Error 36.7%, Top5 Error 15.3%

image

아래 이미지는 FC2의 4096 Feature를 L2 Distance (Euclidean distance)로 가까운 이미지를 Retrieval한 결과이고, 어느 정도 Feature가 Generalize되어 유사한 이미지를 가져옴을 알 수 있습니다. 이를 통해 네트워크의 Visual Knowledge를 정성적으로 평가했습니다.

image

Implementations

제가 multi-gpu 환경 등을 고려해 개발한 Repo는 아래에 있습니다.

https://github.com/ildoonet/tf-lcnn/blob/master/models/alexnet.py

Alexnet 네트워크 구조로 MNIST, ILSVRC2012 등에 대해 테스트한 결과는 아래와 같습니다. 자세한 자료는 깃헙을 참고하세요.

Dataset Validation Accuracy
MNIST 99.57 %
ILSVRC2012 59.3 %

기타 참고할 만한 Repository는 Reference 에 추가해두었습니다.


Comments

  • 특정 Layer들이 Bias를 1로 초기화하고 학습했다고 하는데, 저의 경우 이렇게 하면 학습이 전혀되지 않았습니다. 저는 0.1로 초기화했고, Training Loss가 정상적으로 줄어드는 것을 확인할 수 있었습니다.

References

[1] https://github.com/dontfollowmeimcrazy/imagenet
[2] https://github.com/mouradmourafiq/tensorflow-convolution-models
[3] https://github.com/hpssjellis/easy-tensorflow-on-cloud9/blob/master/aymericdamien-Examples/examples/alexnet.py
[4] https://github.com/tensorflow/models/blob/master/tutorials/image/alexnet/alexnet_benchmark.py


Deep Learning: Practice and Trends
'Image Classification' Outline