inception v3 모델 사용하기

2017. 2. 22. 11:48machine learning

이전 포스팅에서 inception v3 모델을 fine-tuning 해서 정답 label을 변경했다면, 이번에는 구글이 학습한 기존의 모델 그대로 사용하는 방법을 살펴보자.


학습한 모델의 대상 데이터는 imagenet에 있는 이미지 데이터들이며, 학습한 모델에는 대략 1000개의 class가 구성되어 있다.


우선 모델을 사용하기 위해서는 모델을 다운받아야 하는데 아래의 url을 통해 모델을 다운받자.


http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz


압축을 풀면 아래의 파일들이 존재한다.


- classify_image_graph_def.pb : 모델의 graph 파일

- imagenet_synset_to_human_label_map.txt : imagenet_synset 데이터를 사람이 읽을 수 있는 label로 매핑되어 있는 파일

- imagenet_2012_challenge_label_map_proto.pbtxt : imagenet_synset 파일


대략적인 흐름은 인식하고자 하는 이미지를 입력으로 집어 넣고 다운받은 모델을 이용해서 해당 이미지를 인식한 후, 인식된 nodeID를 사람이 읽을 수 있는 label로 변환한 후 리턴한다.

아래의 코드가 위의 방식을 자세히 설명한다.



code reference




프로그램을 실행하려면 추론하려는 이미지의 경로를 매개변수로 넣어줘야 한다.


$> python inception.py ../data/flower.jpg


run_inference_on_image에서는 create_graph()를 통해 classify_image_graph_def.pb 파일을 읽어서 tensorflow의 모델 그래프로 변환한다. 

create_graph()가 끝나면 prediction을 실행하는데 prediction 결과가 node_id로 주어지기 때문에 이를 사람이 읽을 수 있는 형태의 label로 변환을 한다. 이 부분을 NodeLookup() class에서 실행한다.


아래의 그림은 위의 코드를 Django rest framework에 붙인 후 실행한 결과이다.