(Resnet) Deep Residual Learning for Image Recognition

sota
classification
convolutional
imagenet
microsoft

#1

#microsoft::Tag 에서 Resnet 이라는 이름으로 제안한 네트워크 아키텍쳐입니다.

  • 100개, 1000개가 넘는 Layer를 쌓아 Imagenet 3.5% 에러 수준을 달성
  • Residual Learning이라는 개념의 소개로, Skip connection을 도입해 네트워크를 deep하게 쌓음.

image

Cifar-10 데이터셋에 대해서 일반적으로 레이어를 더 쌓아 트레이닝하면, 위 그래프와 같이 특정 레이어 개수 이상에서는 더 낮은 성능을 보여줍니다. 트레이닝 에러도 더 덜 떨어지고, 테스트 에러도 덜 떨어지는거죠.

이런 현상에 대해 vanishing/exploding gradients 문제를 언급하면서 단순히 더 많은 레이어를 stacking하는 것만으로는 더 나은 성능을 보장하지는 않을 것이라고 밝히고 있습니다. 즉, 이는 학습이 전혀 되지 않는 경우 대한 이야기입니다.

또 학습이 되더라도, 위 그래프와 같은 degradation 문제도 언급합니다. 네트워크가 깊어질 수록 정확도는 낮아지는 것입니다. Overfitting에 의한 문제일수도 있지만, 위 그래프처럼 그렇지 않은 경우도 있습니다.

이 논문에서는 Residual Learning 이라는 것을 소개함으로써 더 깊은 레이어를 쌓을 수 있는 가능성에 대해 언급합니다.

Residual Learning

image

Residual learning은 기존의 stacking된 네트워크에 일종의 skip connection을 추가한 것을 말합니다. 위 그림에서 2개의 weight layer를 거친 것에 input을 그대로 더해주는 형태로 구성되어 있는데, 이를 Residual learning block이라고 부릅니다.

최종 배워야하는 것을 H(x) , Stacking된 Layer의 Output을 F(x) , 그리고 Input을 x 라고 하면

H(x) = F(x) + x

형태로 Block을 만든 것입니다. 즉 Skip Connection이 없었던 것에 비해서 F(x) 는 Input과의 '차이’만을 학습하면 되는 것이므로 이 때문에 Residual learning이라고 부르는 것 같습니다.

F(x) = H(x) - x

논문에서는 이러한 방식이 기존의 방식에 비해 학습이 쉬울 것이라고 합니다.


Residual Block의 성능을 보여주기 위해 하나의 실험을 제안하는데, 위 그림과 같은 3개의 네트워크를 학습시켜보는 것입니다.

가장 왼쪽은 VGG 네트워크이고, 중간은 VGG Network를 기반으로 34개 레이어로 확장한 버전입니다. 그것에 Residual Skip Connection을 추가한 것이 가장 오른쪽의 네트워크입니다.

image

위 테이블에서처럼 VGG16에 비해 plain-34는 top1, top5 error가 증가합니다만, Resnet-34 버전에서는 감소하는 것을 볼 수 있습니다. 또 Layer 수를 50, 100개 이상으로 증가시켰을 때 top1, top5 에러가 계속해서 감소하는 것 역시 볼 수 있습니다. 즉, 논문에서는 초반에 말씀드렸던 degradation 문제를 residual learning을 통해 해소되었음을 보여준 것입니다.

역시, resnet 18, resnet 34에 대한 convergence graph를 살펴보아도 마찬가지입니다. plane network에서는 18개 레이어에서 34개로 증가시켰을 때 성능이 떨어지나(왼쪽), resnet의 경우에는 그렇지 않은 것을 볼 수 있습니다. 또한 Convergence의 속도 역시 빠르다고 합니다.

Projection Connection vs Skip Connection

또한 아래와 같은 Projection Connection을 실험하여 성능비교를 했습니다만, marginal 한 차이일 뿐이라고 간단하게만 분석하였습니다.

H(x) = F(x) + Wx

Bottleneck Architecture

Deep하게 쌓을 수록 계산양에 대한 걱정을 하게 되므로 bottleneck architecture라는 것을 소개합니다. 다른 논문에서도 소개된 것처럼, 1x1 Conv를 활용해 Channel Reduction을 통해 연산양을 줄이는 방식입니다.

image

즉 오른쪽처럼 1x1 Conv로 채널 수를 줄인 후 3x3 Conv를 통과하고 다시 1x1 Conv를 지나가 Channel수를 복구하는 형태입니다.

Resnet34에서 2개의 Residual Block을 3개의 Bottleneck Block으로 교체하면 Resnet50이 됩니다. 또 이 모델에 더 많은 수의 Bottleneck Block을 쌓아 Resnet101, Resnet152를 제안했습니다.

image

이와 같이 제안된 아키텍쳐를 통해 Cifar, Imagenet, VOC, COCO 등에서 최고의 성능을 레포트했습니다만, 1202개의 레이어를 쌓은 네트워크 아키텍쳐에서는 성능이 덜 나온다는 점을 Overfitting일 것 같다는 의견과 함게 Future work으로 남겨두고 논문을 마무리합니다.


Xception: Deep Learning with Depthwise Separable Convolutions
(MobilenetV2) Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation
Deep Learning: Practice and Trends
FusionNet - A deep fully residual convolutional neural network for image segmentation in connectomics
Detect-and-Track: Efficient Pose Estimation in Videos