본문 바로가기
archive.tar

[TensorFlow] Inception - Resnet V2 를 사용한 image retraining

by 냉동만두 2017. 3. 17.

개요


대표적인 이미지학습 예제인 플라워데이터를 inception resnet v2를 사용하여 실습 !

기본적인 이론 내용은

 https://research.googleblog.com/2016/08/improving-inception-and-image.html 

tensorflow 1.0.1 환경에서 실습 !



준비 : TensorFlow - Slim 환경 준비


tensorflow - slim ?

이미지 분류에 특화된 고수준의 텐서플로우 API이다. 저조한 영어실력이라 간단하게 설명......

텐서플로우 소스도 필요하지만 이번 작업은 slim의 소스들이 필요하다

slim 소스 저장

https://github.com/tensorflow/models.git

작업 공간에 압축을 풀면 많은 파일이 나오는데 ' slim ' 이라는 폴더가 있어야 한다.

앞으로 작업은 그 폴더를 중심으로 한다.

스크립트를 실행 할 폴더는 'slim' 안에서 실행 한다



준비 : Inception-ResNet-V2 파일 다운로드


학습에 사용할 모델 파일을 다운로드 하여 작업 공간에 압축을 풀어 놓는다

http://download.tensorflow.org/models/inception_resnet_v2_2016_08_30.tar.gz

압축 해제 후 inception_resnet_v2_2016_08_30.ckpt 파일을 확인



준비 : 작업 공간 만들기


앞으로 사용할 작업 공간을 만들고 시작하는게 편하다. 작업할 폴더를 먼저 만들고 tfrecord, train, eval 3개의 폴더를 만든다.

tfrecord : 학습과 평가에 사용될 flowers 데이터가 저장됨

train : 학습 후 결과 저장됨

eval : 평가 후 결과 저장



준비 : Flowers 데이터셋 준비


학습에 사용할 Flowers 데이터를 준비한다. 다운로드 받은 데이터는 학습에 용이하도록 tfrecord로 변환된 파일이다

python download_and_convert_data.py \

    --dataset_name=flowers \

    --dataset_dir=$HOME/work/flowers/tfrecord

dataset_name : 데이터셋의 이름

dataset_name : 데이터셋의 저장 경로. 위에서 만든 작업공간 폴더

스크립트를 실행 후 폴더를 확인해보면 flowers_train_00000-of-00005.tfrecord 이런 파일과 labels.txt 파일을 확인한다



학습 : inception-resnet-v2 플라워데이터 모델 만들기


inceptin-resnet-v2 로 플라워데이터 모델을 만들어 본다.

python train_image_classifier.py \

    --train_dir=/home/hwang/work/flowers/train \

    --dataset_name=flowers \

    --dataset_split_name=train \

    --dataset_dir=/home/hwang/work/flowers/tfrecord \

    --max_number_of_steps=1000 \

    --batch_size=20 \

    --model_name=inception_resnet_v2

   --train_dir : 학습 결과 저장 경로

    --dataset_name : 데이터셋 이름

    --dataset_split_name : 데이터셋 나누는 이름 학습에는 train 학습 데이터를 사용

    --dataset_dir : 데이터셋이 저장된 경로

    --max_number_of_steps : 학습할 step 수

    --batch_size : 학습할 때 배치 사이즈

    --model_name : 사용할 학습 모델 이름

배치 사이즈가 애매하다... GTX960 2GB를 사용하는데 저정도 수치로 학습에 성공했다. 자신 사이즈에 맞게 조절해야 한다.

비디오 메모리가 클수록 수치를 크게하면 된다. 경로오류가 아닌 무언가 다른 오류가 난다면 배치사이즈 조절이 필수.

그에 따라 step 도 조절하면 합의점 나오겠지? 그 다음 몇분에서 몇시간 기다린다.

시간이 지난 후 train_dir 에서 설정한 폴더를 가보면 학습 결과들이 저장되어 있다.

tensorboard의 경로를 train_dir로 설정 후 확인하면 각종 수치와 훈련 결과를 볼 수 있다.



학습 : 미리 훈련된 모델에 플라워데이터를 미세조정 학습 시키기


imageNet 데이터로 훈련된 모델을 바탕으로 플라워데이터 미세조정 학습 해보기

python train_image_classifier.py \

    --train_dir=/home/hwang/work/flowers/train \

    --dataset_dir=/home/hwang/work/flowers/tfrecord \

    --dataset_name=flowers \

    --dataset_split_name=train \

    --max_number_of_steps=15000 \

    --batch_size=35 \

    --model_name=inception_resnet_v2 \

    --checkpoint_path=/home/hwang/work/inception_resnet_v2/inception_resnet_v2_2016_08_30.ckpt \

    --checkpoint_exclude_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits \

    --trainable_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits

--checkpoint_path= 미리 훈련된 모델 파일 경로 지정

--checkpoint_exclude_scopes = 설명은 나중에,,,, 미세조정시 미리 학습된 최종 레이어를 제외 해야 하는데 그에 사용되는 플래그.......

--trainable_scopes= 위에서 제외시킨 레이어 하단에 교육 시킬것 이므로 어떤 기준 레이어 지정 위와 동일



평가 : 정확도 평가


학습이 잘 되었는지 평가해보기. 위에서 받았던 데이터는 train 데이터와 validation으로 되어있다. 학습데이터와 평가데이터가 그것임.

그 데이터를 사용하여 학습 모델에 이미지 추론 후 결과를 출력

python /home/hwang/models/slim/eval_image_classifier.py \

    --alsologtostderr \

    --checkpoint_path=/home/hwang/work/flowers/train/model.ckpt-100000 \

    --dataset_dir=/home/hwang/work/flowers/tfrecord \

    --eval_dir=/home/hwang/work/flowers/eval \

    --dataset_name=flowers\

    --dataset_split_name=validation \

    --model_name=inception_resnet_v2


--checkpoint_path = 위에서 훈련 파일이 저장된 경로

--dataset_dir = 평가할 데이터가 있는 경로 위에서 다운받은 플라워 데이터

--eval_dir= 평가 후 결과 파일이 저장될 경로

--dataset_name= 데이터셋 이름

--dataset_split_name= 평가에 사용될 데이터를 나누는 이름

 --model_name= 모델 이름

평가가 완료되면 대략적인 수치가 나온다. 

tensorboard에서 eval_dir를 지정 후 실행하면 평가 결과 수치를 확인 가능하다



참고 : https://github.com/tensorflow/models/tree/master/slim