작년에 이어 올 해에도 운이 좋게 구글 핵페어 2016에 참가하였었는데, 이 때 개발한 앱에 TensorFlow 를 접목하였기 때문에 기록하려고 합니다.
앱을 실행하고 전면 카메라에 사람이 보이면 인사를 하고, 얼굴 위치를 눈이 트래킹 하며 방향에 따라 움직입니다.
사람이 웃으면 앱도 웃고, 사람이 안 웃으면 앱도 무표정이 됩니다.
여기까지 작년 핵페어 참가 내용이었고, 올 해 버전은 여기에 업그레이드되서 텐서플로우를 이용하여 남여 성별 분석을 추가하였습니다.
텐서플로우로 학습시킨 데이터를 검증하는 것 까지의 경험을 공유합니다.
https://www.youtube.com/watch?v=HNaKBJfR1rI
머신러닝을 할 수 있는 구글에서 공개한 오픈소스 라이브러리 입니다. https://www.tensorflow.org/
알파고처럼 학습을 시킬 수 있습니다.
일단 TensorFlow 저장소에서 소스를 가져옵니다.
git clone --recurse-submodules https://github.com/tensorflow/tensorflow/
cd tensorflow
python 환경이 이미 되어 있다는 전제로 환경 설정을 합니다.
numpy 등이 요구 됩니다. 요구되는 것들은 모두 설치 해 주세요.
빌드를 위해 bazel 도 설치 해야 됩니다.
./configure
Please specify the location of python.
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with GPU support? [y/N] N
bazel build -c opt --copt=-mavx tensorflow/examples/image_retraining:retrain
학습을 시키기 위해 오리지널 이미지는 다음과 같은 구조로 정리합니다.
-original_images
-label0
0da3da.jpg
...
-label1
0fdf8f.jpg
...
-label2
02dfgd.jpg
...
original_images 디렉토리를 tensorflow/examples 에 두고 빌드 스타트
bazel-bin/tensorflow/examples/image_retraining/retrain --image_dir tensorflow/examples/original_images
상당 시간 후에 빌드가 완료 됩니다. 제 맥북 13인치 (i5) 에서는 약 15분 정도의 시간이 걸렸었던 것 같습니다. i7에서는 딱 3배 빨랐습니다.
끝나면, /tmp/output_graph.pb 모델이 생성되고, 대응하는 라벨 리스트가 /tmp/output_labels.txt 로 생성됩니다.
다음을 실행하여 모델이 잘 학습되었는지 검증 할 수 있습니다.
bazel build tensorflow/examples/label_image:label_imagebazel-bin/tensorflow/examples/label_image/label_image --graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt --output_layer=final_result --image=/path/to/0000.jpg
아래와 같이 첫째 줄의 에러는 무시하고, 결과가 표시됩니다.
tensorflow/examples/label_image/main.cc:207] label9 (8): 0.871714I tensorflow/examples/label_image/main.cc:207] label3 (2): 0.0572503I tensorflow/examples/label_image/main.cc:207] label5 (4): 0.0252654I tensorflow/examples/label_image/main.cc:207] label2 (3): 0.0217753I tensorflow/examples/label_image/main.cc:207] label6 (7): 0.014649