티스토리 뷰

PyTorch는 연구자와 산업계에서 널리 사용되는 딥러닝 프레임워크로, 특히 컴퓨터 비전 분야에서 큰 주목을 받습니다. 이때 전처리(preprocessing)는 모델 성능, 학습 안정성, 일반화 능력에 중대한 영향을 주는 핵심 요소입니다. 이 글에서는 transforms.Compose의 이론적 배경, 주요 transform의 역할과 추천 값, PIL의 의미, 최적화 전략, 그리고 최종 요약 표까지 심층적으로 다룹니다.
📦 transforms.Compose의 이론적 배경
transforms.Compose는 함수형 프로그래밍의 합성(composition) 개념에서 영감을 받은 PyTorch의 모듈로, 여러 전처리 단계를 하나의 파이프라인으로 연결할 수 있게 합니다. 이렇게 하면 코드의 재사용성과 실험의 일관성이 높아지고, 실험 재현성까지 보장할 수 있습니다. Compose는 transform들이 순차적으로 호출될 수 있도록 래핑하며, 각 transform은 보통 이미지 한 장 단위로 적용됩니다.
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))
])
이 transform 객체는 데이터셋 로딩 시 적용되며, 각 이미지에 자동으로 변환이 가해집니다.
📷 PIL이란?
PIL(Python Imaging Library)은 파이썬에서 이미지 처리 작업을 수행하기 위한 라이브러리로, 현재는 Pillow로 계승·유지되고 있습니다. PyTorch의 torchvision은 이미지 데이터를 로딩할 때 보통 PIL 객체로 읽어오며, 대부분의 transform들은 PIL 객체를 입력으로 받습니다. 특히 ToTensor()는 PIL 이미지를 Tensor로 변환하는 필수 단계입니다.
⚙️ 주요 transform 및 역할과 추천 값
✅ 1. 형식 변환 (Format Conversion)
- ToTensor()
- PIL → Tensor, [0,255] → [0,1]
- 중요성: Tensor 형식은 PyTorch 모델에 필수이며, 누락 시 오류 발생
✅ 2. 정규화 (Normalization)
- Normalize(mean, std)
- 평균·표준편차 정규화 → 분포 안정화, gradient 폭주 방지
- 추천 값:
- CIFAR10: mean=(0.5,0.5,0.5), std=(0.5,0.5,0.5)
- ImageNet: mean=(0.485,0.456,0.406), std=(0.229,0.224,0.225)
✅ 3. 크기 조정 및 자르기 (Resizing & Cropping)
- Resize(), CenterCrop(), RandomCrop(), RandomResizedCrop()
- 입력 크기 통일, overfitting 억제, 다양한 관점 학습
- 추천 값: ImageNet → Resize(256), CenterCrop(224)
✅ 4. 기하 변환 (Geometric Transform)
- RandomHorizontalFlip(), RandomVerticalFlip(), RandomRotation()
- 방향·회전 변화에 강인한 표현 학습
- 추천 값: RandomHorizontalFlip(p=0.5), RandomRotation(15)
✅ 5. 색상·밝기 변형 (Color & Intensity)
- ColorJitter(), RandomGrayscale()
- 밝기, 대비, 채도, 색조 변화 적용 → 조명·환경 변화 적응력 증가
- 추천 값: ColorJitter(0.4,0.4,0.4,0.1)
✅ 6. 노이즈 및 마스킹 (Noise & Masking)
- RandomErasing(), GaussianBlur()
- occlusion, 블러에 강인한 학습
- 추천 값: RandomErasing(p=0.5, scale=(0.02,0.33))
💥 전처리 순서의 중요성
- ToTensor() → Normalize() 순서 유지
- augmentation은 ToTensor() 이전에 적용 (PIL 객체 단계)
- 테스트셋에는 augmentation 금지 → 평가 일관성 확보
순서 오류나 과도한 augmentation은 최대 10~20% 정확도 저하를 초래할 수 있습니다.
🚀 Compose 예제 (주석 및 활용 설명 포함)
🔹 훈련용 Compose
transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(0.4,0.4,0.4,0.1),
transforms.ToTensor(),
transforms.Normalize(mean, std)
])
👉 학습 데이터를 다양화해 overfitting 방지, 일반화 성능 향상
🔹 테스트용 Compose
transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean, std)
])
👉 일관된 전처리로 신뢰성 높은 평가 확보
🧪 전처리의 실제 영향 사례
- Normalize 생략 → CIFAR-10 정확도 85% → 75%
- RandomCrop, Flip 적용 → ImageNet fine-tuning Top-1 accuracy +7%
- RandomErasing 추가 → 얼굴 인식 occlusion robust accuracy +10%
- ColorJitter 과용 → 의료 영상 false positive 증가, 모델 혼란 초래
📊 transforms 요약 표
분류 함수 주요 변수/설정 예 중요성 요약
| 형식 변환 | ToTensor | - | PIL → Tensor, [0,1]로 스케일링 |
| 정규화 | Normalize | mean, std 예: (0.5,0.5,0.5) | 분포 안정화, gradient 폭주 방지 |
| 크기 조정 | Resize, CenterCrop, RandomCrop | size, scale | 입력 일관성, 다양한 관점 학습 |
| 기하 변환 | RandomHorizontalFlip, RandomRotation | p=0.5, degrees=15 | 방향·회전 강건성 증가 |
| 색상·밝기 | ColorJitter, RandomGrayscale | brightness=0.4, contrast=0.4 | 조명, 환경 변화 적응 |
| 노이즈·마스킹 | RandomErasing, GaussianBlur | p=0.5, scale=(0.02,0.33) | occlusion 강건성 강화 |
transforms.Compose의 올바른 활용은 모델의 성능, 안정성, 일반화 능력을 크게 좌우합니다. 추가로 custom transform 구현, 데이터셋별 mean/std 계산법이 필요하면 언제든 문의해 주세요!
'머신러닝&딥러닝' 카테고리의 다른 글
| PyTorch 데이터셋 분할 및 DataLoader (2) | 2025.05.01 |
|---|---|
| PyTorch 이미지 데이터셋: torchvision.datasets + 현실 데이터 사용법 (0) | 2025.05.01 |
| torchvision 완전 정복: PyTorch 비전 프로젝트의 핵심 라이브러리 (0) | 2025.05.01 |
| 모델 저장 및 재사용 (0) | 2025.02.28 |
| 모델의 컴파일, 학습 및 평가 (0) | 2025.02.28 |
- Total
- Today
- Yesterday
- chat gpt 모델 api 가격 예측
- 토치비전
- 재테크
- 자동매매
- chat gpt 모델 별 가격
- 기술적분석
- chat gpt 4o 예산
- 케라스
- 클래스형 뷰
- 퀀트투자
- chat gpt 모델별 예산
- 주린이탈출
- chat gpt api 비용 계산
- 주식투자
- 자동매매로직
- 1165회 로또
- Python
- 로또 ai
- 티스토리챌린지
- 차트분석
- 골든크로스
- 장고 orm sql문 비교
- 로또 1164회 당첨
- Numpy
- chat gpt 한국어 가격
- 1164회 로또
- 오블완
- chat gpt 가격 예상
- 주식공부
- 인공지능 로또 예측
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |