일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 백준
- 인공지능
- DP
- exists
- dfs
- edge detection
- Python
- opencv
- MySQL
- TD
- 강화학습
- 그래프 이론
- MinHeap
- 딥러닝
- canny edge detection
- SIFT
- 머신러닝
- IN
- Reinforcement Learning
- classification
- Mask Processing
- C++
- sklearn
- clustering
- BFS
- image processing
- AlexNet
- 자료구조
- dynamic programming
- machine learning
- Today
- Total
JINWOOJUNG
[ Image Classification ] AlexNet / ImageNet Classification with Deep ConvolutionalNeural Networks 본문
[ Image Classification ] AlexNet / ImageNet Classification with Deep ConvolutionalNeural Networks
Jinu_01 2023. 12. 18. 16:49Abstract
ImageNet LSVRC-2010에서 120만 개의 고해상도 이미지가 1000가지 클래스로 이루어진 Dataset을 Calssification 하기 위해 Large, Deep Convolution Neural Network(DCNN) 학습시켜, test dataset에 대한 37.5%의 Top-1 Error와 17.0%의 Top-5 Error를 달성하여 이전의 SOTA(State-Of-The-Art)보다 우수한 성능을 보였다.
해당 모델을 발전시켜 ILSVRC-2012에서 15.3의 Top-5 Error로 우승하였다.
Introduction
객체 인식에 대한 접근 방식은 기계 학습 방법을 중요하게 활용한다. 최근까지 레이블이 지정된 이미지 데이터 셋은 수만장의 규모로 상대적으로 작았고, 적은 데이터 셋으로도 간단한 인식 작업은 잘 해결되었다. 특히 레이블 보존 변환(label-preserving transformation)을 통한 data augmentation의 효과는 좋았다.
하지만 현실에서의 객체는 변동성이 크기 때문에 훨씬 큰 규모의 데이터를 학습시키는 것이 요구된다. 이를 위해선 학습 용량이 큰 모델이 요구됨과 동시에 수천 가지의 카테고리로 분류하기 위해서는 ImageNet에 포함되지 않는 데이터에 대해서도 좋은 성능을 보여야 한다.
이는 Convolution Neural Networks(CNNs)이 김피와 너비를 변화시킴으로써 모델의 크기를 조절하여 해결할 수 있다. CNNs는 feedforward neural networks보다 더 적은 파라미터와 복잡성으로 더 학습하기 쉬움에도 불구하고, 이론상 최대 성능은 feedforward neural networks보다 약간만 떨어졌다.
하지만 고해상도 이미지를 대규모로 적용하는데 비용이 많이 발생하지만, GPU와 2D-CNN 구조는 CNN을 효과적으로 학습시킬 수 있도록 하였다. 또한 ImageNet과 같은 최근 데이터셋은 심각한 오버피팅 없이 충분한 레이블을 포함하고 있다.
Dataset
ImageNet은 22000개의 카테고리에 속하는 1500만 장 이상의 레이블이 지정된 고해상도 이미지 데이터셋이다.
ILSVRC는 ImageNet의 하위집합을 사용하여, 1000개의 카테고리에 대하여 각각 약 1000개의 이미지가 있다. 총 120만개의 training dataset, 5만개의 validation datset, 15만개의 test dataset으로 구성되어 있다.
모델에 대한 성능 평가는 top-1, top-5 error로 보고하며, top-5 error란 모델이 가장 확률이 높게 예측하는 다섯 가지 레이블 중 올바른 레이블이 포함되지 않은 테스트 이미지의 비율을 의미한다.
예를들어 정답 레이블이 "사과"인 이미지를 아래의 확률로 분류했다고 하자.
Prediction: 배 - 0.3 , 딸기 - 0.25 , 사과 - 0.15 , 오렌지 - 0.1 , 포도 - 0.05 , 체리 - 0.03
top-1 class는 "배"이므로 top-1 error는 100%가 된다.하지만 top-5 class에 "사과"가 속해있으므로 top-5 error는 0%가 된다.이처럼 레이블 수가 적으면 0% 혹은 100% 이지만, 큰 규모의 데이터셋은 레이블이 1000개 이상이기 때문에 top-5 error로 모델의 분류 성능을 파악하는 것은 효과적이다.
통상적으로 1000개의 레이블에 대하여 top-5 error가 5%보다 낮으면 분류 성능이 상당히 좋다고 판단한다.
ImageNet의 경우 가변 해상도이기 때문에, 직사각형 이미지가 주어지면 짧은 면이 256이 되도록 resize하고, 이미지의 중심을 256x256 patch로 crop 하였다. 다른 augmentation 적용 없이, 이미지의 중심에 대한 raw RGB 값으로 학습시켰다.
The Architecture
3-0. CNN 도입
Networt의 architecutre 즉, CNN은 총 8개의 Layer로 구성되어 있다. 처음 5개의 layer는 Convolution Layer, 뒤의 3개는 Fully Connected Layer의 구조이다.
3-1. ReLU activation function(활성화 함수)
일반적으로는 $f(x) = tanh(x)$ 혹은 $f(x)=(1+e^(-x))^(-1)$ 의 tanh함수나 sigmoid 함수를 사용하였다. 하지만 이와같은 saturating nonlinearities(포화 비선형성)을 사용하는 것보다, ReLU와 같은 non- saturating nonlinearities(불포화 비선형성)을 사용하는 것이 학습 속도 측면에서 더 빠르다.
위 그래프를 통해 ReLU가 tanh보다 학습 속도가 훨씬 빠름을 알 수 있다. 이는 큰 규모의 데이터셋에서 훈련 모델의 성능에 좋은 영향을 미칠 수 있다.
3.2 Training on Multiple GPUs
저자가 사용한 GTX 580 GPU의 경우 큰 ImageNet Dataset을 학습시키기에 1개로는 감당할 수 없어, 2개의 GPU를 병렬적으로 사용하여 문제를 해결하였다.
이때, 특정 layer 에서는 2개의 GPU가 서로 데이터를 교환할 수 있도록 하고, 나머지는 이전 Layer의 커널이 동일한 GPU의 다음 Layer의 커널로 연결되도록 구현하였다.
3.3 Local Response Normalization(LRN)
gradient는 변화량(미분값)을 의미하는데, 변화량이 매우 작다면 network를 효과적으로 학습시키지 못하고 error rate가 낮아지지 못한채 수렴하는 문제가 발생한다. 이를 vanishing gradient라 하는데, tanh&sigmoid activation function의 경우 입력 data의 편차가 심하면 해당 문제가 발생한다. 하지만 저자는 위에서 설명한 ReLU를 사용했기에, ReLU는 양수값을 받으면 그 값을 그대로 neuron에 전달하기 때문에 너무 큰 값이 전달되어 주변의 낮은 값이 neuron에 전달되는 것에 영향을 끼칠 수 있다. 이는 아래 ReLU activation function graph에서 알 수 있다.
따라서 이를 해결하고 아래 식을 통해 측면억제(later inhibition)을 구현하였다. 이때, a는 x,y 위치에 적용된 i번째 kernel의 output을 의미하고, 이 a를 normalization하여 큰 값이 주변의 약한 값에 영향을 주는 것을 최소화 하였다.
3.4 Overlapping Pooling
이전까지는 CNN에서 Pooling 시 겹치지 않도록 stride를 설정하였지만, 겹치게 Pooling 함으로써 top-1, top-5 error를 각각 0.4%와 0.3% 더 감소시킬 수 있었다. 이는 모델이 학습하면서 overfitting 됨을 막아주는 것을 의미한다.
3-5. Overall Architecture
앞서 설명한 것 처럼, CNN은 총 8개의 Layer로 구성되어 있다. 처음 5개의 layer는 Convolution Layer, 뒤의 3개는 Fully Connected Layer(FC layer)의 구조이다. 마지막 FC layer는 1000개의 클래스 레이블에 대한 확률을 생성하는 softmax로 연결된다.
하나의 GPU로는 한계가 있어 두개의 GPU를 병렬처리 하였기 때문에, 2,4,5 layer는 이전 층의 동일한 GPU에 있는 커널 맵에만 연결된다. FC layer는 이전 층의 모든 뉴런에 연결된다. (나머지 구조들은 추후 보강)
첫번째 Convolution Layer
Convolution의 연산 결과를 계산하기 위해서는 아래 공식을 통해 계산 가능하다
$$\frac{I-K+2*P}{S} + 1$$
$I$ : 입력 이미지의 너비(높이)
$K$ : 커널의 너비(높이)
$P$ : 패딩의 크기
$S$ : Stride 크기
논문에서는 입력 이미지를 224x224x3으로 표현하였지만, 이후 오류임을 밝혔고 227x227x3으로 수정되었다.
따라서 위 식을 통해 227x227x3의 입력 이미지를 11x11x3 크기의 커널 96개를 stide는 4, padding은 0으로 연산하면 아래와 같다.
$$\frac{227-11+2*0}{4} + 1 = 55$$
따라서 55x55x96의 결과를 계산할 수 있고, GPU를 2개로 나뉘었으므로 각각 55x55x48의 결과를 가짐을 알 수 있다.
이후 3-3에서 설명한 Response Normalization을 통해 큰 값이 주변에 영향을 주지 못하도록 한 후, stride는 2, 3x3 kernal의 Max Pooling을 진행한다.
$$\frac{55-3+2*0}{2} + 1 = 27$$
따라서 27x27x48의 연산 결과를 얻게 되고, 이는 2번째 Convolution Layer의 입력이 된다.
두번째 Convolution Layer
두번째 Convolution Layer는 5x5x48 kernal 256개를 stride 1, padding 2로 연산한다.
$$\frac{27-5+2*2}{1} + 1 = 27$$
따라서 1개의 GPU에 대한 Convolution 연산 결과는 27x27x128이다. Response Normalization이후 첫번째 Convolution Layer와 동일한 Max Pooling을 진행하면
$$\frac{27-3+2*0}{2} + 1 = 13$$
1개의 GPU에 대한 Convolution 연산 결과는 13x13x128이다.
세번째 Convolution Layer
3,4,5 Convolution Layer는 Response Normalization과 Max Pooling이 진행되지 않는다.
3번째 층의 커널이 두번째 층의 모든 커널 맵으로 부터 입력을 받기 때문에 입력은 13x13x256이 된다.
3x3x256 kernal 384개를 stride 1, padding 1으로 연산하면
$$\frac{13-3+2*1}{1} + 1 = 13$$
1개의 GPU에 대한 Convolution 연산 결과는 13x13x192이다.
네번째 Convolution Layer
3x3x192 kernal 384개를 stride 1, padding 1으로 연산하면
$$\frac{13-3+2*1}{1} + 1 = 13$$
1개의 GPU에 대한 Convolution 연산 결과는 13x13x192이다.
다섯번째 Convolution Layer
3x3x192 kernal 256개를 stride 1, padding 1으로 연산하면
$$\frac{13-3+2*1}{1} + 1 = 13$$
1개의 GPU에 대한 Convolution 연산 결과는 13x13x128이다.
이후 FC layer에는 이전 Convolution layer의 모든 커널로부터 입력을 받고, 이때 stride는 1, padding 0의 6x6 kernal의 Max Pooling이 진행되면
$$\frac{13-3+2*0}{2} + 1 = 6$$
따라서 출력은 6x6x256이 되고, 이를 flatten하여 9216차원의 벡터를 생성한다. 해당 벡터를 4096개(hyper parameter)의 뉴런과 연결하여 FC layer의 입력이 된다.
Reducing Overfitting
위 CNN 구조로 생성되는 파라미터는 약 6000만개로, 모든 매개변수를 학습시키기에 Overfitting이 발생한다. 따라서 아래의 2가지 Solution을 통해 Overfitting을 방지하였다.
4.1 Data Augmentation
Data augmentation은 image translations and horizontal reflection(좌우 반전)를 진행하였다.
좌우번전을 하여도 이미지의 라벨은 변하지 않기 때문에, 256x256 이미지에서 좌우 반전을 한 후 random crop을 227x227로 진행하여 추출한 패치를 cnn의 input으로 사용하였다.
따라서 29*29*2 만큼의 데이터를 증가시킬 수 있다 -> 이 과정이 살짝 이해가 안됨..
두번째로는 RGB 체널의 색상 강도를 변형하였다. 주성분분석(PCA)를 진행하고 평균(0), 표준편차(0.1)을 갖는 가우시안 분포에서 랜덤 변수를 추출하여 원래 픽셀 값에 곱하여 색상을 변형하였다. 위 방법은 원래의 라벨을 해치지 않으면서 색상의 변형을 가능하게 한다.
4.2 Dropout
다양한 모델의 예측을 결합하는 앙상블 기법을 사용하기에는 큰 네트워크 구조에서 진행하기에 비용적으로 비효율적이다. 따라서 Dropout 기법을 활용했는데, 이는 사용자가 지정한 확률을 근거로 특정 뉴런에 신호를 전달하지 않는 방법으로, 모델의 복잡성을 감소시킬 수 있다. 저자는 50%의 확률로 설정하여 dropout된 뉴런은 feed-forward에서 제외되기에 back-propagation에서도 제외된다. 따라서 학습시 Dropout을 적용시켜 Overfitting을 방지하고 네트워크의 일반화되도록 하였다.
Results
2등과 비교하면 AlexNet의 경우 top-5 error가 8.7%더 낮은 17.8%임을 알 수 있다.
참고 문헌
1. Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "Imagenet classification with deep convolutional neural networks." Advances in neural information processing systems 25 (2012).
2. https://ffighting.net/deep-learning-paper-review/vision-model/alexnet/
3. https://killerwhale0917.tistory.com/14
4. https://cherrish.tistory.com/20
추가 공부 사항
1. [ Dropout ] https://heytech.tistory.com/127
2. [ 순방향 신경망 ] https://velog.io/@cha-suyeon/DL-%EC%88%9C%EB%B0%A9%ED%96%A5-%EC%8B%A0%EA%B2%BD%EB%A7%9Dfeedforward-neural-network
'딥러닝 > 논문' 카테고리의 다른 글
딥러닝 논문 가이드 (0) | 2023.12.18 |
---|