[논문 리뷰] Very Deep Convolutional Networks for Large-Scale Image Recognition

SimBa's avatar
Feb 08, 2025
[논문 리뷰] Very Deep Convolutional Networks for Large-Scale Image Recognition
  • (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

notion image

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

notion image
  • 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의 분산이 동일하도록 초기화
notion image
notion image
  • 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를 처리할 수 있기 때문
notion 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과 Data parallelism]
      • 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)를 합쳐서 네티워크를 업데이트
 

4. Classification Experiments

  • Top-1 Error
    • multi-class classification
    • 모델이 예측한 가장 놓은 확률값이 정답 label과 일치하지 않음
  • Top-5 Error
    • ILSVRC 평가 기준
    • 모델이 예측한 확률값 상위 5개의 카테고리 중 정답 label이 포함되지 않음

4.1 Single Sclae Evaluation

notion image
  • 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

notion image
  • 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

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

4.4 ConvNet Fusion

notion image
  • 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

심바