在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

盤點TensorFlow在智能終端中的應用

jmiy_worldofai ? 來源:未知 ? 作者:胡薇 ? 2018-09-29 11:33 ? 次閱讀

深度學習在圖像處理、語音識別、自然語言處理領域的應用取得了巨大成功,但是它通常在功能強大的服務器端進行運算。

如果智能手機通過網絡遠程連接服務器,也可以利用深度學習技術,但這樣可能會很慢,而且只有在設備處于良好的網絡連接環境下才行,這就需要把深度學習模型遷移到智能終端。

由于智能終端CPU和內存資源有限,為了提高運算性能和內存利用率,需要對服務器端的模型進行量化處理并支持低精度算法TensorFlow版本增加了對AndroidiOS和Raspberry Pi硬件平臺的支持,允許它在這些設備上執行圖像分類等操作。這樣就可以創建在智能手機上工作并且不需要云端每時每刻都支持的機器學習模型,帶來了新的APP。

本文主要基于看花識名APP應用,講解TensorFlow模型如何應用于Android系統;在服務器端訓練TensorFlow模型,并把模型文件遷移到智能終端;TensorFlow Android開發環境構建以及應用開發API。

看花識名APP

使用AlexNet模型、Flowers數據以及Android平臺構建了“看花識名”APP。TensorFlow模型對五種類型的花數據進行訓練。如下圖所示:

Daisy:雛菊

Dandelion:蒲公英

Roses:玫瑰

Sunflowers:向日葵

Tulips:郁金香

在服務器上把模型訓練好后,把模型文件遷移到Android平臺,在手機上安裝APP。使用效果如下圖所示,界面上端顯示的是模型識別的置信度,界面中間是要識別的花:

TensorFlow模型如何應用于看花識名APP中,主要包括以下幾個關鍵步驟:模型選擇和應用、模型文件轉換以及Android開發。如下圖所示:

模型訓練及模型文件

本章采用AlexNet模型對Flowers數據進行訓練。AlexNet在2012取得了ImageNet最好成績,top 5準確率達到80.2%。這對于傳統的機器學習分類算法而言,已經相當出色。模型結構如下:

本文采用TensorFlow官方Slim(https://github.com/tensorflow/models/tree/master/slim)AlexNet模型進行訓練。

首先下載Flowers數據,并轉換為TFRecord格式:

DATA_DIR=/tmp/data/flowers python download_and_convert_data.py --dataset_name=flowers --dataset_dir="${DATA_DIR}"

執行模型訓練,經過36618次迭代后,模型精度達到85%

TRAIN_DIR=/tmp/data/train python train_image_classifier.py --train_dir=${TRAIN_DIR} --dataset_dir=${DATASET_DIR} --dataset_name=flowers --dataset_split_name=train --model_name=alexnet_v2 --preprocessing_name=vgg

生成Inference Graph的PB文件

python export_inference_graph.py --alsologtostderr --model_name=alexnet_v2 --dataset_name=flowers --dataset_dir=${DATASET_DIR} --output_file=alexnet_v2_inf_graph.pb

結合CheckPoint文件和Inference GraphPB文件,生成Freeze Graph的PB文件

python freeze_graph.py --input_graph=alexnet_v2_inf_graph.pb --input_checkpoint= ${TRAIN_DIR}/model.ckpt-36618 --input_binary=true --output_graph=frozen_alexnet_v2.pb --output_node_names=alexnet_v2/fc8/squeezed

對Freeze Graph的PB文件進行數據量化處理,減少模型文件的大小,生成的quantized_alexnet_v2_graph.pb為智能終端中應用的模型文件

bazel-bin/tensorflow/tools/graph_transforms/transform_graph --in_graph=frozen_alexnet_v2.pb --outputs="alexnet_v2/fc8/squeezed" --out_graph=quantized_alexnet_v2_graph.pb --transforms='add_default_attributes strip_unused_nodes(type=float, shape="1,224,224,3") remove_nodes(op=Identity, op=CheckNumerics) fold_constants(ignore_errors=true) fold_batch_norms fold_old_batch_norms quantize_weights quantize_nodes strip_unused_nodes sort_by_execution_order'

為了減少智能終端上模型文件的大小,TensorFlow中常用的方法是對模型文件進行量化處理,本文對AlexNet CheckPoint文件進行Freeze和Quantized處理后的文件大小變化如下圖所示:

量化操作的主要思想是在模型的Inference階段采用等價的8位整數操作代替32位的浮點數操作,替換的操作包括:卷積操作、矩陣相乘、激活函數、池化操作等。量化節點的輸入、輸出為浮點數,但是內部運算會通過量化計算轉換為8位整數(范圍為0到255)的運算,浮點數和8位量化整數的對應關系示例如下圖所示:

量化Relu操作的基本思想如下圖所示:

TensorFlow Android應用開發環境構建

在Android系統上使用TensorFlow模型做Inference依賴于兩個文件libtensorflow_inference.so和libandroid_tensorflow_inference_java.jar。這兩個文件可以通過下載TensorFlow源代碼后,采用bazel編譯出來,如下所示:

下載TensorFlow源代碼

git clone --recurse-submoduleshttps://github.com/tensorflow/tensorflow.git

下載安裝Android NDK

下載安裝Android SDK

配置tensorflow/WORKSPACE中android開發工具路徑

android_sdk_repository(name = "androidsdk", api_level = 23, build_tools_version = "25.0.2", path = "/opt/android",) android_ndk_repository(name="androidndk", path="/opt/android/android-ndk-r12b", api_level=14)

編譯libtensorflow_inference.so

bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so --crosstool_top=//external:android/crosstool --host_crosstool_top= @bazel_tools//tools/cpp:toolchain --cpu=armeabi-v7a

編譯libandroid_tensorflow_inference_java.jar

bazel build //tensorflow/contrib/android:android_tensorflow_inference_java

TensorFlow提供了Android開發的示例框架,下面基于AlexNet模型的看花識名APP做一些相應源碼的修改,并編譯生成Android的安裝包:

基于AlexNet模型,修改Inference的輸入、輸出的Tensor名稱

private static final String INPUT_NAME = "input"; private static final String OUTPUT_NAME = "alexnet_v2/fc8/squeezed";

放置quantized_alexnet_v2_graph.pb和對應的labels.txt文件到assets目錄下,并修改Android文件路徑

private static final String MODEL_FILE = "file:///android_asset/quantized_alexnet_v2_graph.pb"; private static final String LABEL_FILE = "file:///android_asset/labels.txt";

編譯生成安裝包

bazel build -c opt //tensorflow/examples/android:tensorflow_demo

拷貝tensorflow_demo.apk到手機上,并執行安裝,太陽花識別效果如下圖所示:

(點擊放大圖像)

TensorFlow移動端應用開發API

在Android系統中執行TensorFlow Inference操作,需要調用libandroid_tensorflow_inference_java.jar中的JNI接口,主要接口如下:

構建TensorFlow Inference對象,構建該對象時候會加載TensorFlow動態鏈接庫libtensorflow_inference.so到系統中;參數assetManager為android asset管理器;參數modelFilename為TensorFlow模型文件在android_asset中的路徑。

TensorFlowInferenceInterface inferenceInterface = new TensorFlowInferenceInterface(assetManager, modelFilename);

向TensorFlow圖中加載輸入數據,本App中輸入數據為攝像頭截取到的圖片;參數inputName為TensorFlow Inference中的輸入數據Tensor的名稱;參數floatValues為輸入圖片的像素數據,進行預處理后的浮點值;[1,inputSize,inputSize,3]為裁剪后圖片的大小,比如1張224*224*3的RGB圖片。

inferenceInterface.feed(inputName, floatValues, 1, inputSize, inputSize, 3);

執行模型推理; outputNames為TensorFlow Inference模型中要運算Tensor的名稱,本APP中為分類的Logist值。

inferenceInterface.run(outputNames);

獲取模型Inference的運算結果,其中outputName為Tensor名稱,參數outputs存儲Tensor的運算結果。本APP中,outputs為計算得到的Logist浮點數組。

inferenceInterface.fetch(outputName, outputs);

總結

本文基于看花識名APP,講解了TensorFlow在Android智能終端中的應用技術。首先回顧了AlexNet模型結構,基于AlexNet的slim模型對Flowers數據進行訓練;對訓練后的CheckPoint數據,進行Freeze和Quantized處理,生成智能終端要用的Inference模型。然后介紹了TensorFlow Android應用開發環境的構建,編譯生成TensorFlow在Android上的動態鏈接庫以及java開發包;文章最后介紹了Inference API的使用方式。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 智能終端
    +關注

    關注

    6

    文章

    896

    瀏覽量

    34936
  • 深度學習
    +關注

    關注

    73

    文章

    5523

    瀏覽量

    121714
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60679

原文標題:深度學習利器:TensorFlow在智能終端中的應用

文章出處:【微信號:worldofai,微信公眾號:worldofai】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    工業級智能手持終端:倉庫盤點與出入庫管理的得力助手

    在當今快節奏的商業環境,倉庫管理的效率和準確性對于企業的運營至關重要。工業級智能手持終端的出現,為倉庫盤點與出入庫管理帶來了革命性的變化。工業級
    的頭像 發表于 01-08 16:09 ?144次閱讀
    工業級<b class='flag-5'>智能</b>手持<b class='flag-5'>終端</b>:倉庫<b class='flag-5'>盤點</b>與出入庫管理的得力助手

    重磅盤點 | 自連智能終端明星產品系列

    無論工業、醫療、城市還是教育領域,當前各行各業都迎來了智慧升級的快速發展。作為深耕物聯網10年的通信老兵,自連自主研發的智能終端產品系列,不同場景中發揮著應有的重要作用。今天,小編
    的頭像 發表于 10-24 17:25 ?246次閱讀

    智能AI終端故障診斷具體是如何工作的?

    梯云物聯的智能AI終端故障診斷扮演著至關重要的角色。這一系統通過集成先進的物聯網技術、大數據分析和人工智能算法,實現了電梯維保與急修的精
    的頭像 發表于 10-17 11:46 ?315次閱讀

    第四章: PC 交叉編譯 aarch64 的 tensorflow 開發環境并測試

    本文介紹了 PC 端交叉編譯 aarch64 平臺的 tensorflow 庫而非 tensorflow lite 的心酸過程。
    的頭像 發表于 08-25 11:38 ?1473次閱讀
    第四章:<b class='flag-5'>在</b> PC 交叉編譯 aarch64 的 <b class='flag-5'>tensorflow</b> 開發環境并測試

    如何在Tensorflow實現反卷積

    TensorFlow實現反卷積(也稱為轉置卷積或分數步長卷積)是一個涉及多個概念和步驟的過程。反卷積在深度學習領域,特別是圖像分割、圖像超分辨率、以及生成模型(如生成對抗網絡GA
    的頭像 發表于 07-14 10:46 ?758次閱讀

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google開發的一個開源深度學習框架,它允許開發者方便地構建、訓練和部署各種復雜的機器學習模型。TensorFlow憑借其高效的計算性能、靈活的架構以及豐富的工具和庫,在學
    的頭像 發表于 07-12 16:38 ?905次閱讀

    tensorflow和pytorch哪個更簡單?

    PyTorch更簡單。選擇TensorFlow還是PyTorch取決于您的具體需求和偏好。如果您需要一個易于使用、靈活且具有強大社區支持的框架,PyTorch可能是一個更好的選擇。如果您需要一個
    的頭像 發表于 07-05 09:45 ?1086次閱讀

    tensorflow和pytorch哪個好

    tensorflow和pytorch都是非常不錯的強大的框架,TensorFlow還是PyTorch哪個更好取決于您的具體需求,以下是關于這兩個框架的一些關鍵點: TensorFlow : 發布時間
    的頭像 發表于 07-05 09:42 ?812次閱讀

    tensorflow簡單的模型訓練

    本文中,我們將詳細介紹如何使用TensorFlow進行簡單的模型訓練。TensorFlow是一個開源的機器學習庫,廣泛用于各種機器學習任務,包括圖像識別、自然語言處理等。我們將從安裝
    的頭像 發表于 07-05 09:38 ?864次閱讀

    keras模型轉tensorflow session

    在這篇文章,我們將討論如何將Keras模型轉換為TensorFlow session。 Keras和TensorFlow簡介 Keras是一個高級神經網絡API,它提供了一種簡單、快速的方式來構建
    的頭像 發表于 07-05 09:36 ?624次閱讀

    TensorFlow的定義和使用方法

    TensorFlow是一個由谷歌人工智能團隊谷歌大腦(Google Brain)開發和維護的開源機器學習庫。它基于數據流編程(dataflow programming)的概念,將復雜的數學運算表示為
    的頭像 發表于 07-02 14:14 ?998次閱讀

    TensorFlow與PyTorch深度學習框架的比較與選擇

    深度學習作為人工智能領域的一個重要分支,在過去十年取得了顯著的進展。構建和訓練深度學習模型的過程,深度學習框架扮演著至關重要的角色。Tenso
    的頭像 發表于 07-02 14:04 ?1178次閱讀

    工控電腦一體機商業智能終端的應用

     工控電腦一體機商業智能終端的應用,主要體現在其高穩定性、強大的數據處理能力以及適應復雜商業環境的能力上。以下是工控電腦一體機商業
    的頭像 發表于 06-20 09:46 ?574次閱讀
    工控電腦一體機<b class='flag-5'>在</b>商業<b class='flag-5'>智能</b><b class='flag-5'>終端</b><b class='flag-5'>中</b>的應用

    手持PDA終端固定資產盤點中的應用方案

    隨著科技的迅猛發展,手持式數據采集(PDA)終端已成為企業盤點固定資產不可或缺的工具。借助條碼掃描及無線射頻識別(RFID)技術,手持PDA終端極大地促進了盤點效率和準確性的提升。以下
    的頭像 發表于 06-18 15:06 ?587次閱讀
    手持PDA<b class='flag-5'>終端</b><b class='flag-5'>在</b>固定資產<b class='flag-5'>盤點</b>中的應用方案

    pda手持終端,小型公司使用用于倉庫出入庫、倉庫盤點

    小型公司,PDA手持終端可以很好地滿足倉庫出入庫和盤點的需求,尤其不需要聯網的情況下。PDA手持
    的頭像 發表于 05-15 10:59 ?547次閱讀
    pda手持<b class='flag-5'>終端</b>,小型公司使用用于倉庫出入庫、倉庫<b class='flag-5'>盤點</b>
    主站蜘蛛池模板: 天堂资源在线种子资源 | 77788色淫视频免费观看 | 亚洲视频在线视频 | 日日射天天射 | 男女视频在线 | www男人的天堂 | 扒开末成年粉嫩的小缝强文 | 亚洲精品蜜桃久久久久久 | 2022国产情侣真实露脸在线 | 成人www视频| jlzzjlzzjlzz亚洲女 | 人人干人人干人人干 | 精品国产免费一区二区 | 国产精品成人观看视频国产奇米 | 婷婷四房综合激情五月性色 | 欧美a在线播放 | 亚洲高清毛片 | 久久久久四虎国产精品 | 国产毛片农村妇女aa板 | 日本三级带日本三级带黄首页 | 国产高清视频免费最新在线 | 久久丁香视频 | 综合爱爱 | 婷婷亚洲综合 | 久久夜色精品国产噜噜 | 8050网午夜 | 美女黄页网站免费进入 | 亚洲一区二区三区免费在线观看 | 一级视频片 | 亚洲毛片网 | 欧美性hd| 欧美一级色 | 国产区一区二区三区 | 国产你懂 | 视频一区二区三区在线观看 | xx视频在线观看 | 国产女人和拘做受视频免费 | 网色视频 | 成人欧美一区二区三区 | 国产成人精品一区二区仙踪林 | 精品久久久久久午夜 |