2016. 12. 14. 15:54ㆍmachine learning
구글이 만들어 놓은 모델(inception v3)에 내가 학습하려는 데이터를 추가해서 객체 인식을 해보기로 했다.
아래의 링크를 참조해서 따라해보자.
나같은 경우에는 이미 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'
이제 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을 시켜주면 된다.