본문 바로가기
Machine-Learning/CV (Computer Vision)

[CV] albumentations (Image Augmentation)

by AteN 2022. 8. 23.

albumentations

Albumentations는 Image Augmentations을 위한 python 라이브러리이다.

Image augmentation 은 딥러닝과 컴퓨터 비전에서 학습모델의 성능을 향상시키는 역할을 한다. Image augmentation의 목적은 현재의 데이터로부터 새로운 학습 샘플링을 만들기 위함이다.

albumentations 장점

1.      모든 컴퓨터 비전의 task  지원한다

        ex) classification, semantic segmentation, instance segmentation, object detection, and pose estimation.

2.      단순화된 통일된 API 공급

3.      70 이상의 서로 다른 Augmentation 포함

4.      Fast (논문에 따르면 torchvision이나 keras  보다 빠른 속도로 지원)

5.      Flexible (pytorch, tensorflow같은 대중적인 딥러닝 프레임 워크에 지원)

 

설치 및 사용 방법 

PyPI로 최신 버전을 설치 하며, 이때 최소 파이썬 버전을 요구하고 있다 

pip install -U albumentations

albumentations 는 opencv를 활용하는 방법과 pillow를 활용하는 방법을 제시하고 있다. opencv를 이용하는 방법은

import albumentations as A
import cv2

# Declare an augmentation pipeline
transform = A.Compose([
    A.RandomCrop(width=256, height=256),
    A.HorizontalFlip(p=0.5),
    A.RandomBrightnessContrast(p=0.2),
])

# Read an image with OpenCV and convert it to the RGB colorspace
image = cv2.imread("image.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Augment an image
transformed = transform(image=image)
transformed_image = transformed["image"]

opencv를 활용하는 방법뿐만 아니라 pillow 라이브러리를 사용할 수 있다.

from PIL import Image
import numpy as np

# Declare an augmentation pipeline
transform = A.Compose([
    A.RandomCrop(width=256, height=256),
    A.HorizontalFlip(p=0.5),
    A.RandomBrightnessContrast(p=0.2),
])

# Read an image with pillow
image = np.array(Image.open("image.jpg"))

# Augment an image
transformed = transform(image=image)
transformed_image = transformed["image"]

이처럼 활용 목적과 방법에 따라서 다양한 augmentation을 할 수 있으며, 해당 조건에 맞는 예시를 확인 할 수 있다.
자세한 사항은 https://albumentations.ai/docs/ 에서 확인할  있다. 

 

그럼 Augmentation는 어떻게 생성될까 ?

다음과 같이 Augmentation을 하게 된다면 Original에 해당되는 이미지를 A.RandomCrop을 height 및 Width의 조건에 따라서, 랜덤하게 Crop을 하게 된다. 다음으로는 50%의 확률을 통해서 A.HorizontalFlip을 진행하게 되고, Flip된 이미지를 다시 20:80의 확률로 Brightness 그리고 Contrast를 진행하게 된다. 

그림1

그럼 두개의 파라미터를 가지고 있는 augmentation은 어떻게 처리가 가능할 것인가?

transform = A.Compose([
    A.RandomBrightnessContrast(brightness_limit=1, contrast_limit=1, p=1.0),
])
transformed_image_1 = transform(image=image)['image']
transformed_image_2 = transform(image=image)['image']
transformed_image_3 = transform(image=image)['image']

그림2

그림1에서 참조하듯이 발생되는 조건과 확률 조건에 따라서 그림 2처럼 결과가 달라질 수 있다. 

 

참고 자료 및 출처

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

 

albumentations-team/albumentations

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

github.com

https://albumentations.ai/

 

Albumentations

Albumentations: fast and flexible image augmentations

albumentations.ai

논문 : Albumentations_Fast_and_Flexible_Image_Augmentatio

댓글