Plain Network는 단순히 Convolution 연산을 단순히 쌓는다면, ResNet은 Block단위로 Parameter을 전달하기 전에 이전의 값을 더하는 방식입니다.
CNN을 연구하면서 기존 모델들은 Layer을 깊게 쌓을 수록 성능이 더 좋아질것이라고 예상했지만, 실제로는 더 깊은 구조를 갖는 56층의 네트워크가 20층의 네트워크보다 더 나쁜 성능을 보이는 Degradation 문제가 발생했습니다.
Degradation 문제는 ResNet의 핵심인 Residual Block의 출현을 가능케 했다. 기존의 망과 차이가 있다면 입력값을 출력값에 더해줄 수 있도록 지름길(shortcut)을 하나 만들어준 것이 Residual Block 이다.
기존의 신경망은 입력값 를 타겟값 로 매핑하는 함수 를 얻는 것이 := 이 목적이었다.
그러나 ResNet은 에 자기자신 를 추가한 값이 가 되게 하는 방식이다. 원래 Output에서 자기자신을 빼는 것이 F(x)의 정의이므로, 'Residual learning'이라는 이름을 갖게 됩니다. 또한, x가 F(x)를 통과하고 나서 다시 x를 더해주기 때문에 이를 Skip Connection이라고 부릅니다.
기존 신경망이 을 만들려 했다면 ResNet은 로 두어 를 최소화 시키려고 합니다. 즉 이라는 목표를 두고 학습을 진행합니다. 이렇게 학습을 진행하면 목표값이 주어지기 때문에 학습이 더 쉬워집니다.
이 34층의 ResNet은 처음을 제외하고는 균일하게 3 x 3 사이즈의 컨볼루션 필터를 사용했다. 그리고 특성맵의 사이즈가 반으로 줄어들 때, 특성맵의 뎁스를 2배로 높였다
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을 이용한 Shortcut과 Bottleneck 구조를 이용하여 더 깊게 층을 쌓을 수 있었습니다.