第四课:模型的使用

上一节我们创建了模型对象,也导入了测试集,可以说实现了一个简单机器学习的apk环境和核心代码。这一节我们一起看下开发一个完整的人工智能应用程序需要哪些步骤和代码。在详细分析代码之前我们先稍微看下有关 TensorFlow 的一些简单概念。

模型的一些概念

一个 TensorFlow 的计算任务叫做 Graph,一个 Graph 由很多节点(Op)组成, Op 通过 Tensor 获取输入,Op 完成计算以后再通过 Tensor 把输出传递到下一个节点。

Tensor 一般来说是一个数组(1 维或多维),我们用 Feed 操作,将一个 Tensor 的数据输入到一个 Op;用 Fetch 操作,将 Op 的输出提取到 Tensor 当中。

那么回到我们的项目中来,为了进行物体的识别,我们要做的就是在相应的 Op 中输入图片数据,然后从相应的 Op 提取识别结果。

那么可以这样说,我们向名为“image_tensor”的 Op 中输入图片数据, 然后从多个 Op 中获取识别结果,这样的 Op 有 4 个:

“detection_boxes”,输出识别物体的矩形框

“detection_scores”,输出识别物体的 Confidence,用来衡量识别得准确性有多大

“detection_classes”,识别物体的种类

“num_detections”,识别物体的数量

数据预处理

我们可以了解模型的简单概念,这不影响我们对机器学习框架是使用,可以就把模型当成一个黑盒子,我们只需要注意输入和输出是我们控制的数据,接下来就看下模型的输入数据,在数据输入的时候有时候需要我们对数据进行预处理。比如在将图片数据 Feed 到我们的模型之前,还需要对图片数据进行一些处理,将它转换为模型能够识别和处理的数据。我们用 Bitmap 作为最原始的输入数据,需要做下面的一些处理:

第一步是图片尺寸,每一个图片的长宽都是不一样的,但是我们希望把所有的输入图片都处理成一样的尺寸,如 300X300,所以需要写一些图片尺寸转换的代码,这样的代码如果不会写,在网上也可以找到很多现成的代码,下面也是从开源的代码里面参考来的转换函数:

这个函数会返回进行图片尺寸转换所需要的 Matrix 对象,这很有用,我们在后面可视化识别结果的时候用的着。然后通过下面的代码来完成转换:

第二步是将二维的位图数据转换为一维的数组,我们的模型接受的输入是由图片的像素点 RGB 值组成的一维数组,比如说有 2 个像素点(用(R,G,B)表示),(1,2,3)、(4,5,6),那么正确的输入数组应该是[1, 2, 3, 4, 5, 6],可以通过下面的代码来完成:

先通过 getPixels 获取位图所有像素的一维数组,再通过位操作分别提取每个像素的 RGB 值,然后赋值到 byteInput 数组的相应位置中,byteInput 数组就是处理好的,准备 Inference 的数据。

模型的使用

通过调用 TensorFlowInferenceInterface 的 Feed 方法来向模型中输入数据:

这个代码的意思是向名为“image_tensor”的 Op 输入相应的数据(图片数据),值为 byteInput,我们输入的是一张图片的数据,所以值为 1;图片的高和宽,都是 300 通道数,因为我们使用 RGB,所以值为 3。

接下来分配一些数组(Tensor)来准备接受 Inference 的结果,只取物体位置、分数、物体类型的数据,在这里最多取前 100 个识别结果(因为一个矩形框(box)是由(top、left、botton、right)的 4 元组表示的,所以 boxes 数组的大小应该是 100×4。):

分配好数组以后,就可以开始 Inference,并从相应的 Op 里面提取识别结果,代码如下:

我们使用 TensorFlowInferenceInterface 的 run 方法来启动从之前用 Feed 注册的输入节点(image_tensor)到由参数指定的输出节点(detection_boxes,detection_scores,detection_classes)的 Inference, 对我们来说,就是从输入的图片数据,识别出物体的位置、类别和分数。然后用 Fetch 方法来提取相应的输出数据。

现在我们已经得到了识别结果,下一节我们一起把结果可视化,并把完整的apk源码分享给大家。

本文来自企鹅号 - 人人都是极客媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏贾志刚-OpenCV学堂

OpenCV中KMeans算法介绍与应用

一:KMeans算法介绍 ? KMeans算法MacQueen在1967年提出的,是最简单与最常见数据分类方法之一并且最为一种常见数据分析技术在机器学习、数据挖...

38810
来自专栏磐创AI技术团队的专栏

十 | 门控循环神经网络LSTM与GRU(附python演练)

门控循环神经网络在简单循环神经网络的基础上对网络的结构做了调整,加入了门控机制,用来控制神经网络中信息的传递。门控机制可以用来控制记忆单元中的信息有多少需要保留...

961
来自专栏PaddlePaddle

【图像分类】使用经典模型进行图像分类

场景文字识别 图像相比文字能够提供更加生动、容易理解及更具艺术感的信息,是人们转递与交换信息的重要来源。图像分类是根据图像的语义信息对不同类别图像进行区分,是计...

1.3K5
来自专栏磐创AI技术团队的专栏

FastText的内部机制

1113
来自专栏深度学习之tensorflow实战篇

DOC2VEC:所涉及的参数以及WORD2VEC所涉及的参数

DOC2VEC:所涉及的参数 class gensim.models.doc2vec.Doc2Vec(documents=None, dm_mean=Non...

5925
来自专栏LhWorld哥陪你聊算法

【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归

TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流...

1111
来自专栏素质云笔记

keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)

不得不说,这深度学习框架更新太快了尤其到了Keras2.0版本,快到Keras中文版好多都是错的,快到官方文档也有旧的没更新,前路坑太多。 到发文为...

3.6K6
来自专栏大数据挖掘DT机器学习

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

我们一般用深度学习做图片分类的入门教材都是MNIST或者CIFAR-10,因为数据都是别人准备好的,有的甚至是一个函数就把所有数据都load进来了,所以跑起来...

5435
来自专栏简书专栏

基于RandomForestRegressor的波士顿房价回归预测

2018年8月27日笔记 sklearn官方英文用户使用指南:https://sklearn.org/user_guide.html sklearn翻译中文...

2833
来自专栏算法channel

2个基于TensorFlow的Github开源项目,1篇TensorFlow的概念和方法梳理文章

介绍 2 个非常接地气的 Github 开源项目,都是基于 TensorFlow 框架开发的,通过练习这些项目,能很快提升使用 TF 的能力,同时加深理解常用的...

1572

扫码关注云+社区

领取腾讯云代金券