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

권유진·2022년 6월 19일
0

논문 리뷰

목록 보기
3/17

Very Deep Convolutional Networks For Large-Scale Image Recognition

Abstract

  • CNN의 깊이의 효과에 대해서 연구했다.
  • 매우 작은 3*3 convolution filter의 구조로 깊이를 증가시켜 16~19까지 깊이를 증가시켰다.

Introduction

  • 커다란 데이터셋과 고성능 컴퓨팅 기술로 인해 CNN은 이미지와 비디오 인식 분야에서 성공적이다.
  • 컴퓨터 비전 분야에서 정확도 향상을 위해 AlexNet을의 구조를 개선하려는 노력이 많다.
    • 첫 번째 convolutional layer에서 더 작은 receptive field와 stride size를 가져가려는 노력
    • 전체 이미지와 여러 규모에서 신경망을 조밀하게 학습, 평가한다.
    • 우리는 깊이에 중심을 두고 연구를 진행하겠다.
      • 다른 파라미터들을 수정하여 매우 작은 filter(3*3)를 사용함으로써 실현 가능한 만큼 깊이를 증가시켰다.

ConvNet Configurations

Architecture

  • input은 고정된 크기의 224*224 image RGB 이미지를 사용했다.
    • 전처리 과정에서 각 셀의 RGB 값의 평균을 추출하였다.
  • 이미지들은 좌우, 상하, 중앙의 위치 정보를 담기에 가장 작은 크기인 3*3 filter을 가진 신경망을 통과한다.
    • input channel을 선형변환을 해주기 위해 1*1 filter를 사용하기도 한다.
    • stride는 1로 고정되었다.
    • padding은 3*3 conv layer에 대해 1로 설정(합성곱 연산 이후 해상도가 유지되도록)
  • pooling은 몇몇의 conv layer 이후에 1개씩 5번의 max pooling을 진행한다.
    • 2*2 pixel에 stride는 2로 진행
  • FC layer는 3개를 통과한다.
    • 처음 두 개의 레이어는 4096개의 노드을 보유하며 세 번째 레이어는 1000개의 노드 보유
  • 마지막 레이어로 softmax 레이어 사용
  • 모든 hidden layer는 ReLU를 사용하며 LRN은 계산 시간과 메모리 사용량만 높이므로 사용하지 않았다.

Configurations

  • 가중치 레이어를 11(8 conv, 3 FC)~19(16 conv, 3 FC)까지 설정
  • conv layer의 너비는 작을지라도, 첫 레이어에 64개로 시작하여 각 max-pooling layer 이후에 2배가 되어 512개까지 도달한다.
  • 깊이는 깊더라도 가중치의 개수는 더 얕은 신경망보다 많지 않다.

Discussion

  • 이전에 사용하던 신경망들과는 구조가 꽤 다르다.
  • 첫번째 conv layer에 상대적으로 큰 receptive field를 사용한 것과 반대로, 우리는 모든 layer에서 3*3의 receptive field를 사용했다.
    • pooling layer 없이 3*3 layer 2, 3개를 사용하는 것은 5*5, 7*7 layer 1개를 사용하는 것보다 효율적이다.
      • 2, 3개의 ReLU를 사용하게 되므로 1개를 사용하는 것보다 더욱 특별한 결정함수를 만든다.
      • 동일한 output 크기를 갖지만 parameter 수가 감소한다.
      • 5*5, 7*7 filter에 규제를 부여하는 것처럼 보일수도 있다.
  • 1*1 filter를 사용하는 layer는 선형변환을 위해 사용하지만 receptive field에 영향을 미치지 않고 비선형성을 증가시키는 효과도 있다.(\because ReLU 함수 사용)

Classification Framework

Training

  • AlexNet의 학습 절차를 따르기 때문에 momentum과 SGD를 사용한 다항 로지스틱 회귀를 최적화하는 것으로 학습이 진행된다.
    • batch size는 256, momentum은 0.9로 설정되었다. 가중치 감소 기법을 통해 규제되었다.(L2 penalty는 5e-4로 설정)
  • 드롭아웃(비율은 0.5로)은 처음 2개 FC layer에만 적용하였다.
  • 학습률은 초기에 1e-2로 설정하였지만 검증 set의 정확도가 향상을 멈췄을 경우 최대 3번까지 10만큼 감소시켰다.
  • 74 epoch 학습
  • AlexNet보다 parameter 수도 많고 깊이도 깊지만, 규제항과 초기값 설정으로 인해 더 적은 수의 epoch가 필요하다고 짐작했다.
    • 나쁜 초기값은 학습 지연시키기 때문에 가중치의 초기값 설정은 중요하다.
    • 평균 0, 분산 1e-2 정규분포에서 random sampling으로 가중치 초기값, 0으로 편향 초기값을 설정했다.
  • Data Augmentation
    • horizontal flipping과 random RGB color shifting 진행
    • 고정된 224*224 image input을 얻기 위해, 무작위로 rescaling된 학습 이미지를 crop했다.(SGD 반복마다 이미지마다 1번의 crop 진행)
      • SS는 rescaled 된 이미지의 가장 작은 부분의 길이이다.
        • SS는 224*224로 crop되기 때문에 224이상이어야 한다.
      • S는 두가지 접근법으로 구할 수 있다.
        • single-scale training: S의 값들을 고정해두고 진행, 논문에서는 256, 384로 고정했음
          • 먼저 S=256으로 설정하고 학습한 다음 더 빠른 학습을 위해 더 작은 학습률인 1e-3과 S=384로 두고 학습
        • mul-scale training: 각 이미지는 특정 범위([Smin,Smax][S_{min}, S_{max}])에서 random sampling을 통해 설정
          • 실험에서는 [256,512][256, 512]로 학습
          • SS가 모두 달라서 scale jittering으로 인한 augmentation 효과를 갖는다.
        • 빠른 학습을 위해 S=384S=384로 설정하고 single-scale로 pre-training을 진행한 다음 multi-scale model로 fine-tuning

Testing

  • 사전에 정의된 가장 작은 이미지 면으로 rescaling(QQ로 정의)
    • SS와 동일하지 않아도 된다.
  • 그 후 동일한 과정으로 신경망 학습
    • FC Layer는 conv layer로 전환된다.(첫 conv layer는 7*7 conv layer, 나머지 2개는 1*1 conv layer)
    • Fully Conv 신경망은 crop되지 않은 전체 이미지에 적용된다.
    • 결과는 class 개수와 동일한 channel과 input image size에 맞는 해상도를 갖는 class 별 점수이다.
    • 고정된 크기의 class score 벡터를 얻기 위해 class score map은 공간적으로 평균을 한다.(sum-pooled)
    • 또한 test set 역시 horizontal flipping을 통해 augmentation을 하고, 원본 이미지의 사후분포와 flipped 이미지의 soft-max는 최종 점수를 얻기 위해 평균된다.
  • test시에는 전체 이미지에 fully-conv 신경망을 적용시킨 후에, 각 crop들을 다시 계산하는 것은 비효율적이기 때문에 multiple crops를 sampling할 필요가 없다.
    • 동시에 커다란 crop set을 사용하는 것은 fully-conv 신경망과 비교해 더 나은 input image 샘플링을 하기 때문에 정확도 향상을 이끈다.
    • multi-crop evaluation은 다양한 conv 경계 조건으로 dense한 평가를 보완한다.
      • ConvNet에 crop을 적용할 때, feature map은 zero padding을 하고 이는 전체 네트워크 receptive field를 상당히 증가시켜 더 많은 context를 capture
      • 실전에서 multiple crops로 인한 계산량 증가는 정확도 증가에 영향이 없다고 생각한다.

Implementation Details

  • C++ Caffe toolbox를 사용하였고 단일 시스템에서 multiple GPU를 통해 학습과 평가가 가능한 환경을 사용하였고 uncropped 이미지를 multiple scale로 학습, 평가를 진행하였다.
  • Multiple GPU는 데이터 병렬을 이용하였고 각 이미지의 batch를 여러 GPU batch에 병렬적으로 나누었다.
  • GPU batch 경사가 계산된 후, full batch의 경사를 얻기 위해 평균했다.
    • 경사 계산은 GPU 모두 동시에 있어났고 1개의 GPU를 사용할 때와 결과가 같다.
profile
데이터사이언스를 공부하는 권유진입니다.

0개의 댓글