Albumentations

 

최근 DACON 대회나 실습에서 Pytorch를 사용하고 있습니다. 여기서 부족한 image 데이터를 위해 image Augmentation 기법을 사용하여 image를 여러 형태로 변환하고 그것을 데이터에 추가하여 학습시키는 방법을 사용합니다.

주로 torchvision.transform를 사용하여 augmentation을 사용하지만, 더 다양하고 처리 속도가 빠른 Albumentations를 알게되어 사용하고자 정리하기 위해 작성합니다. 

 

Homepage

https://albumentations.ai/

 

Albumentations

Albumentations: fast and flexible image augmentations

albumentations.ai


GitHub

https://github.com/albumentations-team/albumentations

 

GitHub - albumentations-team/albumentations: Fast image augmentation library and an easy-to-use wrapper around other libraries.

Fast image augmentation library and an easy-to-use wrapper around other libraries. Documentation: https://albumentations.ai/docs/ Paper about the library: https://www.mdpi.com/2078-2489/11/2/125 -...

github.com


Benchmarking


How to use ?

import albumentations as A
import matplotlib.pyplot as plt

image = plt.imread('sample.jpg')

transform = A.Compose([
    A.Resize(256, 256),
    A.HorizontalFlip(p=1),
])

transformed = transform(image=image)
transformed_image = transformed['image']

plt.imshow(transformed_image)
plt.xticks([]); plt.yticks([])
plt.show()Copy Icon

 

 

Origin

CLAHE (Contrast Limited Adaptive Histogram Equalization)

입력 이미지에 대비 제한 어댑티브 히스토그램 균등화를 적용합니다.

# clip_limit : 대조도 제한을 위한 상한 임계값, default=(1, 4)
# title_grid_size : 히스토그램 균등화를 위한 그리드 크기, default=(8, 8)
CLAHE(always_apply=False, p=1.0, clip_limit=(1, 4), tile_grid_size=(8, 8))Copy Icon

 

Blur

입력 이미지를 임의의 크기의 커널을 사용하여 흐리게 합니다.

# blur_limit(int, (int, int)) : 입력 이미지를 흐리게 하기 위한 최대 커널 크기, default=(3, 7)
Blur(always_apply=False, p=1.0, blur_limit=(3, 7))Copy Icon

CenterCrop

입력 이미지의 중앙부분을 자릅니다.

# height (int) : crop 높이
# width (int) : crop 너비
CenterCrop(always_apply=False, p=1.0, height=106, width=160)Copy Icon

ChannelDropout

입력 이미지의 채널을 임의로 Drop 합니다.

# channel_drop_range(int, int) : 드롭할 채널 수를 선택하는 범위
# fill_value(int, float) : 드롭된 채널의 픽셀 값
ChannelDropout(always_apply=False, p=1.0, channel_drop_range=(1, 1), fill_value=0)Copy Icon

ChannelShuffle

입력 이미지의 RGB채널을 임의로 재정렬합니다.

ChannelShuffle(always_apply=False, p=1.0)Copy Icon

CoarseDropout

입력 이미지에 검은색 직사각형 영역을 임의로 넣어줍니다.

# max_hole(int) : 0으로 설정할 최대 영역 수
# max_height(int) & min_height(int) : 직사각형 영역의 최대, 최소 높이
# max_width(int) & min_width(int) : 직사각형 영역의 최대, 최소 너비
# min_hole(int) : 0으로 설정할 최소 지역 수
CoarseDropout(always_apply=False, p=1.0, max_holes=8, max_height=8, max_width=8, min_holes=8, min_height=8, min_width=8)Copy Icon

 

Crop

입력 이미지의 영역을 자릅니다.

# x_min(int) : 최소 왼쪽 상단 x 좌표
# y_min(int) : 최소 왼쪽 상단 y 좌표
# x_max(int) : 최대 오른쪽 하단 x 좌표
# y_max(int) : 최대 오른쪽 하단 y 좌표
Crop(always_apply=False, p=1.0, x_min=0, y_min=0, x_max=160, y_max=106)Copy Icon

Cutout

= CoarseDropout

Downscale

Downscaling & Upscaling Back 으로 입력 이미지의 품질을 낮춥니다.

# scale_min(float) : 이미지 스케일의 하한
# scale_max(float) : 이미지 스케일의 상한
# interpolation : 이미지 보간법, defalut=cv2.INTER_NEAREST
Downscale(always_apply=False, p=1.0, scale_min=0.25, scale_max=0.25, interpolation=0)Copy Icon

ElasticTransform

이미지의 탄력적인 변형

# alpha(float) : 
# sigma(float) : 가우스 필터의 매개변수
# alpha_affine(float) : range(-alpha_affine, alpha_affine)
# interpolation
#		: cv2.INTER_NEARBY, cv2.INTER_LINALINE, cv2.INTER_LINEAR(defalut),
#		: cv2.INTER_CUBIC, cv2.INTER_AREA, cv2.INTER_LANCZOS4
# border_mode : pixel extrapolation 방법을 지정하는데 사용되는 플래그
# value : border_mode가 cv2인 경우 패딩값
# mask_value(int, float, list of ints, list of floats)
#		: border_mode가 cv2인 경우 패딩값, 마스크에 BORDER_CONSTANT가 적용
# approximate(bool) : 고정된 커널 크기로 변위 맵을 매끄럽게 할지의 여부
ElasticTransform(always_apply=False, p=1.0, alpha=1.0, sigma=50.0, alpha_affine=50.0, interpolation=0, border_mode=0, value=(0, 0, 0), mask_value=None, approximate=False)Copy Icon

Equalize

입력 이미지의 히스트그램 평탄화

# mode(str) : OpenCV 또는 Fellow Equalization 방법
# by_build(bool) : True이면 채널별 균등화 별도로
# mask(np.ndarray, callable) : 선택된 픽셀만 마스크 분석에 포함
# mask_params(list of str) : 마스크 기능에 대한 매개변수
Equalize(always_apply=False, p=1.0, mode='cv', by_channels=True)Copy Icon

Flip

입력 이미지를 수평, 수직 또는 수평 및 수직으로 뒤집습니다. 선택 불가

Flip(always_apply=False, p=1.0)Copy Icon

GaussNoise

입력 이미지에 가우시안 노이즈를 적용합니다.

# var_limit((float, float), or float) : 노이즈의 분산 범위
# mean(float) : 노이즈의 평균, default=0
GaussNoise(always_apply=False, p=1.0, var_limit=(10.0, 50.0))Copy Icon

GridDistortion

# num_steps(int) : 각 면에 있는 그리드 셀의 수
# distort_limit(float, (float, float)) : distort_limit가 단일 float인 경우 범위, default=(-0.03, 0.03)
# interpolation : 보간법
# border_mode : pixel extrapolation 방법을 지정하는데 사용되는 플래그
# value : border_mode가 cv2인 경우 패딩값
# mask_value(int, float, list of ints, list of floats)
#		: border_mode가 cv2인 경우 패딩값, 마스크에 BORDER_CONSTANT가 적용
GridDistortion(always_apply=False, p=1.0, num_steps=5, distort_limit=(-0.3, 0.3), interpolation=0, border_mode=0, value=(0, 0, 0), mask_value=None)Copy Icon

HorizontalFlip

Y축 중심으로 입력 이미지를 수평 뒤집기

HorizontalFlip(always_apply=False, p=1.0)Copy Icon

HueSaturationValue

입력 이미지의 색상, 채도 및 값을 임의로 변경

# hue_shift_limit((int, int) or int) : 색상 변경을 위한 범위, default=(-20, 20)
# sat_shift_limit((int, int) or int) : 포화도 변경을 위한 범위, default(-30, 30)
# val_shift_limit((int, int) or int) : 값을 변경할 수 있는 범위, default(-20, 20)
HueSaturationValue(always_apply=False, p=1.0, hue_shift_limit=(-20, 20), sat_shift_limit=(-30, 30), val_shift_limit=(-20, 20))Copy Icon

 

'ML & DL > Deep Learning' 카테고리의 다른 글

WBF, Ensemble for Object Detection 정리  (0) 2023.05.19
NMS, Soft-NMS 정리 및 구현  (0) 2023.05.19
Mixup 정리 및 구현  (0) 2023.04.27
CNN Architectures  (0) 2023.03.28
1 x 1 Convolution ?  (0) 2023.03.22
욱근욱