0. AlexNet
이번에 소개할 모델은 AlexNet이다.
AlexNet은 2012년 ImageNet 대회의 우승을 차지한 CNN구조의 모델이다.
AlexNet은 크게 Convolution, Pooling, Normalization layer로 구성되어 총 8개의 layer 구조이며 최종적으로 1000개의 class로 분류한다.
위의 모델 구조를 조금 더 쉽게 볼 수 있는 layer 구조로 살펴보자.
주의할 점은 위의 모델 구조는 논문에 있는 모델 구조인데, input size가 아닌 224가 아니라 227이라고 저자가 밝혔다.
우선 AlexNet의 큰 특징들을 말해보고, 각각에 대하여 알아보자
1. ReLU
2. Reducing Overfitting -> Data Augmentation + DropOut
3. Overlapping Pooling
4. Local Response Normalization
5. Training on Multiple GPU
1. AlexNet structure
AlexNet input 과 output 계산
$$ \text{Output size} = \frac{\text{Input size} - \text{Kernel size} + 2 \times \text{Padding}}{\text{Stride}} + 1$$
[Input]
227x227x3 크기의 이미지
[Conv1]
96 kernels of size 11x11, stride=4, padding=0
input = 227x227x3
output = 55x55x96
parameter = ((11x11x3)+1)*96
[MaxPool1]
kernels of size 3x3, stride=2
input=55x55x6
output=27x27x96
[Norm1]
LRN을 이용한 normalization
input=27x27x96
output=27x27x96
[Conv2]
256 kernels of size 5x5, stride=1,padding=2
input=27x27x96
output=27x27x256
[MaxPool2]
kernels of size 3x3, stride=2
input=27x27x256
output=13x13x256
[Norm2]
input=13x13x256
output=13x13x256
[Conv3]
384 kernels of size 3x3, stride=1, padding=1
input=13x13x256
output=13x13x384
[Conv4]
384 kernels of size 3x3, stride=1, padding=1
input=13x13x384
ourput=13x13x384
[Conv5]
256 kernels of size 3x3, stride=1, padding=1
input=13x13x384
output=13x13x256
[MaxPool3]
kernels of size 3x3, stride=2
input=13x13x256
ourput=6x6x256
[FC1]
fully connected layer with 4096 neurons
input=6x6x256
output=4096
[FC2]
fully connected layer with 4096 neurons
input=4096
output=4096
[output layer]
fully connected layer with 1000-way softmax
input=4096
output =1000
2. ReLU
각 레이어들의 input과 output은 위와 같으며, 각 convolution layer을 거치고 나서는 활성화 함수로 `ReLU`함수를 거치는데, 기존에 사용되던 `Tanh`대신 ReLU를 사용하게 된 이유는 실험을 통해 ReLU를 사용했을 때, 동일 정확도대비 6배나 빠른 속도를 보였다고 한다. 그렇게 AlexNet 이후 많은 모델들이 ReLU함수를 활성화함수로 사용하게 되었다.
3. Reducing Overfitting
또한 과적합을 막기 위해 Data Augmentation 기법과 Drop-out을 사용했다.
3-1. Drop out
Drop out은 이미 잘 알고 있을 테지만, fully-connected-layer의 뉴런 중 일부 뉴런을 생략하면서 학습을 진행한다.(생략이란 뉴런의 값을 0으로 초기화하는 것을 의미) 해당 뉴런들은 역전파에 영향을 끼치지 않게 된다. 단 이는 모델을 훈련시킬 때만 적용하는 것이고 테스트할 때는 사용하지 않는다.
3-2. Data Augmentation
Data Augmentation은 데이터 증강으로, 현재 갖고 있는 데이터를 다양하게 만들어 모델을 학습시키는 것을 말한다. 이는 간단한 방법으로 데이터를 증강시키면서도 모델이 주어진 데이터에만 과적합되지 않게 해 준다.
AlexNet에서는 두 가지 방법의 증강기법을 사용하였는데,
3-2-1. Generating image translation and horizontal reflections
우선 256x256 size의 이미지를 이미지의 랜덤 한 부분을 crop하여 227*227 size의 이미지를 만들고, 각 crop된 이미지들을 좌우 대칭 시키거나 뒤집어서 데이터를 증강시켰다.
3-2-2. Altering the intensities of the RGB channels
다음으로는 image의 RGB값에 PCA를 적용하여 각 색상에 대한 eigenvalue를 찾아서 해당 eigenvalue와 평균이 0이고 분산이 1인 가우시안 분포에서 추출한 랜덤한 변수를 곱하여 기존 RGB 값에 더해준다.
이를 통해 조명의 영향과 색의 강도변화에 대한 불변성을 지니는 이미지들을 만들었고 이를 이용해 1% 정도의 오차를 줄였다고 한다.
4. Overlapping pooling
다음 특징으로는 AlexNet에서는 이전 LeNet-5에서 사용된 average pooling과 다르게 max-pooling을 이용하였는데, 특히 overlapping pooling을 적용하였다.
Overlapping pooling이란 stride를 커널 사이즈보다 작게 설정하여 겹치게 되는 것을 의미한다.
이 방법을 통해 역시 top-1 error과 toop-5 error을 낮췄다고 한다.
5. Local Response Normalization
다음으로 정규화 방법이다.
우선 신경생물학에 `lateral inhibition`이라는 개념이 있다고 하는데, 활성화된 뉴런이 주변 이웃 뉴런들을 억누르는 현상을 의미한다. 이 현상은 활성화 함수로 ReLU를 이용하면서 값이 0보다 클 때 값 그대로를 출력하기 때문에 발생한다고 한다. 쉽게 이해한 바로는 하나의 엄청 강한 뉴런 때문에 나머지 뉴런들의 값이 전달되지 않는 현상을 막기 위해 정규화를 진행한다고 보면 된다.
6.GPU Training
마지막으로 위의 network를 2개의 GPU로 나누어 학습시키는 GPU병렬화를 이용하였다. 위의 구조에서 볼 수 있듯이 매우 많은 파라미터가 필요했었고 이를 학습시키는데 하나의 GPU로는 부족했기 때문에 2개로 나누어 학습시켰고 이로 인해서도 오차도 감소하며 학습 속도도 빨라졌다고 한다.
AlexNet은 이렇게 많은 현재의 딥러닝 모델들에 영향을 끼쳤으며, 특히 CNN구조를 이용한 첫 대회 우승으로 CNN을 부각했다.
참고블로그
'ML & DL > Computer vision' 카테고리의 다른 글
EfficientNet (0) | 2024.01.30 |
---|---|
VGGNet (0) | 2024.01.30 |
Backbone과 Decoder 개념 (0) | 2024.01.29 |
Contour Detection (0) | 2024.01.29 |
Morphological Transform (0) | 2024.01.29 |