데이터 증강을 위해 사용할 수 있는 라이브러리 중 torchvision.transforms 이 존재한다.
주로 Compose 함수를 활용해 내부에 다양한 Augmentation 함수를 넣어 한 번에 적용시켜준다.
transforms = Compose([RandomHorizontalFlip(p=0.5),
RandomResizedCrop(size=(224, 224)),
ColorJitter(brightness=0.5),
Resize(size),
CenterCrop(size),
ToTensor(),])
그런데 주로 Resize 후 CenterCrop을 진행한다. Resize는 들어온 이미지를 말 그대로 리사이즈해주는 것이고 CenterCrop도 자르는데 왜 같은 사이즈로 Resize하고 CenterCrop을 진행할까?
일단 먼저 각각의 함수가 어떻게 작동하는지 알아야 한다.
Resize(size)
Resize는 짧은 쪽을 기준으로 size를 맞춘다. 특히 비율을 유지하면서 크기만 조정한다는 것이 가장 큰 특징이다.
예시: `Resize(256)` 시
- 800x600 → 341x256
- 600x800 → 256x341
CenterCrop(size)
CenterCrop은 정확히 size x size 크기로 중앙 부분을 자른다. 만약 객체가 중앙에 위치하는 데이터셋이라면 유용한 메서드이다.
예시: `CenterCrop(256)` 시
- 341x256 → 256x256
- 256x341 → 256x256
왜 그럼 Resize하고 CenterCrop을 진행할까?
모델에서 모든 입역 이미지는 같은 크기가 되어야 한다. 이때 우리는 객체가 찌그러지지 않길 바라며 객체가 정 가운데에 있다고 가정할 때가 많다.
만약 Resize(224, 224)를 하게 된다면 비율이 다른 모든 이미지가 정사각형으로 강제 변형되어 왜곡이 발생하고 성능 저하가 발생할 가능성이 높다.
때문에 Resize → CenterCrop 을 진행하여 비율 유지로 자연스러운 이미지를 보존하고 표준화된 입력 크기를 보장한다.
참고 사이트
'헷개정 - 헷갈리는 개념 정리' 카테고리의 다른 글
| CNN이 시각 데이터를 처리하기 위한 가장 우수한 인공 신경망일까? (0) | 2025.09.26 |
|---|---|
| 미분 계산이 가능하려면 왜 함수가 연속이어야 할까? (0) | 2025.09.26 |
| ViT는 왜 큰 데이터셋에서만 잘 작동할까? (feat. inductive bias) (0) | 2025.09.26 |
| RNN, LSTM, GRU (0) | 2025.09.26 |
| 왜 데이터를 zero-centering하고 normalization 해야 할까? (0) | 2025.09.26 |