티스토리 뷰

728x90

논문 제목 : Very Deep Convolutional Networks for Large-Scale Image Recognition

 

Very Deep Convolutional Networks for Large-Scale Image RecognitionVGGNet을 발표하며, CNN 구조 설계에 있어 네트워크의 depth가 정확도에 미치는 영향에 대해 실험하였다. 또한 depth를 늘리면서도 vanishing/exploding gradient 문제 등 다양한 문제를 어떻게 해결하였는지에 대해 설명한다.

 

사전 배경을 조금 설명하자면, VGGNet 등장 이전에 AlexNet이 등장하면서 이미지 분류에 있어 CNN 모델의 인기가 상승하였다. 하지만 deep layer라 해봤자 8 layers에 그쳤었는데.. ILSVRC 2014에 VGG와 GoogleNet이 등장하면서 더욱더 깊은 layer(19, 22 layers)의 효과를 세상에 선보였다!

 

참고로 VGGNet은 ILSVRC 2014에서 2위였고, 1위는 GoogleNet이었다.

 

Classification: ImageNet Challenge top-5 error

 

ABSTRACT

먼저, 초록에서는 연구팀이 대규모 이미지 인식에 있어 컨벌루션 네트워크의 깊이가 정확도에 어떤 영향을 미치는지 조사하였다고 설명한다.

이때, VGGNet 연구팀은 3 x 3 Conv filter를 여러 개 쌓아 기존 CNN 모델의 layer 개수를 deep하게 늘렸고, 이것이 대규모 이미지 인식에서도 좋은 결과를 얻게 하였다고 한다. (layer가 적층이 되니 네트워크가 deep해지는 것)

 

1. INTRODUCTION

 

서론에서는 초록에서 얘기한 내용과 거의 비슷한데..

 

성능 개선에 주요한 역할을 한 2가지 개념에 대해 간단히 언급하며, ConvNet 구조 설계에 중요한 영향을 끼칠 수 있는 또 다른 개념이 있다고 주장하는데, 이는 바로 depth이다.

연구팀은 CNN layer의 depth를 중점으로 연구를 진행하였으며, 이때 모든 layer에 3 X 3 Conv filter를 동일하게 적용한 채로 Convolutional layer를 점차 추가하여 네트워크의 depth를 증가시켰다고 설명한다. (위에서 설명한 것과 동일하다.)

 

 

여기서는 논문의 목차에 대해 간단히 요약하고 있다.

 

Sect 2 : VGG Net 구조 설명

Sect 3 : Training & Evaluation 방법 세부사항 설명

Sect 4 : ILSVRC 분류작업을 대상으로 모델의 각 구조에 대해 비교 분석

Sect 5 : 결론

 

2. CONVNET CONFIGURATIONS

2.1 ARCHITECTURE

다음으로 VGGNet의 구조에 대한 설명이 나온다. 각 구조에 대해 요약하자면 다음과 같다.

 

Input image

- 224 X 224 RGB

- 전처리는 RGB 평균값 빼주는것만 적용

 

Conv layer

- 3 x 3 Conv filter 사용 (이때, 3 x 3 사이즈가 이미지 요소의 left, right, up, down 등을 파악할 수 있는 최소한의 receptive field이기 때문에 3 x 3 사이즈를 사용한다.)

- 추가로, 1 x 1 Conv filter도 사용하는데, 이는 뒤에서 더 자세히 설명하겠지만, 차원을 줄이고 non-linearity를 증가시키기 위함이다.

- stride는 1, padding 또한 1로 설정

 

Pooling layer

- Conv layer 다음에 적용되고, 총 5개의 max pooling layer로 구성된다.

- 2 x 2 사이즈, stride는 2

 

 

FC layer

- 처음 두 FC layer는 4,096 채널

- 마지막 FC layer는 1,000 채널

 

마지막으로, soft-max layer를 적용해준다.

 

그 외 모든 layer에는 ReLU를 사용하며, AlexNet에서 사용한 LRN 기법은 성능 개선은 없고 메모리 사용량 및 연산 시간만 늘어났기에 사용을 하지 않는다. (LRN이 적용된 구조는 A-LRN인데 뒤에서 성능 비교표가 나온다.)

 

2.2 CONFIGURATIONS

 

Depth에 따라 모델 구조가 조금씩 변형되었으며, 11 depth인 A 구조에서부터 19 depth인 E구조까지 있다.

Conv layer의 폭은 64에서부터 시작해서 max pooling layer를 통과할 때마다 2의 제곱만큼 커져, 최대 512까지 커진다. 추가로, depth가 늘어남에도 더 큰 conv layer를 사용한 얕은 신경망보다 오히려 파라미터 수가 줄어들었다고 설명한다!

 

 

2.3 DISCUSSION

이제 여기서부터 살짝 어려워지는데.. 왜 더 큰 사이즈의 conv filter를 1개 이용하는 것이 아닌, 굳이 3 x 3 conv filter 여러개를 이용하는지에 대해 설명한다.

즉, 3 x 3 Conv filter 2개를 사용하는 것은 5 x 5 conv filter 1개를 사용하는 것과 동일한데, 이때 작은 사이즈로 여러 번 나눠 적용하면 conv layer를 거칠 때마다 ReLU도 더 많이 통과하게 되어 non-linear 한 의사결정을 더 잘하게 된다.

 

또한 3 x 3 3개가 7 x 7 1개보다 parameter 수가 줄어드는데 이는 마치 7 x 7에 일반화를 적용한 것과 같아 오버피팅을 줄이는 효과가 있다.

 

추가로 VGG 모델의 C 구조는 1 x 1 Conv를 두어서 non-linear 한 성격을 좀 더 강화시켰다.

 

3 CLASSIFICATION FRAMEWORK

3.1 TRAINING

 

3장은 크게 Training 과 Testing으로 나뉜다.

 

우선, Training 부문에서는 하이퍼 파라미터를 어떻게 설정했는지부터 설명한다.

 

Cost Function

- Multinomial logistic regression objective = Cross Entropy

 

Mini batch

- 256 Size

 

Optimizer

- Momentum = 0.9

 

Regularization

- L2 = 5.10^-4

- Dropout = 0.5

 

Learning rate

- 10^-2 (Validation error rate가 높아질수록 10^-1씩 감소한다.)

 

이때, AlexNet보다 더 깊고 parameter도 더 많지만, 더 적은 epoch을 기록하였는데 이는 다음 2가지 덕분이다.

 

1. Implicit regularisation

7 x 7 1개 대신 3 x 3 3개를 써서 파라미터 수가 줄어드는 효과가 있다고 앞서 말하였다.

 

2. Pre-initialization

A 모델을 먼저 학습하고, 다음 모델을 구성할 때, A 모델에 학습된 layer를 사용하여 최적의 초기값을 설정한다. (더 자세하게는 A 모델의 처음 4개 Conv layer와 마지막 3개 FC layer를 사용한다.)

 

다음으로 트레이닝 이미지의 사이즈에 대해 설명한다.

 

VGG 모델을 학습시킬 때, training image를 VGG 모델의 Input size에 맞게 바꿔줘야 한다. 즉, S가 (여기서 S는 트레이닝 이미지의 Scale 파라미터이다.) 224인 경우, training image의 가로, 세로 중 더 작은 쪽을 224에 맞춰준다. 이 말은 224보다 작은 성분이 없도록 한다는 뜻인데 이때 원 사이즈의 비율을 지키며 사이즈를 rescaling 하며 이를 isotropically-rescaled라고 한다

이렇게 rescale 된 이미지에서 random 하게 224 x 224 size로 crop을 하여 Input size를 맞춰준다.

 

위에서 소개한 S 값을 설정하는 데에는 두 가지 방식이 있다.

 

1. Single-scale training

이 방식은 S를 256 또는 384로 고정시키는 것인데 S가 384인 네트워크의 경우, 학습 속도를 높이기 위해 S를 256으로 설정하여 학습시킨 가중치값들을 기반으로 S를 384로 설정해 다시 학습시킨다. 이때, S=256에서 이미 많은 학습이 진행되었기에 S=384로 설정하고 학습할 때에는 learning rate를 줄이고 학습시킨다.

 

2. Multi-scale training

이 방식은 S를 고정시키지 않고, 256 ~ 512 값 중 random하게 값을 설정하는 것인데 보통 이미지들이 모두 같은 사이즈가 아니기에 random 하게 multi-scale로 학습하면, 학습효과가 더 좋아진다. 이를 Scale Jittering이라 부른다.

추가로, multi-scale을 학습시킬때, 속도상의 이유로 S=384로 Pre-trained 된 single-scale을 모델로 fine-tuning을 시킨다.

 

3.2 TESTING

이제 Testing 방법을 살펴볼 것인데, 여기서도 살짝 어려우니 두 눈 크게 뜨고 봐야한다,,,

 

앞서 Training image를 rescale 하는 것처럼 VGG 모델을 test 할 때에도 rescale을 해준다. 이때, Q가 (테스트 이미지의 Scale 파라미터) S와 같을 필요는 없는데 각각의 S값마다 다른 Q를 적용 시 VGG 모델의 성능이 좋아진다. (이는 Validation Set을 이용해 평가와 동시에 학습을 한다는 의미이다. 헷갈리면 안 된다! 밑에서 Validation set을 Test set으로 사용하였다고 얘기한다.)

이때, Training 할 때의 구조와 Validation을 수행할 때의 구조가 다르다. Validation을 수행할 때에는 FC layer를 Conv layer로 바꿔준다. 즉, 첫 번째 FC layer를 7 x 7 conv layer로 바꾸고, 마지막 두 FC layer를 1 x 1 conv layer로 바꾼 뒤, 전체 이미지 (Uncropped image)에 적용하게 된다. (이때, FC layer와 1 x 1 conv layer는 서로 대치될 수 있는 이유는 둘 다 구조가 이전 데이터의 모든 노드가 다음 레이어의 모든 노드에 연결되기 때문이다.)

 

여기서 한 가지!

Training시에는 Crop 방법을 사용했었는데, FC layer가 1 x 1 conv layer로 바뀌었기에 Test시에는 Uncropped image를 사용해도 된다. FC layer는 MLP 개념으로 입력 노드가 하이퍼 파라미터로 정해져 있지만, conv 연산에서는 상관없기 때문이다.

하지만, 최종 output feature map size는 입력 image size에 따라 달라지는데, 여기서 1 x 1 사이즈가 아닌 output feature map을 class score map이라고 한다. 만약 class score map의 사이즈가 7 x 7 x 1000인 경우, sum-pooled를 적용한다. 즉, mean or average pooling을 적용한다. 이후, softmax를 거치고 flipped image와 original image의 평균값을 통해 최종 score를 출력한다.

 

AlexNet과 비교해보자면, AlexNet에서는 10 augmented image를 사용하고, 10개 이미지에 대해 평균을 취하므로 속도가 매우 느려지지만, FC layer를 1 x 1 conv layer로 바꾸고, 약간 큰 사이즈의 이미지를 넣었으며 horizontal flipping만 적용했기에 속도는 당연히 빠른데 성능마저 좋은 효과를 얻었다고 한다.

 

4. CLASSIFICATION EXPERIMENTS

4장에서는 실험 결과에 대해 설명한다.

Dataset으로는 ILSVRC를 사용하였고, 분류 성능은 두 가지 방법을 이용해 측정하였다고 한다. 바로 top-1과 top-5 error 방식이다.

top-1 error는 multi-class classification error이고, top-5 error는 ILSVRC에서 요구하는 test 기준을 사용하였다. 또한 아까 위에서 말했듯이, 대부분의 실험에서 validation set을 test set으로 사용하였다고 한다. (근데 validation set은 이미 학습에 사용되었기에 데이터에 대하여 바이어스가 있을 텐데 이를 test set으로 사용해도 되는지 의문이다. 내가 알기로 test set은 데이터에 대한 바이어스가 없는 상황에서 성능 평가가 필요한 경우 이용하는 것으로 알고 있는데..)

 

4.1 SINGLE SCALE EVALUATION

Evaluation은 Single-scale과 Multi-scale 두 가지 방식에 따라 분리된다.

먼저 Single Sclae Evaluation은 test시 image size가 고정되어 있는 것인데 여기에는 S=256 또는 S=384로 고정시키는 Single Scale Training 방식과 256 ~ 512에서 random 하게 고르는 Multi Scale Training 방식이 있다.

Single Sclae Training의 경우에는 S = Q 사이즈로 test image size가 고정되고, Multi Scale Training에서는 0.5(256 + 512) = 384로 고정된다.

 

또한, Local Response Normalization 기법을 사용한 모델과(A-LRN) 그렇지 않은 모델(A) 간의 성능 차이가 나지 않기 때문에 B 모델부터는 LRN을 사용하지 않았다.

 

1 x 1 conv filter를 사용하고 있는 C 모델보다 3 x 3 conv filter를 사용한 D 모델의 성능이 더 좋게 나왔는데, 이는 1 x 1 conv filter를 사용하면 non-linearity를 더 잘 표현할 수 있지만, 3 x 3 conv filter가 spatial context(공간 정보)의 특징을 더 잘 뽑아주기 때문에 3 x 3 conv filter를 사용하는 것이 더 좋다고 한다.

 

1 x 1 Convlution은 다음 3가지 의미로 사용된다.

 

1. Filter 수 조절

2. 연산량 감소

3. Non-linearity 증가

 

1. Filter 수 조절

 

1 x 1 Convlution은 fiter의 수를 조절할때 사용한다. 이는 filter의 갯수를 input의 dimension보다 작게하여 차원의 수를 조절할 수 있다. 따라서 filter의 갯수에 따라 output의 dimension(depth)은 달라지지만, 기존 이미지의 가로 세로 사이즈는 그대로 유지된다.

 

2. 연산량 감소

 

 

1번 Filter 갯수의 감소는 직접적으로 연산량 감소로 이어진다. 따라서 네트워크를 구성할 때 좀 더 깊게 구성할 수 있다. 위처럼 Channel 수가 줄어들었다가 다시 늘어나므로 이를 Bottleneck 구조라고도 표현한다.

 

3. Non-linearity 증가

많은 수의 1 x 1 Convolution을 사용했다는 것은 ReLU 활성화 함수가 지속적으로 사용되었다는 것이고, 이는 모델의 비선형성을 증가시켜 준다. 즉 좀 더 복잡한 문제를 해결하는것이 가능해진다.

 

 

4.2 MULTI SCALE EVALUATION

Multi-scale evaluation은 test 이미지를 multi scale로 설정하여 evaluation 하는 방식인데 고정된 사이즈의 경우, Q = {S - 32, S, S + 32}로 평가하였고, 변하는 S 사이즈의 경우, Q = {Smin, 0.5(Smin + Smax), Smax}로 평가한다.

 

4.3 MULTI CROP EVALUATION

여기서는 multi crop과 dense를 평가 방법으로 이용했을 때 어떤 결과를 보였는지에 대해 설명한다.

multi crop이 dense보다 더 좋은 결과를 보였고, 이 둘을 섞어 사용한 것이 제일 좋은 결과를 보였다. 이는 Convolution 경계조건에 대한 서로 다른 처리 방식 때문으로 보인다고 한다. (Multi crop은 다양한 Convolution 경계조건 때문에 dense를 보완할 수 있다. 따라서 전체 네트워크 수용 분야를 상당히 증가시켜 더 많은 맥락을 포함할 수 있다.)

 

4.4 CONVNET FUSION

7개의 모델의 앙상블을 사용하였을 때 가장 좋은 성능을 보였으며, 2위를 달성할 수 있었다는 내용이다. 이후에 따로 실험한 결과, D와 E 2개만 앙상블 했을 때 결과가 더 좋았다고 한다.

 

4.5 COMPARISON WITH THE STATE OF THE ART

4.4와 같은 내용이다.

 

5. CONCLUSION

결과적으로 분류 성능에 있어 네트워크의 깊이를 상당히 늘려도 좋은 결과를 보였다.

 

참고 문헌

1. arxiv.org/abs/1409.1556

2. 89douner.tistory.com/61

3. velog.io/@dyckjs30/VggNet

4. lv99.tistory.com/21

5. hwiyong.tistory.com/45

728x90