본문 바로가기
OpenMMLab/MMCV

MMCV 이해하기: Data Transformation

by Lizardee 2024. 6. 21.

※ MMCV는 다음과 같은 기능을 한다:

  • Data Process
    • mmcv.image
    • mmcv.video
  • Visualization
    • mmcv.visualization
  • Data Transformation
    • mmcv.transforms
  • Various CNN Architectures
    • mmcv.cnn
  • High-quality Implementation of Common CUDA Ops
    • mmcv.ops

 


mmcv.transforms

데이터 변환(data transformation)은 머신러닝과 딥러닝 모델을 훈련시키기 위해 데이터를 준비하는 과정에서 매우 중요한 단계이다. 이 과정은 데이터를 로딩, 전처리, 증강 및 포맷팅하는 다양한 작업을 포함한다.

데이터 변환(data transformation)의 주요 목표는 데이터를 모델이 처리할 수 있는 형태로 변환하는 것이다.

 

▶ 데이터 변환 설계(Design of data transformation)

: MMCV에서는 호출 가능한 다양한 데이터 변환 클래스를 사용하여 데이터를 조작한다.

import numpy as np
from mmcv.transforms import Resize

# Resize 변환을 scale=(224, 224)로 설정
transform = Resize(scale=(224, 224))

# 임의의 이미지 데이터를 가진 사전 생성
data_dict = {'img': np.random.rand(256, 256, 3)}

# 변환 적용
data_dict = transform(data_dict)

# 변환 후 이미지 형태 출력
print(data_dict['img'].shape)  # 출력: (224, 224, 3)

 

▶ 데이터 파이프라인

: 데이터 파이프라인은 일련의 데이터 변환 작업을 연결하여 데이터를 순차적으로 처리하는 방법이다.

데이터셋의 각 샘플은 기본 정보가 포함된 사전 형식으로 저장되며, 이 사전은 파이프라인을 통해 여러 변환 작업을 거쳐 최종적으로 모델에 입력될 준비가 된 형태로 변환한다.

pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='Resize', size=256, keep_ratio=True),
    dict(type='CenterCrop', crop_size=224),
    dict(type='Normalize', mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375]),
    dict(type='ClsFormatBundle')
]

dataset = dict(
    ...
    pipeline=pipeline,
    ...
)

 

▶ 사용자 정의 데이터 변환 클래스

BaseTransform Base class for all transformations.

: 새로운 데이터 변환 클래스를 구현하려면 'BaseTransform'을 상속하고, 'transform' 메서드를 구현해야 한다.

 

▶ 주요 데이터 변환 클래스

  • 데이터 로딩: 파일 경로에서 이미지를 로드하거나, 주석(bbox 등)을 로드한다.
  • 데이터 전처리 및 증강: 이미지를 자르기, 패딩, 스케일링 등 다양한 방법으로 변환한다.
  • 데이터 포맷팅: 데이터를 torch.Tensor로 변환한다.

 

▶ 데이터 변환 래퍼

: 데이터 변환 래퍼는 데이터 사전의 필드를 매핑하거나, 여러 필드에 변환을 적용하는 등의 특별한 기능을 제공한다.

 

 

 

https://mmcv.readthedocs.io/en/latest/api/transforms.html

https://mmcv.readthedocs.io/en/latest/understand_mmcv/data_transform.html