前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >教程 | 如何在手机上使用TensorFlow

教程 | 如何在手机上使用TensorFlow

作者头像
AI科技大本营
发布于 2018-04-26 08:44:14
发布于 2018-04-26 08:44:14
2.6K00
代码可运行
举报
运行总次数:0
代码可运行

翻译 | AI科技大本营

参与 | zzq

审校 | reason_W

我们知道,TensorFlow是一个深度学习框架,它通常用来在服务器上训练需要大量数据的大模型。随着智能手机的普及,人们也越来越注意到手机这个巨大的新兴市场,这个市场未来的发展同样也需要人工智能。过去的几年,市场上涌现出了很多热爱机器学习并且愿意迫切推动人工智能发展的人,而现在他们已经开始向手机这个数万亿美元的市场砸钱了。

而能够在智能手机上运行TensorFlow的工具也已经被开发了出来。你是否也曾想过自己在手机上训练一个深度学习模型呢?如果你手边正好有一部Android或者iOS系统的手机的话,那刚好可以跟着这篇教程来做。

下面我将给出两个教程,一个是在安卓系统运行机器学习模型的方法,另一个则是在ios设备上运行机器学习模型的方法。

我们以在手机上实现一个图像分类功能为例。总体思路十分简单:首先使用Inception-v3模型,只对它的最后一层重新训练,然后对模型进行优化,最后嵌入到手机设备上就可以使用了。

在本教程中,ios设备需要6步,而安卓设备仅需要5步,我们将首先介绍这两种设备中相同的前三步,然后分别介绍之后的步骤。

▌步骤一:使用TensorFlow创建模型

首先,我们需要在电脑或者服务器上先使用TensorFlow创建好一个模型。因为本文是在手机上使用TensorFlow的教程,所以我就假设你已经熟练掌握创建模型这一步了。

没有掌握也没有关系,我推荐给你一个快速入门的教程如何利用用户图像在CPU上训练Inception模型

(https://towardsdatascience.com/training-inception-with-tensorflow-on-custom-images-using-cpu-8ecd91595f26)。

好了,回到本文,我们现在就得到一个已经训练好的模型了。

我们以花为例,在训练模型时,使用的数据:包括郁金香、雏菊、向日葵、蒲公英和玫瑰。当然你也可以使用其它种类的数据对模型进行训练。

之后,你会得到两个文件。首先是对所选网络最后一层重新训练以后的模型版本:

之后,你会得到两个文件。首先是对所选网络最后一层重新训练以后的模型版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tf_files/retrained_graph.pb

然后是一个包含类别标签的文本文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tf_files/retrained_labels.txt

▌步骤二:创建一个优化的模型

运行下面的命令行(请确保路径是正确的)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m tensorflow.python.tools.optimize_for_inference \
  --input=tf_files/retrained_graph.pb \
  --output=tf_files/optimized_graph.pb \
  --input_names="input" \
--output_names="final_result"

这将创建一个新的优化模型文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tf_files/optimized_graph.pb

折中方案

为了减少应用程序中需要进行的预处理工作,同时也为了降低库的大小,TensorFlow只支持在推理过程中常用到的操作子集。不支持的操作过程可以查看这个链接。

(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/makefile/tf_op_files.txt)

现在,我们只要需要刚刚创建的图文件包含后面的操作就行了。

校验

为了确保之前创建的新的优化图能够正常运行,同时也为了移除optimize_for_inference文件中多余的输入和输出节点——这些节点不会改变网络的输出,我们需要进行校验。

使用图retrained_graph.pb和optimized_graph.pb中的label_file对相同的输出图像进行对比:

retrained_graph.pb使用如下指令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m scripts/label_image \
  --graph=tf_files/retrained_graph.pb\
--image=tf_files/flower_photos/daisy/3475870145_685a19116d.jpg

optimized_graph.pb使用如下指令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m scripts/label_image \
    --graph=tf_files/optimized_graph.pb \
--image=tf_files/flower_photos/daisy/3475870145_685a19116d.jpg

执行这些命令,如果两个输出相同,则意味着我们完美创建了optimize_graph.pb 。

▌步骤三:模型量化和压缩

由于我们要将模型嵌入到手机上,模型的大小就成了一个问题,手机无法处理如此巨大的模型。因为图所占用的大部分空间都是由权重构成的,这些权重是一些变化很小的浮点数,同时规律性又很小。

但是,数据压缩的工作原理又是基于数据中的规律性,这就会为模型压缩带来困难性。通过对网络的权重按因子进行量化,可以减小神经网络的大小。这会在网络图中带来更多的相同大小的权重(即重复),在之后的压缩中有很大的帮助。

现在我们使用quantize_graph脚本来对网络结构进行量化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m scripts/quantize_graph \
  --input=tf_files/optimized_graph.pb \
  --output=tf_files/rounded_graph.pb \
  --output_node_names=final_result \
--mode=weights_rounded

然后对模型进行压缩:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gzip -c tf_files/rounded_graph.pb > tf_files/rounded_graph.pb.gz
gzip -l tf_files/rounded_graph.pb.gz

这将创建一个名为rounded_graph.pb的文件。我们可以从中看到压缩情况有了明显的改善。

注意:如果运行quantize_graph时遇到任何错误,请下载此文件并将其复制到tensorflow库(TensorFlow安装位置)中的tools / quantization / quantanti_graph.py中。

从下面开始,教程将分为Android和iOS系统两部分。

iOS

▌步骤四:添加TensorFlow-experimental pod

将TensorFlow-experimental pod添加到你的pod文件中,这会安装一个通用二进制框架。这是在iOS上运行Tensorflow的最简单的方法。

▌步骤五:创建你的App

创建你自己的应用程序或者在XCode中加载已经创建好的的应用程序。

在项目根目录下添加一个名为Podfile的文件,其中包含以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
target 'YourProjectName'
pod 'TensorFlow-experimental'

运行pod install下载并安装TensorFlow-experimental pod. 打开YourProjectName.xcworkspace并且添加你的代码。 在你的应用程序的Build Settings中,确保将$(inherited)添加到Other Linker Flags和 Header Search Paths 章节中。

▌步骤六:运行Sample

你需要Xcode 7.3或更高版本才能运行我们的iOS示例。

这有三个示例,包括:simple,benchmark,camera。你可以从这个链接(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/ios#building-the-tensorflow-ios-libraries-from-source)直接下载代码。

然后,从Tensorflow的根目录下载Inception v1,并使用以下步骤将标签和图文件提取到simple和camera示例中的数据文件夹中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p ~/graphs
curl -o ~/graphs/inception5h.zip \
 https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip \
 && unzip ~/{g}{r}{a}{p}{h}\frac{{s}}{\in}{c}{e}{p}{t}{i}{o}{n}{5}{h}.{z}{i}{p}-{d}~/graphs/inception5h
cp ~/graphs/inception5h/* tensorflow/examples/ios/benchmark/data/
cp ~/graphs/inception5h/* tensorflow/examples/ios/camera/data/
cp ~/graphs/inception5h/* tensorflow/examples/ios/simple/data/

切换到其中一个示例目录,下载Tensorflow-experimental pod(https://cocoapods.org/pods/TensorFlow-experimental)然后打开Xcode工作区。请注意,安装pod可能需要很长时间,因为它很大(约450MB)。如果你想运行示例代码,那么可以执行下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd tensorflow/examples/ios/simple
pod install
open tf_simple_example.xcworkspace #note .xcworkspace,not .xcodeproj

在XCode模拟器中运行简单的应用程序。你应该看到带有“Run Model”按钮的单屏幕应用程序。点击它,然后可以看到一个Grace Hopper图标。一旦你建立和运行它以后,你应该就能得到一个实时的相机视图,你可以指向物体获得实时的物体识别结果。

注意:我很确定我在iOS部分留下一些疏漏。如果你有任何错误,请通过这个官方链接进行评论,寻找帮助。

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/ios#building-the-tensorflow-ios-libraries-from-source

Android

▌步骤四:设置Android Studio和测试运行

在安卓上有两种方法来实现我们的目的,一个是Android Studio 另一个是 Bazel。因为使用Android Studio的人更多,所以我就使用它了。

如果你还没有安装它,请从下面这个链接下载并安装Android Studio: (https://developer.android.com/studio/index.html)

测试运行

为了检查Android Studio能否正常运行,我们将做以下几个小测试: 打开Android Studio并选择“打开一个已有的Android Studio”工程 去tensorflow-for-poets-2/android/tfmobile目录下打开Build.gradle文件并同步Gradle。如果一切正常,请点击BUILD> BUILD APK按钮

现在,就创建了一个名为app.apk的文件,把它复制到你的手机上并安装。(要记得打开手机的开发者模式哦。)

▌步骤五:运行定制的应用程序

如果到目前为止都没有问题,那么后面的工作将易如反掌。

我们实现的应用程序是一个图像分类程序,它能够识别ImageNet中1000个类别的图像。

现在,要运行我们的应用程序,请执行以下两个步骤:

将模型文件添加到工程中

程序会引用手机目录android/tfmobile/assets下的graph.pb 和label.txt文件,而不再是rounded_graph.pb 和 retrained_labels.txt文件 现在,用以下命令替换文件,或者你可以手动更改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp tf_files/rounded_graph.pb android/tfmobile/assets/graph.pb
cp tf_files/retrained_labels.txt android/tfmobile/assets/labels.txt

更改ClassifierActivity.java文件中的"output_name"

模型的输出节点有不同的名字:"final_result"。打开ClassifierActivity.java文件,按照如下方法更改output_name变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static final String INPUT_NAME = "input";
private static final String OUTPUT_NAME = "final_result";

再试一遍,现在应该就可以正常运行了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
小白也可以操作的手机TensorFlow教程:Android版和iOS版
TensorFlow通常用于训练海量数据,但新兴的智能手机市场也不可忽略。那些不能等待未来和love Machine Learning的人正在通过制造工具来突破界限,他们的目标是拥有数万亿美元的市场。
AiTechYun
2018/03/02
1.4K0
小白也可以操作的手机TensorFlow教程:Android版和iOS版
MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
王瀚宸 编译自 Hackernoon 量子位 报道 | 公众号 QbitAI 上周末,量子位翻译了一份MobileNet教程,其中讲述了怎样在一个新的数据集上重新训练MobileNet,那篇文章的成果
量子位
2018/03/28
1.7K0
MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
学习笔记TF066 : TensorFlow 移动端应用,iOS、Android系统实践
TensorFlow对Android、iOS、树莓派都提供移动端支持。 移动端应用原理。移动端、嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应;二在本地运行模型,
利炳根
2017/11/14
3.2K0
MobileNet教程:用TensorFlow搭建在手机上运行的图像分类器
王瀚宸 编译自 Hackernoon 量子位 报道 | 公众号 QbitAI 在移动端本地运行神经网络成了明显的趋势,Google还为此推出了MobileNet框架。 MobileNet框架怎么用?Coastline Automation创始人Matt Harvey最近在Medium上发布了一份教程,教你用MobileNet来识别道路。 Coastline是一家用深度学习来监测行车情况、防止车祸的公司。以下是Matt Harvey的教程: 作为卷积神经网络中的新成员,MobileNet有着很多令人惊艳的表
量子位
2018/03/28
1.6K0
MobileNet教程:用TensorFlow搭建在手机上运行的图像分类器
将 TensorFlow 训练好的模型迁移到 Android APP上(TensorFlowLite)
最近在做一个数字手势识别的APP(关于这个项目,我会再写一篇博客仔细介绍,博客地址:一步步做一个数字手势识别APP,源代码已经开源在github上,地址:Chinese-number-gestures-recognition),要把在PC端训练好的模型放到Android APP上,调研了下,谷歌发布了TensorFlow Lite可以把TensorFlow训练好的模型迁移到Android APP上,百度也发布了移动端深度学习框架mobile-deep-learning(MDL),这个框架应该是paddlepaddle的手机版,具体的细节没有了解过。因为对TensorFlow稍微熟悉些,因此就决定用TensorFlow来做。
AI研习社
2018/08/06
2.1K0
将 TensorFlow 训练好的模型迁移到 Android APP上(TensorFlowLite)
在物联网中应用机器学习:使用 Android Things 与 TensorFlow
在本教程中,我们将探索如何使用 Android Things 和 TensorFlow 将机器学习应用到物联网中。
未来守护者
2018/05/04
3.4K9
在物联网中应用机器学习:使用 Android Things 与 TensorFlow
使用Tensorflow构建属于自己的图片分类器
近几年火热的AI领域吸引了众多有志之士加入,在一段时间的学习之后,不知道你是否有一个疑惑:我能够用AI来做点什么呢?
云水木石
2019/07/01
1.1K0
使用Tensorflow构建属于自己的图片分类器
TensorFlow 目标检测模型转换为 OpenCV DNN 可调用格式
在 OpenCV4.X 版本(OpenCV3.4.1之后版本) 可以采用 cv2.dnn.readNetFromTensorflow(pbmodel, pbtxt) 函数直接调用 TensorFlow 训练的目标检测模型.
AIHGF
2019/05/13
2.6K0
TensorFlow 目标检测模型转换为 OpenCV DNN 可调用格式
TensorFlow 智能移动项目:11~12
在前九章中,我们使用 TensorFlow Mobile 在移动设备上运行各种由 TensorFlow 和 Keras 构建的强大的深度学习模型。 正如我们在第 1 章,“移动 TensorFlow 入门”中提到的那样,Google 还提供了 TensorFlow Lite(可替代 TensorFlow Mobile 的版本)在移动设备上运行模型。 尽管自 Google I/O 2018 起它仍在开发人员预览中,但 Google 打算“大大简化开发人员针对小型设备的模型定位的体验。” 因此,值得详细研究 TensorFlow Lite 并为未来做好准备。
ApacheCN_飞龙
2023/04/24
4.4K0
TensorFlow 智能移动项目:11~12
[译]Android TensorFlow机器学习示例
本文介绍了一种在Android平台上使用TensorFlow进行物体检测的方法。首先介绍了Android平台如何调用TensorFlow,然后介绍了如何使用预训练的模型进行物体检测。最后,给出了一段示例代码和一张运行结果图。
MelonTeam
2018/01/04
9210
[译]Android TensorFlow机器学习示例
精通 TensorFlow 1.x:16~19
TensorFlow 模型还可用于在移动和嵌入式平台上运行的应用。 TensorFlow Lite 和 TensorFlow Mobile 是资源受限移动设备的两种 TensorFlow。与 TensorFlow Mobile 相比,TensorFlow Lite 支持功能的子集。由于较小的二进制大小和较少的依赖项,TensorFlow Lite 可以获得更好的表现。
ApacheCN_飞龙
2023/04/23
5K0
使用Tensorflow对象检测在安卓手机上“寻找”皮卡丘
在TensorFlow的许多功能和工具中,隐藏着一个名为TensorFlow对象探测API(TensorFlow Object Detection API)的组件。正如它的名字所表达的,这个库的目的是训练一个神经网络,它能够识别一个框架中的物体。这个库的用例和可能性几乎是无限的。它可以通过训练来检测一张图像上的猫、汽车、浣熊等等对象。本文将用它来实现皮卡丘的检测。 TensorFlow对象检测API:https://github.com/tensorflow/models/tree/master/resea
AiTechYun
2018/03/06
2.1K0
使用Tensorflow对象检测在安卓手机上“寻找”皮卡丘
基于 TensorFlow 在手机端实现文档检测
手机端运行卷积神经网络的一次实践 — 基于 TensorFlow 和 OpenCV 实现文档检测功能 1. 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上运行一个神经网络的关键技术点 在卷积神经网络适用的领域里,已经出现了一些很经典的图像分类网络,比如 VGG16/VGG19,Inception v1-v4 Net,ResNet 等,这些分类网络通常又都可以作为其他算法中的基础网络结构,尤其是 VGG 网络,被很多其他的算法借鉴,本文也会使用 VGG16 的基础
腾讯Bugly
2018/03/23
1.8K0
一头栽进了tensorflow lite的巨坑里
之前写过一篇《这个中秋,我开发了一个识别狗狗的app》。图片识别可以算作是深度学习领域烂大街的主题,几乎每本书和教程都会拿来作为入门示例。移动端的图片识别的教程也很多,大多数都脱胎于Google的教程《TensorFlow for Poets》和《TensorFlow for Poets 2: Android》。有了现成的教程,我对实现狗狗的图像识别信心满满,认为重点在于信息的展示及狗狗信息的收集。
云水木石
2019/07/01
1.2K0
一头栽进了tensorflow lite的巨坑里
TensorFlow 智能移动项目:1~5
本章介绍如何设置开发环境,以使用 TensorFlow 构建所有 iOS 或 Android 应用,本书其余部分对此进行了讨论。 我们不会详细讨论可用于开发的所有受支持的 TensorFlow 版本,OS 版本,Xcode 和 Android Studio 版本,因为可以在 TensorFlow 网站或通过 Google。 相反,我们将在本章中简要讨论示例工作环境,以便我们能够快速了解​​可使用该环境构建的所有出色应用。
ApacheCN_飞龙
2023/04/24
4.6K0
使用Tensorflow进行实时移动视频对象检测
随着对计算机视觉的用例日益增长的兴趣,例如无人驾驶汽车,面部识别,智能交通系统等,人们希望建立定制的机器学习模型以检测和识别特定对象。
代码医生工作室
2019/10/10
2.2K0
使用Tensorflow进行实时移动视频对象检测
如何将自己开发的模型转换为TensorFlow Lite可用模型
对于开发者来说,在移动设备上运行预先训练好的模型的能力意味着向边界计算(edge computing)迈进了一大步。[译注:所谓的边界计算,从字面意思理解,就是与现实世界的边界。数据中心是网络的中心,PC、手机、监控照相机处在边界。]数据能够直接在用户手机上处理,私人数据仍然掌握在他们手中。没有蜂窝网络的延迟,应用程序可以运行得更顺畅,并且可大幅减少公司的云服务账单。快速响应式应用现在可以运行复杂的机器学习模型,这种技术转变将赋予产品工程师跳出条条框框思考的力量,迎来应用程序开发的新潮流。
云水木石
2019/07/01
3.1K0
如何将自己开发的模型转换为TensorFlow Lite可用模型
安卓手机如何玩转动作手势检测?有TensorFlow就够了,附实用教程
原文来源:Lemberg Solutions Ltd 作者:Zahra Mahoor、Jack Felag、 Josh Bongard 编译:嗯~阿童木呀、KABUDA 现如今,与智能手机进行交互的方式有很多种:触摸屏、硬件按钮、指纹传感器、视频摄像头(如人脸识别)、方向键(D-PAD)、手持设备控制等等。但是我们该如何使用动作识别功能呢? 我们可以举一个例子来说明这个问题,比如当你持手机将其快速移动到左侧或右侧时,可以非常精确地显示出想要切换到播放列表中下一首或上一首歌曲的意图;或者,你可以将手机快
企鹅号小编
2018/01/25
3.1K0
手把手教你搭建能够实现 Prisma 风格迁移效果的 iOS 酷炫应用(附代码)
随着 2012 年深度神经网络在 ImageNetchallenge 比赛上以 AlexNet 模型获胜,深度神经网络开创了空前的高潮。AI 工程师已经将深度学习技术应用到越来越多的问题域,包括预训练的深度美国有线电视新闻网模型。还有什么比创造艺术更富有创造力呢?
AI研习社
2018/07/26
1.2K0
手把手教你搭建能够实现 Prisma 风格迁移效果的 iOS 酷炫应用(附代码)
教程 | 从零开始:TensorFlow机器学习模型快速部署指南
选自Hive Blog 作者:Bowei 机器之心编译 参与:李亚洲、李泽南 本文将介绍一种将训练后的机器学习模型快速部署到生产种的方式。如果你已使用 TensorFlow 或 Caffe 等深度学习框架训练好了 ML 模型,该模型可以作为 demo。如果你更喜欢轻量级的解决方案,请阅读本文。 GitHub 地址:https://github.com/hiveml/simple-ml-serving 其中包含的条目有: 检查 TensorFlow 安装:https://github.com/hiveml/s
机器之心
2018/05/10
9090
推荐阅读
相关推荐
小白也可以操作的手机TensorFlow教程:Android版和iOS版
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验