개요
Tensorflow Android 예제를 활용하여 이미지 분류 해보기. Android tensorflow image classification.
tensorflow 소스코드에는 Android 예제가 있다. 그중 이미지 분류 예제를 활용하여 나만의 이미지 분류 모델을 만들어 봅시다.
기존의 예제는 Inception-v1 모델이 들어가 있다. 이번에는 Inception-v3 모델에 원하는 이미지를 재 학습 시켜 나만의 모델을 만든 후
Android 예제에서 사용한다.
스크린샷은 꽃데이터를 재학습하여 안드로이드로 분류시킨 화면이다.
* 참고
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
준비 : 테스트 환경. 소스코드
* Tensorflow 1.1.0 RC1 이상의 버전과 그에 맞는 소스 코드
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
* Ubuntu 16.04 , Anaconda 2
준비 : Inception-v3 모델 이미지 재학습
Inception-v3 모델에 원하는 이미지를 재 학습 시킨다.
이번 포스팅에서는 대표 예제인 Flowers data set을 사용 했다.
학습 후의 모델 파일(.pb) 레이블 파일(.txt) 파일을 준비한다
* 참고 : http://gusrb.tistory.com/16
준비 : 재 학습 모델 파일 전처리
출력된 모델 파일(.pb) 이번 예제에서 사용 할 수 있도록 전처리가 필요하다
필요하지 않는 노드를 제거하는 작업이 필요하다. 그냥 따라 해도 된다.
텐서플로우 전체 소스코드 중 아래 경로의 스크립트를 사용 한다
/tensorflow/tensorflow/python/tools/strip_unused.py
python /home/hwang/tensorflow/tensorflow/python/tools/strip_unused.py \ --input_graph="retrained_graph.pb" \ --output_graph="stripped_graph.pb" \ --input_node_names="Mul" \ --output_node_names="final_result" \ --input_binary=true |
파란 글자 : 전처리 할 모델 파일 경로. 위에서 재학습 후 만든 결과물(.pb)를 지정 한다
초록 글자 : 전처리 후 나온 결과 모델 파일을 저장할 경로와 이름.
위와 같이 스크립트를 실행하면 " stripped_graph.pb " 새로운 모델 파일이 출력 된다.
안드로이드 예제에서는 이 모델 파일을 사용 한다. 레이블 파일은 위의 재학습에서 만든 레이블 파일을 사용 한다(retrained_labels.txt)
준비 : 모델 파일, 라벨 파일 위치 이동
위에서 전처리한 모델 파일(stripped_graph.pb) 와 라벨(retrained_labels.txt)파일 을 빌드할 위치로 이동 시킨다.
tensorflow/tensorflow/examples/android/assets
위의 경로로 이동 시킨다.
준비 : Android SDK , NDK 설치
예제를 앱으로 만들기 위해 SDK와 NDK가 필요하다. Android Studio를 이용해서 SDK와 NDK를 설치해도 되고 각각 따로 설치해도 된다.
안드로이드 스튜디오 & SDK : https://developer.android.com/studio/index.html
NDK : https://developer.android.com/ndk/downloads/older_releases.html?hl=ko#ndk-12b-downloads
SDK의 버전은 자신이 테스트할 폰에 맞게 해주면 된다.
NDK 는 위의 주소에서 받는걸 추천한다. 여러 버전으로 테스트 해본 결과 위의 버전이 잘 맞느다.
SDK와 NDK의 설치법을 잘 모른다면 구글링 후 돌아오길 !
준비 : Bazel WORKSPACE 수정
텐서플로우와 함께 컴파일을 하기 때문에 Bazel을 사용해야 한다
중요한 설정이다. 여기서 많은 오류와 실수가 있었다.
Tensorflow의 루트 폴더의 WORKSPACE 를 수정 한다 (LINE 18 ~ 31)
초기에는 # 으로 주석 처리가 되어있으니 필요한 부분만 #을 제거 후 수정한다
파란 글자 : SDK 설정법. 자신의 설치 버전과 경로에 맞게 수정 한다.
초록 글자 : NDK 설정법. 경로(path)만 자신에 맞게 하고 api_level은 아래와 같이 한다
android_sdk_repository( name = "androidsdk", api_level = 25, build_tools_version = "25.0.2", path = "/home/hwang/Android/Sdk" ) android_ndk_repository( name="androidndk", path="/home/hwang/Android/android-ndk-r12b", api_level=14 ) |
준비 : Tensorflow Android 소스코드 수정
/tensorflow/tensorflow/examples/android/src/org/tensorflow/demo/ClassifierActivity.java
위의 경로를 찾아가 ClassifierActivity.java 코드를 편집 한다. Incpetion v3에 맞게 값을 수정 해야 한다.
기존의 소스코드를 아래와 같이 변경 한다 (Line 61 ~ 70 )
중요한 설정이다. 여기서 많은 오류와 실수가 있었다.
파란 글자 : Inception v3 모델의 이미지 처리 관련 속성 값이이다. 똑같이 수정 한다
초록 글자 : 위에서 재학습 시킨 후 출력된 모델의 그래프 이름이다. 재학습 과정에서 특별히 수정을 하지 않았다면 아래와 같이 수정 한다
빨간 글자 : 출력된 모델 파일과 라벨 파일이다. 특별한 수정을 하지 않았다면 아래와 같이 수정 한다
private static final int INPUT_SIZE = 299; private static final int IMAGE_MEAN = 128; private static final float IMAGE_STD = 128; private static final String INPUT_NAME = "Mul"; private static final String OUTPUT_NAME = "final_result"; private static final String MODEL_FILE = "file:///android_asset/stripped_graph.pb"; private static final String LABEL_FILE = "file:///android_asset/retrained_labels.txt"; |
실행 : Android 예제 소스 컴파일
원하는 이미지 파일 모델도 재학습 시키고, 모델파일 전처리도 하고, 위치 이동도 하고, 소스코드 수정도 했다.
이 포스팅에서는 Bazel을 사용 했지만, 필요에 따라서 Android studio 환경에서 해도 된다 !
이제 Tensorflow Android 예제 앱을 빌드해 보자.
Tensorflow 루트 폴더에서 아래의 명령어를 실행 !
bazel build -c opt //tensorflow/examples/android:tensorflow_demo |
실행 결과를 보면 아래와 같은 메세지가 출력 된다.
마지막 tensorflow_demo.apk 를 안드로이드 폰에 설치 한다.
APK 파일 경로 : /tensorflow/bazel-bin/tensorflow/examples/android
Target //tensorflow/examples/android:tensorflow_demo up-to-date: bazel-bin/tensorflow/examples/android/tensorflow_demo_deploy.jar bazel-bin/tensorflow/examples/android/tensorflow_demo_unsigned.apk bazel-bin/tensorflow/examples/android/tensorflow_demo.apk |
설치 : 컴파일된 APK 설치
설치를 하게 되면 3개의 앱이 설치된다.
기본적으로 Tensorlfow의 예제 앱이 설치 되는데, 그 중 'TF Classify' 를 수정하여 사용 한다.
TF Classify를 실행하면 위의 스크린샷과 같은 단순한 인터페이스의 앱이 실행 된다.
자신이 학습시킨 종류의 사진을 비추면 (포스팅을 예를들면 꽃 사진) 위쪽에 추론 레이블과 스코어가 출력 된다 !
만약 어플이 실행이 불가하면 WORKSPACE , ClassifierActivity.java 수정을 다시 해봐야 한다.
'archive.tar' 카테고리의 다른 글
[Tensorflow-Serving] 텐서플로우 서빙 설치 하기 (0) | 2017.06.24 |
---|---|
[Ubuntu]우분투 무한 로그인 해결 여러 방법들 (1) | 2017.05.18 |
[Keras] Image Data Generator 이미지 갯수 늘리기 (16) | 2017.04.16 |
[Keras] Image Data Generator 사용 후 추론 성능 차이 (0) | 2017.04.14 |
[TensorFlow] 모델 체크포인트 변환 .ckpt to .pb (inception-resnet-v2) (9) | 2017.03.21 |