在安卓上執行TensorFlow:讓深度學習進入移動端
編者注:想了解如何使用TensorFlow來執行你的機器學習工作流,請關注谷歌的Eli Bixby和Amy Unruh在2016年11月1到2日於舊金山舉辦的培訓課程。
如果你關注我的前一篇帖子,並按照其中的內容實踐,你可能已經學會了如何在Linux上安裝一個GPU加速的TensorFlow,並構建了你自己的影象分類器。老實講,在筆記本上對圖片進行分類是很花時間的:需要下載分類用的圖片,並在終端裡輸入很多行命令來執行分類。
不過,儘管沒有很多的公開資料,好訊息是你也可以在有攝像頭的手機上執行TensofrFlow的Inception分類器,甚至是你自定義的分類器。然後你只要把攝像頭對準你希望做分類的東西,TensorFlow就會告訴你它認為這是什麼東西。TensorFlow是可以在iOS和樹莓派上面執行,不過在這個教程裡,我會介紹如何在安卓裝置上執行TensorFlow。
我會一步一步地介紹如何在安卓裝置上執行定製化的圖片分類器。實現這個功能需要很多步驟,而且其他地方沒有這樣的介紹,只能通過反覆地檢視TensorFlow的GitHub論壇。我希望這篇帖子能幫你避免很多的麻煩。
下載安卓的SDK和NDK
你可以在系統終端裡用下面的命令下載安卓SDK並解壓縮到你的TensorFlow目錄裡。
$ wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
$ tar xvzf android-sdk_r24.4.1-linux.tgz -C ~/tensorflow
還需要下載一些額外的SDK編譯工具。我在開始為安卓5.1.1版下載開始後關掉了這個終端。
$ cd ~/tensorflow/android-sdk-linux
$ tools/android update sdk –no-ui
隨後你需要用下面的命令下載安卓NDK,並解壓:
$ wget https://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip
$ unzip android-ndk-r12b-linux-x86_64.zip -d ~/tensorflow
下載Inception
$ cd ~/tensorflow
$ wget https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip -O /tmp/inception5h.zip
$ unzip /tmp/inception5h.zip -d tensorflow/examples/android/assets/
修改WORKSPACE檔案
為了使用安卓工具編譯我們的應用,需要修改WORKSPACE檔案。
$ gedit ~/tensorflow/WORKSPACE
你可以拷貝下面的程式碼,並替換掉你的WORKSPACE檔案裡的相應行。
android_sdk_repository(
name = “androidsdk”,
api_level = 24,
build_tools_version = “24.0.3”,
path = “android-sdk-linux”)
android_ndk_repository(
name=”androidndk”,
path=”android-ndk-r12b”,
api_level=21)
開啟USB除錯和adb工具
為了能用adb工具,你必須把你的手機設定成開發模式,並開啟USB除錯功能。在開啟前,確認你的手機沒有通過USB和電腦連線,然後進行如下操作:
進入“設定”-“通用”-“我的手機”
進入“軟體資訊”並連續按“版本號”7次
這樣就開啟了一個計數器,並會告訴你什麼時候你的手機已經進入了開發模式
進入“設定”-“通用”-“開發選項”
開啟USB除錯
每一個安卓手機都是不同的,我的安卓版LG G4手機就必須在PTP模式下才能使用adb。你需要在設定後通過把手機連到電腦上來確認除錯模式已經開啟。當連線後手機上出現“允許USB除錯”,確保你選擇的是“總是允許從這個電腦”,並按下OK。
為了測試除錯設定是否成功,可以把手機連上電腦,並用下面的命令安裝adb,並測試裝置:
$ sudo apt-get install android-tools-adb
$ adb devices
你應該能看到類似於下面的響應內容:
編譯APK
$ cd ~/tensorflow
$ bazel build //tensorflow/examples/android:tensorflow_demo
安裝APK
這一步是唯一的我無法客觀測試的步驟。每個安卓裝置都不一樣。如果你在這一步中碰到什麼問題,我建議你升級安卓到6.0版。對於我朋友的Moto G手機,就必須把下面的命令裡面的–g選項去掉:
$ adb install -r -g bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
至此,你就可以在安卓裝置上使用TensorFlow和Inception分類器了。我發現最有趣的是這個分類器偶爾出錯的時候。需要注意的是,原版的Inception分類器只能識別ImageNet挑戰裡出現的1000種圖片分類。
使用定製化的圖片分類器
為了能對我們自己的圖片來做分類,我們必須先用我們移動裝置的圖片檔案資料重新訓練,並把訓練結果放入assets目錄
首先我們要編譯圖片訓練優化器:
$ cd ~/tensorflow
$ bazel build tensorflow/python/tools:optimize_for_inference
然後再用這個訓練優化器對我們自己的圖片資料做訓練:
$ bazel-bin/tensorflow/python/tools/optimize_for_inference \
–input=tf_files/retrained_graph.pb \
–output=tensorflow/examples/android/assets/retrained_graph.pb
–input_names=Mul \
–output_names=final_result
把訓練後的標籤放入assets目錄
$ cp ~/tensorflow/tf_files/retrained_labels.txt ~/tensorflow/tensorflow/examples/android/assets/
編輯TensorflowImageListener.java
$ gedit ~/tensorflow/tensorflow/examples/android/src/org/tensorflow/demo/TensorFlowImageListener.java
我們需要編輯這個檔案以能識別我們自己的圖片:替換下面這些行的引數所對應的變數值並儲存(如果你想回退到原有的檔案內容,你可以在這裡找到備份檔案):
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:0”;
private static final String OUTPUT_NAME = “final_result:0”;
private static final String MODEL_FILE = “file:///android_asset/retrained_graph.pb”;
private static final String LABEL_FILE = “file:///android_asset/retrained_labels.txt”;
重新編譯APK
$ cd ~/tensorflow
$ bazel build //tensorflow/examples/android:tensorflow_demo
重新安裝APK
$ adb install -r -g bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
好的,到這時候我們就可以在安卓裝置上使用定製化的分類器了!研究人員和愛好者可以利用這個技術來想出更多的點子並付諸實驗。例如我想到的一個點子:就是讓分類器能學會通過識別不健康的葉子來發現營養不良或者有植物病的植物。如果你想了解如何進一步壓縮圖片檔案,以及在iPhone上做同樣的事,你可以關注這裡的Pete Warden的教程。
希望我已經能激勵到你,讓你等不及開始要想出一些新點子了。請關注我的推特賬號@wagonhelm或主題#TensorFlow,並分享你的想法。
Justin Francis
Justin居住在加拿大西海岸的一個小農場。這個農場專注於樸門道德和設計的農藝。在此之前,他是一個非營利性社群合作社自行車商店的創始人和教育者。在過去的兩年中,他住在一艘帆船上,全職探索和體驗加拿大的喬治亞海峽。但現在他的主要精力都放在了學習機器學習。
相關文章
- 用TensorFlow進行深度學習深度學習
- vSphere Bitfusion執行TensorFlow深度學習任務深度學習
- 深度學習Tensorflow實戰,新課進行曲!深度學習
- 深度學習利器:TensorFlow在智慧終端中的應用深度學習
- 深度學習:TensorFlow入門實戰深度學習
- 行業專家分享:深度學習筆記之Tensorflow入門!行業深度學習筆記
- AWS上使用MXNet進行分散式深度學習分散式深度學習
- {Submarine} 在 Apache Hadoop 中執行深度學習框架ApacheHadoop深度學習框架
- 在騰訊雲上搭建 Tensorflow for GPU 深度學習環境 —— Jinkey 原創GPU深度學習
- 遠端啟動命令,讓命令程式在後臺執行
- 《深度學習之TensorFlow》pdf深度學習
- 深度學習之Tensorflow框架深度學習框架
- 《動手學深度學習》TensorFlow2.0版本深度學習
- 深度學習中tensorflow框架的學習深度學習框架
- 移動端學習目錄
- TensorFlow.NET機器學習入門【8】採用GPU進行學習機器學習GPU
- 深度學習TensorFlow如何使用多GPU並行模式?深度學習GPU並行模式
- COVID-19:利用Opencv, Keras/Tensorflow和深度學習進行口罩檢測OpenCVKeras深度學習
- AMD的GPU現在可以加速TensorFlow深度學習了GPU深度學習
- 使用PyTorch進行主動遷移學習:讓模型預測自身的錯誤PyTorch遷移學習模型
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 使用rem進行移動端佈局REM
- Tensorflow 深度學習簡介(自用)深度學習
- 深度學習--Tensorflow初體驗深度學習
- 深度學習的TensorFlow實現深度學習
- 深度學習與 Spark 和 TensorFlow深度學習Spark
- 簡述遷移學習在深度學習中的應用遷移學習深度學習
- 深度學習趣談:什麼是遷移學習?(附帶Tensorflow程式碼實現)深度學習遷移學習
- 深度學習tensorflow 之 distorted_inputs深度學習
- 深度學習利器:TensorFlow與NLP模型深度學習模型
- 怎麼在移動端模擬pc端進行web開發除錯日誌Web除錯
- 用深度學習進行欺詐檢測深度學習
- [GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(上)深度學習
- 教你在R中使用Keras和TensorFlow構建深度學習模型Keras深度學習模型
- 《深度學習之TensorFlow:入門、原理與進階實戰》PDF+原始碼+李金洪深度學習原始碼
- 移動端使用tensorflow lite爬坑攻略
- 深度學習在乳腺癌上的應用!深度學習
- nginx 判斷移動端或者 PC 端 進入不同專案Nginx