본문 바로가기

인공지능 대학원/AI 영상처리

전이학습 및 Semantic Segmentation

전이학습(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
  1. 모델 불러오기:
    • model = torchvision.models.resnet18(pretrained=True)
    • lr_scheduler: 학습률을 점차 줄이거나 늘려주는 스케줄러 사용
  2. 모델 구조 확인하기:
    • print(model.fc)
    • model.fc는 Fully Connected Layer (Classifier)를 의미
  3. 모델 구조 수정하기:
    • 기존의 model.fc를 CIFAR-10에 맞게 변경:

      num_fits = model.fc.in_features
      model.fc = nn.Linear(num_fits, 10)  # 10개의 클래스 분류기
  4. Loss Function & Optimizer:
    • Loss: nn.CrossEntropyLoss()
    • Optimizer: torch.optim.Adam() (에폭이 높아질수록 로컬 미니멈에 빠질 가능성 있음)
  5. 러닝레이트 스케줄러 (Learning Rate Scheduler):
    • 학습이 진행되면서 러닝레이트를 조정:
      lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=7, gamma=0.1)

    • 에폭이 높아지면 러닝레이트를 줄여서 안정적인 학습을 유도
  6. 재학습 시 주의사항:
    • 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개 레이블의 기본 분류기
      1. 특징 추출기 다운로드:
      2. 분류기(Classifier) 추가:
  • 특징 추출기의 출력을 분류기로 연결:
    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
  1. Fully Convolutional Networks (FCN):
    • 인코더-디코더 구조
    • 인코더에서 컨볼루션을 통해 특징을 추출하고, 디코더에서 이를 원본 이미지 크기로 복원
    • 문제점: 다운샘플링 시 위치 정보가 소실될 수 있음
  2. UNet 구조:
    • 오토인코더와 유사하지만, 인코더와 디코더를 Concat으로 연결
    • 인코더에서 추출한 특징을 디코더로 전달하여 해상도 복원
  3. Upsampling 기법:
    • Bilinear Interpolation: 빈 공간을 주변 픽셀 값을 기반으로 보간
    • Max Unpooling: 기존의 Max Pooling에서 선택된 위치를 기준으로 복원
  4. 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