[DL] ResNet : 이미지 분류용 CNN 모델

·2023년 7월 22일

ResNet 배경

Plain Network는 단순히 Convolution 연산을 단순히 쌓는다면, ResNet은 Block단위로 Parameter을 전달하기 전에 이전의 값을 더하는 방식입니다.

CNN을 연구하면서 기존 모델들은 Layer을 깊게 쌓을 수록 성능이 더 좋아질것이라고 예상했지만, 실제로는 더 깊은 구조를 갖는 56층의 네트워크가 20층의 네트워크보다 더 나쁜 성능을 보이는 Degradation 문제가 발생했습니다.

Degradation 문제는 ResNet의 핵심인 Residual Block의 출현을 가능케 했다. 기존의 망과 차이가 있다면 입력값을 출력값에 더해줄 수 있도록 지름길(shortcut)을 하나 만들어준 것이 Residual Block 이다.

ResNet 방식

기존의 신경망은 입력값 xx를 타겟값 yy로 매핑하는 함수 H(x)H(x)를 얻는 것이 F(x)F(x) := H(x)H(x)이 목적이었다.

그러나 ResNet은 F(x)F(x) 에 자기자신 xx를 추가한 값이 H(x)H(x) 가 되게 하는 방식이다. 원래 Output에서 자기자신을 빼는 것이 F(x)의 정의이므로, 'Residual learning'이라는 이름을 갖게 됩니다. 또한, x가 F(x)를 통과하고 나서 다시 x를 더해주기 때문에 이를 Skip Connection이라고 부릅니다.

기존 신경망이 H(x)x=0H(x) - x = 0을 만들려 했다면 ResNet은 H(x)x=F(x)H(x) - x = F(x) 로 두어 F(x)F(x)를 최소화 시키려고 합니다. 즉 F(x)=0F(x) = 0 이라는 목표를 두고 학습을 진행합니다. 이렇게 학습을 진행하면 목표값이 주어지기 때문에 학습이 더 쉬워집니다.

ResNet 구조

이 34층의 ResNet은 처음을 제외하고는 균일하게 3 x 3 사이즈의 컨볼루션 필터를 사용했다. 그리고 특성맵의 사이즈가 반으로 줄어들 때, 특성맵의 뎁스를 2배로 높였다

bottleneck

resnet은 basic neck과 bottle neck이 있는데, 50부터는 layer를 더 많이 쌓아야하기 때문에 conv가 3개 있는 bottle neck을 씁니다.
bottle neck은 채널의 크기를 줄이고, 계산 비용을 줄이기 위해 1x1, 3x3, 그리고 1x1 합성곱 계층을 연속적으로 사용하는 구조입니다.

기존의 Residual Block은 한 블록에 Convolution Layer(3X3) 2개가 있는 구조였습니다. Bottleneck 구조는 Convolution Layer(1X1) 2개를 사용하기 때문에 파라미터 수가 감소하여 연산량이 줄어들었습니다.

input (224x224x3)
: ResNet은 224x224 크기의 컬러 이미지를 입력으로 받습니다.

Conv1
: 7x7 크기의 커널을 사용하는 stride 2인 합성곱 계층을 거치면서 입력 이미지는 [64x112x112]로 변환됩니다. 그 다음, 3x3 크기의 맥스 풀링을 거치면서 [64x56x56] 크기의 특성 맵이 생성됩니다.

Conv2
: 3개의 3x3 크기의 커널을 사용하는 합성곱 계층을 거치고, 특성 맵의 크기는 그대로 유지되어 [256x56x56]이 됩니다.

Conv3
Bottleneck 구조를 사용하여 채널의 크기를 줄여줍니다. 이전 단계에서 256채널이었던 특성 맵을 128채널로 변경한 뒤, 2x2 크기의 스트라이드 2를 사용하는 합성곱 계층을 통과시켜 [512x28x28] 크기의 특성 맵이 생성됩니다.

Conv4
다시 Bottleneck 구조를 사용하여 특성 맵의 크기를 줄여주고, [1024x14x14] 크기의 특성 맵이 생성됩니다.

Conv5
마찬가지로 Bottleneck 구조와 스트라이드 2를 사용하여 [2048x7x7] 크기의 특성 맵이 생성됩니다.

FClayer
7x7 크기의 평균 풀링을 거쳐, [2048x1x1] 크기의 특성 맵이 생성됩니다.

Fully Connected Layer
마지막으로, 평균 풀링을 거친 특성 맵을 사용하여 분류를 위한 완전 연결 계층을 통과시킵니다. ResNet-50의 경우, 1000개의 클래스로 분류되므로, 출력 노드는 1000개입니다.

📌 ResNet은 Skip Connection을 이용한 ShortcutBottleneck 구조를 이용하여 더 깊게 층을 쌓을 수 있었습니다.


💡 출처

[CV] ResNet - Residual Connection(잔차연결)
[CV] ResNet50 톺아보기
[DNN] Resnet 리뷰/구조 (CVPR2016)
[CNN 알고리즘들] ResNet의 구조
[딥러닝] ResNet - Residual Block 쉽게이해하기!
profile
개발하고싶은사람

0개의 댓글