[논문 리뷰] VGG 간단 정리

2022.01.29 15:10 3,162 조회

안녕하세요!

VGG 논문(VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION) 을 읽으면서 내용을 정리해 올립니다. 간단한 논문 리뷰라고 생각하셔도 좋을 것 같습니다.

컴퓨터 비전쪽 유명 논문들 위주로 우선 정리하고 글을 작성하려고 합니다.  

파라미터나 요약파트는 개조식으로 정리하는 것이 더 좋은 것 같아 그렇게 정리했습니다.

본 포스팅은 데이콘 서포터즈 "데이크루" 1기 활동의 일환입니다.  


VGG Net

논문을 번역 나온 시점 때문에 해당 시점을 기준으로 생각했습니다.

 

Abstract

3*3 convolution filter를 사용해 깊이를 증가시킨 모델 평가

ImageNet Challenge 2014에서 분류 문제 2등, 지역화 문제 1등을 달성

 

Introduction

CNN은 대규모 이미지, 영상 인식 분야에 성공적

해당 논문은 네트워크를 설계할 때 깊이에 중점을 두고 성능 향상 시도

모든 계층에서 3*3 convolution filter 사용해 깊이를 증가시킬 수 있었음

 

CONVNET CONFIGURATIONS

깊이 증가에 따라 Convolution Network의 정확한 성능 측정을 위해 모든 ConvNet layer 설정을 동일하게 설정했다고 합니다. 일반적인 구조, 세부적인 설정 사항, 다른 모델과 비교 설명 순으로 설명한다고 합니다.

 

ARCHITECTURE

학습시에 224*224 로 고정된 RGB 이미지를 입력으로 합니다. 여기서 유일한 전처리는 훈련 집합에 대해 RGB값의 평균을 각 픽셀에 빼는 것이라고 합니다. Stride는 1로 고정, padding 또한 1로 고정했습니다. (Convolution layer에서만) Max-pooling은 2*2, stride 2로 진행됩니다.

Conv 이후 세 개의 FC(Fully-Connected) layer가 존재합니다. 첫 번째와 두 번째는 4096의 channel을 갖고 세번째는 1000개의 채널을 갖는다고 합니다. 그리고 최종 계층으로 soft-max를 사용했습니다. FC의 경우 모든 네트워크에서 동일한 설정으로 진행했다고 합니다.

모든 hidden layer에서 ReLU를 사용하고 AlexNet에 적용된 LRN 정규화는 VGGNet 성능에 영향이 없는데 메모리 소비와 계산 시간을 증가시켜 적용하지 않았다고 합니다.

 

CONFIGURATIONS

논문에서 검증한 ConvNet 설정사항을 아래의 표에서 확인할 수 있습니다. 모든 설정 사항을 architecture에서 밝힌 것과 동일하고 깊이만 다르게 준 구조입니다. Network A부터 E까지 소개하고 있으며 11 layer 부터 19개의 layer까지 나와있습니다. 또한, 채널의 개수는 첫 번째 layer에서 64개부터 시작해 각 max-pooling layer를 거치며 512에 이를 때 까지 2배씩 증가합니다.

Table 2에서는 각 모델의 파라미터 수가 명시되어 있습니다. 백만 기준이긴 하지만 모델의 깊이가 깊어져도 생각보다 개수가 엄청 차이나지는 않네요.

 

DISCUSSION

모든 네트워크에서 3*3 필터(stride 1)를 사용했습니다. 논문에서 밝힌 바로는 3*3 필터 2개가 5*5 필터 1개의 성능을 내고 3*3 필터 3개가 7*7 필터 1개의 성능을 보인다고 합니다. 그럼 필터를 더 적게 사용하는 것이 이득이지 않느냐 라고 생각할 수 있지만 비선형 계층을 한 개가 아니라 세 개를 사용하면서 함수가 좀 더 구체적이게 된다고 합니다. 또한, 파라미터 수를 줄일 수 있습니다. 모델이 입력과 출력 모두 C 개의 채널을 가지면 3*3 필터 3개 사용시에 3 * (3^2) * (C^2) = 27 * C^2입니다. 반면에 7*7필터 1개 사용시에 1 * (7^2) * (C^2) = 49 * C^2으로 7*7 필터를 1개만 사용했음에도 3*3 필터 3개 사용 시보다 파라미터 수가 많습니다. 수치적으로 보면 81%가 많다고 하네요

 

CLASSIFICATION FRAMEWORK

TRAINING

학습 과정은 입력 이미지 crop을 제외하고는 AlexNet과 동일하게 진행됩니다. 따라서 학습할 때 momentum이 있는 미니 배치를 사용합니다. 이외에 논문에서 소개한 내용은 다음과 같습니다.

Batch size = 256, momentum = 0.9

weight decay로 정규화, 첫번째 두번째 FC layer는 dropout 0.5적용

learning rate = 0.02 설정 후 정확도 개선 없을 시 0.1씩 곱함, 총 3번 줄어들고 74에포크 이후 종료

깊은 아키텍처 훈련 시 첫 네 개의 convolutional layer을 초기화하고 마지막 FC layer를 A network layer로 초기화

랜덤 초기화의 경우 가중치를 평균이 0이고 분산이 0.01인 정규분포로 초기화, Bias는 0으로 초기화

224*224 고정 크기의 이미지를 입력하기 위해 rescale된 이미지를 임의로 crop

증대 방법으로 random horizontal flipping과 random RGB color shift

이외에 자세한 사항은 논문을 참고해주세요. (학습 이미지 크기에 관한 이야기)

 

TESTING

마지막에 있는 FC layer를 conv layer로 변환

첫번째 FC layer는 7*7 conv layer로 이후 두 FC layer는 1*1 conv layer로 변환

>>class 개수와 동일한 개수의 channel을 갖는 class score map 생성

>>Input image size에 따라 변하는 spatial resolution

>>한 이미지를 다양한 스케일로 변환해 얻은 결과를 앙상블해 이미지 분류 정확도 개선 가능

(이런 앙상블 방법도 있군요..)

 

CLASSIFICATION EXPERIMENTS

ILSVRC-2012 데이터에 대해 해당 모델이 이뤄낸 분류 결과 제시

데이터 셋은 1000개의 class 이미지를 포함 (학습 : 130만장, 검증 : 5만장, 테스트 : 10만장)

분류 성능은 2가지로 판단, top-1 error와 top-5 error

ILSVRC에서는 top-5 error를 주된 평가 항목으로 사용

 

SINGLE SCALE EVALUATION

>> 모델 A에 LRN을 적용한 결과 큰 성능향상이 없어 나머지 모델에서는 LRN을 적용 X

>> ConvNet depth가 증가할수록 classification error가 감소 

>> scale jittering이 더 좋은 성능을 보임


MULTI-SCALE EVALUATION

동일한 모델 학습에서 scale jittering을 적용한 것이 single scale 대비 더 좋은 성능을 보입니다.

이 외에 논문에는 crop evaluation, fusion, SOTA 비교 등이 있지만 현재 상황은 많이 바뀐 만큼 해당 부분은 생략하겠습니다. 궁금하신 분은 논문을 참고해주세요. 관련 내용은 Table 5부터 보시면 될 것 같네요.

 

CONCLUSION

기존 CNN보다 작은 필터를 사용(3*3 filter, stride 1)

최대 19 층까지 쌓아서 좋은 성능을 보임

 

참고

[1] https://arxiv.org/pdf/1409.1556v6.pdf

[2] https://wikidocs.net/118514