논문 리뷰, 구현

1. LeNet-5 논문 리뷰, 구현(tensorflow)

jwjwvison 2022. 6. 27. 10:59

이번 포스팅은 Yann LeCun의 Gradient-Based Learning Applied to Document Recognition에 소개되어진 LeNet-5에 대해서 간단히 리뷰를 해보겠다.

 

 먼저 이 논문이 밝히는 main message는 더 나은 패턴인식 시스템은 automatic learning에 더 의존하게 만들어져야 한다는 것이다. 

 

 

 전통적인 패턴인식 모델은 hand-designed된 feature-extractor가 input으로부터 적절한 정보를 수집하고 적절하지 않은 변동성을 제거했다. 그다음 trainable classifier가 결과로 나온 feature vector를 클래스들로 분류했다. 이는 특성 인식과 같은 작업에는 어느 정도 성공하면서 완전히 연결된 일반적인 피드포워드 네트워크를 통해 수행될 수 있지만, 문제가 있다.

 

 첫번째는, 일반적인 image들의 크기가 크다는 것이다. 완전연결층으로 생성하게 되면 수천개의 가중치가 생기게 되고 이렇게 된다면 시스템의 용량의 커지게 되고 더 큰 training set을 요구하게 된다. 

 두번째는, 완전연결 구조에서 input의 topology가 완전히 무시되기 때문이다. image는 강력한 2D구조를 가지고 있고 픽셀들은 공간적으로 높은 상관관계를 가지고 있다. local 상관관계는 local features를 추출하고 조합하는데 잘 알려진 이점의 이유이다. 왜냐하면 인접한 픽셀들의 구성은 적은 수의 카테고리들로 분류될 수 있기 때문이다(edge, 코너 등).

 

합성곱 신경망은 약간의 shift, scale, distortion invariance를 갖기위해 세가지 아이디어로 구성되어 있다. 이 세가지 아이디어는 바로 local receptive field, shared weights, 그리고 sub-sampling이다.

 

 먼저 local receptive filed(지역 수용장)으로 부터, 뉴런은 기초적인 시각특징(모서리, 끝점, 코너)등을 추출할 수 있다. 이러한 특징들은 고차원 특징을 검출하기 위해 다음층에 의해 조합된다. 또한 image의 한부분에 유용한 기초특징 decetor는 전체 image에 걸쳐 유용할 수 있다.

local receptive field

 

 

 이러한 수용장에 의해 feature map이 생성된다. feature map에 있는 모든 유닛들은 같은 가중치와 편향을 공유한다. 그래서 feature map은 input의 가능한 모든 위치에서 같은 특징을 찾는다. 다른 feature map은 다른 가중치와 편향을 사용하고 그럼으로서 다른 종류의 지역 특징을 찾는다.

 

 특징이 한번 검출되면 그것의 정확한 위치는 중요하지 않게 된다. 왜냐하면 특징의 정확한 위치는 패턴을 인식하는데 부적절하다. 왜냐하면 이미지에 따라 특징의 위치가 달라질수 있기 때문이다. 이러한 문제는 sub-sampling에 의해 해결될 수 있다. sub-sampling은 지역평균을 수행할 수 있고 feature map의 고집을 약화시킬수 있으며 민감도도 줄일 수 있다. 결론적으로 sub-sampling은 이전 feature map층의 사이즈를 절반으로 줄여준다.

 

 

LeNet-5 구조

 LeNet-5는 input층을 제외하고 7개의 층으로 구성되어져 있다. 그리고 이 층들은 모두 trainable한 가중치들을 갖고 있다.

 input 이미지의 픽셀값들은 정규화되어있다. 그래서 배경(흰색 부분)은 -0.1에 해당하고 전경(검정색 부분)은 1.175 값에 해당하게 된다. 이는 평균 input을 0으로 만들어주고, 분산을 1로 만들어 주어서 훈련 속도를 가속시켜준다.

 

 Layer C1은 5x5size와 strides=1인 6개의 kernel로 이루어진 합성곱 층이다.

 

 Layer S2는 sum-sampling 층으로 2x2 size와 strides=2인 6개의 kernel로 이루어진 층이다.

 

 Layer C3는 5x5 size와 strides=1인 16개의 kernel로 이루어진 합성곱 층이다.

 

 Layer S4는 S2와 같은 기능을 하는 sub-sampling 층이다.

 

 Layer C5는 5x5 size와 strides=1인 120개의 kernel로 이루어진 합성곱 층이다.

 

 Layer F6는 tanh 함수를 활성화 함수로 사용하는 fully-connected layer 이다.

 

 출력층은 Euclidean Radial Basis Function(RBF)을 활성화 함수로 사용한다.

 

 loss function은 MSE를 사용한다.

 

 

LeNet-5 구현

import numpy as np
from keras.utils.np_utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense,Conv2D,Flatten,MaxPool2D

from tensorflow import keras
from sklearn.model_selection import train_test_split

 

 먼저 데이터 전처리를 해준다.

(x_train,y_train),(x_test,y_test) = keras.datasets.mnist.load_data()

x_train=x_train.reshape(-1,28,28,1)
x_test=x_test.reshape(-1,28,28,1)

x_train,x_val,y_train,y_val=train_test_split(x_train,y_train,test_size=0.2)

x_train=x_train/255.0
x_val=x_val/255.0
x_test=x_test/255.0

 

 그다음 LeNet-5 구조를 build 한다.

class LeNet(Sequential):
  def __init__(self,num_classes):
    super().__init__()

    self.add(Conv2D(6,5,strides=1,activation='relu',input_shape=(28,28,1),padding='same'))
    self.add(AvgPool2D(2,strides=2))
    self.add(Conv2D(16,5,strides=1,activation='relu'))
    self.add(AvgPool2D(2,strides=2))
    self.add(Conv2D(120,5,strides=1,activation='relu'))
    self.add(Flatten())
    self.add(Dense(84,activation='tanh'))
    self.add(Dense(num_classes,activation='softmax'))

    self.compile(optimizer='adam',
                 loss='sparse_categorical_crossentropy',
                 metrics='accuracy')

 이렇게 간단히 만들수 있다.

 

model=LeNet(10)

model.summary()

history=model.fit(x_train,y_train,
          epochs=20,
          validation_data=(x_val,y_val),
          callbacks=[early_stopping_cb],
          )

 

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train','val'])
plt.show()

 학습이 어느정도 잘 된것을 확인할 수 있다.

'논문 리뷰, 구현' 카테고리의 다른 글

6. ResNet 논문 리뷰, 구현  (0) 2022.07.03
5.Network in Network 논문 리뷰  (0) 2022.07.03
4.GoogleNet 논문 리뷰, 구현  (0) 2022.06.29
3.VGG 논문 리뷰,구현  (0) 2022.06.29
2. AlexNet 논문 리뷰,구현  (0) 2022.06.28