[Deep Learning] 10. 전이 학습(Transfer Learning)과 ResNet
카테고리: Deep Learning
🎯 전이 학습(Transfer Learning)과 ResNet
전이 학습(Transfer Learning)과 ResNet을 살펴보자.
1. 🔍 전이 학습(Transfer Learning)
한 분야의 문제 해결을 위해 얻은 지식/정보를 다른 문제 해결에 사용
- 딥러닝 분야의 전이학습: 하나의 작업을 위해 학습된 신경망 모델을 유사한 다른 작업에 적용시키는 것을 의미한다.
🚀 간단한 전이 학습 프로세스
- 사전 학습된 neural network 모델 선택
- ex. 1M개 이미지 & 1000개 클래스 분류
- 최종 Layer만 교체
- 새로운 데이터에 대한 학습
- 100개 이미지 & 10개 클래스 분류
- 예측 및 결과 평가로 neural network 개선
💡 전이 학습을 사용하는 이유
이미지 출처: Transfer Learning
- CNN 모델은 네트워크 깊이에 따라 서로 다른 종류의 feature를 학습한다.
- 전이 학습을 사용하여 새로운 데이터 세트로 학습하면 깊은 계층의 파라미터를 조정할 수 있다.
- 아래 그림의 왼쪽이 앝은 layer(일빈적 특징 추출)이고 오른쪽이 깊은 layer(구체적 특징 추출)이다.
- 잘 훈련된 모델이 새로 구성하려는 모델과 유사한 경우, 짧은 시간 내에 높은 정확도 달성이 가능하다.
이미지 출처: #002 CNN Edge detection
🔍 Transfer Learning과 Fine-tuning
- Transfer Learning: 사전 학습된 모델을 사용하여 최종 layer의 parameter를 조정하는 학습을 진행
- Fine-tuning: 사전 학습된 모델을 사용하여 모든 layer의 parameter를 조정하는 학습을 진행(초기값은 사전 학습된 모델의 parameter를 사용)
- 아래 그림에서 왼쪽은 Fine-tuning이고 오른쪽은 Transfer Learning이다.
이미지 출처: Transfer Learning(전이 학습)
2. 🧠 ResNet
- ILSVRC(ImageNet Large Scale Visual Recognition Challenge) : 2010년에 시작된 ImageNet 인식 경진대회
- ImageNet : 1000가지 사물로 이루어진 100만개 이미지 데이터
- 2015년 최고 성능의 모델은 152층의 신경망을 사용한 모델(ResNet)이었다.
- AlexNet
- 깊은 신경망(8 layer) 사용
- 인식 에러율을 16%로 낮춤
- ResNet
- 더 깊은 신경망(152 layer) 사용
- 인간의 인식 에러율보다 낮춤
이미지 출처: ResearchGate
🧠 사전 학습된 신경망 ResNet50
- 50개의 layer로 구성된 CNN 모델
- ImageNet 데이터세트의 이미지(100만개 이상의 이미지)에 대해 사전 학습된 모델
- 다양한 이미지를 대표하는 많은 특징을 학습하여 키보드, 마우스, 연필, 각종 동물 등 1000여개의 사물로 분류 가능
- 224 x 224 크기의 이미지를 입력으로 사용한다.
- 새로운 이미지 분류에 활용하기 위해 Fully-Connected layer를 수정해야 한다.
이미지 출처: How to split resnet50 model from top as well as from bottom?
🧠 ResNet 모델 구조
Residual Block
Vanishing Gradient 문제를 피하기 위해 shortcut connection을 추가한 Residual Block을 사용
Bottleneck
층을 깊게 쌓을 때 발생할 수 있는 성능저하(파라미터 수, 연산량 증가)를 막기 위해 BottleNeck 구조를 사용(1x1 convolution을 사용하여 채널/차원 축소, 비선형성 증가, 과적합 방지)
이미지 출처: 모두를 위한 딥러닝 시즌 2: ResNet
Downsampling
BasicBlock이나 Bottleneck 출력을 결정할때 $F(x)$ 와 $x$ 의 텐서 사이즈가 다를때 Downsampling을 사용함
- Feature map 크기 변화 지점의 shortcut은 ResNet 그림에서 점선으로 표시
- pooling에 해당하는 부분
- 채널이 64 -> 128 -> 256로 변경될 때 feature map 크기가 줄어듦
- ResNet50에서는 단순하게 처리하기 위해 stride 2인 1x1 convolution 사용
이미지 출처: [모두를 위한 딥러닝2] CNN #6 ResNet
Dropout
뉴런이라 부르는 노드를 무작위로 껐다 켰다를 반복하는 것을 Dropout이라 한다.
- Overfitting 방지
- 학습 시간 단축
- 매번 다른 형태의 노드로 학습하기 때문에 여러 형태의 네트워크들을 통해서 앙상블 효과 얻음
Layers
50개의 layer를 가지고 있으며, 각 conv에 있는 행렬이 residual block이다.
- ResNet50은 layer마다 다른 residual block 형태가 반복되어 학습된다.
- [1x1 , 64]
- 1x1 convolution을 사용
- kernel(filter)의 수는 64
- [3x3 , 64]
- 3x3 convolution을 사용
- kernel(filter)의 수는 64
- [1x1 , 256]
- 1x1 convolution을 사용
- kernel(filter)의 수는 256
이미지 출처: Deep Residual Learning for Image Recognition
3. 🧠 ResNet 모델 사용
- PyTorch의 라이브러리 중 하나인 TorchVision에서 ResNet50 등 사전 학습된 이미지 인식 모델을 제공한다.
- TorchVision은 dataset, models, transforms 등 다양한 하위 라이브러리를 제공한다.
import torchvision.models as models
resnet50 = models.resnet50(pretrained=True) # 사전 학습된 ResNet50 모델 사용
❓ input image size가 다른 경우
- 이미지 변환 후 사용 가능
- ResNet50의 경우 224 x 224 크기의 이미지를 입력으로 사용하므로
transforms.Compose
를 사용하여 변환한다.
from torchvision import transforms
transform = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
])
💯 간단한 ResNet50을 사용
Fully-Connected layer를 수정하여 사용한다.