이번에는 내가 원하는 카테고리로 이미지를 학습하여 분류하는 작업을 진행해본다.
이것도 굳이 코딩을 하지 않더라도 텐서 플로우에서 이미 잘 제공해주고 있어서
해당 스크립트를 사용할 예정이다.
과거 버전에는 해당 스크립트가 tensorflow 저장소에 있었는데 1.7 버전부터 자주 쓰이는 모델들을 쉽게 재활용하기 위해서 텐서플로우 hub라는 것이 추가되었다.
지난 시간에는 고양이 사진을 넣으면 각 고양이 종류를 분류해줬는데 이번에는 가볍게
개 와 고양이 사진을 분류해주는 시스템을 만들어 보겠다.
우선 데이터는 지난 시간에 소개한 캐글에서 쉽게 구할 수 있다.
https://www.kaggle.com/tongpython/cat-and-dog
(캐글을 사용하는 방법은 자세한 방법은 차후 별도 주제로 다루게 된다)
우선 training_set을 이용해 학습해본다.
해당 폴더를 열어보면 cats, dogs 이런 폴더가 있다.
이게 바로 카테고리가 된다.
만약 토끼를 카테고리화 하고 싶다면 rabbits를 추가해서 토끼 사진을 넣어주면 된다.
이제 학습을 해보겠다.
https://github.com/tensorflow/hub/tree/master/examples/image_retraining
해당 코드를 클론 받아서 다음과 같이 실행해준다. ( 기본적으로 tensorflow_hub 는 설치되어있어야 한다 )
--image_dir 이 학습 폴더의 경로이다.
실제로 고양이나 개 이미지를 가지고 한번 실험해보자
학습한 결과는 어떻게 실험할 수 있을까?
이번에도 별다른 코드 작성 없이 분류해보겠다.
https://github.com/tensorflow/tensorflow
텐서플로우 메인 저장소에 label_image (https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/label_image) 를 사용하면 쉽게 분류할 수 있다.
python label_image.py \
--graph=/tmp/output_graph.pb \
--labels=/tmp/output_labels.txt \
--input_layer=Placeholder \
--output_layer=final_result\
--image=/test_set/cats/cat.4974.jpg
실행하고 나면 최종 결과는 다음과 같이 나온다.
cats 0.99984133
dogs 0.00015858357
고양이 확률이 99.98% 로 잘 분류했다.
일하다 보면 bottleneck 이 만들어지는데 해당 파일은 CNN의 마지막 레이어 파일로 빠르게 재학습 하기 위해 만들어진다.