當前位置:
首頁 > 新聞 > 如何使用 TensorFlow mobile將PyTorch和Keras 部署到移動設備

如何使用 TensorFlow mobile將PyTorch和Keras 部署到移動設備

雷鋒網按:本文為雷鋒字幕組編譯的技術博客,原標題  Deploying PyTorch and Keras Models to Android with TensorFlow Mobile ,作者為  John Olafenwa 。

翻譯 | 於志鵬       整理 |  MY 

截止到今年,已經有超過 20 億活躍的安卓設備。安卓手機的迅速普及很大程度上是因為各式各樣的智能 app,從地圖到圖片編輯器應有盡有。隨著深度學習的出現,我們的手機 app 將變得更加智能。下一代由深度學習驅動的手機 app 將可以學習並為你定製功能。一個很顯著的例子是「Microsoft Swiftkey」,這是一個鍵盤 app, 能通過學習你常用的單詞和片語來幫助你快速打字。

計算機視覺,自然語言處理,語音識別和語音合成等技術能夠大大改善用戶在移動應用方面的體驗。幸運的是,在移動應用方面,有很多工具開發成可以簡化深度學習模型的部署和管理。在這篇文章中,我將闡釋如何用 TensorFlow mobile 將 PyTorch 和 Keras 部署到移動設備。

用 TensorFlow mobile 部署模型到安卓設備分為三個步驟:

將你的訓練模式轉換到 TensorFlow

在安卓應用中添加 TensorFlow mobile 作為附加功能

在你的應用中使用 TensorFlow 模式寫 Java 代碼執行推理。

在這篇文章中,我將介紹整個過程,最後完成一個植入圖像識別功能的安卓應用

安裝

本教程會用到 PyTorch 和 Keras 兩個框架-遵循下列指導安裝你想使用的機器學習框架。安裝哪個由你選擇。

首先,安裝 TensorFlow:

如果你是 PyTorch 的開發者,確保你安裝的是 PyTorch 的最新版本。關於安裝 PyTorch 的指導文件,請查閱我之前的文章。

如果你是 Keras 的開發者,使用以下命令安裝:

Android Studio(至少3.0 的版本)

將 PyTorch 模式轉成 Keras 模式

這部分僅適用於 PyTorch 開發者。如果你使用的是 Keras,你可以跳到 「將 Keras 模式轉成 TensorFlow 模式」章節。

首先我們要做的是將我們的 PyTorch 模式參數轉成 Keras 中的同等參數。

為了簡化這個過程,我創建了一個腳本來自動運行轉化。在此教程中,我們將使用 Squeezenet 。這是一種很小但具備合理精確度的移動架構。在這兒下載預訓練模式(只有5M!)。

在轉權值之前,我們需要在 PyTorch 和 Keras 中定義 Squeezenet 模型。

如下圖所示,在這兩種框架下定義 Squeezenet,然後將 PyTorch 權值 轉成 Keras。

創建文件 convert.py,包括下面的代碼並運行腳本。

pytorchtokeras.py – Medium

pytorchtokeras.py – Medium

上面是已經轉好權值的,你所需要做的是將 Keras 模型保存為 squeezenet.h5。到這一步,我們可以拋棄 PyTorch 模型,繼續下一步了。

將 Keras 轉成 TensorFlow 模式

到這一步,你已經有了 Keras 模式,無論是從 PyTorch 轉化而來的還是直接用 Keras 訓練而獲得的。你可以在這兒下載預訓練的 Keras Squeezenet 模式。下一步是將我們整個的模型架構和權值轉成可運行的 TensorFlow 模型。

創建一個新文件 ConvertToTensorflow.py 並添加以下代碼。

上面的代碼將我們的 squeezenet.pb 保存到了 output_dir 中。並在同一文件夾中創建 了 TensorBoard 事件。

為了更加清晰地理解你的模型,你可以用 TensorBoard 將它可視化。

打開命令行並輸入

tensorboard –logdir=output_dir_path

output_dir_path 是你的 output_dir  路徑。

一旦 TensorBoard 成功啟動,你將看到提示讓你打開如下 url COMPUTER_NAME:6006

將 URL 地址輸入到瀏覽器中,將顯示以下界面。

為了可視化你的模式,雙擊 IMPORT.

仔細看下該模型並記下輸入和輸出節點的名字(框架中的第一個和最後一個)。

如果你的命名和我之前代碼一樣的話,他們就應該是 input_1 和output_1  。

到這一步, 我們的模型就可以調用了。

將TensorFlow Mobile 添加到你的項目中

TensorFlow 有 2 個針對移動設備的庫,分別是「TensorFlow Mobile」和「TensorFlow Lite.」Lite 版本設計得非常小,所有的依賴庫大約只有 1M。它的模型也更優化。另外,在安卓 8 以上的設備中,還可以用神經網路 API 加速。與「TensorFlow Mobile」不同,「TensorFlow Lite.」目前還不太完善,有些層並不能實現預期的效果。此外,windows 系統還不支持編譯庫和將模式轉成原生格式的操作。因此,在這個教程里,我堅持用 TensorFlow Mobile.

如果沒有現存項目的話,使用 Android Studio,創建一個新的安卓項目。然後添加TensorFlow Mobile 依賴庫到你的build.gradle 文件。

implementation 『org.tensorflow:tensorflow-android:+』

Android studio  將提示你同步 gradle,點擊 Sync Now 等待同步完成。

到這一步項目就創建完成了。

在你的移動 App 上執行推理

在用代碼執行推理前,你需要將轉化的模式 (squeezenet.pb)  添加到你的應用的資源文件夾里。

在 Android Studio 中右擊你的項目,滑鼠移到「添加文件夾」選項,然後選擇「資源文件夾」。這時會在你的 app 目錄下創建一個資源文件夾。然後,拷貝你的模式到此目錄下。

點擊 here 下載標籤類,並拷貝文件到資源目錄。

現在你的項目包含了分類圖像的所有工具。

添加一個新的 Java 類到你的項目的主包中,取名為 ImageUtils , 然後將以下代碼拷貝到其中。

如果不理解上面的代碼也沒關係,這是一些未在核心 TensorFlow-Mobile 庫中實現的功能。因此,在參考了一些官方樣例後,我寫了這些代碼以方便後續工作。

在你的主活動中,創建一個 ImageView 和一個 TextView ,這將被用來顯示圖像和其預測結果。

在你的主活動中,你需要載入 TensorFlow-inference  庫和初始化一些類變數。在你的 onCreate 方法前添加以下內容:

添加一個計算預測類的函數:

添加函數來接收Image Bitmap並在其上執行推理:

以上代碼在後台線程中運行預測,並將預測的類和它的評估得分寫到我們之前定義的 TextView 中。

注意在主 UI 線程運行推理時可能會掛起。記住一個原則 :「永遠在你的後台線程運行推理!」

本教程的重點是圖像識別,為此我在資源文件夾中添加了一隻小鳥的圖像。在標準應用程序中,你要用代碼從文件系統載入圖像。

添加任何你想做預測的圖像到資源文件夾中。為了方便的運行演算法,在下列的代碼中,我們在一個按鈕上添加了一個點擊監聽。該監聽可以載入該圖像並調用預測功能。

很好!所有步驟都已完成!雙擊檢驗一下,如果都沒有問題。點擊「Bulid APK.」按鈕

APK很快就創建完成了,之後在設備上安裝並運行App.

結果如下圖所示:

為了得到更新奇的體驗,你的 App 應當從安卓文件系統載入圖像或用攝像頭抓取圖像,而不是從資源文件夾載入。

總結

移動端的深度學習框架將最終轉變我們開發和使用 app 的方式。使用上述代碼,你能輕鬆導出你訓練的 PyTorch 和 Keras 模型到 TensorFlow。運用 TensorFlow Mobile 和這篇文章中介紹的步驟,你可以將卓越的 AI 功能完美的植入到你的移動端應用中。

安卓項目的完整代碼和模型轉換工具在我的 GitHub 上可以找到。

雷鋒網雷鋒網

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

7天開設數字資產交易所,神州數字旗下MasterDAX在台北啟動雲交易所2.0
專訪乂學教育松鼠AI首席科學家崔煒:領跑教育 AI 行業,你需要做對哪些事情?

TAG:雷鋒網 |