[논문 리뷰] Very Deep Convolutional Networks for Large-Scale Image Recognition
Feb 08, 2025
![[논문 리뷰] Very Deep Convolutional Networks for Large-Scale Image Recognition](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255B%25EB%2585%25BC%25EB%25AC%25B8%2520%25EB%25A6%25AC%25EB%25B7%25B0%255D%2520Very%2520Deep%2520Convolutional%2520Networks%2520for%2520Large-Scale%2520Image%2520Recognition%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3D%25EC%258B%25AC%25EB%25B0%2594&w=3840&q=75)
- (3, 3) convolutional filter를 사용해서 16-19로 depth를 증가시키면 성능이 얼마나 향상하는지를 보고자 함.
1. Introduction
- 이전의 성과
- ILSVRC-2013 : smaller receptive window size & smaller stride of conv layer 1 // whole image & multiple scales
- 여기에 더해 본 연구에서는 “depth”를 추가하여 성능 변화를 확인해보려고 함
- 결과
- fine-tuning 없이도 linear SVM만 사용한 단순한 pipelines에도 좋은 성능을 보임
- ImageNet 이외의 dataset에도 좋은 성능을 보임
2. ConvNet Configuration

2.1 Architecture
- input : (224, 224) RGB image
- 데이터 전처리 : (각 픽셀) - (평균 RGB)
- conv layer의 stack에서 처리됨
- kernel size : (3,3) (매우 작은 receptive field)
- (1, 1) kernel : non-linearity 이후에 input channel의 linear transformation을 위해 사용
- stride = 1
- max pooling layer : 5개, (2, 2) pixel window, pooling stride = 2
- FC layer : 3개 (4096 → 4096 → 1000, softmax)
- non- linear activation function : ReLU
- 하나를 제외하고 모두 LRN(Local Response Normalization) 사용 X (why? 성능을 향상시키지는 않지만, 메모리와 계산 시간을 너무 많이 잡아먹어서 사용하지 않음)
2.2 Configuration

- network의 깊이가 깊지만, 파라미터의 수가 그리 많지 않음
2.3 Discussion
- (3, 3) receptive field (stride = 1)
- spatial pooling 없이 (3, 3) receptive field를 연속으로 2개를 쌓은 것이 (5, 5) receptive field와 동일한 효과가 있음 → (3, 3) & (3, 3) & (5, 5) 가 (7, 7)과 동일한 효과가 있음
- (7, 7)을 사용하지 않는 것의 효과
- 3개의 non-linear rectification layer를 통합 → descision function을 더 변별력 있게(discrimitive) 만듦
- 단일 레이어만 있을 경우 모델이 복잡한 비선형 패턴을 학습하기 어려움.
- 여러 레이어를 쌓으면 데이터의 비선형적 관계를 점진적으로 더 잘 표현할 수 있음
- 파라미터의 개수 줄임
- (3, 3), channel = C로 3번 연산 → 3 * {(3 * 3 * C) * C}
- (7, 7), chennel = C로 1번 연산 → (7 * 7 * C) * C
- (1, 1) conv layer
- receptive field의 크기에 영향을 미치지 않고 non-linearity를 증가시키기 위해
3. Classification Framework
3.1 Training
- mini-batch gradient descent → multi-scale training images를 최적화
- batch_size = 256
- momentum = 0.9
- drop out : fc layer 1,2 (0.5)
- bias : 0
- learning rate =
- validation accuracy의 증가가 멈추면 10배씩 learning rate 감소시킴
- 본 실험에서는 총 3번 감소시킴
- 74번째 epoch에서 learning이 종료됨
- 많은 수의 파라미터와 깊은 층에도 불구하고 수렴하는데는 더 적은 epoch이 필요할 것
- 더 많은 depth와 더 작은 convolutional filter size → implicit regularisation
- implicit regularisation : 네트워크의 구조나 학습 과정에서 자연스럽게 정규화 효과를 제공하는 요소.
- geater depth : 깊은 네트워크는 저수준 특징(예: 가장자리, 텍스처)부터 고수준 특징(예: 물체의 모양, 패턴)까지 계층적으로 학습
- smaller conv. filter size : 작은 필터는 작은 영역의 정보를 처리하기 때문에, 네트워크는 지역적인 특징(예: 엣지, 코너 등)을 더 잘 학습
- 몇몇 layer의 pre-initialisation
- bad initialisation → deep nets에서 gradient의 instability로 인해, 학습이 지연될 수 있음
- 해결 방안 : configuration A (11 layers) → random initialisation으로도 충분히 학습할 수 있을 정도로 얕음
- A보다 더 깊은 network : conv layer 1~4 & fc layer 1~3 만 초기화 (중간 layers들은 random initialisation)
- 위와 같이 사전에 초기화해놓은 layers에서는 learning rate를 낮추지 않음
- 나머지 random initialisation한 layers : 에서 가중치를 smapling함
- 주의 : Glorot & Bengio 의 random initialisation procedure → pre-training없이도 가중치를 초기화할 수 있음
[random initialisation prodecure - Xavier 초기화]
- 입력과 출력의 균형을 유지하여 신경망이 안정적으로 학습하도록 설계
- input와 output의 분산이 동일하도록 초기화


- n_in : 해당 층으로 들어오는 출력 뉴런
- n_out : 해당 층에서 나가는 출력 뉴런 수
- 입력 뉴런 수 많음 → 분산 작기
- 출력 뉴런 수 많음 → 분산 커지기
- training data augmentation : horisontal flio & RGB colour shift
- input images size = (224, 224) → rescaled training images로부터 무작위로 cropped됨
[Trainig image size]
- S (training scale)
- isotropically-reslcaed된 training image에서 가장 짧은 변
- 예 : (1024, 512) → S = 512 // (512, 512)
- S를 기준으로 조정된 이미지에서 사용할 영역을 (224, 224) 크기로 crop함 (input size 맞추기 → VGG net의 input size가 (224, 224)임)
- S = 224
- 이미지 전체를 기반으로 학습
- S > 224
- (224, 224)로 잘린 영역만 학습
- 이미지의 작은 object나 object의 일부분과 같은 더 세밀한 정보를 반영
- method 1 : S 고정 (sinlge-sclae training)
- single-scale training : training image를 하나의 고정된 크기로 조정하여 학습
- S = 256
- S = 384 → 학습 속도를 높이기 위해, “S=256”으로 사전 학습한 것의 가중치로 초기화하고, 으로 더 작은 learninig rate 사용
- method 2 : multi-scale training
- multi-scale training : traning image를 다양한 크기로 조정된 이미지로 사용
- 에서 S를 random하게 sampling하여 각각의 training image를 개별적으로 rescale
- 본 연구에서는 “”로 설정
- 단일 모델이 다양한 크기의 object를 인식할 수 있도록 하기 위한 scale jittering에 의한 training set augmentaion같음
- scale jittering : training data의 scale(크기)를 조정하여 모델의 일반화 성능 높임 (이미지를 다양한 크기로 변환 → 변환된 이미지를 훈련에 사용) → 크기 조정 or crop….
- 학습 시간 단축을 위해 “S=384”로 사전학습해서 fine-tuning하여 학습시킴
3.2 Testing
- Q : 사전에 정의된대로 isotropically-reslcaed된 training image에서 가장 짧은 변 (test scale)
- Q가 training scale S와 무조건 같을 필요는 없음
- 단, 각각의 S에 따라 몇몇의 Q값을 사용하는 것이 성능을 높임
- FC layer를 conv layer로 전환
- FC layer 1 : (7, 7) conv layer
- FC layer 2,3 : (1, 1) conv layer
- FC layer는 특정 크기의 image만 처리할 수 있지만, Conv layer는 크기에 상관 없이 다양한 image를 처리할 수 있기 때문

- conv layer로 바뀐 Fully-convolutional net이 모든 uncropped image에 대해 적용
- 결과
- channel 수가 class 수와 같고 입력 이미지 크기에 따라 가변적인 공간 해상도를 가진 class score map
- conv layer로 변화시켰으니까, spatial dimension을 유지하면서 연산이 이루어짐 → (H * W * C) 형태의 class score map으로 나타남
- (7, 7) : (H * W)의 spatial dimension을 줄임
- (1, 1) : spatial dimension은 그대로 유지하면서, 채널 간의 연산을 통해 관련된 정보를 학습 (class score를 계산)
- 이미지에 대한 고정된 크기의 class score vector를 얻기 위해, class score map은 sum-pooled
- 다양한 크기의 image를 처리할 수 있는 conv layer로 변화했기 때문에 test time에서 multiple crop을 할 필요가 없음 → crop을 할 때마다 network를 re-computation해야하는 비효율성 제
- test image augmentation : horizontal flip
- large set of cops → 정확도를 높일 수 있음 (fully-conv layer보다 더 정확하게 sampling될 수 있음)
- multi-crop evaluation
- image를 다양한 크기나 위치로 잘라내어 여러 번 예측한 결과를 평균하거나 조합 → 죄총 예측 도출
- 단일 입력 이미지에서 나올 수 있는 불확실성이나 위치적 편향을 줄이고 generalization할 수 있음
- 방법 : 다양한 위치와 크기로 crop → 각각의 crop에 대해 ConvNet을 독립적으로 평가
- padding : “0”으로 padding → 경계 부분에서 정보가 손실될 가능성 있음
- receptive field 작음
- dense evalation과 상호보완적
- dense evaluation : 이미지를 잘라내지 않고, 전체 이미지에서 stride를 사용하여 conv 연산 수행 → receptive field 커짐
- 경계 근처의 padding이 이웃 영역에서 자연스럽게 채워짐
- 다양한 크기(scale)로 crop → scale별로 (5, 5) grid가 되도록 25개 crop 만들기 → 2개의 flip실행해서 50개 crop 만듦 → 이를 3개의 scale에서 수행하여 총 150개의 crop 생성
3.3 Implementation Details
- Multi-GPU
- data parallelism(데이터 병렬처리) → 각 학습 이미지 batch를 분할하여 각 GPU에서 병렬로 처리
- GPU batch gradients 계산 → 평균 → full batch의 gradient 얻음
- Gradient 계산은 GPU 간에 동기화(synchronous) → 하나의 GPU에서 학습한 것과 결과가 동일
- Model parallelism (모델 병렬화)
- 모델을 여러 GPU로 나누어 병렬로 처리하는 방식
- network의 layer를 여러 장치로 분할
- 예 : GPU1은 layer1를 처리 , GPU2는 layer2를 처리
- data가 각 layer를 통과하면서 GPU 간에 순차적으로 전달됨
- Data parallelism (데이터 병렬화)
- 동일한 모덜을 복사해서 각 GPU에 동일한 네트워크를 실행하고, 서로 다른 data batch를 병렬로 처리
- training data batch를 여러 GPU로 분할 → 각 GPU가 동일한 모델 구조를 사용해 자신에게 할당된 data를 독립적으로 처리
- 각 GPU의 계산 결과(gradient)를 합쳐서 네티워크를 업데이트
[Model parallelism과 Data parallelism]
4. Classification Experiments
- Top-1 Error
- multi-class classification
- 모델이 예측한 가장 놓은 확률값이 정답 label과 일치하지 않음
- Top-5 Error
- ILSVRC 평가 기준
- 모델이 예측한 확률값 상위 5개의 카테고리 중 정답 label이 포함되지 않음
4.1 Single Sclae Evaluation

- test → single-scale
- Q = S (Q = ) )
- A-LRN 제외하고 LRN(local response normalisation) 수행 X
- 11 layers ~ 19 layers까지 → ConvNet의 깊이가 깊어질수록 classification error가 낮아짐
- 단, (1, 1) conv layer을 사용한 C가 (3, 3) conv layer를 사용한 D보다 성능이 나쁨
- 추가적인 non-linearity는 도움이 됨 (B < C) → 깊이가 더 깊은 것은 도움이 됨
- non-trivial receptive field가 있는 conv filter를 사용해서 spatial context를 포착하는 것도 중요 (C < D) → 더 넓은 receptive field를 사용하는 것도 중요
- non-triival receptive field : 더 넓은 영역 ( (3, 3) 또는 그 이상)을 포함하는 receptive field → 더 넓은 영역을 탐색하기 때문에 spatial context를 캡쳐하는데 훨씬 더 유리
- 본 연구에서는 layer가 19개일 때 error가 포화에 도달 → 더 큰 dataset에서는 19 layer보다 더 깊은 model이 더 효과적일 수 있음
- (3, 3) 2개 vs. (5, 5) 1개
- (5, 5)가 1개일때가 (3, 3)이 2개일 때보다 top-1 error가 7%정도 높아짐
- large filter & shallow net < small filter & deep net
- 고정된 S를 사용하는 것보다 [256, 512]에서 sclae jittering을 한 것이 더 성능이 좋았음 (multi-scale training이 sinle-scale training보다 성능이 좋음)
- multi-sclae image statics를 캡쳐하기 위해서는 scale jittering에 의한 training set augmentation이 도움이 됨
- train → multi-scale // test → single-scale
4.2 Multi-Sclae Evaluation

- test → multi-scale
- Q값에 따라 rescaled된 다양한 버전의 test image에 따라 class의 확률을 평균 냄
- training scale과 test scale 간에 차이가 큼 → 성능 저하
- 고정된 S로 훈련된 모델은 훈련된 모델에 가까운 세 가지 test 이미지 크기로 평가 .
- scale jittering된 training →
- test 할 때도 scale jittering된 것(multi-scale)일 때가 더 성능이 좋음
- 가장 깊은 모델이 성능이 좋음
- training도 multi-scale일 때가 더 성능이 좋음
- training → multi-sclae // test → multi-scale
4.3 Multi-Crop Evaluation

- softmax 값을 평균냄
- multiple crops가 dense evaluation보다 살짝 더 성능이 좋음
- 그러나, multi-crops와 dense evaluation을 합친 것이 성능이 더 좋았음
4.4 ConvNet Fusion

- softmax의 확률을 평균내서 몇몇 모델을 합친 것의 결과를 보도록 하겠음
- 모델들이 서로 상호보완해줌 → 성능 향상
4.5 Comparison with the State of the Art
- single-net performance의 측면에서 VGG 모델이 best result이라고 할 수 있음
5. Conclusion
- large-scale image classification을 위해 19 layers까지 convolutional network를 매우 깊게 쌓았음
- depth가 분류 정확도를 높이는데 기여함
- ImageNet뿐만 아니라 다양한 dataaset에서도 좋은 일반화성능을 보임
Share article