TensorFlow를 기반으로 학습한 모델은 가중치 정보를 포함하는 파일로 변환하여 다양한 플랫폼에 적용할 수 있다.
Darkflow 역시 TensorFlow를 기반으로하기 때문에 Darkflow를 이용해 학습한 모델을 여러 응용 프로그램에 적용하는 것은 어렵지 않다. -> Darknet 대신 Darkflow를 사용한 이유
이번엔 Darkflow를 통해 학습한 나만의 YOLO 모델을 Android 앱에 적용하는 방법을 소개한다.
Tensorflow in Android
github - tensorflow
tensorflow lite - tflite
Android 앱에서 yolo model 을 적용하기 위해선 TensorFlow 에서 제공해주는 데모프로그램을 기반으로 사용하여 주면 된다.
git clone https://github.com/tensorflow/tensorflow
클론을 해준 다음 Android Studio를 이용해서 실행을 시켜주면 된다
처음으로 프로젝트를 불러오면 Gradle, SDK 등을 업데이터 하라는 안내가 표시된다. 요구사항들을 설치해주면 된다.
그다음은 build.gradle 파일의 nativeBuildSystem 변수 값을 'none'으로 변경하는 것이다.
def nativeBuildSystem = 'none'
해당 데모 앱에는 ClassifierActivity, StylizeActivity, SpeechActivity, DetectorActivity 총 4가지 기능들이 각각의 Activity로 구성되어 있다.
AndroidManifest.xml에서 DetectorActivity를 제외한 나머지는 비활성화 해준다.
<application android:allowBackup="true"
android:debuggable="true"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/MaterialTheme">
<activity android:name="org.tensorflow.demo.DetectorActivity"
android:screenOrientation="portrait"
android:label="@string/activity_name_detection">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
<!--
<activity android:name="org.tensorflow.demo.StylizeActivity"
android:screenOrientation="portrait"
android:label="@string/activity_name_stylize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="org.tensorflow.demo.ClassifierActivity"
android:screenOrientation="portrait"
android:label="@string/activity_name_classification">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="org.tensorflow.demo.SpeechActivity"
android:screenOrientation="portrait"
android:label="@string/activity_name_speech">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
-->
</application>
아무런 변경 없이 프로그램을 안드로이드 기기에서 실행해보면 아래와 같이 기존에 미리 설정된 Object Detecting(TF Detect) 프로그램이 정상적으로 동작하는 것을 확인할 수 있다.
Android objet Detection customizing
다음으로는 자신의 darkflow 기반의 학습 모델을 적용 시키는 방법에 대해 알아보겠다.
기존에 학습된 YOLO 모델 및 가중치 정보를 어플에 적용하기 위해서는 pb파일로 변환하여야 한다.
python flow --model cfg/tiny-yolo.cfg --load -1 --savepb
다음의 명령어를 입력하여 weight 파일을 pb파일로 변환시킨다.
이제 안드로이드 프로젝트 안에있는 java 파일을 수정하기만 하면 된다.
DetectorActivity.java
private static final String YOLO_MODEL_FILE = "./android_asset/tiny-yolo.pb";
private static final DetectorMode MODE = DetectorMode.YOLO;
TensorFlowYoloDetector.java
private static final int NUM_CLASSES = 1;
private static final String[] LABELS = {
"damege"
};
실행 결과
참고
'Capstone > Capstone1 - 2019-2학기' 카테고리의 다른 글
[12] forlium을 이용해 지도위에 마커표시 (0) | 2020.06.18 |
---|---|
[11] ngrok를 이용한 서버 구성 (0) | 2020.06.18 |
[9] darkflow yolo (0) | 2020.06.18 |
[8] yolo custom training (0) | 2019.12.23 |
[7] 이미지 부풀리기 (0) | 2019.12.18 |