본문 바로가기
기계학습/Tensorflow 실습

Tensorflow를 이용한 이미지 인식 공유 (ImageNet 소개) :: Data 쿡북

by 쿡북 2017. 1. 19.

2017년 1월 19일


오늘은 Tensorflow에 포함되어 있는 이미지 인식관련 예제를 맛보기로 돌려본 결과를 공유한다.


사실 사진에 대한 이미지 인식에 대해서는 컴퓨터 비전 프로젝트로 잘 알려진 ImageNet (http://image-net.org/) 에서 많이 연구되어 왔다. 


그러나 그 자료들이 그렇게 많이 공개된 것은 아닌데, 구글은 Tensorflow 에 Inception-v3를 활용하는 코드를 같이 내장시켜 놔서


이 덕분에 우리는 쉽게 이미지 인식 결과를 테스트 해 볼 수 있다. 



참고로 Inception-v3는 ImageNet의 Large Visual Recognition Challenge에서 2012년 데이터를 사용하여 학습된 모델이다.


분류는 1000 개의 클래스로 되어 있으며 자세한 것은 다음을 참조해도 좋다


http://image-net.org/challenges/LSVRC/2014/browse-synsets


참고로 2016년의  Imagenet 결과도 공유가 되었는데 자세한 것은 아래 텐서플로우 코리아의 기재 내용을 확인해도 좋을듯 싶다.


https://tensorflow.blog/2016/09/27/imagenet-ilsvrc-2016-results-out/





그럼 이제 Tensorflow의 Github 소스를 받아 테스트를 해보자




필자는 먼저 tensorflow github 에서 0.12 버전의 소스를 로컬로 받아 왔다.


git clone -b r.0.12 https://github.com/tensorflow/tensorflow.git



소스를 내려 받으면 받은 소스의 경로를 기준으로  tensorflow/tensorflow/models/image/imagenet  경로를 찾아가면 classify_image.py 파일이 보인다.


실제 vi 에디터로 classify_image.py 파일을 열어보면 소스가 보이는데 활용 법에 대해서도 최 상단에 명시되어 있다. 


다음 명령어를 실행 시키면 imagenet 구동을 위한 모델을 다운 받는데 대략 200MB정도 된다. 


> cd tensorflow/tensorflow/models/image/imagenet

> python classify_image.py


W tensorflow/core/framework/op_def_util.cc:332] Op BatchNormWithGlobalNormalization is deprecated. It will cease to work in GraphDef version 9. Use tf.nn.batch_normalization().

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.88493)

indri, indris, Indri indri, Indri brevicaudatus (score = 0.00878)

lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00317)

custard apple (score = 0.00149)

earthstar (score = 0.00127)


실행을 시키면 다음의 판다에 대한 인식 결과를 보여준다.  결과는 위에 giant panda 부터 panda 에 대한 인식을 88% 까지 한 것을 볼 수 있다.





실제 다른 사진들도 넣어서 테스트를 해보겠다.


테스트 하는 방법은 간단하다 그저 명령어 뒤쪽에 --image_file 옵션만 추가하고 사진 파일 경로만 넣어주면 된다.


python classify_image.py --image_file ~/myTemp/imagenet1.jpg



필자는 구글에서 자전거, 딸기, 자동차와 함께 특별히 오늘 결혼한 김태희와 비의 사진을 구해 인식 시켜보았다.


각각의 결과는 다음과 같다.





 



tricycle, trike, velocipede (score = 0.51071)

moped (score = 0.21752)

bicycle-built-for-two, tandem bicycle, tandem (score = 0.05976)

mountain bike, all-terrain bike, off-roader (score = 0.03872)

disk brake, disc brake (score = 0.00408)
















strawberry (score = 0.98787)

banana (score = 0.00111)

tray (score = 0.00038)

German shepherd, German shepherd dog, German police dog, alsatian (score = 0.00037)

ringneck snake, ring-necked snake, ring snake (score = 0.00035)












sports car, sport car (score = 0.85467)

convertible (score = 0.03586)

grille, radiator grille (score = 0.00943)

racer, race car, racing car (score = 0.00916)

car wheel (score = 0.00684)










maillot (score = 0.10592)

wig (score = 0.09210)

gown (score = 0.07838)

brassiere, bra, bandeau (score = 0.05755)

hoopskirt, crinoline (score = 0.05658)













Windsor tie (score = 0.50563)

suit, suit of clothes (score = 0.43272)

groom, bridegroom (score = 0.00358)

Loafer (score = 0.00158)

bow tie, bow-tie, bowtie (score = 0.00086)















물론 사진의 배경이 상당히 깔끔해서 그런 것도 있겠지만 결과가 생각보다 잘 나온 것을 확인할 수 있다.


특히 김태희와 비의 사진의 경우 인물을 인식 했다기 보다 착용한 옷이나 악세서리에 집중해서 나온 것을 알 수 있다.  놀라운 것은 비에는 신랑(groom) 이라고 까지 나오다니!! 


두 사람의 결혼은 확실히 운명인가 보다 .. 

댓글