Deep Residual Learning for Image Recognition-ResNet(1) ,2015

TEMP·2021년 8월 21일
0

Papers

목록 보기
3/9
post-thumbnail

https://arxiv.org/abs/1512.03385

1. Introduction

Deep CNN의 장점

  • Deep CNN은 image classification에서 많은 breakthrough를 가지고 왔다.
  • Deep CNN은 자연스럽게 low,mid,high level의 feature통합한다.
  • Layer들을 stacking 하는 방법으로 feature들을 풍부하게 한다. ( VGG )

  • Then, Is learning better networks as easy as stacking more layers?

    layer들을 stacking 하면 더 좋은 network인가?


Deep CNN의 단점

  • vanishing/exploding gradients problem이 있다.
    이 문제는 normalized initialization, intermediate normalization layers을 통하여 다루어 졌고
    수십개의 layer들의 SGD를 사용한 역전파에서 수렴을 가능하게 했다.
  • 이렇게 수렴문제가 해결되면 network의 깊이가 깊어질수록 accuracy가 감소하는
    degradation문제가 나타난다.

  • 아래 그래프를 보면 overfitting의 문제가 아니며 layer가 늘어날수록 training error도
    높아지는것을 알 수 있다.

    • 만약 overfitting이라면 training error가 줄어들때, test error는 늘어나야 한다.


Degradation 해결방법

Deep Residual Learning Framework


  • 위 그림은 일반적인 network training과정이다.
    즉, input xx 가 들어오면 H(x)=W2 σ (W1X)H(x)=W_2 \space \sigma \space (W_1X)라는 mappingmapping에서 weight matrix를 train한다.

  • 이때 input xx는 이전 convolution layer의 output이고, weight layer가 convolution layer이라고 해보자.
    input xx는 covolution의 ouput이기 때문에 feature가 되고, H(x)H(x)역시 feature이다.
    여기서 mapping:H(x)mapping : H(x)는 이전에 추출하지 못한 feature들이 추출된다.


아래 그림은 논문에서 제시한 Deep Residual Learning Framework 이다.

  • 단순하게 원래의 mapping에서 xx만을 더해 새로운 mapping: H(x)=F(x)+ xmapping : \space H(x)=F(x)+ \space x을 생각해보자.
  • 이를 위의 convolution은 feature를 추출한다라는 concept을 이용하면, Identity xIdentity \space x 는 이전층에서
    학습된 정보이고, F(x)F(x)는 아직 학습하지 못한 Residual 정보이다.
  • 즉, 이미 train한 xx를 보존한 상태로 추가적으로 필요한 정보 : F(x)(=H(x)x)F(x)(=H(x)-x)만 train하여
    학습 난이도를 낮춘다.
    • F(x)F(x)만을 Train한다고 해서 추가적인 기법이 필요한 것이 아니라 H(x)=F(x)+ xH(x)=F(x)+ \space x라고
      하게되면 F(x)F(x)만 train하게 된다.



2. Related Work

  • Residual RepresentationsShortcut Connections은 이미 많은 network에서 사용 되었다.



3. Deep Residual Learning

3.1. Residual Learning

  • Introduction의 내용을 더 자세하게 설명하자면 다음과 같다.
    • 기존의 network는 H(x)=W2σ(W1X)H(x)=W_2 \sigma(W_1X) mapping을 trian하였다.
    • 기존의 mapping을 F(x)F(x)라고 한 다음 새로운 mapping H(x)=F(x)+xH(x)=F(x)+x라고 하자
    • 새로운 mapping은 단순하게 input xx를 추가해준 것에 불과하다.
    • 하지만 input xx가 이전 Convolution에서의 output이라면 이는 train된 정보이다.
    • 따라서 새로운 mapping을 이미 학습된 정보+추가로 학습할 정보로 나누어 진다.
    • 즉, 추가로 학습할 정보 F(x)F(x)만을 train하면 되므로 optimize 난이도가 낮아진다.

3.2. Identity Mapping by Shortcuts

  • y=F(x,Wi)+Wsxy = F(x, {Wi}) + W_sx 를 Residual Block이라고 한다,
    • 추가적인 parameter가 없고 계산 복잡도도 증가하지 않아서 성능을 비교하기 쉽다.
    • WsW_s는 element-wise addition을 위해 dimension을 맞춰주는 용도로만 사용한다.
      FF와 마찬가지로 fully connected가 아니라 convolution이다.
    • dimension이 같다면 Ws=IW_s=I
    • FF는 몇개의 층을 가져도 되지만, 하나의 layer만 갖는다면 y=Wx+xy=Wx+x와 같이 되어
      적어도 2개의 층을 갖게 한다.

3.3. Network Architectures

  • Plain Network(비교대상)
    • 기본적으로 VGG network를 따른다.
    • Convolution은 대부분 3×3 filter를 사용하였다.
    • output feature map size를 통일시키기 위해 각각의 layer들의 filter개수는 같다.
    • Convolution에서 feature map의 size가 반감되면 filter의 개수를 두배 늘려 layer마다 time-complexity를 보존한다.
    • pooling을 사용하지 많고 stride=2라고 하여 downsampling한다.
    • 최종 출력시 average pooling을 통하여 1,000개의 class로 분류.

  • 순서대로 VGG-19, 34-Plain, 34-Residual이다.

VGG-19의 계산시 form이 궁금하면 다음을 실행하면 된다.

from tensorflow.keras.utils import plot_model
from tensorflow.keras.applications import VGG16
import tensorflow as tf

conv_base=tf.keras.applications.VGG19(
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    input_shape=(224, 224, 3),
    pooling=None,
    classes=1000,
    classifier_activation="softmax",
)

plot_model(conv_base, show_shapes=True)
  • 점선은 input과 output의 dimension을 일치시키기위해 WsW_s가 들어간 부분이다.
    즉, 점선일때 크기가 바뀐다고 생각하면 쉽다.
    점선은 새로운 conv block의 제일 처음이다.

  • 자세한 form이다.

  • 추가설명
    • 위의 [ ] 안에 3×3,64가 두개인 것은 2개가 한 쌍이라는 의미이다.
    • 보라색 부분이라면 3×3의 filter를 64개 가지고 있는 2개의 covolution쌍을 총 3번 거친다.
      이때 filter size는 padding을 통하여 유지 시킨다.
      따라서 y=F(x,Wi)+Wsxy = F(x, {Wi}) + W_sx에서 WsW_s는 없다.(=II)

3.4. Implementation

  • Convolution을 거칠때 마다 Batch Normalization을 이용한다.
  • 초기 learnin rate=0.1부터 해서 점차 줄여나간다.
  • weight decay=0.0001, momentum=0.9
  • Drop out은 사용하지 않는다.



4. Experiments

4.1. ImageNet Classification

  • ImageNet 2012 데이터 사용
  • 1,000개의 class
  • Training data = 1.28M ( 128만 )
  • Validation data = 50k ( 5만 )
  • Test data = 100k ( 10만 )

Plain network Vs Residual Networks


  • Plain network과는 다르게 Res network는 단순하게 short cut connection을 추가 했더니 layer가 깊게 쌓일때 성능이 증가한다.
  • forward와 backward를 보았을때 Vanishing gradients의 문제점이 아니었다.
  • 이러한 문제(layers를 적층하였을때의 degradation)는 수렴률일 낮아지기 때문이다.

즉, ResNet이 layer을 적층함에 따라 잘 동작하고, 성능또한 좋아진다.

Identity vs. Projection Shortcuts

y=F(x,Wi)+Wsxy = F(x, {Wi}) + W_sx에서 WsW_s에 몇가지 추가 실험을 진행한다.
WsW_s는 dimension을 맞추기 위한 용도였다는 것을 기억해보자.

  • (A) WsW_s대신 dimension을 맞추기(늘리기) 위해 zero-padding을 사용하고, dimension이 같다면 Identity를 사용한다.

    • (convolution은 보통 dimension이 낮아 지거나 padding으로 같게 한다. 따라서 zero로 모자라는 부분을 채울 수 있다. 물론 임의로 padding을 사용하여 dimension을 늘릴수는 있지만 idiot!)
  • (B) 위에서 봤던 방식인데 dimension을 늘려야 할때는 WsW_s를 projection으로 사용.

  • (C) 모든 short cut에 대해 projection을 사용


결과를 보면 (C)의 error가 가장 낮지만, Identity대신 Projection을 택할 만큼의 높은 개선은 아니다.

Deeper Bottleneck Architectures

  • 층이 더 쌓일때, Training time을 고려하여 Bottleneck 구조를 사용한다.
    위의 ResNet에서 50개 이상 부터 ( 사실 50은 34에서 bottleneck 구조로 바꾼 것이다. )
    는 3개를 한쌍으로 하였는데 이것이 Bottleneck architecture이다.

    • Bottleneck architecture를 자세하게 보자.
      우선 Architecture를 비교해보면 다음과 같다.
      • 처음의 Convolution은 1×1 filter인데 이는 Poine-wise convolution으로 생각하면 된다.
        즉, 서로 다른 channel들을 압축시키는 효과가 있어 연산량을 줄어들게 된다.(256->64)
        parameter = ( input Channel × Output Channel )이다.
      • 두번째 Convolution은 3×3 filter로 feature를 추출한다.
      • 처음의 Convolution은 1×1 filter로 첫번째와 반대로 channel을 늘린다.
    • 이렇게 병목현상을 줄여 bottleneck으로 사용되고 parameter수가 상당히 감소한다.
      하지만 감소하는 만큼 정보손실도 있으므로 둘의 합의점을 찾아야 한다.

50-layer, 101-layer and 152-layer ResNets

3개의 모델 모두 bottleneck block과 (B)를 사용하였다. 또한 152-layer의 FLOPs를 보면 VGG-19
(19.6×10919.6×10^9)보다도 작다.

Comparisons with State-of-the-art Methods


위 표는 단일 모델로만을 평가한 것이고 ResNet-152가 뛰어나다는 것을 보여준다.
추가적으로 emsemble기법을 추가했을때는 top-5 error가 3.57% 까지 낮아졌다.

4.2. CIFAR-10 and Analysis ( Classification )

  • CIFAR-10 : 5만개의 training image, 1만개의 test image , 10개의 class
  • state-of-the-art results(해당 dataset에 가장 잘 맞는 구조를 찾음)보다는 목적에 맞게
    network를 deep구조로 만들때 어떻게 작동하는지에 더 중점을 둔다.
  • image input= 32×32이고 여기에 맞게 parameter를 줄인다.
  • 처음에는 3×3 convolution을 사용하고 마지막에는 10-fully-connected를 사용한다.
  • 중간에는 총 6n개의 layer을 쌓았으며, 아래의 layer를 2n번 쌓는다.
  • short-cut은 3×3=9개를 건너뛰며 사용하고 option은 (A)를 사용한다.
  • weight-decay=0.0001, momentum=0.9을 사용하고 weight initialization과, Batch Nomalization을 사용하고 Dropout은 사용하지 않는다.
  • 128-mini batch, learning rate는 0.1로 시작하여 32k,48k iteration이 완료되었을때 각각 10으로 나눈다.

  • 다음은 결과이다.

  • residual가 없는 network는 layer가 증가하에 따라 error도 증가하지만, residual를 추가 해주면 layer가 증가함에 따라 error는 낮아진다.
    (110-layer network는 lr=0.1로 하면 너무 커서 400 iteration동안 0.01로 하고 다시 0.1로 바꾸어 준다.)

  • 당연하게 너무 많은 layer는 overfitting을 야기한다.

4.3. Object Detection on PASCAL and MS COCO

0개의 댓글