0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow Lite是TensorFlow針對移動和嵌入式設(shè)備的輕量級解決方案

Tensorflowers ? 來源:未知 ? 作者:李倩 ? 2018-07-31 15:37 ? 次閱讀

TensorFlow Lite 是 TensorFlow 針對移動和嵌入式設(shè)備的輕量級解決方案。它允許您在低延遲的移動設(shè)備上運(yùn)行機(jī)器學(xué)習(xí)模型,因此您可以利用它進(jìn)行分類,回歸或獲取你想要的任何東西,而無需與服務(wù)器交互。

注:TensorFlow Lite 鏈接

https://www.tensorflow.org/mobile/tflite/

目前,TensorFlow Lite 為 AndroidiOS 設(shè)備提供了 C ++ API,并且為 Android 開發(fā)人員提供了 Java Wrapper。此外,在 Android 設(shè)備上,解釋器還可以使用 Android 經(jīng)網(wǎng)絡(luò) API 進(jìn)行硬件加速,否則它將默認(rèn)為 CPU 執(zhí)行。在本文中,我將重點(diǎn)介紹如何在 Android 應(yīng)用中使用它。

TensorFlow Lite 包含一個運(yùn)行時環(huán)境,我們可以在其上運(yùn)行預(yù)先存在的模型,并且它還提供了一套工具,可以為移動和嵌入式設(shè)備準(zhǔn)備模型。

TensorFlow Lite 目前尚未支持訓(xùn)練模型。我們可以在高性能的機(jī)器上訓(xùn)練模型,然后將該模型轉(zhuǎn)換為 TFLITE 格式,最終將其加載到解釋器中。

TensorFlow Lite 目前處于開發(fā)人員預(yù)覽階段,因此可能不支持 TensorFlow 模型中的所有操作。但是它支持常見的圖像分類模型,包括 Inception 和 MobileNets。在本文中,您將了解如何在 Android 上運(yùn)行 MobileNet 模型。該應(yīng)用程序?qū)⒉榭聪鄼C(jī)信息并使用經(jīng)過訓(xùn)練的 MobileNet 對圖像進(jìn)行分類。

將 TensorFlow Lite 與 MobileNets 配合使用

例如,在這張圖片中,我將相機(jī)對準(zhǔn)了我最喜歡的咖啡杯,應(yīng)用程序?qū)⑺鼩w類為 “杯子”。有趣的是,它有一個寬大的手柄,你可以看到它非常像一個茶壺!

這是如何做到的?它使用 MobileNet 模型,該模型針對移動設(shè)備上的多種圖像場景進(jìn)行設(shè)計和優(yōu)化,包括對象檢測,分類,面部屬性檢測和地標(biāo)識別。

MobileNet 有許多變種,在此站點(diǎn)托管了 TensorFlow Lite 的訓(xùn)練模型。你會注意到每個文件都是一個包含兩個文件的 zip 包:一個 labels.txt 文件,其中包含與模型相關(guān)的標(biāo)簽;一個 tflite 文件,其中包含可以與 TensorFlow Lite 一起使用的模型版本。如果你想要構(gòu)建一個使用 MobileNets 的 Android 應(yīng)用程序,則需要從此站點(diǎn)下載模型。你馬上就會看到。

使用 TensorFlow Lite 構(gòu)建 Android 應(yīng)用程序

要構(gòu)建使用 TensorFlow Lite 的 Android 應(yīng)用程序,首先需要將 tensorflow-lite 庫添加到您的應(yīng)用程序中。這可以通過將以下行添加到 build.gradle 文件的依賴項(xiàng)部分來完成:

compile ‘org.tensorflow:tensorflow-lite:+’

完成此操作后,你可以導(dǎo)入 TensorFlow Lite 解釋器。解釋器通過為其提供一組輸入來加載模型并允許你運(yùn)行它。然后 TensorFlow Lite 將執(zhí)行模型并輸出結(jié)果,這真的很簡單。

import org.tensorflow.lite.Interpreter;

要使用它,你需要創(chuàng)建一個 Interpreter 實(shí)例,然后使用 MappedByteBuffer 加載它。

protected Interpreter tflite;tflite = new Interpreter(loadModelFile(activity));

在 GitHub 上的 TensorFlow Lite 示例中有一個輔助函數(shù)。只需確保函數(shù) getModelPath() 返回一個指向特定模型的路徑,并且加載該模型。

注:TensorFlow Lite 示例鏈接

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/java/demo/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java

/** Memory-map the model file in Assets. */privateMappedByteBuffer loadModelFile(Activity activity)throwsIOException {AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(getModelPath());FileInputStream inputStream =newFileInputStream(fileDescriptor.getFileDescriptor());FileChannel fileChannel = inputStream.getChannel();longstartOffset = fileDescriptor.getStartOffset();longdeclaredLength = fileDescriptor.getDeclaredLength();returnfileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);}

然后,要對圖像進(jìn)行分類,我們只需要在 Interpeter 上調(diào)用 run 方法,并將圖像數(shù)據(jù)和標(biāo)簽數(shù)組傳遞給它,它將完成剩下的工作:

tflite.run(imgData, labelProbArray);

詳細(xì)介紹如何從相機(jī)中獲取圖像,并為 tflite 做準(zhǔn)備超出了本文的范圍,但是在 tensorflow github 中有一個完整示例詳細(xì)闡明了這一切。通過單步執(zhí)行此示例,你可以了解到如何從相機(jī)中獲取圖像,如何利用數(shù)據(jù)進(jìn)行分類,以及如何采用將加權(quán)輸出優(yōu)先級列表從模型映射到標(biāo)簽數(shù)組的方式來處理輸出。

要運(yùn)行該示例,請確保擁有完整的 TensorFlow 源代碼。你可以通過以下方式獲取源代碼:

> git clone https://www.github.com/tensorflow/tensorflow

完成后,你可以利用 Android Studio 打開 TensorFlow 示例項(xiàng)目(示例代碼路徑為:

/tensorflow/contrib/lite/java/demo):

演示文件不包含任何模型,但我們需要使用 mobilenet_quant_v1_224.tflite 文件,我們可以通過這個網(wǎng)站下載該模型。最后解壓縮并將其放在 assets 文件夾中。

注:這個網(wǎng)站鏈接

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/models.md

現(xiàn)在應(yīng)該能夠運(yùn)行該應(yīng)用程序了。

請注意,該應(yīng)用程序同時支持 Inception 和 Quantized MobileNet。它默認(rèn)支持后者,因此您需要確保模型存在,否則應(yīng)用程序?qū)⑦\(yùn)行失敗。可以在 ImageClassifier.java 文件中找到用于從相機(jī)捕獲數(shù)據(jù)并將其轉(zhuǎn)換為字節(jié)緩沖區(qū)以便加載到模型中的代碼。

核心功能可以在 Camera2BasicFragment.java 文件的 classifyFrame() 方法中找到:

/** Classifies a frame from the preview stream. */

private voidclassifyFrame() { if(classifier==null|| getActivity() ==null||cameraDevice== null) { showToast(“Uninitialized Classifier or invalid context.”) return;}Bitmap bitmap =textureView.getBitmap( classifier.getImageSizeX(),classifier.getImageSizeY());String textToShow =classifier.classifyFrame(bitmap);bitmap.recycle();showToast(textToShow);}

在這里,您可以看到位圖加載并調(diào)整為適合分類器的大小。然后 classifyFrame() 方法將返回包含與圖像匹配的前 3 個類的列表及其權(quán)重的文本。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8323

    瀏覽量

    132165
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    328

    瀏覽量

    60444
  • TensorFlow Lite
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    586

原文標(biāo)題:在 Android 上使用 TensorFlow Lite

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    一個面向嵌入式系統(tǒng)的輕量級框架

    mr-library 是一個面向嵌入式系統(tǒng)的輕量級框架,提供統(tǒng)一的底層驅(qū)動設(shè)備模型以及基礎(chǔ)服務(wù)功能,具有模塊化設(shè)計、可配置性和擴(kuò)展性的特點(diǎn), 可幫助開發(fā)者快速構(gòu)建嵌入式應(yīng)用程序。
    發(fā)表于 09-01 12:22 ?513次閱讀

    如何使用i.MX RT1060跨接MCU通過TensorFlow Lite實(shí)施數(shù)字識別

    獲得了Google的出色在線文檔,學(xué)習(xí)資源,指南和示例。為了使受計算限制的機(jī)器(例如移動設(shè)備嵌入式解決方案)能夠運(yùn)行TensorFlow應(yīng)
    發(fā)表于 09-29 09:40

    【飛凌嵌入式OKMX8MP-C 開發(fā)板試用體驗(yàn)】tensorflow-lite-2.6編譯&運(yùn)行l(wèi)abel_image例程

    本帖最后由 donatello1996 于 2022-4-18 23:35 編輯 【飛凌嵌入式OKMX8MP-C 開發(fā)板試用體驗(yàn)】tensorflow-lite-2.6編譯&運(yùn)行
    發(fā)表于 02-21 00:26

    如何將TensorFlow Lite應(yīng)用程序移植到Arm Cortex-M55系統(tǒng)上

    ARM Cortex-M55處理器是第一個采用ARMv8.1-M架構(gòu)的處理器,該架構(gòu)包括ARM Helium技術(shù)(也稱為M-profile矢量擴(kuò)展(MVE))的實(shí)現(xiàn)。Helium技術(shù)可在下一代嵌入式
    發(fā)表于 03-31 10:40

    tensorflow lite上的未定義引用是怎么回事?

    我在 LPC55S69 上構(gòu)建了一個 cifar-10 tensorflow lite 項(xiàng)目,在那里我得到了很多與 TensorFlow lite 相關(guān)的未定義引用。在附件里(請用no
    發(fā)表于 04-04 08:09

    是什么導(dǎo)致TensorFlow Lite的NNAPI Delegate被棄用?

    在i.MX Machine Learning User\'s Guide LF5.15.5-1.0.0中,我發(fā)現(xiàn)了如下release note語句:TensorFlow Lite 的 NNAPI
    發(fā)表于 04-07 10:25

    tensorflow-lite可以通過NPU加速運(yùn)行嗎?

    你能幫我確定構(gòu)建/安裝所需的最小包,以便 tensorflow-lite 可以通過 NPU 加速運(yùn)行嗎?我知道 NPX 將它捆綁為 packagegroup-imx-ml - 但它包含的內(nèi)容遠(yuǎn)遠(yuǎn)
    發(fā)表于 04-14 08:17

    如何使用meta-imx層中提供的tensorflow-lite編譯圖像?

    我們正在嘗試使用 meta-imx 層中提供的 tensorflow-lite 編譯圖像。我們沒有任何 自定義更改/bbappends (Highlight to read)sources
    發(fā)表于 05-29 06:55

    如何使用TensorFlow將神經(jīng)網(wǎng)絡(luò)模型部署到移動嵌入式設(shè)備

    有很多方法可以將經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型部署到移動嵌入式設(shè)備上。不同的框架在各種平臺上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如And
    發(fā)表于 08-02 06:43

    基于Linux的輕量級嵌入式GUI系統(tǒng)及實(shí)現(xiàn)

    本文介紹了嵌入式圖形用戶界面(GUI)的特點(diǎn)、發(fā)展概況以及嵌入式圖形用戶界的實(shí)現(xiàn)方法。針對開發(fā)自主、輕型、占用資源少可配置的GUI系統(tǒng),提出了輕量級GUI系統(tǒng)的設(shè)計實(shí)現(xiàn)
    發(fā)表于 08-31 11:52 ?23次下載

    用于移動設(shè)備的框架TensorFlow Lite發(fā)布重大更新

    在Pixel 3的人像模式(Portrait mode)中,與使用CPU相比,使用GPU的Tensorflow Lite,用于摳圖/背景虛化的前景-背景分隔模型加速了4倍以上。新深度估計(depth estimation)模型加速了10倍以上。
    的頭像 發(fā)表于 01-21 13:45 ?3626次閱讀

    TensorFlow Lite 微控制器

    TensorFlow Lite for Microcontrollers 是 TensorFlow Lite 的一個實(shí)驗(yàn)性移植版本,它適用于微控制器和其他一些僅有數(shù)千字節(jié)內(nèi)存的
    的頭像 發(fā)表于 08-05 10:11 ?5w次閱讀
    <b class='flag-5'>TensorFlow</b> <b class='flag-5'>Lite</b> 微控制器

    基于TensorFlow Lite的幾項(xiàng)技術(shù)更新

    TensorFlow Lite 版本現(xiàn)已在 TensorFlow Hub 上推出。我們對該版本進(jìn)行了一些可提升準(zhǔn)確率的更新,并使其與硬件加速器兼容,其中包括 GPU 和獲得 Android NN API 支持的其他
    的頭像 發(fā)表于 09-23 15:38 ?2130次閱讀

    Tensorflow Lite 使用與優(yōu)化

    Tensorflow Lite 的基本框架如上。數(shù)據(jù)存儲的結(jié)構(gòu)是Flatbuffer。執(zhí)行上次結(jié)構(gòu)支持Keras 和Estimator和Legacy等等。而下層支持NN API、GP...
    發(fā)表于 01-25 17:48 ?2次下載
    <b class='flag-5'>Tensorflow</b> <b class='flag-5'>Lite</b> 使用與優(yōu)化

    深度詳解嵌入式系統(tǒng)專用輕量級框架設(shè)計

    MR 框架是專為嵌入式系統(tǒng)設(shè)計的輕量級框架。充分考慮了嵌入式系統(tǒng)在資源和性能方面的需求。通過提供標(biāo)準(zhǔn)化的設(shè)備管理接口,極大簡化了嵌入式應(yīng)用開
    發(fā)表于 04-27 02:32 ?827次閱讀
    深度詳解<b class='flag-5'>嵌入式</b>系統(tǒng)專用<b class='flag-5'>輕量級</b>框架設(shè)計