iPhone 11 训练神经网络的开源项目火了,准确率可与 i7 MacBook Pro 持平
前幾天有人發(fā)布了一個可以在 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 開發(fā)。
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 系統(tǒng)中也有類似的工具——NNAPI。NNAPI 是一個 Android C API,它為構建和訓練 ML框架,如TensorFlow Lite、Caffe 2提供基礎功能層,類似 ios 中的 Core ML。NNAPI 通過機器學習庫、框架和工具調用,這些工具可以幫助開發(fā)者脫離設備訓練模型,并完成部署。應用一般不會直接使用 NNAPI,而是直接使用更高級的 ML 框架。
圖(NNAPI 高級系統(tǒng)架構)
使用TensorFlow Lite 部署深度學習模型
Android設備基于NNAPI,還需要通過一些 ML 框架實現 AI 應用開發(fā)。被項目作者拿來做對比的 TensorFlow 早在2017年就衍生出 TensorFlow Lite,就可以用來在 Android 上部署深度學習模型。
TensorFlow Lite是一種用于移動端的開源深度學習框架,最早由谷歌在2017年11月發(fā)布。TensorFlow Lite 可以在 CPU、GPU 上運行,也可以直接通過 NNAPI 運行,算上是應用較多的移動端 ML 框架。
早在2018年,同樣有人使用 MNIST 數據庫,在 Android 設備上搭建 TensorFlow Lite,實現移動端手寫數字識別。而除了手寫數字識別,TensorFlow Lite 現在還支持構建圖像、物體識別模型,智能回復、姿勢評估的模型。下面是 TensorFlow Lite 給出的使用流程。
-
選擇并使用一個模型:
TensorFlow Lite 提供系列預訓練模型(pre-trained models)。開發(fā)者選擇模型之后,可以通過 transfer learning 重新訓練,以執(zhí)行其他任務。開發(fā)者也可以設計并訓練自己的 TensorFlow Lite 模型。
-
轉換模型:
TensorFlow Lite 支持部分 TensorFlow 運算符,TensorFlow 模型在被 TensorFlow Lite 使用前,必須轉換成規(guī)定的特殊格式。
TensorFlow Lite轉換器以 Python API 的形式提供。下面的例子說明了將一個 TensorFlowSavedModel轉換成 TensorFlow Lite 格式的過程舉例:
importtensorflowastfconverter=tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)tflite_model=converter.convert()open("converted_model.tflite","wb").write(tflite_model)
-
使用模型推理:
推理是通過模型運行數據以獲得預測的過程。這個過程需要模型、解釋器和輸入數據。TensorFlow Lite 解釋器是一個庫,它接收模型文件,執(zhí)行模型文件在輸入數據上定義的運算符,并提供對輸出的訪問。
該解釋器適用于多個平臺,提供了一個簡單的 API,用于從 Java、Swift、Objective-C、C++ 和 Python 運行 TensorFlow Lite 模型。
下面的代碼顯示了從 Java 調用解釋器的方式:
try(Interpreterinterpreter=newInterpreter(tensorflow_lite_model_file)){interpreter.run(input,output);}
-
優(yōu)化模型:
TensorFlow Lite 提供優(yōu)化模型大小和性能的工具,通常對準確性影響甚微。優(yōu)化模型可能需要稍微復雜的訓練,轉換或集成。
-
創(chuàng)建 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 減少應用程序的二進制文件大小。
官方推薦大部分開發(fā)者刪簡x86,x86_64,和arm32的 ABIs。開發(fā)者可以通過如下的Gradle 配置實現,這個配置只包括了armeabi-v7a和arm64-v8a,該配置能涵蓋住大部分的現代 Android 設備:
android{defaultConfig{ndk{abiFilters'armeabi-v7a','arm64-v8a'}}}
在本地構建 TensorFlow Lite,可參照自定義 AAR 構建說明,創(chuàng)建 AAR 并將其納入 APP 中。
總結
以上是生活随笔為你收集整理的iPhone 11 训练神经网络的开源项目火了,准确率可与 i7 MacBook Pro 持平的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个男性好听的名字!
- 下一篇: 求一个qq乐园网名!