Python/Vision Code

파이썬 이미지 데이터 증강 모듈 : imgaug

jimmy_AI 2022. 8. 2. 20:50
반응형

Python image data augmentation library imgaug

여러 종류의 이미지 데이터 augmentation을 쉽고 편리하게 수행할 수 있는

imgaug 라이브러리에 대한 소개 및 간단한 예제 코드를 살펴보도록 하겠습니다.

 

 

imgaug 모듈이란?

출처 : imgaug github 페이지

imgaug 라이브러리에서는 상당히 다양한 종류의 image data augmentation

디테일한 옵션을 지정할 수 있게하여 수행해주며,

여러 종류의 데이터 증강 기법을 한 이미지 내에 중첩하여 적용하는 과정마저도

직관적이고 손쉽게 진행할 수 있게 도와줍니다.

 

공식 github 페이지에 상세한 사용법과 예제들이 자세히 안내되어 있는데

해당 페이지의 링크는 아래와 같습니다.

 

GitHub - aleju/imgaug: Image augmentation for machine learning experiments.

Image augmentation for machine learning experiments. - GitHub - aleju/imgaug: Image augmentation for machine learning experiments.

github.com

 

참고로, 라이브러리 설치 과정은 매우 간단한데 conda를 이용한 설치도 가능하지만

pip을 이용한 설치를 한다면 !pip install imgaug 명령어만으로 쉽게 가능합니다.

 

 

imgaug 기본 예제

실제로 imgaug로 이미지 데이터 증강을 진행하는 아주 간단한 예시를

살펴보도록 하겠습니다.

 

먼저, 원하는 이미지를 업로드해준 뒤, 아래와 같이 코드 상에서 확인해보겠습니다.

(참고로, 해당 포스팅에 사용된 이미지들은 모두 pixabay에서 다운받아 가져왔습니다.)

import imageio
import imgaug as ia
%matplotlib inline

image = imageio.imread("cat_image.jpg") # 디렉토리 유의
ia.imshow(image)

 

data augmentation 예시로 Cutout을 적용해보도록 하겠습니다.

여러 가지 종류의 인자를 설정할 수 있지만,

여기서는 개수와 size 인자만을 설정해보았습니다.

(seed 설정을 안했으므로 코드 실행 시마다 다른 위치에 Cutout이 적용된 결과가 나타납니다.)

import imgaug.augmenters as iaa

aug = iaa.Cutout(nb_iterations=2, size = 0.3) # 개수 2개, 사이즈 0.3
image_aug = aug(image = image) # 인자 이름을 image로 설정(단일 이미지 적용)

ia.imshow(image_aug)

 

반응형

 

imgaug 심화 예제1 : 여러 종류의 증강 기법 중첩

한 종류의 증강이 적용된 이미지에 다른 종류의 증강을 이어서 적용하는 원리로

여러 증강 기법이 중첩된 이미지를 생성하는 것도 가능합니다.

 

예시로 Dropout 적용 후 GaussianBlur를 연이어 적용한 증강 데이터를 얻는

코드 및 결과는 다음과 같습니다.

def my_aug(image):
    aug1 = iaa.Dropout(p=0.05) # 첫 번째 증강 기법 : Dropout
    aug2 = iaa.GaussianBlur(sigma=0.8) # 두 번째 증강 기법 : GaussianBlur
    first_aug = aug1(image = image) # Dropout 적용
    return aug2(image = first_aug) # GaussianBlur 적용 후 결과 반환

image_aug = my_aug(image = image) # 인자 이름을 image로 설정(단일 이미지 적용)

ia.imshow(image_aug)

 

imgaug 심화 예제2 : 여러 이미지로 구성된 배치에 적용

여러 개의 이미지로 구성된 batch에 대하여 동시에 같은 종류의 augmentation을

적용하는 것도 imgaug에서 편리하게 수행할 수 있습니다.

 

두 개의 이미지로 구성된 batch를 생성하고, Cutout을 적용하는 예시는 아래와 같습니다.

(여기서는 이미지마다 1~5개 중 임의 개수로 Cutout이 수행되도록 해보았습니다.)

 

참고로, batch 단위로 적용 시 augmentation 과정에서 image 인자가 아니라 images 인자

input을 지정해주셔야 함에 유의해주세요.

import numpy as np

image1 = imageio.imread("cat_image.jpg")
image2 = imageio.imread("dog_image.jpg")

image_batch = [image1, image2] # 리스트 등 자료형으로 이미지 여러개 묶기

aug = iaa.Cutout(nb_iterations=(1, 5), size = 0.2, fill_mode = 'gaussian') # 1~5개 중 랜덤
image_aug = aug(images = image_batch) # image 인자가 아니라 images 인자 임에 유의
ia.imshow(np.hstack(image_aug)) # np.hstack 함수 적용 시 수평 방향으로 이미지들 출력