ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE SCALE IMAGE RECOGNITION 정리 및 코드 구현 by PyTorch & Tensorflow [VGGNet]
    AI/Computer Vision 2021. 9. 2. 00:27
    728x90
    VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE SCALE IMAGE RECOGNITION 정리 및 코드 구현 by PyTorch & Tensorflow  [VGGNet]

     

     

    VGGNet는 ILSVRC 2014에서 준우승한 모델로, 같은 해 GoogleNet이 우승했으나 사용하기 쉬운 구조와 좋은 성능 때문에 유명해졌다고 할 수 있다. 이전의 AlexNet과 ZFNet에서 모델의 구조를 변화시켰다. 

     

     

    0. Abstract

     

    In this work we investigate the effect of the convolutional network depth on its accuracy in the large-scale image recognition setting. Our main contribution is a thorough evaluation of networks of increasing depth using an architecture with very small (3×3) convolution filters, which shows that a significant improvement on the prior-art configurations can be achieved by pushing the depth to 16–19 weight layers.

     

    • 3x3 convolution filter를 가진 architecture을 이용해 depth를 증가시킨 network를 평가
    • depth를 16-19 weight layer로 증가시켜 이전 기술들보다 더 개선됨

     

     

     

    1. Introduction
    • Convolutional Networks, ConvNets : 최근 large-scale image & video recognition에서 큰 활약보임
    • 본 논문에서의 accuracy 향상 시도 - ConvNet architecture 설계에서 depth를 다룸
      • 더 많은 convolutional layer을 추가하여 network의 depth를 늘림 (모든 계층에서 아주 작은 3x3 convolution filter 사용해 network의 depth를 꾸준히 늘릴 수 있음)
    • 결과: ILSVRC classification과 localisation 작업에서 좋은 accuracy 달성

     

     

    2. ConVNet Configurations

     

    2.1 Architecture 

    • input: fixed-size 224 × 224 RGB image
    • preprocessing: only subtracting the mean RGB value, computed on the training set, from each pixel
    • 구조 : 8~16 Convolutional Layer + 3 Fully-Connected Layer
       - Convolutional Layer (3x3 filter, stride = 1, padding = True) : 레이어 갯수에 변화를 주어가며 정확도에 대한 신경망 깊이의 영향력을 실험했고, 패딩을 적용해 이미지 사이즈 유지
       - Max-Pooling Layer (2x2 filter, stride = 2) : 5장을 사용했으며, 겹치치 않으므로 특징 맵을 1/4로 줄여줌
       - 1x1 Conv Layer (1x1 filter, stride = 1) : 차원축소로 인한 연산량 감소가 목적
       - Fully-Connected Layer (4096 -> 4096 -> 1000) : 세 장으로 고정된 FCL 사용

     

    Layer 개수에 따라 VGG 11, VGG13, VGG16, VGG19로 부른다. 

    1) 3x3 ConV Layer 3개

    7x7 ConV Layer 1개와 같은 receptive field 갖지만,

    (1) non-linearity 추가  (2) 81%의 params 수 감소를 이유로 3x3 ConV Layer 3개 사용 

    (3x3이 최소 크기인 이유는 중심 및 상하좌우를 표현할 수 있는 가장 작은 필터이기 때문이다.)

     

    2)  1 × 1 conv. layers

     GoogLeNet과 마찬가지로 'Network in Network'에 영향을 받아 1x1 Conv Layer를 사용했다. 하지만 이 구조에서는 연산량 감소를 꾀한다기보다는 의사결정함수에 Non-linearity를 부여할 목적으로 사용되었다.

     

    3) 다섯 장의 Max-Pooling Layer 사용
     Conv Layer의 수와는 관계없이 다섯 장의 고정된 Pooling Layer만을 사용했으며 적용된 위치는 위 표에서 확인할 수 있다.

     

     

     

    3. Classification Framework 

     

    3.1 Training 

    • batch size: 256
    • momentum: 0.9 
    • weight decay (L2 penalty multiplier set: 5*(10^4))에 의해 정규화됨
    • dropout: 0.5 (처음 두 개의 FC layer에서 dropout 정규화 )
    • learning rate: 맨 처음엔 0.001로 초기화 ->  정확도 향상이 멈춤에 따라 감소시킴 (The learning rate was initially set to 10−2, and then decreased by a factor of 10 when the validation set accuracy stopped improving. In total, the learning rate was decreased 3 times, and the learning was stopped after 370K iterations (74 epochs).)
    • network weights의 초기화 매우 중요! (since bad initialisation can stall learning due to the instability of gradient in deep nets ) 
      -> 따라서, 학습 지연 막기 위해 무작위 초기화로 교육될 정도로 얕은 구성 A (Table 1)부터 학습 시작
      그 후 깊은 architecture을 훈련할 때, 처음 네 개의 conv layer과 마지막 세 개의 FC layer를 net A의 layer로 초기
      • 중간 layer들은 무작위로 초기화
      • 무작위로 초기화하기 위해 zero 평균과 10^(-2)  variance 의 정규분포에서 가중치를 sample, biases는 0으로 초기화)
    • 224x224 고정된 크기의 ConvNet input image 얻기 위해, 이미지의 크기를 조정한 뒤 랜덤한 범위를 224x224로 crop!
      여기서 이미지 크기를 가로, 세로 비율을 유지한 채로 조정할 때, S는 조정된 이미지의 짧은 변의 값이라고 정의하자. 네트워크는 크게 두 종류로 학습되었는데, 각각 Single-scale과 Multi-scale을 위한 것이다.
      •  Single-scale : 먼저 S=256으로 모든 이미지를 조정하고 224x224의 고정 크기로 일부를 잘라 0.01의 학습률로 학습시키고, 추가로 조금 더 유연성을 부여하기 위해 S=384 환경에 0.001의 학습률을 적용해 학습시켰다.
      •  Multi-scale : 다양한 크기의 이미지를 학습하는 모델을 만들기 위해 고려한 방법으로, 이미지마다 범위 256~512의 S값으로 크기를 조정하고 고정 크기로 잘라 학습시키는 방법을 택했다. 이 방식은 Scale Jittering이라고 부를 수 있으며, 학습을 반복함에 따라 하나의 이미지를 다양한 스케일로 학습하게 되므로 일종의 Data Augmentation 역할을 한다.

     

    3.2 Testing  

     

    • Input image는 pre-define된 smallest image side로 isotropically rescale되며 test scale Q로 표시됨
      • Q가 training scale S와 같을 필요 없음, 각 S에 대해 몇 가지 Q를 쓰는 것이 성능 향상에 도움
    • Fully Connected layer가 conv layer로 변환됨 (첫 번째 FC layer는 7x7 conv layer로 마지막 두 FC layer는 1x1 conv layer로 변환)
      • resulting Fully Convolutional network가 전체 image에 적용
      • 결과
        1. class의 개수와 동일한 개수의 channel을 갖는 class score map
        2. Input image size에 따라 변하는 spatial resolution 〓 input image size의 제약이 없어짐
        3. 하나의 image를 다양한 scale로 사용한 결과를 조합해 image classification accuracy 개선가능
    • Image의 class score의 fixed-size vector을 얻기 위해 class score map은 spatially averaged (sum-pooled)
    • Image를 horizontal flipping해서 test set을 augment
    • Image의 final score을 얻기 위해 원본과 flipped image의 soft-max class의 평균을 구함
    • Multi-crop evaluation: input image를 더 정밀하게 sampling시켜서 정확도 향상되지만 각 crop에 대해 network re-computation이 필요해 효율성 떨어짐

    위의 S값은 Training Data에서의 값이며, 여기서 사용되는 Q는 S와 정의가 같지만 Testing Data에 대한 값이다. ImageNet의 데이터는 1000개의 클래스로 이루어져 있고 각각 1000개 씩의 이미지로 이루어져 있는데, 이는 충분히 많은 데이터라고 볼 수 없으므로 Testing Data에 대한 Augmentation을 시도했다. 먼저 이미지 하나를 여러 개의 Q 값으로 Augmentation한 뒤, 네트워크에 넣어 각각의 결과값을 얻어내고, 이를 평균(Sum-Pooling)내어 최종 분류 결과를 구한다. 또한 각 이미지를 Horizontal하게 뒤집은 데이터도 테스팅에 사용했다. 

     Evaluation은 두 가지 방식을 적용했다. 먼저 첫번째 Fully-Connected Layer를 7x7 Conv Layer로 변환시킨 뒤 원본 이미지를 투입하는 방식을 취하며 OverFeat 논문(Sermanet et al., 2014)에서 사용된 Dense Evaluation이다. 이것의 장점은 AlexNet에서처럼 테스팅 시에 데이터를 Multiple Crop하는 과정을 제거할 수 있기 때문에 효율적인 연산이 가능하다는 것이다.  또한 GoogLeNet에서 사용된 Multi-crop Evaluation도 적용해 Dense Evaluation과 상호보완적인 시너지를 내게 만들었다. 세부내용에 대해서는 각 논문을 참고하면 된다.

     


     

     

    코드 구현 with Pytorch 

    방법 1) 무지성 복붙 

    방법 2) 좀 더 똑똑한 방법이다 (Pytorch 홈페이지 )

     

     

     

     

     

    코드 구현 with Tensorflow

    방법 1:  tensorflow.keras.models.Sequential 사용하는 방법

    방법 2: Model Subclassing 

    Training과 Testing은 다음과 같이 진행한다

     

     

    728x90
Designed by Tistory.