1. 程式人生 > >Tensorflow在手機端的部署——yolo v2在手機端的執行(2)

Tensorflow在手機端的部署——yolo v2在手機端的執行(2)

Tensorflow官方原始碼部分有這麼個目錄:tensorflow/examples/android/ 它提供了一個移動端深度學習實現的demo工程;配置安卓開發環境後,就可以在Android studio中run起來並安裝到手機中了。

該工程主要實現的功能有:目標檢測,分類,語音識別,風格遷移;

我所關心的主要是目標檢測功能;本文的目的是想將yolo模型匯入到這個開發環境中,用yolo模型做目標檢測而不是他預設的ssd_mobilenet_v1_android_export.pb檔案

step1: 將上述android資料夾整體拷貝一份;我將其重新命名為android_yolo

了;如下(請無視我新建的一個叫做gradle.properties檔案):

step2:用Android Studio開發工具開啟上面這個工程檔案android_yolo;

step3:修改一些檔案內容:

由於tensorflow/examples/android這個檔案工程預設有4個功能,本文只考慮檢測功能,因此將無關的其他功能註釋掉;

更改一:

對manifests/AndroidManifest.xml檔案的如下內容(classifer,stylize,speech)進行註釋掉,line37-line76行左右;

xml檔案的註釋語句為“<!--     你要註釋掉的內容   -->

  ”

如果想要讓這個工程跑你的yolo模型,需要你將yolo的.weights檔案轉為tensorflow的.pb檔案;

關於這個轉換的方法我會針對性的寫篇文章,目前可參考darkflow這個工具;拿yolov2-tiny-voc.weights為例說明,經過darkflow工具會產生兩個檔案:yolov2-tiny-voc.pb 和 yolov2-tiny-voc.meta

將生產的pb檔案放到assets資料夾下;

更改二:

為了使用自定義的模型檔案(如上面的yolov2-tiny-voc.pb)還需要更改如下內容:

java/org/tensorflow/demo/DetectorActivity.java檔案中(大約line 76)將YOLO_MODEL_FILE中的模型檔名更改為上述你匯入的pb檔名(我的是yolov2-tiny-voc.pb

同個檔案中(大約 line 89 )將DetectorMode MODE更改成YOLO,如下圖所示;圖中的MINIMUM_CONFIDENCE_YOLO=0.25f是置信度閾值,可依據最後顯示效果選擇更改;

更改三:

如果上述的yolo模型是你自己訓練的話,那麼你還需要更改下述內容(如果你是用官網訓練好的yolo模型,比如我直接用的官網在coco上訓練的20個類別目標的話,以下內容可不做更改)

在java/org/tensorflow/demo/TensorFlowYoloDetector.java中(大約line 37)將你訓練的總類別數NUM_CLASSES=更改;

同文件中(大約 line 51)在LABELS={}中填入你訓練yolo時對應的name檔案中的類別名,並且保持次序一致。

step4: 關閉工程自動下載pb檔案

由於該工程會自動下載最開始說的四個功能對應的pb檔案,為了是工程直接用我們匯入的,需要將它自動下載功能關掉;

找到工程下的build.gradle檔案,找到該檔案(大約 line 197)中下面這句

apply from: "download-models.gradle"  

將其註釋掉;這樣工程就不會自動下載那四個模型檔案了。

step5:

以上完成了工程內容的更改,然後對工程進行同步->編譯,最後run ‘app’,連線上你的手機,將生成的apk檔案安裝到手機端,測試結果如下: