Albumentations
최근 DACON 대회나 실습에서 Pytorch를 사용하고 있습니다. 여기서 부족한 image 데이터를 위해 image Augmentation 기법을 사용하여 image를 여러 형태로 변환하고 그것을 데이터에 추가하여 학습시키는 방법을 사용합니다.
주로 torchvision.transform를 사용하여 augmentation을 사용하지만, 더 다양하고 처리 속도가 빠른 Albumentations를 알게되어 사용하고자 정리하기 위해 작성합니다.
Homepage
GitHub
https://github.com/albumentations-team/albumentations
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()
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))
Blur
입력 이미지를 임의의 크기의 커널을 사용하여 흐리게 합니다.
# blur_limit(int, (int, int)) : 입력 이미지를 흐리게 하기 위한 최대 커널 크기, default=(3, 7)
Blur(always_apply=False, p=1.0, blur_limit=(3, 7))
CenterCrop
입력 이미지의 중앙부분을 자릅니다.
# height (int) : crop 높이
# width (int) : crop 너비
CenterCrop(always_apply=False, p=1.0, height=106, width=160)
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)
ChannelShuffle
입력 이미지의 RGB채널을 임의로 재정렬합니다.
ChannelShuffle(always_apply=False, p=1.0)
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)
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)
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)
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)
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)
Flip
입력 이미지를 수평, 수직 또는 수평 및 수직으로 뒤집습니다. 선택 불가
Flip(always_apply=False, p=1.0)
GaussNoise
입력 이미지에 가우시안 노이즈를 적용합니다.
# var_limit((float, float), or float) : 노이즈의 분산 범위
# mean(float) : 노이즈의 평균, default=0
GaussNoise(always_apply=False, p=1.0, var_limit=(10.0, 50.0))
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)
HorizontalFlip
Y축 중심으로 입력 이미지를 수평 뒤집기
HorizontalFlip(always_apply=False, p=1.0)
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))
'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 |