이미지 어그멘테이션

김유원·2021년 8월 2일
0

01. 이미지 어그멘테이션이란?

- 매개변수를 훈련할 충분한 학습 데이터를 확보하지 않으면 모델의 성능을 저해하는 과적합(overfitting) 문제가 발생할 수 있는데, 이를 해결하기 위한 매우 간단하면서 강력한 이미지 전처리 기법

📝 과적합(overfitting) : 훈련에 사용되는 이미지에 과도하게 학습되어 새로운 이미지를 제대로 인식하지 못하는 현상

02. 이미지 어그멘테이션의 방법과 목표

- 적은 양의 훈련 데이터를 이용하여 새로운 훈련 데이터를 확보하기 위해 이미지를 상하좌우로 뒤집거나 자르는 등의 방법으로 노이즈를 주어 새로운 이미지 데이터를 확보하여 현실 세계에서 존재할 법한 데이터를 생성함으로써 과적합 문제를 해결하고 좀 더 일반화된 모델을 얻고자 함.

03. 이미지 어그멘테이션의 활용

- 단백질 이미지 분류 대회(Protein Image Classification Challenge)는 현미경으로 촬영한 세포 내 단백질 형태를 인식하는 과제였음. 특정 클래스(범주)에 해당하는 이미지가 지나치게 적고, 의료용 스캐너 촬영 방식이나 세포 염색 방법이 제각기 달랐고, 세포핵을 찾는 문제인 데이터 사이언스 볼(Data Science Bowl) 2018에서도 마찬가지의 문제가 존재했음. 이에 어그먼테이션으로 실제로 존재할 법한 세포 사진을 다량 생산해 훈련해 좀 더 일반화된 모델을 얻을 수 있었음.

📄 이미지 어그멘테이션은 확실히 효과적임에도 불구하고 문제점이 있는데, 바로 데이터에 최적화된 어그멘테이션 방법론을 탐색하기가 힘들다는 데 있다. 현실과 너무 동떨어지거나 기존 특징을 왜곡할 수도 있는 기법은 오히려 학습 난이도와 성능에 좋지 않은 영향을 끼칠 수도 있다.

04. 이미지 어그멘테이션을 위한 데이터 전처리

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1.0/255., #ImageDataGenerator 클래스의 rescale 파라미터의 값을 1.0/255로 지정하여 모든 값을 255로 나눔
                                 rotation_range=40, #이미지를 임의로 회전시키는 각도를 40으로 지정
                                 width_shift_range=0.2, 
                                 height_shift_range=0.2, #이미지를 임의로 수직 또는 수평 방향으로 이동시키는 범위를 비율로 지정
                                 shear_range=0.2, #전단 변환(이미지를 어긋나 보이게 변환)
                                 zoom_range=0.2, #이미지를 임의로 확대하는 정도
                                 horizontal_flip=True, #이미지를 수평으로 뒤집음
                                 fill_mode='nearest') #회전 또는 이동 변환 후 빈 픽셀을 채움
test_datagen  = ImageDataGenerator(rescale = 1.0/255.)

이미지 어그멘테이션 사용 전과 후

✔ 훈련 데이터와 테스트 데이터에 대한 정확도, 손실 값이 일치하는 경향을 보이고, 과적합 (Overfitting) 현상이 두드러지게 감소
✔ 이미지 변환의 임의성 (Randomness)이 반영되어서 최종 정확도 (약 0.80)는 이미지 어그멘테이션을 사용하지 않은 경우의 훈련 데이터에 대한 정확도 (약 1.0)보다는 감소

✨이미지 어그멘테이션 기법을 적용하면 메모리 저장 공간을 차지하지 않고, 적은 수의 이미지 데이터로 매우 다양한 훈련 데이터를 사용하는 효과가 있음.
But, 훈련 과정에서 즉시 이미지 프로세싱이 이루어지기 때문에 훈련 시간이 증가

참고 사이트

🔗 https://www.kakaobrain.com/blog/64
🔗https://codetorial.net/tensorflow/image_augmentation.html
🔗https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=4u_olion&logNo=221437862590

profile
개발 공부 블로그

0개의 댓글

관련 채용 정보