[논문리뷰] VGGNet (Very Deep Convolutional Networks For Large-Scale Image Recongnition)

Jihoon Oh·2024년 8월 8일

논문리뷰

목록 보기
3/12

📌 앞서 살펴본 두 논문에서 성능을 향상시키기 위해 중요한 이론들이 사용되었지만, 현재는 더욱 발전된 모델들이 많이 개발되어 실제로 해당 모델들을 사용하는 경우는 드물어졌습니다.

그러나 이번에 다룰 VGGNet은 단순히 이론적인 중요성뿐만 아니라 모델 자체의 실용성에서도 큰 가치를 지니고 있습니다. VGGNet은 유명한 Faster R-CNN이나 YOLO와 같은 최신 모델들에서 백본(backbone)으로 널리 사용되며, 그 실용성 덕분에 필수적으로 알아야 할 논문입니다.


💡Abstract

본 연구의 주요 초점은 컨볼루션 네트워크의 깊이입니다. 3x3 컨볼루션 레이어를 활용하여 네트워크의 깊이를 증가시켰고, 이로 인해 16-19층 깊이에서 뛰어난 성능을 발휘했습니다. 이 모델은 대부분의 데이터셋에서 우수한 성능을 보였으며, 컴퓨터 비전에서의 딥 비주얼 표현 연구를 촉진하기 위해 두 가지 최고의 성능을 발휘하는 컨볼루션 모델을 공개적으로 제공하였습니다.


VGGNet은 하나의 모델이 아닌 사이즈 별로 여러개의 모델이 존재합니다.

VGG16 :
구성: 13개의 컨볼루션 레이어 + 3개의 완전 연결(Fully Connected) 레이어
특징: VGG16은 비교적 적은 층 수로 인해 연산량이 덜하지만, 여전히 깊은 네트워크 구조로 강력한 특성 추출 능력을 제공합니다.

VGG19 :
구성: 16개의 컨볼루션 레이어 + 3개의 완전 연결(Fully Connected) 레이어
특징: VGG19는 VGG16보다 더 많은 컨볼루션 레이어를 포함하고 있어 더욱 깊은 네트워크를 제공합니다. 이는 더 세밀한 특징을 추출할 수 있도록 도와줍니다.

💡1. Introduction

컨볼루션 네트워크는 이미지와 영상 인식에서 탁월한 성능을 자랑해왔습니다. 이는 대규모 데이터셋(ImageNet)과 GPU의 계산 능력 덕분입니다. Conv 레이어가 컴퓨터 비전에서 뛰어난 성능을 보여주면서, 기본 구조에서 더 많은 conv 레이어를 추가하려는 시도가 계속되었습니다. 본 논문에서는 모델의 깊이에 중점을 두고, 다른 파라미터는 고정한 채 네트워크의 깊이만을 증가시켰으며, 모든 레이어에 3x3 컨볼루션을 적용했습니다. 그 결과, 더 정확하고 뛰어난 성능을 가진 구조를 찾을 수 있었습니다.

위 사진은 VGGNet의 구조를 보여줍니다. 보시면 conv 레이어와 fc 레이어만을 사용한 일자 형태의 단순한 구조입니다. 이러한 단순한 구조 덕분에 다른 모델에서 사용할 때 최적화하기 용이합니다. 예를 들어, GoogLeNet처럼 복잡한 모델을 백본으로 사용할 경우, 전처리 과정이 복잡해질 수 있습니다. 하이퍼파라미터나 손실 함수에 사용되는 상수값을 일일이 설정해야 하므로, 모델이 복잡하면 백본으로 사용하기 어렵습니다.


💡2. ConvNet Configurations

ConvNet의 증가로 인한 성능을 확인하기 위해 다른 요소들은 동일하게 두었다.


2.1 Architecture

입력 이미지는 224x224 RGB 이미지로 고정되어 있습니다. 전처리 과정에서 각 픽셀의 평균 값을 빼주었습니다. 3x3 및 1x1 컨볼루션 필터를 사용하며, stride는 1로 고정되고, 공간의 해상도를 동일하게 유지하기 위해 패딩이 추가됩니다. 컨볼루션 계층 이후에는 fc 레이어가 따라오며, 처음 두 개는 각각 4096개의 채널을 가지며, 마지막 채널은 ImageNet의 클래스 수인 1000개입니다. 모든 은닉층에는 ReLU가 사용됩니다. VGGNet에서는 LRN 정규화를 사용하지 않습니다.

conv 레이어를 거친 뒤에도 featrue map의 사이즈가 변하지 않도록 하는 가장 간단한 방법은 stride = 1, padding =1로 두는 것 입니다. feature map의 사이즈 변환 공식은 다음과 같습니다.

(input_size-filter_size+padding*2)/stride

계산해보시면 (input_size-3+1*2)/1 = input_size 로 입력 사이즈와 동일하게 나오는 걸 알 수 있습니다. (필터 사이즈가 3x3일 경우)


2.2 Configurations

이 논문에서 평가된 ConvNet의 구조는 표1에 요약되어 있다.


2.3 Discussion

우리의 모델은 그간 ILSVRC 대회에서 우승한 모델과는 꽤 다르다. 7x7 컨볼루션과 같은 큰 필터를 사용하지 않고, stride = 1인 3x3 컨볼루션 필터만을 사용했다. 3x3 컨볼루션 레이어 2개가 5x5 컨볼루션 레이어를 적용한 것과 동일한 결과가 나온다. 또한 7x7 컨볼루션 레이어는 3x3 컨볼루션 레이어 3개를 쌓아 표현할 수 있다. 연산량을 비교해보면 3개의 3x3 컨볼루션 레이어를 사용할 경우 3(3^2C^2)으로 7x7 컨볼루션을 할 경우 1(7^2C^2) 보다 적은 것을 알 수 있다. 1x1 컨볼루션은 비선형성을 도입하기 위함입니다. ReLu를 거침으로써 비선형성이 추가됩니다. 이는 7x7을 사용할 경우 1개의 ReLu만 적용 시킬 수 있지만, 3x3을 3개 사용할 경우 3개의 ReLu를 사용할 수 있다는 점에서 모델이 좀 더 좋은 성능을 낼 수 있다는 것을 알 수 있습니다.

이 논문에서 가장 중요한 점은, 3x3 컨볼루션 필터를 여러 개 사용하여 5x5와 7x7 컨볼루션 필터를 대체할 수 있다는 것입니다. 또한, 필터를 여러 개 사용함으로써 활성화 함수도 여러 개 적용할 수 있어 비선형성을 높이고 모델의 성능을 개선할 수 있습니다.

VGGNet은 이러한 이론을 적용하여 3x3 레이어만을 사용해 매우 단순한 모델을 구현했습니다. VGGNet의 출현 이후, 이전 모델들은 기존의 큰 필터를 3x3 컨볼루션 레이어로 교체하여 성능을 개선한 버전을 출시하기도 했습니다.


📌 finish

VGGNet 논문은 전반적으로 어렵지 않았습니다. 다음 논문으로는 VGGNet과 마찬가지로 백본(backbone)으로 널리 사용되는 ResNet을 다룰 예정입니다. ResNet은 VGGNet보다 훨씬 크고 다양한 변형을 가지고 있습니다.

VGGNet 파이토치 구현 코드

위 깃허브로 들어가셔서 코드를 다운받고 사이즈별로 훈련시키면서 결과를 비교해보면 좋을 듯 합니다. 사이즈가 크면 학습시간은 더 오래 걸리겠지만 정확도가 더 높아지는 걸 확인해보세요.

0개의 댓글