VVNN
Resnet의 변형 구조 본문
Resnet
layer가 깊어질 수록 gradient vanishing/exploding 등의 문제로 학습이 잘 되지 않는 문제가 존재한다.
이를 해결하기 위해 Deep Residual Learning을 제안
기존 방식 : 입력 x가 들어왔을 때 CNN 레이어를 거쳐 출력 F(x)가 나옴
Residual : 입력 x가 들어와서 CNN 레이어를 거쳐 출력 F(x)가 나오고, 거기에 다시 입력 x를 더해주는 identity mapping 작업을 수행함. 하나의 레이어를 통과하자마자 x를 더하는것이 아닌 몇 개의 레이어를 거친 후 identity mapping 작업을 진행함. 이렇게 몇 개의 layer를 생략하고, identity mapping을 하는 것을 short connection/skip connection이라고 함.
ResNet-B
Torch implementation에서 제안된 구조로, Resnet의 downsampling block을 변화. Path A의 stride가 2인 커널 크기 1x1을 사용하기 때문에 입력 특징 맵의 4분의 3을 무시하게 된다. 그러나, Resnet-B는 다음과 같이 path A에서 처음 두 컨볼루션의 stride 크기를 변환하였다. 따라서, 어떤 정보도 무시되지 않으며 두번째 컨볼루션의 커널 크기는 3x3이므로 path A의 출력 모양은 변경되지 않았다.
ResNet-C
Inception-v2에서 제안된 구조로, SENet, PSPNet, DeepLabV3 그리고 ShuffleNetV2에서 유사하게 구현되어있다. 7x7 컨볼루션은 3x3 컨볼루션에 비해 연산량이 5.4배 이상 더 들기 때문에 그림 2의b에서 처럼 input stem에서 3x3 컨볼루션으로 대체하였다.
ResNet-D
Resnet-B에서 착안하여 다운 샘플링 블록의 path B에 있는 1x1 컨볼루션도 입력 특성 맵의 3/4을 무시한다는 점에 유의하고, 정보가 무시되지 않도록 수정하려 한다. 경험상, stride가 1로 변경된 컨볼루션 전에 스트라이드가 2인 2x2 average pooling을 추가하면 실제로 잘 작동하며 계산비용에 크게 영향을 주지 않는다.
Resnet-B: Downsampling block을 향상
Resnet-C: Resnet-B에서 7x7 컨볼루션을 3x3으로 변화
Resnet-D: Downsampling block의 Stride를 변화
ResNext
Resnet의 구조에 Inception에서 사용하던 cardinality 개념을 도입하여 비슷한 크기의 Resnet보다 복잡도(complexity)는절반 이하로 줄이면서 더 높은 정확도(Accuracy)를 얻는 것이 가능해졌다.
Inception은 convolution 연산을 나눠서 진행하고 서로 다른 weight을 구한 뒤, 마지막 단에서 다양한 path의 결과를 종합하는 'split-transformation-merge' 구조.
이 때, 쪼개진 CNN이 몇 개의 path를 갖는지 결정하는 하이퍼파라미터가 바로 'Cardinality'이며, 각각의 path에서 가지는 채널을 depth라고 정의한다.
위 그림은 입력 256 채널을 4채널 크기의 32그룹으로 분리한 예시.
각 블럭 안에 있는 숫자(256, 1x1, 4)는 "입력 채널 수, 필터 크기, 출력 채널 수"로 이해하면 된다.
이렇게 여러 그룹으로 분리하게 되면, Inception 모듈처럼 'split-transformation-merge(분리-변환-통합)'을 통해 좀 더 효율적으로 입력 채널에 내재한 핵심 정보를 추출할 수 있으며, 동일한 형태를 취하므로 구조적으로 다루기 쉬워진다.
논문에서 저자들은 이런 그룹의 크기를 'Cardinality'라고 정의 했으며, 다시 말해 transformation을 수행하는 그룹의 수라고 보면 된다.
망의 깊이나 넓이를 늘리는 것보다 Cardinality를 증가시키는 것이 좀 더 좋은 성능을 얻기 위해 중요하다.
따라서 위 그림은 Conv2 stage 기준 32개의 path와 4의 사이즈를 가지므로, cardinality=32, depth=4의 ResNeXt50(32x4d)
실제로 Cardinality=64로 설정한 ResNeXt-101이 ResNet200과 ResNet-101에서 채널을 100으로 네트워크보다 더 좋은 성능을 보였다.
Resnet-RS(Revisiting ResNets)
구조를 바꾸는 것보다 training과 scaling 전략 변화가 더 좋은 결과를 가져왔다. 2가지 새로운 scaling strategies를 제안했다.
1) overfitting이 발생할 수 있는 영역에서 model depth scaling
2) 권장된 것보다 좀 더 느리게 image resolution을 증가시키는 것
Resnet에 적용된 학습 방법과 정규화 방법에 대해 조사한 결과, 학습 방법 사이 상호작용을 발견했으며 여러 개의 정규화 기술을 사용할 떄 weight decay value를 줄이면 이득을 보는 것을 확인했다.
저자들은 모델 크기, 데이터셋 크기, epoch의 수와 같은 scaling strategy와 학습 영역과 최고 성능 사이의 의존성을 발견했다. 이러한 의존성은 작은 영역에서는 누락되었으며 이것은 sub-optimal이 나타나게했다. 따라서, 저자들은 새로운 scaling stragies를 제안
1) overfitting이 발생할때는 depth를 늘리는 것을 멈추고 width를 늘리기
2) image resolution을 천천히 증가시키기
이러한 학습 및 scaling strategies를 사용해 ResNet-RS를 만들었으며, EfficieintNet보다 더 빠르고 성능이 좋다. 특히, large-scale semi-supervised learning setup에서는 더 큰 차이를 보였다.
'스터디' 카테고리의 다른 글
SISR 모델 (0) | 2023.04.21 |
---|---|
SISR - DeepLearning (0) | 2023.04.11 |
Resnet (0) | 2023.03.15 |
Unity에서 HTC Vive Pro Eye 입력 매핑 (0) | 2022.07.29 |
Unity에 이미지 넣기 (0) | 2022.07.27 |