2023. 9. 18. 22:15ㆍResNet
♣ 기본적인 neural network architecture의 구조
stem
- 입력 데이터를 처리하는 초기 부분
- 입력 데이터에 대한 크기 조정, 정규화 및 초기 특성 추출과 같은 기본 작업 담당
- CNN에서 stem은 일반적으로 network의 처음 몇 개의 레이어를 포함
- 합성곱 및 pooling layer와 같은 layer를 포함
- 입력 데이터를 준비하고 이를 본문(body)로 전달
- self.conv1: 이 부분은 2D 합성곱 레이어로, 입력 이미지의 채널 수가 3(RGB 이미지)이며, 64개의 출력 채널을 생성함.
- kernel_size는 커널(필터) 크기를 나타내며, stride가 2이므로 공간적 차원(가로 및 세로)을 절반으로 줄임
- padding은 입력과 출력의 공간적 차원을 동일하게 유지하기 위해 설정된 값
- self.pool1: 합성곱 레이어를 통과한 후, maxpooling 레이어를 사용하여 공간적 차원을 줄임
- maxpooling은 공간적 차원을 감소시키는 데 사용되며, 3은 커널 크기를 나타내고, 2는 스트라이드를 나타내며, padding은 출력 차원을 조절하는 데 도움을 줌
body
- feature extraction(특성 추출)과 representation learning(표현 학습)을 담당하는 중심 부분
- 여러 layer, block 또는 stage로 구성되어 입력 데이터를 점진적으로 고수준 특성으로 변환
- body는 대부분의 계산과 특성 학습이 수행되는 부분임
- CNN에서 body에는 일반적으로 여러 stage가 포함되며, 각 stage에는 convolutional, normalization, activation layer(합성곱, 정규화, 활성화 레이어)들이 포함됨
- architecutre에 따라 stage의 깊이와 복잡성이 다를 수 있음
ResNet에서의 body는 두 가지 다른 종류의 stage들로 이루어짐
- Residual Block(잔여 블록)
- ResNet의 기본 구성 블록
- 일반적으로 두 개의 convolution layer로 구성되는데, 각 layer에는 배치 정규화와 ReLU 활성화 함수가 이어짐
- 잔여 블록의 주요 아이디어는 skip connection이나 shortcut connection을 이용하여 input을 블록의 output에 추가하는 것. 이 skip connection이 훈련 중에 나타나는 vanishing gradient 문제를 극복하는 데 도움을 줌
- 잔여 블록은 더 얕은 ResNet architecture에서 사용되며 확장 계수가 1임. 이는 출력 채널 수가 입력 채널 수와 동일함을 의미함
위의 2번 설명에 해당하는 layer(conv-BatchNorm-ReLU)
Residual Block(위에서 정의한 BnConv layer 활용)
- Bottleneck Block(병목 블록)
- 더 깊은 ResNet 변형(ResNet50, ResNet 101 등)에서 소개됨
- 더 복잡한 특성을 캡쳐하기 위해 network를 더 깊게 만들어야 할 때 사용
- 세 개의 convolutional layer로 구성: 1x1 convolution, 작은 수의 필터를 사용하는 3x3 convolution, 다시 원하느 수의 필터로 채널 수를 확장하는 1x1 convolution
- 병목 블록은 계산 효율성을 높이면서 network를 더 깊게 만들기 위해 설계됨
- 확장 계수가 4로 설정되어 있어서 출력 채널 수가 입력 채널 수의 네 배임
- 잔여 블록과 마찬가지로 입력을 출력에 추가하기 위해 skip connection 사용
Bottleneck Block
위의 block을 사용해서 stem과 body를 결합한 architecture 만들기
- self.layers는 ResNret의 시작 부분인 stem layer를 정의함. 7x7 크기의 컨볼루션 레이어, 배치 정규화, ReLU 활성화 함수 및 3x3 크기의 Max Pooling 레이어로 구성
- block과 num_blocks 설정 - block 변수에는 ResBlock 또는 ResBottleNeckBlock이 할당됨. 이는 원하는 블록 유형을 지정하는 데 사용됨
- num_blocks 리스트는 각 stage에서 사용할 블록 수를 지정. 위의 resnet18 예시에서의 [2, 2, 2, 2] 처럼
3. 각 stage 생성
- make_stage 함수는 stage를 생성하는 역할
- 각 stage는 block을 사용하여 num_blocks만큼 중첩된 형태로 구성됨
- stage 간의 채널 수와 stride는 변화할 수 있음
header
- 최종 출력이나 예측을 생성하는 network의 마지막 부분
- 일반적으로 하나 이상의 fully connected layer 또는 convolutional layer로 이뤄짐. 각 layer 에는 global pooling와 활성화 함수가 뒤따름
- body에서 추출된 고수준 특성을 원하는 출력 형식으로 변화 ex) 이미지 분류에서 head는 클래스 확률을 생성
- body에서 학습한 특성을 기반으로 최종 결정이나 예측을 수행
stem, body, head를 결합한 architecture 만들기
- self.gap: nn.AdaptiveAvgPool2d는 PyTorch에서 사용되는 적응형 평균 풀링 layer. 이 layer는 전역 평균 풀링을 수행하며 이는 feature map의 모든 공간 차원(높이와 너비)에 걸쳐 평균값을 계산
- 이 행에서는 (1, 1) 출력 크기로 전역 평균 풀링을 수행하기 위해 AdaptiveAvgPool2d((1, 1))를 사용함. 이로써 특성 맵의 공간 차원이 1x1로 줄어듦
3. self.fc : nn.Linear는 완전 연결(선형) 레이어. 주로 신경망의 최종 분류 레이어로 사용됨
4. 이 선형 layer는 전역 평균 풀링에서 추출한 특성을 클래서 점수로 매핑하는 역할
(self.gap)는 특성 맵의 공간 차원을 고정 크기로 줄이는 데 사용되며, 선형 레이어(self.fc)는 이러한 특성을 기반으로 실제 분류를 수행함. num_classes는 분류 작업에서의 출력 뉴런 수를 결정하며, 각 클래스에 해당함.
♣ 참고
https://bo-10000.tistory.com/133
https://aistudy9314.tistory.com/58
'ResNet' 카테고리의 다른 글
Human Protein Atlas Image Classification(ResNet34) (0) | 2023.09.11 |
---|---|
(예시)ResNet 50 구현 (0) | 2023.07.23 |
(논문)Deep Residual Learning for Image Recognition (0) | 2023.07.23 |
(개념)ResNet(잔차신경망) (0) | 2023.07.18 |
(예시)Fruit Prediction|CNN|Pytorch|ResNet-18 (0) | 2023.07.17 |