Q1. 이미지를 모델에 입력하기 전에 리사이징(Resizing)과 정규화(Normalization)를 하는 이유는 무엇인가요?
A1. 리사이징은 입력 이미지를 모델이 요구하는 크기로 맞추거나, 폴더 내 이미지 사이즈가 각기 다를 때 이를 통일하기 위해 필요하다. 정규화는 픽셀 값을 일정 범위로 조정하는 것으로, 학습 속도와 추론 성능을 높이기 위해 필요하다.
Q2. 데이터 증강(Data Augmentation)이란 무엇이며, 이미지 데이터에서 주로 사용하는 증강 기법에는 어떤 것들이 있나요?
A2. 데이터 증강은 학습 데이터를 인위적으로 변형해 데이터 수를 늘리는 기법이다. 주로 학습 데이터가 충분하지 않을 때 사용한다. 기법 종류로는 회전, 반전, 크롭, 줌, 밝기, 대비, 색상, 노이즈 조절 등이 있다.
Q3. Transfer Learning(전이 학습)이란 무엇이며, 이미지 분류 모델에서 어떻게 활용할 수 있나요?
A3. Transfer Learning이란 학습이 완료된 모델의 가중치를 새로운 테스크에 재사용하는 기법이다. 이미지 분류에서는 ResNet과 VGGnet 등의 학습 모델을 사용하며, 내가 가진 데이터 수에 따라 Classifier Tuning, Full Fine Tuning, Partial Fine Tuning을 선택하여 학습을 진행한다.
| 항목 | 정의 | 핵심 이유 | 예시 |
|---|---|---|---|
| 리사이징 | 입력 크기 통일 | 모델 호환성 | Resize(224,224) |
| 정규화 | 픽셀값 스케일링 | 학습 안정화 | Normalize(mean, std) |
| 데이터 증강 | 이미지 변형 | 일반화 향상 | 회전, 반전, 크롭 등 |
| 전이 학습 | 기존 모델 재사용 | 빠른 학습, 적은 데이터 | ResNet + 새 출력층 |
transforms.Resize((224, 224)) → 모든 이미지를 224x224로 조정0~255 → 0~1, 또는 1~1로 스케일 조정transforms.ToTensor() → 0transforms.Normalize(mean, std) → 평균, 표준편차 기준으로 정규화mean = [0.5, 0.5, 0.5], std = [0.5, 0.5, 0.5] → [-1, 1] 범위로 조정이미지 기준
| 종류 | 설명 |
|---|---|
| 수평/수직 반전 | 이미지를 좌우 또는 상하로 뒤집음 |
| 회전 (Rotation) | 일정 각도로 이미지를 회전시킴 |
| 크롭 (Crop) | 이미지의 일부분만 잘라 사용 |
| 확대/축소 (Scale) | 이미지 일부를 확대하거나 축소 |
| 밝기 조정 | 이미지의 밝기를 랜덤하게 조절 |
| 노이즈 추가 | 가우시안 노이즈 등으로 이미지에 무작위 흔들림 부여 |
| 색상 변화 | Hue, Saturation, Contrast 등을 랜덤하게 조정 |
| 혼합 (Mixup, CutMix) | 두 이미지를 합쳐 새로운 입력 생성 |
from torchvision import transforms
train_transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.RandomHorizontalFlip(),
transforms.RandomRotation(15),
transforms.ColorJitter(brightness=0.2, contrast=0.2),
transforms.ToTensor(),
transforms.Normalize([0.5]*3, [0.5]*3)
])
A. Feature Extractor로 사용
B. Fine-tuning (미세조정)
| 모델 이름 | 특징 |
|---|---|
| VGGNet | 단순하고 깊은 구조, 성능 좋지만 파라미터 많음 |
| ResNet | 잔차 연결(skip connection)로 매우 깊은 네트워크 구현 가능 |
| EfficientNet | 파라미터 수 대비 성능 최적화 |
| MobileNet | 모바일 환경을 위한 경량화 모델 |
from torchvision import models
# 사전학습된 ResNet 불러오기
model = models.resnet18(pretrained=True)
# 마지막 출력층만 교체
model.fc = nn.Linear(model.fc.in_features, num_classes=10)
딥러닝 모델에 이미지를 입력하기 전에 리사이징(Resizing)과 정규화(Normalization)를 하는 이유는 모델 학습의 효율성과 성능을 높이기 위해서입니다.
먼저, 리사이징(Resizing)은 모든 입력 이미지의 크기를 통일하기 위해 필요합니다. 딥러닝 모델은 고정된 크기의 입력을 받도록 설계되므로, 다양한 크기의 이미지를 일관된 형태로 맞춰야 합니다. 예를 들어, ResNet과 같은 사전 학습된 모델은 일반적으로 224x224 크기의 이미지를 입력으로 받습니다. 따라서, 모델이 학습할 수 있도록 모든 이미지를 동일한 크기로 변환해야 합니다.
다음으로, 정규화(Normalization)는 이미지의 픽셀 값 범위를 조정하는 과정입니다. 일반적으로 이미지의 픽셀 값은 0에서 255 사이의 정수값을 가지는데, 이를 [0, 1] 범위 또는 평균을 0, 표준편차를 1로 조정하는 방식으로 정규화합니다. 이렇게 하면 모델이 더 안정적으로 학습할 수 있으며, 특히 경사 소실(vanishing gradient) 문제를 완화하는 데 도움이 됩니다. 또한, 정규화를 통해 데이터의 분포를 일정하게 맞춰주면 모델이 특정 값 범위에 편향되지 않고 더 효과적으로 특징을 학습할 수 있습니다.
결론적으로, 리사이징은 입력 형태를 맞춰주고, 정규화는 학습을 안정적으로 진행하도록 도와주는 과정이라고 볼 수 있습니다.
데이터 증강(Data Augmentation)이란 기존 데이터에 다양한 변형을 가하여 새로운 학습 데이터를 생성하는 기법입니다. 딥러닝 모델은 많은 데이터를 필요로 하지만, 충분한 양의 데이터를 확보하기 어려운 경우가 많습니다. 데이터 증강을 활용하면 기존 데이터를 다양하게 변형하여 모델의 일반화 성능을 향상시킬 수 있습니다. 이를 통해 과적합(overfitting)을 방지하고, 모델이 특정 패턴에 치우치지 않도록 학습할 수 있습니다.
이미지 데이터에서 자주 사용하는 데이터 증강 기법에는 다음과 같은 것들이 있습니다.
첫째, 회전(Rotation)입니다. 이미지를 특정 각도로 회전시켜 모델이 다양한 방향에서의 데이터를 학습할 수 있도록 합니다.
둘째, 수평/수직 뒤집기(Flipping)입니다. 특히 수평 뒤집기는 이미지 데이터가 좌우 대칭성을 가질 때 효과적인 방법입니다.
셋째, 잘라내기(Cropping) 및 크기 변환(Scaling)입니다. 이미지의 일부분을 랜덤하게 잘라내거나 확대 및 축소하여 다양한 시각적 변화를 학습할 수 있습니다.
넷째, 밝기 및 색상 변화(Brightness & Color Jittering)입니다. 이미지의 밝기, 대비, 색조 등을 조정하여 다양한 조명 환경에서도 모델이 잘 작동하도록 만듭니다.
다섯째, 노이즈 추가(Adding Noise)입니다. 이미지에 랜덤한 노이즈를 추가하여, 모델이 깨끗한 데이터뿐만 아니라 노이즈가 포함된 데이터도 잘 인식할 수 있도록 학습합니다.
이러한 데이터 증강 기법들은 이미지 데이터의 다양성을 증가시키고, 모델이 보다 일반적인 특징을 학습하도록 돕는 중요한 역할을 합니다.
전이 학습(Transfer Learning)이란 이미 학습된 모델의 가중치를 활용하여 새로운 데이터나 문제에 적용하는 기법입니다. 딥러닝 모델을 처음부터 학습하려면 많은 데이터와 연산 자원이 필요하지만, 전이 학습을 사용하면 기존에 학습된 지식을 재사용하여 적은 데이터로도 좋은 성능을 얻을 수 있습니다.
이미지 분류 모델에서 전이 학습을 활용하는 방법은 크게 두 가지가 있습니다.
첫 번째는 특징 추출(Feature Extraction) 방식입니다. 사전 학습된 모델의 합성곱 층(Convolutional Layers)은 일반적인 이미지 특징(엣지, 패턴, 질감 등)을 잘 학습하고 있기 때문에, 이 부분을 그대로 사용하고 마지막 분류 층(Fully Connected Layer)만 새롭게 학습하는 방법입니다. 예를 들어, ResNet이나 VGG 같은 사전 학습된 모델을 로드한 후, 마지막 출력 층만 교체하고 새로운 데이터셋에 맞춰 학습시키는 방식이 이에 해당합니다.
두 번째는 미세 조정(Fine-Tuning) 방식입니다. 이 방법은 사전 학습된 모델을 일부 수정하여 새로운 데이터에 맞춰 추가 학습하는 방식입니다. 특정 층(예: 상위 몇 개 층)은 고정하고, 나머지 층들은 새로운 데이터에 맞춰 학습할 수 있도록 설정하여 모델이 기존의 일반적인 특징뿐만 아니라 새로운 데이터셋의 특징도 학습할 수 있도록 합니다.
전이 학습은 특히 의료 영상 분석, 소규모 데이터셋을 활용한 산업별 특화 모델, 객체 탐지(Object Detection) 등의 다양한 이미지 분석 분야에서 널리 사용됩니다. 기존의 대규모 데이터셋(예: ImageNet)에서 학습된 모델을 활용함으로써, 학습 시간을 단축하고 일반화 성능을 높이는 데 큰 장점이 있습니다.