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) 이라고 까지 나오다니!!
두 사람의 결혼은 확실히 운명인가 보다 ..
'기계학습 > Tensorflow 실습' 카테고리의 다른 글
cifar-10 소개 및 tensorflow GPU 구동 공유기 (0) | 2017.01.19 |
---|---|
Ubuntu에 Nvidia 드라이버 설치 공유기 (0) | 2017.01.15 |
댓글