貼一個TensorFlow 2017開發者大會的Mobile專題演講linux
移動和嵌入式TensorFlowandroid
這裏面有重點講到本文介紹的三個例子,以及其餘的移動和嵌入式方面的TF相關問題,乾貨不少ios
今天上 Github,發現 Tensorflow 的 android demo又更新了,除了基本的修改之外,又增長了一個圖像風格遷移的安卓demo,並且還增長了Android Studio 的編譯支持。git
火燒眉毛的移植到手機上試了一下。在安裝的過程當中,發現了之前文章中的幾處小錯誤。特意跑來更正。github
同時將風格遷移的demo一併增長到原文中。算法
原文以下:api
本文是TensorFlow官網教程:將 TensorFlow 深度學習模型,移植到安卓手機,進行物體識別、行人檢測和圖像風格遷移的一個具體實現過程。(教程主頁見: TensorFlow Mobile)bash
該教程一共實現了三個簡單的深度學習模型移植:curl
一、TF Classify: 實時物體分類
二、TF Detect: 實時行人檢測
三、TF Stylize: 實時圖像風格遷移學習
具體使用的模型和算法能夠參考上面的官方連接,我這裏只談移植過程,算法就不講啦。
該教程提供了 Android、ios、Raspberry Pi三種手機操做系統的支持。我只實現了Android移植,因此本文以Android移植爲例。
筆記本:ThinkPad T450 X86_64
顯卡:主顯 Intel HD Graphics 5500 ; 獨顯 NVIDIA GT 940M
系統環境:Ubuntu14.04 64位、Windows7 64位 雙系統
CUDA 版本: 8.0
cudnn 版本: v5.1
TensorFlow版本: master
Bazel版本: 0.4.3
安卓手機: 聯想 PB2-690N
若是想實現將TensorFlow訓練的模型移植到安卓手機,首先須要下載tensorflow的項目源碼。
注意!!
TensorFlow的源碼 r0.12版本中只包含 TF-Classify一個模型的實現,需下載master版本才能包含所有的三個模型實現。
在項目中,android demo的源碼位置是
//tensorflow/examples/android
電腦還須要安裝Bazel,這個我在源碼安裝TensorFlow的時候就已經裝好,還沒裝的同窗能夠參考個人另外一篇文章,文中前半部分有寫如何安裝Bazel。
Ubuntu14.04 源代碼安裝 TensorFlow r0.12 詳細教程
一、下載SDK,並將其解壓到從github下載的tensorflow源代碼根目錄下
(注:其實能夠安裝在任意目錄下,我這裏以安裝在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和安裝 SDK build tools
$ cd ~/tensorflow/android-sdk-linux $ sudo tools/android update sdk --no-ui
(注:不加sudo 會報錯,提示failed to fetch URL)
下載 NDK,解壓到tensorflow根目錄下
(注:其實能夠安裝在任意目錄下,我這裏以安裝在tensorflow目錄爲例。)
$ wget https://dl.google.com/android/repositor/android-ndk-r14b-linux-x86_64.zip $ unzip android-ndk-r14b-linux-x86_64.zip -d ~/tensorflow
在tensorflow的根目錄下,找到WORKSPACE文件。打開文件, 上方有兩段包含 android_sdk_repository和 android_ndk_repository的內容(該段內容已經加了#被註釋掉了),將這兩段內容在文件中複製一遍,並將複製後的內容反註釋掉。而後:
a) 分別將sdk path和 ndk path更改成本身安裝的SDK和NDK路徑(例如個人是tensorflow根目錄下的相對路徑)
b) 將sdk api level更改成本身電腦中安裝的最高版本
c) 將sdk的build_tools_version更改成本身安裝的版本
其餘保持不變
andriod demo源碼是不包含訓練好的tensorflow模型的,可是在編譯時須要模型。模型一共有三個,分別對應物體識別、行人檢測和圖像風格遷移。
在Bazel編譯時,能夠不用手動下載模型,由於在文件//tensorflow/examples/android/BUILD
中設定了自動下載模型的操做。
可是若是使用Android Studio等其餘方式編譯,則不會運行BUILD文件中的自動下載操做。
手動下載模型zip文件:
$ curl -L https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip -o /tmp/inception5h.zip $ curl -L https://storage.googleapis.com/download.tensorflow.org/models/mobile_multibox_v1.zip -o /tmp/mobile_multibox_v1.zip $ curl -L https://storage.googleapis.com/download.tensorflow.org/models/stylize_v1.zip -o /tmp/stylize_v1.zip
將上述三個zip文件分別解壓到文件夾:
//tensorflow/examples/android/assets
下載的模型連接隨着 tf android 項目版本的更新可能會有變更,具體版本對應的連接請參考tensorflow根目錄下的WORKSPACE文件,它其中標明瞭當前項目版本對應的模型下載連接。
解壓完畢後,打開//tensoeflow/examples/android/BUILD
文件,找到以 android_binary 開頭的那段代碼片,將 assets = [ ]
內以@開頭的三句代碼用#
號 註釋掉,以下圖黃色部分所示
若是不註釋掉該段內容,即便手動將模型放在assets文件中,使用bazel編譯時也會從新下載模型。
一、安裝 adb
$ sudo apt-get install android-tools-adb
二、 將手機設置爲debug模式
打開安卓手機,找到 usb debugging 按鈕,個人手機是:
setting-general-developer options-enable USB debugging
(每一個手機可能具體的不太同樣)
而後手機經過USB數據線鏈接電腦,此時手機屏幕會提示:
allow USB debugging?
勾選 always allow from this computer,而後點擊ok。(以後再鏈接則不會提示)
三、 從電腦端檢查 手機是否鏈接成功
$adb devices
則會輸出鏈接的設備
List of devices: xxxx, device
前面是ID號,後面是鏈接狀態。
我遇到的問題是,List of devices 輸出顯示:xxx, offline
。
這樣是不行的,往下執行編譯會不經過。瞎搗鼓了一通,最後按以下的方式解決了問題:
cd 切換到sdk安裝路徑下的 build_tools文件夾,運行
$ adb kill-server $ sudo adb start-server
(網上說的緣由是 要以root權限啓動 adb)
而後運行$ adb devices
,就ok啦。以下圖所示
一、編譯生成 apk文件
$ cd ~/tensorflow $ bazel build //tensorflow/examples/android:tensorflow_demo
成功以後會看到提示生成了以下三個文件
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
而後在 bazel-bin/tensorflow/examples/android/目錄下你會找到生成的三個文件
二、向安卓手機安裝apk文件
$ adb install -r -g bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
安裝的過程當中,手機屏幕會彈出提示 是否安裝該軟件?是否容許訪問攝像頭之類的等等。以下圖所示
安裝完畢後,就能夠在手機桌面看到兩個黃色的圖標,名字分別是TF Classify、TF Detect和TF 。以下圖所示。
點擊相應軟件,就能夠運行啦。下面演示一下效果。
一、首先是 TF Classify。
屏幕對準物體,上方會顯示識別結果。實時性很強,基本沒有延遲
二、再來試一下 TF Detect
屏幕會實時框出檢測到的人員,拿個模特測試一下。
恩,說明活體檢測有待提升呀~~~
三、TF stylize
將手機對準屏幕,軟件能夠實時的將攝像頭拍攝到的內容轉換爲藝術圖片風格
點擊下方的圖片,還能夠進行風格的切換。