개요
VGGNet은 2014년 옥스포드 대학 연구팀 VGG에 의해 개발된 CNN 모델이다. AlexNet이후 VGG에 의한 성능 향상으로 컴퓨터 비전 분야에서는 CNN을 활용한 모델들이 본격적으로 나오기 시작했다. 이후 2015년 ResNet을 통해 컴퓨터 비전은 인간의 능력을 뛰어넘게 된다. ResNet에 대해선 다음주에 리뷰하고 발표할 예정이다.
이 논문의 주요 골자는 매우 작은 convolution 필터(3x3)를 이용해 매우 깊은 Layer의 학습을 해내는 것이다. 본 논문에서는 16에서 19 Layer까지 파고들게 된다.
배경
CNN은 많은 이미지가 저장된 이미지 저장소(예를 들면 ImageNet)이 생긴 덕분에 2014년 당시부터 비전 분야에서 성공을 거두기 시작한다. 그 과정에서 기존 구조에 대한 개선을 시도하는 경우가 많아졌고 ImageNet을 이용한 대회인 ILSVRC에서는 더 작은 receptive field와 작은 stride, 더 많은 training과 test가 성능 향상을 이끌어 낸다는 것을 발견하였다. 요약하자면
- 더 작은 Filter를 이용해 컨볼루션을 수행시 성능 향상
- 네트워크의 깊이를 깊게 만들었을 시에 성능 향상
CNN의 장점
CNN은 Kernel(혹은 Filter)을 이용한 Convolution 방식으로 각 데이터 종류 별 특징을 추출하는 신경망 네트워크이다. AI가 설정해 놓은 Filter를 각 이미지의 부분에 맞추어 곱한 후 그것을 더하는 방식으로 Feature map을 뽑아낸다. 이를 통해 CNN은 학습에 사용되는 신경망의 다발을 잘 끊어내 overfitting을 방지할 수 있고 위치 별 특징을 더 안정적으로 수행해 낼 수 있다.
기존 MLP의 경우 이미지를 Fully Connected Layer에 넣는다고 했을 때 픽셀 하나하나를 세세하게 보는 문제가 있다. 이는 인간의 시각과도 동작원리가 다르다. 하나의 픽셀을 자세하게 보는 것 보다는 필요한 부분을 뽑아내는 것이 더 도움이 된다.
예를 들면, 위의 그림에서 필터1은 가로선에 대한 정보를, 필터2는 세로선에 대한 정보를 더 잘 추출해 낸다. 원본 이미지가 세로 방향에서만 값의 차이가 나므로 세로선 필터에 대한 컨볼루션만이 의미있는 Feature Map을 남기게 된다. 이처럼 CNN은 전체 이미지를 스캔하며 필터와 비슷한 패턴(특징)을 찾아내고 어떤 특징이 어디에, 얼만큼 강하게 있는지를 표시해 줄 수 있다.
다양한 특징을 추출해야 더 원본에 가까운 분석을 해낼 수 있기 때문에 많은 convolution 작업을 수행하게 되며 필터 1개에 따라 1개의 Feature Map이 나오게 된다. 따라서 필터의 채널 수는 원본 이미지의 채널 수와 같아야 한다. 또 필터의 개수만큼 convolution이 이루어지고 이것이 결과 이미지 각각의 채널이 되므로 결과 이미지의 채널은 필터의 개수와 같아야 한다. 예를들어 위 그림의 input은 3개의 채널이 존재하고 6개의 필터를 지나간다. 따라서 필터의 채널수는 3 채널이고 결과로 나온 feature map의 채널 수는 6개이다.
간단한 논문 해설
이 논문에서는 input 이미지로 224 x 224 이미지를 사용하였다. 컬러 이미지이기에 채널 수는 R,G,B 3 채널이다. 이때 각 사진별로 R,G,B 값이 고르지 않아 색 별로 평균이 모두 다를 것이다. 따라서 전체에서 R,G,B의 평균을 빼 주는 작업을 따로 진행하였다.
이 논문에서는 Convolution 필터로 3x3 필터를 이용하였다. AlexNet에서 5x5를 사용한 것에 반해 작은 필터를 여러번 사용해 더 깊은 Layer를 만들었다는 것이 핵심이다. 좁은 Receptive Field라도 여러번 통과 시 Feature Map의 한 픽셀을 만들기 위해 이전 맵에서는 많은 픽셀들이 필요하게 되고 그 픽셀들을 만들기 위해 그 이전 단계에서는 더 많은 픽셀들이 필요하게 된다. 이러면서도 3x3 필터를 2번 통과한 Layer는 2x2x3 = 18로 5x5 = 25 보다 작다. 즉 작은 필터를 여러번 통과한 것이 큰 필터를 한번 통과한 것 보다 더 적은 비용이 든다.
아래 그림은 본 논문에서 구현한 VGG 아키텍쳐이다. Layer의 종류에 따라 VGG(숫자)로 불린다.
Case C의 경우 input channels에 대한 선형 변환을 위해 1x1 컨볼루션을 수행하였다.
앞선 컨볼루션 연산에 따른 feature map의 변화는 다음과 같다. (과정에 따라 다르지만 결과로 나온 벡터의 크기만을 살펴보자)
Classification Framework
Training과 Test 과정을 살펴본다. 앞서 Architecture를 모두 살펴보았지만 이 항목에서 세부적인 파라미터와 설정 등을 소개한다.
우선 기본적인 파라미터로 다음과 같이 설정한다.
- Optimizing multinomial logistic regression
- mini-batch gradient descent
- Momentum(0.9)
- Weight Decay(L2 Norm)
- Dropout(0.5)
- Learning rate 0.01로 초기화 후 서서히 줄임
또 학습 이미지 크기에 대한 설명을 살펴보아야 한다. VGG에서는 입력 이미지의 크기에 대해 2가지 방식을 사용하였다.
- 이전 AlexNet에서와 유사하게 이미지의 크기를 256x256 또는 384x384로 고정한다. 이미지의 크기가 크면 학습이 더 빠르게 될 것이니 256크기일 때에는 Learning Rate를 0.001로 낮추어 학습하였다. 이를 Single Scale Training이라고 한다.
- 특정 범위 내에서 크기를 지정하는 작업을 한다. 이 논문에서는 최소 256, 최대 512의 크기로 scaling을 하였다. 이미지의 크기가 전부 제각각이기 때문에 필요한 크기도 input에 따라 바뀐다. 이를 multi scale Training 또는 Scale Jittering이라고 한다. 이렇게 얻어낸 이미지는 크기에 따른 대응이 잘 되며 정확도도 높았기 때문에 본 논문에서는 이 구조를 선택하였다.