inception v3 fine-tuning 하기

2016. 12. 14. 15:54machine learning

구글이 만들어 놓은 모델(inception v3)에 내가 학습하려는 데이터를 추가해서 객체 인식을 해보기로 했다. 


아래의 링크를 참조해서 따라해보자.


https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/index.html?index=..%2F..%2Findex#0


나같은 경우에는 이미 tensorflow가 설치된 docker container가 존재한 상태였기 때문에 곧바로 4단계로 넘어갔다.


4단계에서는 이제 tensorflow docker 가 설치되어 있다는 가정하에, docker와 연결된 volume에 tf_files 디렉토리를 생성한다.


# mkdir tf_files


폴더 생성이 완료되었으면 아래의 curl 명령어를 통해 training 할 데이터를 가져온다.


# cd tf_files

# curl -O http://download.tensorflow.org/example_images/flower_photos.tgz

# tar xzf flower_photos.tgz 


이번에는 image를 retrain하기 위한 코드를 가져오자.


# git clone https://github.com/tensorflow/tensorflow.git


이제는 실제로 retrain을 해보자.


# python tensorflow/examples/image_retraining/retrain.py \

--bottleneck_dir=../bottlenecks \

--how_many_training_steps 500 \

--model_dir=../inception \

--output_graph=../retrained_graph.pb \

--output_labels=../retrained_labels.txt \

--image_dir ../flower_photos


위와 같이 실행 했는데 만약 다음과 같은 에러가 발생한다면, tensorflow를 업데이트 하자. (글쓴 기준으로 0.12가 최신임)


TypeError: run() got an unexpected keyword argument 'argv'




tensorflow 버전 확인 및 업데이트 하기


이제 retraining 된 모델을 사용해 보자.


curl을 이용해서 아래의 python 코드를 가져온다.


# curl -L https://goo.gl/tx3dqg > ../label_image.py


가져온 python 코드를 이용해서 이미지를 인식해 보자.


# python ../label_image.py ../flower_photos/daisy/21652746_cc379e0eea_m.jpg


해당 결과로 각 객체별 유사성(확율)이 나타날 것이다.


daisy (score = 0.99071)

sunflowers (score = 0.00595)

dandelion (score = 0.00252)

roses (score = 0.00049)

tulips (score = 0.00032) 


retraining을 할 때 따로 label을 기입 안해줘도 되는 게 폴더 명을 해당 image의 label이라고 인식하기 때문에 따로 명시를 안해줘도 된다.


만약 여기서 아기 사진을 추가로 훈련시키고 싶다면 해당 flower_photos 폴더 안에 baby 폴더를 만들고 아기 사진을 해당 폴더에 넣은 후 training을 시켜주면 된다.