개요 - Keras Image Data Generator 사용 하기
Inception-v3, Resnet, VGG ,..... 을 이용하여 이미지 학습을 할 때, 많은 수의 이미지가 필요하다. 인터넷에 있는 데이터셋 (ImageNet, Flowers 데이터)을 활용 하면 되지만 자신의 이미지를 학습할 때는 이미지 데이터셋이 많이 부족하다. Tensorflow 또는 Keras 문서를 읽어보면 부족한 데이터는 이미지의 변형을 주어서 이미지의 수를 늘리라고 한다.
처음에는 XnConvert 등 이미지 일괄처리 프로그램을 사용 했지만, 이미지에 한번 변형을 줄 때마다 직접 설정을 하고 실행하기 때문에 귀찮다. 그리고 만들 수 있는 변형 이미지도 제한적일 수 밖에 없다. 그래서 Keras 에서 제공하는 이미지 전처리 기능중에 ' ImageDataGenerator '를 사용해서 스크립트를 만들었다. (멀티 프로세스를 사용한다) (멀티 코어 지원 !!)
간단한 환경 변수 세팅을 하고 실행하면 정해진 원본 데이터를 읽어 새로운 증가된 데이터세트를 만들어 준다.
이미지 변형 내용은 Keras Doc 참고 ! https://keras.io/preprocessing/image/
자동차를 구분하는 모델을 만들어 비교 했는데,
처음은 단순한 원본 데이터셋 학습(레이블당 90~100개), 두번째는 스크립트를 활용하여 증가된 데이터셋(레이블 1000장)
미리 훈련된 Inception - v3 모델을 이용하여 Transfer Learning 스크립트로 학습 시켰다
학습 스크립트 주소 : https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py
데이터셋 늘리기
원본 데이터 세트는 3가지 종류의 이미지(3 labels)를 가지고 있다.
새로운 이미지를 생성하는 프로세스가 코어 갯수 만큼 생성되어 작동한다.
처음 만들때는 단순히 1코어만 사용했는데 ,,,, 뿌듯하다 ㅎㅎ
이 작업을 GPU가 하면 정말 좋겠지만,,, 지금은 능력 밖이다,,, ㅜㅜ
GPU를 사용하려면 tensorflw로 스크립트를 만들어야 할 것 같다
$ python keras_image_gen_4.py |
<스크립트 실행 터미널 (3개의 이미지 폴더를 찾고 각 코어별 프로세스가 실행되어 작동한다 )>
<멀티코어 활용 모습 (3개의 레이블 동시 작업)>
비교 결과
모델 1과 모델 2 공정한 비교는 아니지만 학습 데이터의 영향이 아주 크다.
예상대로 모델 2(증가된 학습 데이터)이 좋은 성능을 낸다.
학습에 사용한 대표 사진 : avante , ioniq , spark
비교 : 모델 1
label(class) : 3 (avante, ioniq, spark)
images : 278
step : 5560
batch : 50
epoch : 1000
2017-04-14 00:22:22.933371: Step 5559: Train accuracy = 100.0% |
<학습 결과>
$ python label_image.py ioinq.jpg $ python label_image.py avante.jpg |
<추론 결과 실패 >
Avante AD , Ioniq 구분하지 못한다. 현대의 패밀리룩 덕분에 비슷하게 생겼다. spark는 잘 구분한다
비교 : 모델 2 (데이터셋 증가)
label(class) : 3 (avante, ioniq, spark)
images : 3000
step : 30000
batch : 100
epoch : 100
2017-04-14 01:01:13.647142: Step 2999: Train accuracy = 97.0% |
<학습 결과>
$ python label_image.py avante.jpg avante (score = 0.77520) $ python label_image.py ioinq.jpg |
<추론 결과 성공 >
모델 1보다 epoch는 줄었지만 학습 데이터가 10배 넘게 많아 결과가 비교적 좋음.
ioniq과 avante 대부분 구분한다. sqark 역시 잘 구분하지.
* 다음엔 스크립트에 대하여....
'archive.tar' 카테고리의 다른 글
[TensorFlow] Inception v3 모델 를 이용하여 Android 에서 이미지 분류 해보기 (0) | 2017.05.15 |
---|---|
[Keras] Image Data Generator 이미지 갯수 늘리기 (16) | 2017.04.16 |
[TensorFlow] 모델 체크포인트 변환 .ckpt to .pb (inception-resnet-v2) (9) | 2017.03.21 |
[TensorFlow] Inception - Resnet V2 를 사용한 image retraining (10) | 2017.03.17 |
[TensorFlow] inception resnet v2 모델을 사용하여 이미지 추론하기 (2) | 2017.02.08 |