[TIL] #10 2026-03-30

2026. 3. 30. 14:51·TIL

※ImageDataset 효율적으로 분리하는법

 

Image Dataset을 만들 때, 굳이 mode로 나누어서 전처리를 진행하지 않고, train_transform과 val_trasform을 만들어 놓고 transform=None으로 데이터셋을 불러온 후 , split하여 Subset으로 trasform을 따로 적용해준다.

 

# 이미지 증강을 위한 transform 생성
train_transforms = transforms.Compose([
    transforms.Resize((224, 224)),          # 이미지 사이즈 변환
    transforms.RandomRotation(degrees=45),  # -45~45 랜덤 회전
    transforms.ColorJitter(brightness=0.2), # -0.2~0.2 명암 랜덤 변환
    transforms.ToTensor(),                  # 텐서 변환
    transforms.Normalize(                   # 정규화
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225]
    )
])

# 평가는 증강작업 제외
val_transforms = transforms.Compose([
    transforms.Resize((224,224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225])
])

# ImageDataset 통해 폴더구조에서 데이터세트 추출
dataset = ImageDataset(root='./flower', transform=None)

print(f"발견된 클래스: {dataset.classes}")
print(f"총 이미지 개수: {len(dataset)}")

# 학습 평가 분리
train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_ds, val_ds = random_split(dataset, [train_size, val_size])

# 각각의 데이터세트에 다른 transform 적용
train_ds = Subset(ImageDataset('./flower', transform=train_transforms), train_ds.indices)
val_ds = Subset(ImageDataset('./flower', transform=val_transforms), val_ds.indices)

 

 

 

CNN 사전학습/전이학습 파이프라인 : 

 

데이터 전처리 -> 사전학습된 모델을 불러옴 -> 전이학습을 통해 사전학습으로 불러온 모델을 전이학습, 전이학습 전략엔 full-training, fine-tuning, feature extraction이 있음

 

Full Training : 완전히 초기화된 모델(아키텍처만 빌려옴) -> 일반적인 성능이 오히려 방해가 될때

Fine Tuning(미세 조정) : 사전학습된 가중치에서 추가 학습(가중치 조정)

-> 도메인 특화된 데이터가 일반적인 성능 안에서 특성이 만들어질 수 있는 경우, 많이 사용

Feature Extraction(프리징) : 불러온 사전학습 모델의 가중치를 그대로 쓴다, 분류기만 학습

-> 데이터세트와 특징이 유사하지만 분류 기준만 다른 경우

 

전이학습 파이프라인 : 전이학습 준비(분류기를 계층 클래스에 맞게 교체) -> 전이학습(여러 모델 비교) -> 모델 선정

 

: 직접 아키텍처를 구성하여 나온 성능지표, 전이학습을 통해서 나온 모델의 성능지표를 비교해보는것이 좋을 것 같다 

(Fine-tuning에서는 epochs, lr를 비교적 적게 -> 하지만 과적합이 일어날 때 까지는 똑같이 돌려보는 것이 좋다)

 

: 모델링을 직접 할 필요 없이 가져와서 튜닝만 하면 되기 때문에 편하다

 

:모델들을 여러가지 가져와서 Fine-tuning 방법도 여러가지로 하여서 비교해서 성능지표(시간, 성능)을 표로 만드는게 좋을듯 하다

 

 

※전이학습시의 하이퍼파라미터 튜닝

Full_fine tuning, 부분 파인 튜닝에서의 성능 지표(속도(중요), 성능)를 비교해보며 어떤 모델을 결정할 것인지 간단한 하이퍼파라미터 튜닝을 하면서 결정 -> 결정한 후의 본격적으로 하이퍼파라미터 튜닝(옵튜나 등 활용)

'TIL' 카테고리의 다른 글

[TIL] #12 2026-04-10  (1) 2026.04.10
[TIL] #11 2026-04 -08  (2) 2026.04.08
[TIL] #9 2026-03-26 ~ 3-27  (1) 2026.03.27
[TIL] #8 2026-03-16  (2) 2026.03.16
[TIL] #7 2026-03-11  (1) 2026.03.11
'TIL' 카테고리의 다른 글
  • [TIL] #12 2026-04-10
  • [TIL] #11 2026-04 -08
  • [TIL] #9 2026-03-26 ~ 3-27
  • [TIL] #8 2026-03-16
uj07096
uj07096
개발블로그 시작 !
  • uj07096
    김재헌 님의 블로그
    uj07096
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Algorithm
      • My IT
        • Article
        • Codes
      • TIL
      • My Projects N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코테
    LSTM
    Algorithm
    이상치
    머신러닝
    Tensor
    optuna
    EDA
    딥러닝
    프로그래머스
    DenseNet
    PyTorch
    ResNet
    EfficientNet
    til
    Faster R-CNN
    autoencoder
    GAN
    코딩테스트
    python
    데이터전처리
    LeetCode
    YOLO
    파이썬
    convolution
    kaggle
    DeepLearning
    transfer learning
    AI
    Stack
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
uj07096
[TIL] #10 2026-03-30
상단으로

티스토리툴바