91精品国产综合久久四虎久久_国产成人午夜高潮毛片_99er视频精品免费观看_2020亚洲熟女在线观看_日本女优人体写真_国内黄色毛片_年轻的老师中文版在线_丰满女邻居做爰_久久久久久精品成人免费图片

在安卓上運(yùn)行TensorFlow
讓深度學(xué)習(xí)進(jìn)入移動(dòng)端
編者注:想了解如何使用TensorFlow來(lái)運(yùn)行你的機(jī)器學(xué)習(xí)工作流,請(qǐng)關(guān)注Aaron Schumacher's Oriole Tutorial: Hello, TensorFlow!。

如果你關(guān)注我的前一篇帖子,并按照其中的內(nèi)容實(shí)踐,你可能已經(jīng)學(xué)會(huì)了如何在Linux上安裝一個(gè)GPU加速的TensorFlow,并構(gòu)建了你自己的圖像分類器。老實(shí)講,在筆記本上對(duì)圖片進(jìn)行分類是很花時(shí)間的:需要下載分類用的圖片,并在終端里輸入很多行命令來(lái)運(yùn)行分類。

不過(guò),盡管沒(méi)有很多的公開(kāi)資料,好消息是你也可以在有攝像頭的手機(jī)上運(yùn)行TensofrFlow的Inception分類器,甚至是你自定義的分類器。然后你只要把攝像頭對(duì)準(zhǔn)你希望做分類的東西,TensorFlow就會(huì)告訴你它認(rèn)為這是什么東西。TensorFlow是可以在iOS和樹(shù)莓派上面運(yùn)行,不過(guò)在這個(gè)教程里,我會(huì)介紹如何在安卓設(shè)備上運(yùn)行TensorFlow。

我會(huì)一步一步地介紹如何在安卓設(shè)備上運(yùn)行定制化的圖片分類器。實(shí)現(xiàn)這個(gè)功能需要很多步驟,而且其他地方?jīng)]有這樣的介紹,只能通過(guò)反復(fù)地查看TensorFlow的GitHub論壇。我希望這篇帖子能幫你避免很多的麻煩。

下載安卓的SDK和NDK

你可以在系統(tǒng)終端里用下面的命令下載安卓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編譯工具。我在開(kāi)始為安卓5.1.1版下載開(kāi)始后關(guān)掉了這個(gè)終端。

$ 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文件

為了使用安卓工具編譯我們的應(yīng)用,需要修改WORKSPACE文件。

$ gedit ~/tensorflow/WORKSPACE

你可以拷貝下面的代碼,并替換掉你的WORKSPACE文件里的相應(yīng)行。

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)

開(kāi)啟USB調(diào)試和adb工具

為了能用adb工具,你必須把你的手機(jī)設(shè)置成開(kāi)發(fā)模式,并開(kāi)啟USB調(diào)試功能。在開(kāi)啟前,確認(rèn)你的手機(jī)沒(méi)有通過(guò)USB和電腦連接,然后進(jìn)行如下操作:

  • 進(jìn)入“設(shè)置”-“通用”-“我的手機(jī)”
  • 進(jìn)入“軟件信息”并連續(xù)按“版本號(hào)”7次
  • 這樣就開(kāi)啟了一個(gè)計(jì)數(shù)器,并會(huì)告訴你什么時(shí)候你的手機(jī)已經(jīng)進(jìn)入了開(kāi)發(fā)模式
  • 進(jìn)入“設(shè)置”-“通用”-“開(kāi)發(fā)選項(xiàng)”
  • 開(kāi)啟USB調(diào)試

每一個(gè)安卓手機(jī)都是不同的,我的安卓版LG G4手機(jī)就必須在PTP模式下才能使用adb。你需要在設(shè)置后通過(guò)把手機(jī)連到電腦上來(lái)確認(rèn)調(diào)試模式已經(jīng)開(kāi)啟。當(dāng)連接后手機(jī)上出現(xiàn)“允許USB調(diào)試”,確保你選擇的是“總是允許從這個(gè)電腦”,并按下OK。

為了測(cè)試調(diào)試設(shè)置是否成功,可以把手機(jī)連上電腦,并用下面的命令安裝adb,并測(cè)試設(shè)備:

$ sudo apt-get install android-tools-adb

$ adb devices

你應(yīng)該能看到類似于下面的響應(yīng)內(nèi)容:

Justin_screenshot-15acdad6ff0c0d70d898f0d104b91553

 

編譯APK

$ cd ~/tensorflow

$ bazel build //tensorflow/examples/android:tensorflow_demo

安裝APK

這一步是唯一的我無(wú)法客觀測(cè)試的步驟。每個(gè)安卓設(shè)備都不一樣。如果你在這一步中碰到什么問(wèn)題,我建議你升級(jí)安卓到6.0版。對(duì)于我朋友的Moto G手機(jī),就必須把下面的命令里面的–g選項(xiàng)去掉:

$ adb install -r -g bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

至此,你就可以在安卓設(shè)備上使用TensorFlow和Inception分類器了。我發(fā)現(xiàn)最有趣的是這個(gè)分類器偶爾出錯(cuò)的時(shí)候。需要注意的是,原版的Inception分類器只能識(shí)別ImageNet挑戰(zhàn)里出現(xiàn)的1000種圖片分類。

使用定制化的圖片分類器

為了能對(duì)我們自己的圖片來(lái)做分類,我們必須先用我們移動(dòng)設(shè)備的圖片文件數(shù)據(jù)重新訓(xùn)練,并把訓(xùn)練結(jié)果放入assets目錄

首先我們要編譯圖片訓(xùn)練優(yōu)化器:

$ cd ~/tensorflow

$ bazel build tensorflow/python/tools:optimize_for_inference

然后再用這個(gè)訓(xùn)練優(yōu)化器對(duì)我們自己的圖片數(shù)據(jù)做訓(xùn)練:

$ 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

把訓(xùn)練后的標(biāo)簽放入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

我們需要編輯這個(gè)文件以能識(shí)別我們自己的圖片:替換下面這些行的參數(shù)所對(duì)應(yīng)的變量值并保存(如果你想回退到原有的文件內(nèi)容,你可以在這里找到備份文件):

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

好的,到這時(shí)候我們就可以在安卓設(shè)備上使用定制化的分類器了!研究人員和愛(ài)好者可以利用這個(gè)技術(shù)來(lái)想出更多的點(diǎn)子并付諸實(shí)驗(yàn)。例如我想到的一個(gè)點(diǎn)子:就是讓分類器能學(xué)會(huì)通過(guò)識(shí)別不健康的葉子來(lái)發(fā)現(xiàn)營(yíng)養(yǎng)不良或者有植物病的植物。如果你想了解如何進(jìn)一步壓縮圖片文件,以及在iPhone上做同樣的事,你可以關(guān)注這里的Pete Warden的教程。

希望我已經(jīng)能激勵(lì)到你,讓你等不及開(kāi)始要想出一些新點(diǎn)子了。請(qǐng)關(guān)注我的推特賬號(hào)@wagonhelm或主題#TensorFlow,并分享你的想法。

Justin Francis

Justin居住在加拿大西海岸的一個(gè)小農(nóng)場(chǎng)。這個(gè)農(nóng)場(chǎng)專注于樸門道德和設(shè)計(jì)的農(nóng)藝。在此之前,他是一個(gè)非營(yíng)利性社區(qū)合作社自行車商店的創(chuàng)始人和教育者。在過(guò)去的兩年中,他住在一艘帆船上,全職探索和體驗(yàn)加拿大的喬治亞海峽。但現(xiàn)在他的主要精力都放在了學(xué)習(xí)機(jī)器學(xué)習(xí)。

Smartphone. (source: Pixabay).