歡迎您光臨本站 註冊首頁

前幾天有人釋出了一個可以在 iOS 裝置上直接訓練神經網路的開源專案 MNIST-CoreML-Training,引起熱議。

專案使用 MNIST 手寫數字資料集部署影象分類模型,不需要在其他 ML 框架中訓練,而是基於 Core ML 直接本地訓練出一個卷積神經網路(LeNet CNN) 模型。專案作者還將之和其他裝置模型做了對比。在模型架構和訓練引數相同的情況下,同時在 iphone 11上執行 Core ML 和在 i7 MacBook Pro 上執行 TensorFlow 2.0,兩種方式的準確率都超過了0.98,前者訓練時間大概為248秒,後者為158秒。

雖然用時上還有一定差距。但該專案和實驗被認為證明瞭 ios 裝置計算效能的提升,也探索了移動裝置在本地訓練的可能性。目前移動裝置本地訓練還難以完美實現,但想要在移動端部署 AI 應用還是有很多途徑的,今天就來看看移動端的 AI 開發。

iOS 的 Core ML 和 Andorid 的 NNAPI

在移動端實現卷積神經網路,一般可以先在 GPU 或 TPU 上訓練模型,之後再壓縮部署到移動端。早前,有人基於開源的計算機視覺庫 OpenCV 和開源訓練模型 Caffe,在 Android 端實現車牌識別。Caffe 便是在 GPU 機器上訓練,然後部署到商品叢集或移動裝置,在 CPU 和 GPU 之間切換,Caffe 模型還曾被用來在 Android 上做性別識別卷積神經訓練

當然,也已經有專案基於移動裝置內建的一些 ML 框架,省去了在 GPU 和 TPU 上提前訓練模型的步驟,直接在移動端部署。如 ios 內建的 Core ML,主要解決訓練模型部署在移動端的問題,是一個模型轉換工具,開頭提到的 MNIST-CoreML-Training 就是基於它實現的。 

Android 系統中也有類似的工具——NNAPI。NNAPI 是一個 Android C API,它為構建和訓練 ML 框架,如 TensorFlow Lite、Caffe 2提供基礎功能層,類似 ios 中的 Core ML。NNAPI 透過機器學習庫、框架和工具呼叫,這些工具可以幫助開發者脫離裝置訓練模型,並完成部署。應用一般不會直接使用 NNAPI,而是直接使用更高階的 ML 框架。

圖(NNAPI 高階系統架構)

使用 TensorFlow Lite 部署深度學習模型

Android 裝置基於 NNAPI,還需要透過一些 ML 框架實現 AI 應用開發。被專案作者拿來做對比的 TensorFlow 早在2017年就衍生出 TensorFlow Lite,就可以用來在 Android 上部署深度學習模型。

TensorFlow Lite 是一種用於移動端的開源深度學習框架,最早由谷歌在2017年11月釋出。TensorFlow Lite 可以在 CPU、GPU 上執行,也可以直接透過 NNAPI 執行,算上是應用較多的移動端 ML 框架。

早在2018年,同樣有人使用 MNIST 資料庫,在 Android 裝置上搭建 TensorFlow Lite,實現移動端手寫數字識別。而除了手寫數字識別,TensorFlow Lite 現在還支援構建影象、物體識別模型,智慧回覆、姿勢評估的模型。下面是 TensorFlow Lite 給出的使用流程

  • 選擇並使用一個模型:

TensorFlow Lite 提供系列預訓練模型(pre-trained models)。開發者選擇模型之後,可以透過 transfer learning 重新訓練,以執行其他任務。開發者也可以設計並訓練自己的  TensorFlow Lite 模型。

  • 轉換模型:

TensorFlow Lite 支援部分 TensorFlow 運算子,TensorFlow 模型在被 TensorFlow Lite 使用前,必須轉換成規定的特殊格式。 

TensorFlow Lite 轉換器以 Python API 的形式提供。下面的例子說明瞭將一個 TensorFlow SavedModel 轉換成 TensorFlow Lite 格式的過程舉例:


 import tensorflow as tf
 converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
 tflite_model = converter.convert()
 open("converted_model.tflite", "wb").write(tflite_model)
  • 使用模型推理:

推理是透過模型執行資料以獲得預測的過程。這個過程需要模型、直譯器和輸入資料。TensorFlow Lite 直譯器是一個庫,它接收模型檔案,執行模型檔案在輸入資料上定義的運算子,並提供對輸出的訪問。

該直譯器適用於多個平臺,提供了一個簡單的 API,用於從 Java、Swift、Objective-C、C++ 和 Python 執行 TensorFlow Lite 模型。

下面的程式碼顯示了從 Java 呼叫直譯器的方式:


 try (Interpreter interpreter = new Interpreter(tensorflow_lite_model_file)) {
 
   interpreter.run(input, output);
 
 }
  • 最佳化模型:

TensorFlow Lite 提供最佳化模型大小和效能的工具,通常對準確性影響甚微。最佳化模型可能需要稍微複雜的訓練,轉換或整合。

  • 建立 Android 應用程式示例

如果想使用 TensorFlow Lite 快速編寫 Android 程式碼, 官方推薦使用 Android 影象分類程式碼例子 作為起始點。下面介紹如何在 Android上 使用 TensorFlow Lite。

可以在build.gradle依賴中指定,使用 JCenter 中的 TensorFlow Lite AAR:


 dependencies {
     implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
 }

這個 AAR 包含了 Android ABIs 中的所有的二進位制檔案,可以透過只包含需要支援的 ABIs 減少應用程式的二進位制檔案大小。

官方推薦大部分開發者刪簡 x86x86_64,和arm32 的 ABIs。開發者可以透過如下的Gradle 配置實現,這個配置只包括了 armeabi-v7aarm64-v8a,該配置能涵蓋住大部分的現代 Android 裝置:


 android {
     defaultConfig {
         ndk {
             abiFilters 'armeabi-v7a', 'arm64-v8a'
         }
     }
 }

在本地構建 TensorFlow Lite,可參照自定義 AAR 構建說明 ,建立 AAR 並將其納入 APP 中。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/116050/minist-coreml-training-on-iphone
iPhone 11 訓練神經網路的開源專案火了,準確率可與 i7 MacBook Pro 持平已經有196次圍觀

http://coctec.com/news/all/show-post-236286.html