✅ 전이학습(Transfer Learning) 정리
1. 전이학습(Transfer Learning) 개념
- 정의: 이미 학습된 모델(주로 대규모 데이터셋에서 학습된 모델)의 가중치를 재사용하여 새로운 데이터셋에 맞춰 재학습하는 방법
- 목적: 데이터가 부족하거나, 컴퓨팅 리소스가 제한된 경우에 유용
- 유형:
- 전체 모델 재학습 (Full Model Training): 전체 네트워크를 재학습시킴.
- 특징 추출기 활용 (Feature Extraction):
- 기존 모델의 특징 추출기(Feature Extractor) 부분은 그대로 두고, 분류기(Classifier) 만 새롭게 학습시킴
- 예: 이미지넷 데이터로 학습한 모델의 Feature Extractor를 고정하고, CIFAR-10 데이터셋에 맞는 Classifier만 재학습
- 부분 학습 (Partially Trained):
- 일부 레이어만 재학습시킴
- 예: 얼굴 인식 모델에서 초반의 저수준 레이어는 그대로 두고, 고수준 레이어만 학습
- 파인튜닝 (Fine-Tuning):
- 기존 모델과 현재 문제의 데이터셋 간의 차이가 클 때 사용
- 예: ImageNet 데이터로 학습된 모델을 의료 영상 데이터셋에 맞춰 재학습
2. PyTorch를 이용한 ResNet18 전이학습 실습
- 데이터셋: CIFAR-10 (10개의 클래스)
- 모델: ResNet18
- 사용 모듈: torchvision.models, torch.optim, torch.nn
- 모델 불러오기:
- model = torchvision.models.resnet18(pretrained=True)
- lr_scheduler: 학습률을 점차 줄이거나 늘려주는 스케줄러 사용
- 모델 구조 확인하기:
- print(model.fc)
- model.fc는 Fully Connected Layer (Classifier)를 의미
- 모델 구조 수정하기:
- 기존의 model.fc를 CIFAR-10에 맞게 변경:
num_fits = model.fc.in_features
model.fc = nn.Linear(num_fits, 10) # 10개의 클래스 분류기
- 기존의 model.fc를 CIFAR-10에 맞게 변경:
- Loss Function & Optimizer:
- Loss: nn.CrossEntropyLoss()
- Optimizer: torch.optim.Adam() (에폭이 높아질수록 로컬 미니멈에 빠질 가능성 있음)
- 러닝레이트 스케줄러 (Learning Rate Scheduler):
- 학습이 진행되면서 러닝레이트를 조정:
lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=7, gamma=0.1) - 에폭이 높아지면 러닝레이트를 줄여서 안정적인 학습을 유도
- 학습이 진행되면서 러닝레이트를 조정:
- 재학습 시 주의사항:
- FC Layer만 학습할 경우:
- for param in model.parameters(): param.requires_grad = False
- for param in model.fc.parameters(): param.requires_grad = True
- 속도는 빠르지만, 정확도는 전체 모델을 학습하는 것보다 낮을 수 있음
3. ResNet vs AlexNet 차이점- ResNet:
- Residual Block 구조로 구성.
- 레이어를 건너뛰는 구조로, 깊이가 깊어도 학습이 원활함
- CIFAR-10 이미지 (32x32)를 입력으로 사용
- AlexNet:
- FC Layer가 크고, 레이어 수가 상대적으로 적음
- 227x227 크기의 이미지를 입력으로 사용
- 마지막 레이어를 CIFAR-10에 맞게 수정해야 함.
4. Transfer Learning with TensorFlow Hub- 모델: MobileNetV2
- 데이터셋: Flowers (32개 클래스)
- 분류기(Classifier): 1001개 레이블의 기본 분류기
- 특징 추출기 다운로드:
- headless 모델만 다운로드하여 Feature Extractor 로 사용:
feature_extractor_url = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4"
feature_extractor_layer = hub.KerasLayer(feature_extractor_url, input_shape=(224, 224, 3)
- headless 모델만 다운로드하여 Feature Extractor 로 사용:
- 분류기(Classifier) 추가:
- ResNet:
- FC Layer만 학습할 경우:
- 특징 추출기의 출력을 분류기로 연결:
model = tf.keras.Sequential([
feature_extractor_layer,
tf.keras.layers.Dense(32, activation='softmax')
])
3. 모델 학습 및 저장:
- 모델 컴파일:
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) - 모델 학습:
history = model.fit(train_dataset, epochs=10, validation_data=validation_dataset) - 모델 저장:model.save("mobilenet_flowers.h5")
✅ Semantic Segmentation 개념 정리
- 정의: 이미지 내 각 픽셀을 특정 클래스에 할당하는 픽셀 단위 분류 작업
- 주요 모델: FCN, UNet
- Fully Convolutional Networks (FCN):
- 인코더-디코더 구조
- 인코더에서 컨볼루션을 통해 특징을 추출하고, 디코더에서 이를 원본 이미지 크기로 복원
- 문제점: 다운샘플링 시 위치 정보가 소실될 수 있음
- UNet 구조:
- 오토인코더와 유사하지만, 인코더와 디코더를 Concat으로 연결
- 인코더에서 추출한 특징을 디코더로 전달하여 해상도 복원
- Upsampling 기법:
- Bilinear Interpolation: 빈 공간을 주변 픽셀 값을 기반으로 보간
- Max Unpooling: 기존의 Max Pooling에서 선택된 위치를 기준으로 복원
- ROI Align:
- FCN이나 UNet에서 특정 객체 영역(Region of Interest)을 추출하고, 해당 영역을 리사이즈하여 정밀한 예측이 가능하도록 함
✅ 실습 요약:
- CIFAR-10 데이터셋을 ResNet18을 이용해 전이학습
- FC Layer만 재학습할 경우, 속도는 빠르지만 정확도는 떨어질 수 있음
- TensorFlow Hub에서 MobileNetV2 모델을 사용해 Flowers 데이터셋 분류 실습
- Semantic Segmentation에서 FCN과 UNet을 학습하여 픽셀 단위 분류 수행
728x90
'인공지능 대학원 > AI 영상처리' 카테고리의 다른 글
딥러닝 개념 (0) | 2025.03.31 |
---|---|
인공신경망 MLP,CNN (0) | 2025.03.31 |
CIFAR-10로 CNN 이미지 분류 (0) | 2025.03.31 |
CNN(Convolutional Neural Network) (0) | 2025.03.20 |
비선형 함수(Nonlinear Function)의 필요성 (0) | 2025.03.20 |