본문 바로가기

AI/TensorFlow 학습

12. TensorFlow 2.x - Image Data Augmentation 소개

참조: https://youtu.be/RuZ7SI-Yfec?si=-UtPWHupcOi5FuFw

 

이번 글에서는 이미지 데이터 어그멘테이션에 대해서 설명한다. 

Image Data Augmentation은 하나의 이미지를 약간 변형하여 학습용 데이터의 개수를 늘려 모델이 더 많은 데이터를 학습할 수 있도록 하는 것이다. 따라서 학습에 사용할 이미지 수가 적을 수록 효과적이다.

 

위에서 보듯이 Keras에서는 이를 위한 함수들을 아래와 같이 제공하고 있다. 

 

위 함수들에서 고려할 사항은, image를 그대로 사용하지 못하고 array로 변형해야 한다는 것이다.

코드로 확인해 보자.

 

 

위에서 언급한 것처럼 jpg 이미지를 불러온 뒤에 array로 변환하고 정규화까지 끝내고 사용하도록 한다.

원본이미지는 첨부한다.

TF_2.x_LEC_16_Example_Data.zip
1.58MB

 

이 이미지를 flow()를 통해서 변형을 해보자.

next()를 할때마다 batch_siz 만큼의 이미지가 생성된다.

(예전에는 data_gen.next()라고 써야 했지만, version이 올라가면서 next(data_gen)으로 문법이 변경되었다.)

위의 원본 이미지와는 회전되거나 반전되는 등 약간 달라진 것을 알수 있다. 

 

하나 더 만들어보면 아래와 같다.

 

이번에는 flow_from_directory()를 이용해 보자.

 

위에서 첨부한 파일을 작업폴더에 압축해제하면 'test_dir'를 생성하고 그 하위에 폴더들이 있다.

flow_from_directory()는 주어진 dir에서 이미지들을 찾아낸다.

마찬가지로 원본이미지에서 약간의 변형이 일어난 것을 알 수 있다.

사진 위에 있는 숫자는 몇번째 dir를 나타내는 것으로 cat: 0, deer: 1, dog: 2 가 된다.

 

 

이런 방법을 사용하여 더 많은 데이터를 확보할 수 있다는 것을 알았다.

다음 글에서는 이를 앞에서 진행했던 cifar10 예제에 적용해서 모델의 성능이 개선되는지 테스트 해보도록 하자.