[PyTorch] 컴퓨터 비전의 동반자, torchvision
[PyTorch] 컴퓨터 비전의 동반자, torchvision
🟣 Intro
컴퓨터 비전(Computer Vision) 연구나 개발을 하다 보면, 데이터셋을 불러오고, 모델을 만들고, 이미지를 변형하는 등 반복적인 작업들이 많다.
PyTorch는 이런 불편함을 덜어주기 위해 torchvision이라는 아주 유용한 라이브러리를 제공하는데 정작 잘 알고 쓰지는 않기 때문에 이번 기회에 제대로 정리해보려고 한다.
⚪ torchvision은 크게 세 가지 핵심 요소
Models: 사전 훈련된(pre-trained) 다양한 컴퓨터 비전 모델들
Datasets: 연구에 널리 쓰이는 표준 데이터셋
Transforms: 이미지 전처리(preprocessing) 및 증강(augmentation)을 위한 다양한 변환 기법들
⚪ torchvision.models: 검증된 성능의 pretrained model
| 모델 분류 | 모델명 | 설명 |
|---|---|---|
| Image Classification | AlexNet, VGG, ResNet, SqueezeNet, DenseNet, Inception_v3, GoogLeNet, ShuffleNetV2, MobileNetV2, MobileNetV3, ResNeXt, Wide ResNet, MNASNet, EfficientNet, RegNet, VisionTransformer, SwinTransformer | 이미지 분류를 위한 다양한 아키텍처의 사전 훈련된 모델들. ImageNet 데이터셋으로 학습된 가중치를 제공하여 전이 학습에 매우 유용함. |
| Object Detection | Faster R-CNN, Mask R-CNN, RetinaNet, Keypoint R-CNN, FCOS, SSD, SSDLite | 이미지 내의 객체 위치와 클래스를 예측하는 모델들. COCO 데이터셋으로 사전 훈련된 모델을 제공함. |
| Semantic Segmentation | FCN, DeepLabV3, LRASPP | 이미지의 각 픽셀이 어떤 클래스에 속하는지 예측하는 모델들. COCO, Pascal VOC 등 다양한 데이터셋으로 사전 훈련됨. |
| Video Classification | R(2+1)D, MC3, MViT | 비디오 클립의 내용을 분류하는 모델들. Kinetics-400 데이터셋으로 사전 훈련됨. |
| Optical Flow | RAFT | 비디오의 연속된 프레임 간 픽셀의 움직임을 예측하는 모델. |
⚪ torchvision.datasets: CIFAR10부터 ImageNet까지
| 데이터셋 분류 | 데이터셋명 | 설명 |
|---|---|---|
| Image Classification | MNIST, Fashion-MNIST, KMNIST, EMNIST, QMNIST,FakeData, CIFAR10, CIFAR100, ImageNet,Caltech101, Caltech256,CelebA, Cityscapes, Country211, DTD, FGVCAircraft, Flowers102, Food101, GTSRB, INaturalist, LFWPeople, LSUN, OxfordIIITPet, PCAM, Places365, RenderedSST2, SEMEION,STL10, SVHN, StanfordCars, USPS, VOCDetection, VOCSegmentation | 이미지 분류 및 기타 비전 태스크를 위한 표준 데이터셋. 대부분 자동으로 다운로드 및 전처리를 지원함. |
| Video | HMDB51, Kinetics, UCF101 | 비디오 분류 연구에 사용되는 데이터셋. |
| Stereo Vision | Kitti, FlyingChairs, FlyingThings3D | 스테레오 매칭 및 깊이 추정 연구를 위한 데이터셋. |
| Other | CocoCaptions, CocoDetection, Flickr8k, Flickr30k, SBUCaptions | 이미지 캡셔닝, 객체 탐지 등 특정 태스크를 위한 데이터셋. |
⚪ torchvision.transforms: 학습에 있어서 필수 Data Augmentation
| 변환 종류 | 함수명 | 설명 |
|---|---|---|
| Tensor 변환 | ToTensor() | PIL Image 또는 NumPy ndarray를 FloatTensor로 변환하고, 픽셀 값을 [0., 1.] 범위로 스케일링함. |
| 크기 조절 | Resize(size), Scale(size) | 이미지의 크기를 size로 조절함. |
| 자르기(Cropping) | CenterCrop(size), RandomCrop(size), RandomResizedCrop(size), FiveCrop(size), TenCrop(size) | 중앙, 무작위, 무작위 크기 조절 후 자르기 등 다양한 방식으로 이미지를 잘라냄. |
| 뒤집기(Flipping) | RandomHorizontalFlip(p=0.5), RandomVerticalFlip(p=0.5) | 주어진 확률로 이미지를 수평 또는 수직으로 뒤집음. (데이터 증강에 주로 사용) |
| 색상 변환 | ColorJitter(brightness, contrast, saturation, hue),Grayscale(num_output_channels), RandomGrayscale(p=0.1) | 밝기, 대비, 채도, 색조를 무작위로 변경하거나 흑백으로 변환함. |
| 정규화 | Normalize(mean, std) | 텐서 이미지를 주어진 평균과 표준편차로 정규화함. T_norm = (T - mean) / std |
| 기타 변환 | RandomRotation(degrees), RandomAffine(degrees, translate, scale, shear), RandomPerspective(distortion_scale, p) | 회전, 아핀 변환, 원근 변환 등 기하학적 변환을 무작위로 적용함. |
| 변환 조합 | Compose(transforms) | 여러 변환(transform)들을 순서대로 실행하는 파이프라인을 생성함. |
| 타입 변환 | ToPILImage() | 텐서나 ndarray를 PIL Image로 변환함. |
| 패딩 | Pad(padding, fill, padding_mode) | 이미지의 가장자리에 패딩을 추가함. |
🟣 요약
torchvision은 그 자체의 개념보다 그 기능들의 리스팅이 중요한 것 같다.
딥러닝 연구를 위해서 3가지 편리한 기능을 제공해준다는 것을 알고 있자.
This post is licensed under CC BY 4.0 by the author.
