AlexNet - 2012

TaeWoo Lee / Kris·2022년 6월 29일
0

Paper_study

목록 보기
2/3

ImageNet Classification with Deep Convolutional Neural Networks(AlexNet) - 2012


ILSVRC

  • ILSVRC : 대용량의 이미지셋을 주고 이미지 분류 알고리즘의 성능을 평가하는 대회

    • ILSVRC 대회 역대 우승 알고리즘들과 인식 에러율 (~2017)

    • CNN이 이미지 분류에서 주목받은 시기는 2012년 -> ILSVRC 에서 2012년에 우승한 AlexNet 덕분


논문내용

Abstract

  • ImageNet LSVRC-2010 대회에서 120만개의 고해상도 이미지를 1000개의 서로다른 클래스로 분류하기 위해 CNN을 하였음

    • 6천 만개의 파라미터와 65만 개의 뉴런이 있는 신경망은 5개의 합성곱 신경망 레이어로 구성

    • 그 중 일부는 max-pooling layer와 final 1000-way softmax를 가진 3개의 fully-connected layer로 구성

    • 훈련을 가속시키기 위해서 non-saturating neurons(ReLU)를 사용했으며 Convolution 연산에 효과적인 GPU를 사용

    • 과적합(Overfitting)을 방지하기 위해 Dropout을 사용

1. Introduction

  • 2개의 GTX 580 3GB GPU 가지고 훈련할 때 5~6일 정도 시간이 걸렸음

2. Dataset

  • 22,000개의 카테고리에 속하는 1500만 개 이상의 label이 지정된 고해상도 이미지로 구성된 데이터 세트인 ImageNet 데이터셋
  • 입력에 사용되는 이미지는 256 x 256 x 3 (RGB)의 고정 해상도로 다운 샘플링 적용 (만약 256보다 작을 경우는 256으로 크기를 조절한 후 이미지의 중간 부분을 cropped)

3. The Architecture

3.1 ReLU Nonlinearity
  • ReLU를 사용하는 심층 컨볼루션 신경망은 그들의 것보다 몇 배 더 빨리 훈련가능
3.2 Training on Multiple GPUs
  • 두개의 GPU 네트워크는 한 개의 GPU 네트워크보다 덜 걸림
3.3 Local Response Normalization
  • 특정 계층에 ReLU 비선형성을 적용한 후 이 정규화를 적용(Overall Architecture 참조)
3.4 Overlapping Pooling
  • Pooling층은 일반적으로 s=z 사용하지만 s<z를 사용하여 overfit이 덜 된다는 것을 확인
3.5 Overall Architecture
  • AlexNet의 구조도
  • 5개의 Convolutional layer와 3개의 Fully-connected layer

  • 마지막 fully-connected layer의 output은 1000개의 클래스 레이블 분포를 만드는 sofrmax가 적용

  • Respone Normalization layer는 첫번쨰와 두번째 layer뒤에 따라 나옴

  • Max-pooling layer는 Respone Normalization 뿐만 아니라 5번째 Convolutional layer에도 따라 나옴

  • ReLU는 모든 Convolutional, Fully-connected layer의 output에 적용

  • Neuron 수 : 253,440 - 186,624-64,896 - 64,896 - 43,264 - 4096 - 4096 - 1000

    • 1_Convolution layer

      • input size : 224x224x3
      • kenel_size : 11x11x3, count:96, stride:4
    • 2_Convolution layer

      • kenel_size : 5x5x48, count:256
      • 3, 4, 5 Convolution layer 들은 Pooling과 Normalization layer의 개입 (x)
    • 3_Convolution layer

      • kenel_size : 3x3x256, count:384
    • 4_Convolution layer

      • kenel_size : 3x3x192, count:384
    • 5_Convolution layer

      • kenel_size : 3x3x192, count:256
    • 3개의 fully-connected

      • 각각 4096개의 Neuron들을 가지고 있음

Reducing Overfitting

4.1 Data Augmentation
  • 과적합을 방지하기 위해서 Data Augmentation을 적용하여 변형된 이미지 사용 (image translation, horizontal reflection, REB Channel 값 변경)
4.2 Dropout
  • 과적합을 방지하기 위한 또 다른 방법으로 Dropout을 적용 (0.5 probability)

5. Details of learning

  • 가중치 감소 0.0005, momentum 0.9, batch size 128, stochastic grdient descent 사용

6. Results

  • top1, to5 에러율 : 37.5%, 17% 달성
6.1 Qualitative Evaluations

Discussion

  • Convolutional layer가 한개라도 제거되면 네트워크 성능이 저하(어떤 층을 제거 하더라고 2% 손실 발생)

Code 구현

from keras.models import Sequential
from keras.layers import Dense, Activation, Conv2D, MaxPooling2D, ZeroPadding2D, Flatten, Dropout
from keras.utils.vis_utils import plot_model

model = Sequential()
img_shape = (224,224,3)
no_of_classes=1000

# 레이어 1
model.add(Conv2D(96, (11,11), input_shape=img_shape, padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# 레이어 2
model.add(Conv2D(256, (5,5), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

# 레이어 3
model.add(ZeroPadding2D((1,1)))
model.add(Conv2D(384, (3,3), padding='same'))
model.add(Activation('relu'))

# 레이어 4
model.add(ZeroPadding2D((1,1)))
model.add(Conv2D(384, (3,3), padding='same'))
model.add(Activation('relu'))

# 레이어 5
model.add(ZeroPadding2D((1,1)))
model.add(Conv2D(256, (3,3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

# 레이어 6
model.add(Flatten())
model.add(Dense(4096))
model.add(Activation('relu'))
model.add(Dropout(0.5))

# 레이어 7
model.add(Dense(4096))
model.add(Activation('relu'))
model.add(Dropout(0.5))

# 레이어 8
model.add(Dense(no_of_classes))
model.add(Activation('softmax'))

model.summary()
# plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)

참조 사이트


profile
일단 저지르자! 그리고 해결하자!

0개의 댓글