ILSVRC : 대용량의 이미지셋을 주고 이미지 분류 알고리즘의 성능을 평가하는 대회
ILSVRC 대회 역대 우승 알고리즘들과 인식 에러율 (~2017)
CNN이 이미지 분류에서 주목받은 시기는 2012년 -> ILSVRC 에서 2012년에 우승한 AlexNet 덕분
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을 사용
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
2_Convolution layer
3_Convolution layer
4_Convolution layer
5_Convolution layer
3개의 fully-connected
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)