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

·2023년 7월 22일
0
post-custom-banner

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
개발하고싶은사람
post-custom-banner

0개의 댓글