2014년 Imagenet Challenge에서 GoogleNet 다음으로 2등을 차지한 네트워크에 대한 논문이다 

 

요약

  • 학습에 사용된 데이터셋 : ImageNet LSVRC-2010 1000classes - validation set을 test set으로 사용하였다
  • Convolution Network의 depth는 모델의 정확도에 영향을 주지만 데이터셋에 의존된다
  • 3x3 Convolution filter는 매우 효과적이다 
  • 4GPU를 활용한 병렬 학습 

1. Network configurations 

  • 이 논문에서는 동등한 설정(Hyperparameters)에서 네트워크의 depth를 증가시킴에 따라 어떤 변화가 있는지를 측정하였다 
  • Architecture 
    • 고정된 224x224 RGB 이미지를 사용 
    • 전처리는 각 픽셀을 트레이닝셋의 RGB 값 평균으로 나누는 작업만 진행 
    • 기존에는 5x5 7x7 11x11등의 receptive field를 사용하였지만 이 논문에서는 매우 작은(상, 하, 좌, 우, 중앙의 의미를 담기에 가장 작은) 3x3 receptive field를 사용하였다 
    • 1x1 receptive filter도 사용하였는데 이것은 input 채널에 대한 선형변환, 또는 Test time에서의 multi scale input을 위한 layer이다 
    • Stride는 1로 설정하고 padding은 3x3 conv 에 대하여 1로 하였다 - 차원의 수를 그대로 가져가기 위하여 
    • Max pooling은 2x2의 window를 사용하였고 stride는 2로 하였다 - Overlapping pooling을 사용하지 않음 
    • ConvNet의 최종단에는 3개의 FCL을 이용하였고 처음 2개의 FCL은 4096개의 노드를 가지고 마지막 FCL은 클래스의 개수만큼인 1000개의 노드를 가지고 있다 
    • Acivation은 ReLU를 사용하였다. 기존 AlexNet에서 사용한 LRN은 실험결과 효과가 없어서 앝은 네트워크(11 Layers)에서 한번 사용해 보고 그 뒤로는 메모리와 연산량만 늘어난다 판단외어 사용하지 않았다 

input size가 224일 때의 네트워크

2. Discussion

  • 기존에는 첫번째 layer에 사이즈가 큰 receptive field를 이용하여 공간적 특성을 최대한 많이 얻고자 했지만 저자는 3x3 receptive field만을 사용하였다. 사이즈가 큰 receptive field는 여러개의 3x3 receptive field로 대체될 수 있다. 해당 작업에 대한 이득은 다음과 같다 
    • 비선형성 레이어의 증가 
      1. 한번의 큰 사이즈의 RF(Receptive Field) Conv layer의 아웃풋에는 한번의 activation이 적용되지만 여러개의 3x3 RF를 사용하면 여러번의 activation이 적용되어 네트워크의 비선형성을 증가시켜 특징을 식별하기 좋게 한다 
    • 총 파라미터의 감소 \(R^2C^2\) 
      • 3x3 RF 3개와 7x7 RF 1개의 아웃풋은 동일하다.
      • 3x3은 3x3x3x\(C^2\) 인 \(27C^2\)
      • 7x7은 7x7x\(C^2\)인 \(49C^2\)이 된다
    • 기존에도 3x3 RF와 1x1을 사용해 왔지만 기존 네트워크는 VGGNet처럼 깊게 구축되지 않았고 데이터셋 또한 깊은 ConvNet을 구성하기에는 작았다.
    • 본 논문에서는 다른 네트워크와 다르게 첫번째 Conv layer부터 3x3 conv를 사용함으로써 더 계산량이 적고 깊은 네트워크를 구축하였다 
    •  같은 년도에 1등을 차지한 GoogleNet의 경우 여러가지 receptive field를 사용하여 1등을 하였지만 저자의 네트워크보다 연산량이 다소 많았다

3. Training

  • 입력 이미지의 사이즈는 224x224로 고정하였고 SGD의 iteration마다 하나의 이미지에 한번 crop하였고 랜덤 수평전환과 RGB 색상 변환을 사용하였다 
  • 학습에는 Single Scale과 Multi Scale 두가지로 학습을 진행했다 
    • Single Scale - Crop을 하기 전 이미지의 size가 256x256 과 384x384로 하였고 384 size의 이미지의 경우 학습의 속도를 빠르게 하기 위하여 기존 256 size로 학습한 가중치를 initialize 하는데 사용하였다. 이때 learning rate는 기존 0.01보다 작은 0.001에서 시작하였다 
    • Multi Scale - 256~512 size로 이미지의 사이즈를 다르게 하여 crop하여 scale jittering과 같은 효과를 가져왔다 - 이때도 학습속도를 빠르게 하기 위하여 위에서 384 size로 학습된 single scale 모델을 fine-tuning 하였다

4. Testing 

  • Training scale(S)에 따라 여러가지 testing scale(Q)를 이용하면 성능이 향상됐다 한다
  • 마지막 FCL들을 testing에서는 모두 conv layer로 변경을 하였는데 첫번째 4096 FCL을 7x7 conv로 변경하고 그 뒤 layer들을 1x1 layer로 변경하였다. 다음의 이득은 아래와 같다
    1. Input size에 제한이 없다 - 다양한 해상도에 따른 클래스 수와 동일한 채널 수를 가진 class score-map이 생성된다 - class score-map을 spartial average하여 최종 결과를 도출하는 pooling 개념
  • 테스트셋을 수평반전한 이미지와 원본 이미지 모두 예측하여 softmax의 결괏값을 평균하여 최종 결과를 산출했다 
  • FCN - Fully Convolution Network로 변경한 후 test time에서는 이미지를 crop할 필요가 없었다 

최종 FCL이 Conv로 변경됨

 

Multi scale 시 conv 의 아웃풋의 width 가 증가하니 global average pooling 같은 개념을 사용하여 최종 값 도출

5. Implementation details 

  • C++ Caffe Toolbox를 사용 
  • 병렬 컴퓨팅에서 각 GPU마다 batch를 하나씩 나누고 gradient가 계산되면 평균을 구해 전체 gradient를 구했다 이는 single GPU로 계산했을 때와 동일한 결과를 도출한다 
  • 학습시간은 아키텍쳐에 따라 2~3주 소모하였다 

6. Single scale evaluation 

  • LRN을 사용하지 않았다 - ReLU의 경우 AlexNet에서는 LRN을 사용하여 하나의 노드가 다음 노드로의 영향을 끼치는 현상을 방지하려 했다. 하지만 VGGNet의 경우 해당 Normalization을 적용했을 때와 아닐 때를 비교해보니 연산량은 증가되지만 정확도 부분에서는 차이가 없어 11 layer에서만 테스트 해보고 사용하지 않았다 
  • Convolution layer가 깊어질 수 록 에러율은 감소하였다 하지만 데이터셋의 부족으로 19 layer 이상에서는 변화가 없어 더이상 depth를 늘리지 않았다 
  • 테스트한 모델중에는 1x1 conv와 3x3 conv를 비교한 실험이 있는대 해당 결과 1x1 conv보다 3x3 conv의 에러율이 더 낮았다 그 이유는 conv layer가 추가됨으로 인해 비선형성이 증가함에는 도움이 되지만 공간적 맥락(spatial context)을 잡는 부분에는 3x3이 유리했다고 생각된다 
  • 테스트한 모델중 3x3 conv 와 5x5 conv를 비교한 실험이 있는데 3x3이 7%정도의 에러율 감소가 있었다. 이를 보면 작은 여러개의 filter가 넓은 하나의 filter보다 성능이 좋음을 알 수 있었다 
  • 다양한 scale의 이미지를 훈련 했을 때가 256 또는 384 하나로 학습했을 때 보다 테스트의 에러가 작았다 - augmentation 효과

7. Multi scale evaluation

  • Trainng시의 input size와 Test 때의 input size가 너무 차이가 심하면 정확도가 떨어지니 각각 256, 384, 512 size S에 대해서 {S-32, S, S+32}로 평가하였다
  • Training시에 multi scale이 적용된 모델에 대해서는 더 넓은 범위의 스케일에 적용할 수 있으므로 {Smin, 0.5(Smin+Smax), Smax}에 대해서 평가하였다
  • Densly ConvNet과 scale jittering을 동시에 이용할 때 에러율이 가장 낮았다 - Densly ConvNet은 깊은 신경망으로 생각된다
  • Multi scale training + multi scale evaluation에서 가장 높은 정확도를 얻었다 

8. Multi crop evaluation

  • 위에서 설명한 multi-crop evaluation과 dense ConvNet을 비교한다 - dense Convnet은 이미지에서 이미지를 잘라낸 후 그것들을 각각 convnet에 적용시키는 방식이 아니라 큰 이미지에 대해 곧바로 convNet을 적용하고 일정 픽셀 간격으로 마치 sliding window를 적용하듯이 결과를 끌어낼 수 있어 연산량 관점에서는 매우 효율적이지만 grid의 크기 문제로 인해서 학습 결과가 약간 떨어질 수 있다. 
  • multi-crop을 사용한것이 더 정확도가 좋았고 둘을 모두 사용한것이 가장 정확도가 좋았다
  • 그 이유는 different treatment of convolution boundary conditions 때문이라고 가정한다 

+ Recent posts