티스토리 뷰

작성자 : 한양대학원 융합로봇시스템학과 유승환 석사과정 (CAI LAB)

* 2021/07/21 1차 업데이트 완료

 

2016년도에 나온 CNN 아키텍쳐인 ResNet에 대해 리뷰해보겠습니다~! AlexNet, VGG, GoogLeNet, ResNet은 과거에 유명했던 CNN 아키텍쳐이고, 지금도 백본으로 자주 인용되므로 공부해두면 매우 좋습니다!!ㅎㅎ 


링크 0 (논문 원문) : https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf

 

링크 1 (참고 블로그) : https://dnddnjs.github.io/cifar10/2018/10/09/resnet/

 

CIFAR-10 정복 시리즈 1: ResNet

CIFAR-10 정복하기 시리즈 소개 CIFAR-10 정복하기 시리즈에서는 딥러닝이 CIFAR-10 데이터셋에서 어떻게 성능을 높여왔는지 그 흐름을 알아본다. 또한 코드를 통해서 동작원리를 자세하게 깨닫고 실��

dnddnjs.github.io

 


0. Abstarct

(0-1) Residual Learning Framework 제안

  • 특징 1 : 기존 Neural Network(ex : VGG)보다 Layer 수가 더 많아도 학습(train) 및 최적화(optimize)가 쉬움
  • * 학습 및 최적화가 쉽다 = Loss 값이 쉽게 떨어진다 = 최적의 딥러닝 모델 파라미터를 찾기 쉽다
  • 특징 2 : Residual Learning Framework의 깊이가 깊어져도(=Layer 수가 더 많아져도), 정확도가 꾸준하게 향상
  • * 정확도 : 이미지 내 클래스 분류 정확도 등등...
  • 특징 3 : 기존 Neural Network보다 더 많은  Layer 수를 가져도, 파라미터 수는 더 적음
  • * ResNet-152(layers)는 VGG-19보다 Layer 수는 8배 더 많으나, 더 적은 모델 파라미터 수(lower complexity)를 가짐

1. Introduction

(1-1) 네트워크의 깊이는 성능에 중요한 영향을 끼침

  • Deep Neural Network는 low/mid/high level features를 통합하고, 여러 개의 Layer에서 end-to-end 방식으로 class를 분류함

Layer에 따른 Feature map의 변화 도식도 // 출처 : https://towardsdatascience.com/applied-deep-learning-part-4-convolutional-neural-networks-584bc134c1e2

  • 이때 feature의 level은 stacked layers 갯수(= Depth)에 영향을 받음
  • -> Neural Network의 Layer 수가 많아질수록 근사화(Approximation)가 강력해짐
  • * 본문에서는 근사화를 Identity Mapping 표현으로 대체
  • 최근 연구(본문의 참고 문헌 : 41, 44)에 따르면 Neural Network의 Depth는 성능(정확도) 향상에 영향을 줌

(1-2) 네트워크의 깊이가 깊어지면 발생하는 문제 : Gradient Vanishing/Exploding (소멸/발산)

  • Gradient Vanishing, Exploding 문제의 정의는 아래와 같음

Gradient Vanishing & Exploding // 출처 : https://wikidocs.net/61375

  • 그러나! 이러한 문제는 normalized initialization, iintermediate normalization layers, SGD 등을 통해 대부분 해결
  • * 위 링크에 들어가시면 해당 내용과 관련된 자세한 내용을 볼 수 있음!

(1-3) 그럼에도 해결되지 않은 문제 : Degradation (성능 저하)

  • Degradation 문제 : Neural Network의 깊이가 증가할수록, 정확도는 포화되다가 급격하게 정확도 감소
  • -> Layer 수를 증가시키는 것은 딥러닝 모델에 높은 학습 에러값을 발생
  • 이러한 저하 문제는 오버피팅에 의해 발생되는 것이 아니며, 최적화가 쉽지 않다는 것을 보여줌
  • 단순하게 Layer 수를 증가하는 것은 성능 향상을 위한 해결책이 아님

그림 1. Layer 깊이에 따른 train(좌)/test(우) error 비교 // 출처 : 원문

  • Neural Networks는 Layer의 이(Depth)가 깊어질수록 error가 증가하고, 그림 1에서 그 현상을 볼 수 있음
  • 왼쪽 그림 1 : CIFAR-10 데이터에 대한 Tranning Error
  • 오른쪽 그림 1 : CIFAR-10 데이터에 대한 Test Error
  • 빨간색 그래프 :  56-layer (비교적 깊이가 깊은 네트워크)
  • 노란색 그래프 :  20-layer (비교적 깊이가 얕은 네트워크)
  • * 번외 : iter과 epoch의 차이

iter과 epoch의 차이 // 출처 : https://www.slideshare.net/w0ong/ss-82372826


(1-4) 본문의 핵심 아이디어

  • 핵심 아이디어 : Deep Residual Learing Framework를 소개함으로써 degradation 문제를 해결

그림 2. 기존 Neural Network's Block VS Residual Network's Block // 출처 : https://dnddnjs.github.io/cifar10/2018/10/09/resnet/

  • Underlying Mapping (기존 매핑) : 기존 Neural Network의 Output -> H(x)
  • Residual Mapping (잔차 매핑) : H(x) = F(x) + x               // x : Layer's input
  • 본 연구의 가정 : residual mapping이 unreferenced mapping보다 최적화하기 쉬움

(1-5) Residual Mapping의 구현 : Short Connections

  • residual mapping(=F(x) + x)은 short connection에 의해 구현 가능
  • 그림 2의 오른쪽(residual block)에서 'identity'에 해당하는 곡선이 short connection에 해당
  • Short Connection의 역할 : Layer를 하나 혹은 그 이상을 skip & identity mapping 수행
  • * short connection에 layer 추가가 대신 identity short connection(layer의 입력을 그대로 출력부에 전송)을 사용하면, 추가적인 파라미터 수 혹은 computational complexity에 영향을 거의 주지 않음

(1-6) 본문의 기여점

  • (1) Layer 수가 많아져도 최적화하기 쉬운 Deep Residual Learning Framework 제안 
  • (2) Layer 수가 많아져도 정확도 향상이 보증
  • (3) 특정한 데이터셋(ex : ImageNet) 뿐만 아니라 다양한 데이터셋(ex : CIFAR-10 등등)에서도 높은 성능을 보이며, 이는 범용적인 아이디어로 증명됨
  • (4) 기존 Network보다 Layer 수가 많아도, 파라미터 수는 적음 (=Lower Complexity)

2. Related Work

  • * 해당 파트는 제가 전통 컴공생이 아닌 관계로... 깊숙하게 들어가지는 않고, 대략적인 흐름만 케치해보겠습니다!

2-1. Residual Representations

  • 기존 image recognition에서 VLAD, Fisher Vector 개념이 등장

VLAD // 출처 : 원문의 참고문헌 18

  • 이 개념을 적용하기 위해 편미분 방정식(PDE : Partial Differential Equations)을 풀어야함 (이미지는 2차원이니깐!)
  • 이 편미분 방정식을 풀기위해 residual 기법이 적용됐으며, 이는 기존의 풀이보다 최적화가 간단해짐

2-2. Shortcut Connections

  • 기존의 gradient vanishing/exploding 문제를 해결하기 위해 몇몇 중간의 layer를 최종 layer(classifiers)에 연결함으로써 성능 향상을 시도
  • 본문과 비슷한 연구 주제로 "Highway networks // 참고문헌 42, 43"이 있으나, layer 깊이에 따른 성능 향상에 대한 지표를 제시하지 않음

3. Residual Learning

3-1. Residual Learning

  • 이 절의 내용은 (1-3), (1-4) 내용과 유사합니다.
  • 내용 요약 : 단순하게 Layer를 쌓는 형태는 identity mapping에 적합하지 않으므로(=Degradation 문제 발생), Residual Mapping을 통해 Degradation 문제를 해결할 것이다! 

3-2. Identity Mapping by shortcuts

3-2.-(1) Residual Blcok

  • Residual Block을 다음과 같이 정의

Residual Block 도식도
Residual Block 수식
Residual Block 수식 변형

  • x, y : Layer의 input, output
  • F(x, {W_i}) : Residual Mapping
  • W_1, W_2 : 첫, 두번째 layer의 가중치(=모델 파라미터)
  • σ : ReLU (Activation Function)
  • * Bias(편향)은 수식의 간략화를 위해 생략

3-2.-(2) Shortcut Connection

  • F + x : shortcut connection에 의해 구현 가능
  • F와 x의 차원이 다르므로, 차원을 맞춰줘서 element-wise addition(단순한 행렬 합)을 진행해야 함
  • 본문에서는 1*1 conv layer를 활하여 Layer의 중간 output인 F와 차원을 맞춰줌

W_s : 1*1 conv의 weight

  • 번외 : Residual Block의 Layer 수를 2개, 3개 혹은 그 이상으로 해도 상관 없으나, Layer 수를 1개만 했을 때는 효과가 거의 없었음

번외에 대한 논문의 내용 // 출처 : 원문


3-3. Network Architectures

네트워크 아키텍쳐 예시 (좌 : VGG19, 중 : 34-layer Plaint, 우 : 34-layer Residual) // 출처 : 원문

(1) Plain Network

  • VGG-19 아키텍쳐에 영감을 받음 & 3*3 conv filter 사용
  • VGG와의 차이점 1 : Max Pooling 대신 Conv layer에서 Stride 2를 사용하여 Feature Map의 size를 절반으로 감소
  • VGG와의 차이점 2 : Feature Map의 size가 절반으로 감소하면, 필터의 수는 2배로 증가시켜서, 레이어마다의 time complexity를 보존
  • VGG와의 차이점 3 : 위의 테크닉을 적용하여, VGG보다 레이어 수는 15개 더 많지만, 파라미터 수는 VGG19의 18%에 해당

(2) Residual Network

  • Plain Network에 Shortcut Connection을

identity shortcuts을 적용한 수식

  • Identity Shortcuts은 input과 output이 동일한 차원일때 사용 가능
  • 차원의 증가하면, 2가지 옵션을 선택할 수 있음
  • (옵션 1) : 차원 증가를 위해 zero padding 적용 -> identity shortcuts 효과
  • (옵션 2) : 차원 증가를 위해 projection shortcut 적용 -> 1*1 conv를 활용

3-4. Implementation

<학습 관련 인자>

  • 데이터 증강을 위해 학습 데이터는 256~480 pixel 중 랜덤하게 resize된 후, 224*224 crop 적용
  • 혹은 horiziontal flip 적용

horiziontal flip // 출처 : https://stackoverflow.com/questions/28889184/horizentally-flip-of-an-image-python

  • 데이터 전처리를 위해 pixel mean subtracted 적용
  • 각 Conv layer와 activation function 사이에 Batch Normalization 적용
  • mini-batch 256으로 SGD 최적화 사요
  • 학습률은 0.1로 시작하다가, error가 감소되지 않으면 10으로 나눔
  • 학습 횟수 : 60*10^4 iter
  • weight decay : 0.0001
  • momentum : 0.9
  • No Dropout

<테스트>

  • 테스트 방법 : standard 10-crop testing 적용

10 crop test // 출처 : https://leechamin.tistory.com/184

  • multiple scales(224, 256, 384, 480, 640)에서 평균 점수를 사용

4. Experiments

4-1. ImageNet Classification

(1) ImageNet Dataset

  • ResNet을 ImageNet 2012 classification dataset에서 top-1, top-5 error rate에 대해 평가(evaluate) 진행
  • * top-1, top-5 error에 대한 깔끔하게 정리된 설명이 얼마 없어서... accuracy로 대체합니다~

top-1, top-5 accuracy의 정의 // 출처 : https://enjoyso.tistory.com/122

  • class 개수 : 1,000개 
  • 학습 데이터 수 : 128만개 (1.28 million)
  • 검증 데이터 수 : 5만개 (50k)
  • 테스트 데이터 수 : 10만개 (100k)

(2) Architectures for ImageNet

표 1. Architectures for ImageNet

  • ResNet 아키텍쳐 : conv 3_1, conv 4_1, conv 5_1에서 다운 샘플링 (with stride 2)

그림 5. Basic Block(좌) VS Bottleneck Block(우) // 출처 : 원문

  • Basic Block (그림 5의 왼쪽) : 한 블록에 stacked된 layer 2개 -> ResNet 18/34
  • Bottleneck Block (그림 5의 오른쪽) : 한 블록에 stacked된 layer 3개 -> ResNet 50/101/152

(3-1) Plain Network for ImageNet

그림 4. ImageNet 데이터에 대한 학습, 검증 에러 (Plain Net)
표 2. ImageNet 검증 데이터에 대한 Top-1 error %

  • 표 2를 보면, PlainNet은 더 깊은 34-layer가 더 얕은 18-layer보다 더 큰 validation error를 가지고 있는 것을 보여줌
  • 그림 4에서도 plain-34가 plain-18보다 더 큰 train/val error를 가지고 있음을 보여줌
  • * 그림 4에서 굵은 선이 val error, 얇은 선이 train error
  • 결론 : plain에서는 degradation 문제가 관찰

 

(3-2) Plain Network에서 발생하는 Degradation의 원인 분석

  • 가설 1 : Gradient Vanishing에 의해 Degradation 발생
  • 가설 1에 대한 반박 1 : PlainNet은 Batch Normalization에 의해 학습되어, forward propagation은 0이 아닌 분산을 가짐
  • 가설 1에 대한 반박 2 : Backward Propagated Gradients는 BN과 함께 healty norms으로 보임
  • 결론 1 : forward 혹은 backward 신호(값)은 소멸(vanish)되지 않음!! -> Gradient Vanishing은 Degradation의 원인이 아님
  • 정확한 원인은 추후에 연구될 예정...
  • * Batch Normalization이란? : https://sacko.tistory.com/44
 

문과생도 이해하는 딥러닝 (10) - 배치 정규화

2017/09/27 - 문과생도 이해하는 딥러닝 (1) - 퍼셉트론 Perceptron 2017/10/18 - 문과생도 이해하는 딥러닝 (2) - 신경망 Neural Network 2017/10/25 - 문과생도 이해하는 딥러닝 (3) - 오차 역전파, 경사하강..

sacko.tistory.com


(4-1) Residual Networks for ImageNet

그림 4. ImageNet 데이터에 대한 학습, 검증 에러 (ResNet)
표 2. ImageNet 검증 데이터에 대한 Top-1 error %

  • 그림 4, 표 2에서 볼 수 있듯이, ResNet-34는 ResNet-18보다 성능이 향상
  • * Top-1 error 기준, 약 2.8% 향상
  • 이는 ResNet이 Degradation 문제를 해결했으며, Depth가 증가해도 정확도가 향상된다는 점을 보여줌

 

(4-2) Plain Networks VS Residual Networks for ImageNet

  • ResNet-34는 Plain-34보다 top-1 error가 약 3.5% 감소함 -> ResNet은 성공적으로 error를 줄일 수 있음
  • 반면, ResNet-18과 plain-18은 정확도가 비슷하지만,  그림 4를 비교하면 수렴 속도는 ResNet-18이 더 빠름
  • * 제 눈에는 둘다 비슷비슷 해보이는데... 논문에선 그렇다고 하니깐... 넘어가봅시다 ㅋㅋ
  • 즉, ResNet은 초기에 빠르게 수렴함으로써 최적화를 용이하게 함

(5) Identity VS Projection Shortcuts

표 3. ImageNet 검증 데이터에 대한 error 비율

  • Shortcut Connections에 3가지 옵션을 부여한 후, 성능을 비교
  • 옵션 A
  • - 차원 증가를 위한 shorcut : zero-padding
  • - 그 외 : identity (parameter-free, 단순히 layer의 input을 더함)
  • 옵션 B
  • - 차원 증가를 위한 shortcut : projection shortcut
  • - 그 외 : identity (parameter-free, 단순히 layer의 input을 더함)
  • 옵션 C :
  • - 모든 shortcut : projection shortcut

projection shortcuts 예시 : 차원 수를 맞춰주기 위해 x와 내적되는 가중치 파라미터 존재

<비교 1 : 옵션 A vs 옵션 B (표 3 기준)>

  • 옵션 B의 성능이 옵션 A보다 살짝 높음 (top-1 error 기준, 약 0.5%)
  • 이는 옵션 A의 zero-padding으로 추가된 차원이 실제로 residual learning이 없기 때문이라고 추측됨 (값이 0이기 때문)

<비교 2 : 옵션 B vs 옵션 C (표 3 기준)>

  • 옵션 C의 성능이 옵션 B보다 살짝 높음 (top-1 error 기준, 약 0.3%)
  • 이는 projections shortcut에 의해 추가된 파라미터(W_s) 때문이라고 추측됨

<표 3을 바탕으로 한 결론>

  • 옵션 A/B/C 간의 성능 차이가 작기 때문에, degradation 문제를 해결하기 위해 projection shortcuts이 필수적이 아니라는 것을 볼 수 있음
  • 따라서 본문의 후반에서는 memory/time complexity와 모델 사이즈를 줄이기 위해, 옵션 C를 사용하지 않을 예정

(6) Deeper Bottleneck Architectures

  • Basic Block은 Layer가 50층 이상으로 깊어지면, 연산 효율이 좋지 않음
  • 연산 효율을 좋게 하기 위해, bottleneck block을 새로 디자인

그림 5. Basic Block(좌) VS Bottleneck Block(우) // 출처 : 원문

  • Bottleneck Block은 3개의 Layer를 쌓음 -> 1*1, 3*3, 1*1 convolution으로 구성
  • Bottleneck Block은 Basic Block 보다 Layer 수가 1개 더 많지만, time complexity는 비슷
  • Bottleneck Block에는 옵션 B(차원 증가 shortcut : projection, 그 외 : identity)를 적용
  • * 1x1 conv이 연산 효율이 좋은 이유 : https://hwiyong.tistory.com/45
 

1x1 convolution이란,

GoogLeNet 즉, 구글에서 발표한 Inception 계통의 Network에서는 1x1 Convolution을 통해 유의미하게 연산량을 줄였습니다. 그리고 이후 Xception, Squeeze, Mobile 등 다양한 모델에서도 연산량 감소를 위해 이..

hwiyong.tistory.com


4-2. CIFAR-10 and Analysis

(1) CIFAR-10 Dataset

  • class 수 : 10개
  • 학습 데이터 수 : 5만개 (50k) -> 학습 45k, 검증 5k로 split
  • 검증 데이터 수 : 1만개 (10k)

(2) ResNet Architecture For CIFAR-10

  • 네트워크 input : 32*32 pixel (pixel mean subtracted 전처리 적용)
  • * 이미지 크기가 작기 때문에, 첫번째 레이어는 7*7 -> 3*3 conv layer로 변경
  • 레이어 구성 : 6n + 2 
  • * 6n : 3*3 convolutions
  • * 2 : Global average pooling layer & 10-way Fully-Connected Layer

ResNet architecture For CIFAR-10
Global Average Pooling 설명 // 출처 : https://gaussian37.github.io/dl-concept-global_average_pooling/

 

<그 외 학습 인자>

  • weight decay : 0.0001
  • momentum : 0.9
  • weight initialization 적용
  • Batch Normalization 적용
  • Dropout 미적용
  • mini-batch size : 128
  • GPU 2개 사용
  • 학습률 : 0.1 -> 32k iter에서 0.01, 48k iter에서 0.001, 64k iter에서 학습 종료
  • Data 증강 : 학습 데이터의 각 사이드에 4픽셀 씩 패딩 후, 랜덤하게 32*32 crop

 

<결과 분석 1 : Depth에 따른 error 비교>

그림 6. CIFAR-10에 대한 학습/검증 에러 결과 비교 (좌 : plain, 우 : ResNet)

  • n = 3, 5, 7, 9, 18을 적용하여 20, 32, 44, 56, 110 layer를 생성
  • * ex) n=3일 때, 6*n + 2 = 6*3 + 2 = 20 layer
  • CIFAR-10 데이터에서도, plainNet은 layer 수가 증가함에 따라 error가 증가하는 것을 볼 수 있음
  • * 점선 : train error, 굵은 실선 : test error
  • * Plain-110 layer는 error가 60% 이상이여서, 비교 대상에서 제거
  • 반면 ResNet은 Layer 수가 110개까지 증가해도, error가 감소하는 것을 볼 수 있음
  • ResNet은 데이터셋 종류와 관계없이, 범용적인 알고리즘이라는 것을 증명

(3) Analysis of Layer Responses

그림 7. CIFAR-10에 대한 layer responses의 표준 편차(std)

  • 그림 7layer responses의 표준 편차(std)를 보여줌 (after Batch Normalization, before activation function)
  • * 표준 편차의 정의 : 분산의 제곱근 -> 표준 편차가 작을 수록 평균 값에서 데이터(변량)들의 거리가 가까움
  • 결과 분석 1 : ResNet은 PlainNet보다 전반적으로 std가 작음
  • 결과 분석 2 : 깊은 ResNet(56, 110)이 얕은 ResNet(20)보다 std가 작음
  • 이러한 관찰로 봤을 때, ResNet은 PlainNet보다 최적화가 용이하고, Depth가 깊어져도 성능 향상이 보증

(4) Exploring Over 1000 Layers

그림 6. CIFAR-10에 대한 학습/검증 에러 결과 비교

  • n=200으로 하면, 1202-layer가 생성됨
  • * 위 그림 6 역시, 점선이 train error, 굵은 실선이 test error
  • ResNet 110과 1202를 비교했을 때, train error은 거의 유사
  • 그러나 test error는 ResNet 110이 더 낮음
  • ResNet 1202가 ResNet 110 보다 성능이 안좋은 이유는 overfitting이 원인이라고 추측됨
  • 이러한 overfitting은 DropOut등을 통해 해결할 수 있음

DropOut 예시 // 출처 : https://ko.d2l.ai/chapter_deep-learning-basics/dropout.html


4-3. Object Detection on PASCAL and MS COCO

  • Object Detection에서 Backbone으로 ResNet을 사용하면, 성능 향상 가능

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30