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

    文章

    1036

    浏览量

    36590
  • 深度学习
    +关注

    关注

    73

    文章

    5604

    浏览量

    124617
  • tensorflow
    +关注

    关注

    13

    文章

    336

    浏览量

    62369

原文标题:深度学习利器:TensorFlow在智能终端中的应用

文章出处:【微信号:worldofai,微信公众号:worldofai】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NPU 上运行了 eIQ TensorFlow Lite 示例模型报错

    我们已经 NPU 上运行了 eIQ TensorFlow Lite 示例模型,但它们失败并出现以下错误: 信息:加载的模型 mobilenet_v1_1.0_224_quant.tflite
    发表于 03-18 06:52

    振动马达智能医疗终端的应用价值与发展趋势

    振动马达作为一种体积小、响应快、控制精度高的执行元件,正逐步成为智能医疗终端不可或缺的关键部件。随着医疗设备向智能化、便携化、人性化方向发展,传统的声光提示方式已无法满足多场景医疗需
    的头像 发表于 02-06 18:46 195次阅读
    振动马达<b class='flag-5'>在</b><b class='flag-5'>智能</b>医疗<b class='flag-5'>终端</b><b class='flag-5'>中</b>的应用价值与发展趋势

    搭载Lora模块的手持便携智能终端PDA

    场景 专为以下工业场景设计: 电力巡检 :无网络环境下实时数据采集与传输 仓储物流 :仓库内设备自组网,实现高效盘点 铁路货运 :列车运行数据实时回传 生产制造 :生产线设备间数据互联互通 野外作业
    发表于 01-12 15:18

    如何在TensorFlow Lite Micro添加自定义操作符(1)

    相信大家部署嵌入式端的AI应用时,一定使用过TensorFlow Lite Micro,以下简称TFLm。TFLm 是专为微控制器和嵌入式设备设计的轻量级机器学习推理框架,它通过模块化的操作符系统
    的头像 发表于 12-26 10:34 5750次阅读

    PDA手持终端仓储管理的6大核心功能与应用场景

    关于智能仓储PDA手持终端(工业级手持机)现代仓储管理的六大核心功能,涵盖入库核验、智能上架、防错拣货、RFID快速
    的头像 发表于 12-22 15:45 655次阅读
    PDA手持<b class='flag-5'>终端</b><b class='flag-5'>在</b>仓储管理<b class='flag-5'>中</b>的6大核心功能与应用场景

    RFID酒店管理的应用

    RFID酒店管理的应用RFID技术通过无线射频识别实现酒店管理全流程智能化,覆盖物品、客房、员工三大核心场景,显著提升效率与安全性。一、酒店物品智能化管理资产追踪与防盗:
    的头像 发表于 11-20 16:58 732次阅读
    RFID<b class='flag-5'>在</b>酒店管理<b class='flag-5'>中</b>的应用

    人工智能AI必备的5款开源软件推荐!

    技术浪潮汹涌的当下,越来越多的企业与开发者开始意识到:“开源”已经不只是一个口号,而是创新的源泉。 从算法研究到智能应用落地,无数项目的起点,都是一个个免费的开源工具。今天,我们就来盘点五款
    的头像 发表于 11-19 15:35 854次阅读
    人工<b class='flag-5'>智能</b>AI必备的5款开源软件推荐!

    仓库盘点误差大总出错,咋整?试试智能盘点解决方法

    仓库盘点频繁账实不符?人工盘点误差高、效率低,还吃掉利润?RFID 智能盘点技术帮你解决!可以2-25 米远距离批量读写,库存准确率飙升
    的头像 发表于 11-05 11:56 585次阅读
    仓库<b class='flag-5'>盘点</b>误差大总出错,咋整?试试<b class='flag-5'>智能</b><b class='flag-5'>盘点</b>解决方法

    新大陆智能终端pda仓储管理如何应用

    现代仓储管理,效率与准确性是企业降本增效的关键,而新大陆智能终端pda的出现,正为仓储管理的数字化升级提供了强有力的支撑。作为专为仓储场景设计的
    的头像 发表于 10-22 16:04 677次阅读
    新大陆<b class='flag-5'>智能</b><b class='flag-5'>终端</b>pda<b class='flag-5'>在</b>仓储管理<b class='flag-5'>中</b>如何应用

    2025年AI 智能终端和SoC芯片解读(

    AI智能终端经验分享
    电子发烧友网官方
    发布于 :2025年09月15日 16:44:48

    2025年AI 智能终端和SoC芯片解读(上)

    AI智能终端经验分享
    电子发烧友网官方
    发布于 :2025年09月15日 16:37:48

    国产力量·稳定赋能:飞腾工控机助力智能终端国产化#

    智能终端
    gnhpc
    发布于 :2025年09月08日 17:33:09

    精准盘点,无忧管理——RFID智能盘点终端解析

    RFID智能盘点终端高效、精准,利用RFID技术实现快速批量识别,实时更新数据,确保库存信息准确无误。其轻便易携设计及简洁操作界面使盘点工作轻松便捷。此外,该
    的头像 发表于 07-14 14:17 710次阅读

    岳冉智能手持终端扫码功能演示 #智能手持终端

    手持终端
    yueranxinxi
    发布于 :2025年05月13日 12:00:06

    FPC标签在盘点中的应用

    快速盘点,提高效率传统的库存盘点方式需要人工逐一扫描条形码,耗时长且效率低下。而RFID手持终端可以一次性读取多个RFID标签,大大提高了盘点速度。例如,某知名服
    的头像 发表于 05-09 15:21 663次阅读
    FPC标签在<b class='flag-5'>盘点</b>中的应用