基于TensorFlow 的商品陈列货架目标检测算法研究与实现

2019-04-03 01:38廖珈艺张新阳代娱乐
现代计算机 2019年35期
关键词:先验卷积分类

廖珈艺,张新阳,代娱乐

(成都理工大学,成都610059)

0 引言

目标检测是一种基于图像特征的计算机视觉算法。它结合了目标识别和定位。它在智能交通系统、智能监控系统、军事目标检测、医疗导航等领域有着广泛的应用价值[1]。深度学习等人工智能方法已经广泛地应用于生活的方方面面[14]。

传统的目标检测中,多尺度形变部件模型是出类拔萃的,多尺度形变部件模型在行人检测、人脸检测等检测中得到了很不错的效果,可是其结构比较复杂,检测的速度相对较慢,因此也出现了很多改进的方法。

TensorFlow 是一款人工智能学习系统。Tensor 意为张量,即N 维数组,Flow 意为流,代表着基于数据流图的计算[6]。TensorFlow 是用C++实现,用Python 封装,在未来将提供更多的编程语言接口。

1 基于候选区域提取的目标检测模型——Faster R-CNN

Faster R-CNN 在一个网络中将图片特征抽取、提取候选区域、边框回归和分类整合在一起,目标检测的总体性能有了很大的提高,在速度上尤为明显[11]。图1为Faster R-CNN 整体的网络结构,下面将从Faster R-CNN 的四个部分介绍该模型。

图1 Faster R-CNN模型整体结构

1.1 卷积神经网络部分

Faster R-CNN 中使用的卷积神经网络VGG16,其中是由13 个卷积层,13 个ReLU 层,4 个池化层组成。所有的卷积层卷积核大小都为3×3,填充大小都为1,即在卷积运算之前填充一圈0,所有的池化层窗口大小都为2×2,步长都为2。类似的,网络中的池化层的窗口大小和步长都为2,这样每个经过池化层的输入矩阵其输出大小的宽和高都为原来的一半。因此,一个M×N 大小的矩阵经过卷积神经网络部分大小固定变为(M/16)×(N/16),这样生成的特征图容易与原图对照起来,为后边的步骤提供了便利。

1.2 区域生成网络部分

区域生成网络部分有两条线,先介绍第一条线。

首先产生预选窗口。选取预选窗口的方法本质上是用不同尺度大小的窗口遍历最后一层卷积层的特征图。以1000×600 的输入图片大小为例,先人为给出一个基准窗大小,再给出三种倍数8、16、32 和0.5、1、2 三种长宽比,这样能够得到9 种尺度的预选窗口。经过所有卷积层后,宽和高变为原来的1/16,最后得出的特征图大小约为60×40,在特征图上进行滑窗,在每一个点上都构造这9 种预选窗口并映射回原图。在特征图上每一个像素构造的预选窗口如图2,映射回原图的预选窗口如图3。

图2 特征图每个像素构造的预选窗口

图3 映射回原图的预选窗口

预选窗口产生之后,送入Softmax 判断是前景还是背景。如图4,在进入Softmax 之前,先进行了一个输出为特征图个数为18 的1×1 卷积,对应了特征图的每一个像素都有9 个预选窗口,每一个预选窗口都有前景和背景两种可能。进入Softmax 的两个reshape 操作都是为了程序实现时数据结构存储的需要而设置的。

综上,区域生成网络用判断为前景的预选窗口作为候选区域。下面进行边框回归。如图5,绿色框为可口可乐的正确标注框,蓝色框为提取出的候选区域。

即便蓝色框最后的分类为可口可乐,也会因为定位不准确而被判定为没有正确检测。所以需要对候选区域进行边框回归来让它接近标注框,这就是区域生产网络的第二条线完成的任务。

图4 Softmax判断是前景/背景

对于窗口一般用4 维向量(x,y,w,h)来表示,(x,y)表示窗口的中心坐标,(w,h)表示窗口的宽和高。用A表示候选区域,G 表示标注的真实区域,需要找到一种关系,使得原始的候选区域A 经过映射后得到一个接近标注区域G 的回归区域G' 。即给定候选区域A=(Ax,Ay,Aw,Ah),标注区域G=(Gx,Gy,Gw,Gh),寻找一种映射关系F,使:

其中(Gx',Gy',Gw',Gh')≈(Gx,Gy,Gw,Gh)。

图5 边框回归示意图

对于寻找映射关系F 有式(2)到式(5)的思路,即先平移,再缩放。需要学习的参数是dx( A) 、dy( A )、dw(A)、dh(A)这四个变换。

设置平移量因子(tx,ty)和尺度因子(tw,th),具体计算方法根据式(6)与式(7)。

其中,带有下标a 表示候选区域,带有上标*表示真实标注值。

线性回归就是给定特征向量X,学习一组权重向量W,使得得到的输出值与真实值Y 非常接近,即Y=WX。针对这个问题,输入是经过卷积的特征图,定义为φ,同时还有训练传入的真实标注,输出是dx( A) 、dy( A) 、dw(A)、dh(A)这四种变换。因此目标函数可以表示为式(8)。

为了让预测值尽量接近真实值,设计式(9)的损失函数:

函数优化的目标:

考虑到以上的回归模型的设计,区域生成网络部分的第二条线只有一个输出特征图个数为36 的1×1卷积层,如图6。36 对应了特征图上每个像素的9 个预选窗口,每个窗口都有dx( A) 、dy( A) 、dw(A)、dh(A)这四个变换量。

图6 区域生成网络部分的两条线

至此,区域生成网络部分结束。总结一下,区域生成网络负责综合所有dx( A )、dy( A) 、dw(A)、dh(A)变换量和前景预选窗口,计算出较为精确的候选区域,送入模型的后续部分。

1.3 ROI Pooling层

对于传统的卷积神经网络,如VGG 和AlexNet,网络的输入和输出尺寸必须是固定的。如果需要输入网络的图片和规定大小不一致,有两种传统的解决方法:裁剪和缩放,如图7。但是缩放会改变原始图像的形状,裁剪会损失一定的信息。

图7 缩放成指定大小

区域生成网络计算出的候选区域正是一系列大小和形状都不相同的矩形区域,Faster R-CNN 采用了ROI Pooling 的方法将它们统一成同样的大小。将每一个候选区域都映射回卷积神经网络的最后一层特征图,将它们对应的特征图水平和数值都分成7 份,并且对分割后的都做最大值池化,因此大小不同候选区域最后的输出都是7×7。

简而言之,ROI Pooling 层的作用就是将大小不同的候选区域统一成相同大小,以便输入到模型的后续部分。

1.4 获得精准检测框及分类

模型的最后一部分利用已经获得的7×7 大小的候选区域特征图,通过一个全连接层和Softmax 计算候选区域的分类,同时再次利用区域产生网络部分的边框回归计算出更加精准的检测框,模型这一部分的结构如图8。至此,模型便得出了目标的位置即分类。

图8 模型末端结构

2 基于无需候选区域提取的目标检测模型——SSD

基于候选区域提取的目标检测的Faster R-CNN虽然具有比较高的准确率,但是由于计算量过大,很难达到实时计算所要求的速度。为了解决这一问题,出现了一系列无需候选区域提取的目标检测模型,其中SSD[12]能够在精度接近Faster R-CNN 模型的前提下大大提升目标检测速度。

2.1 先验框

与Faster R-CNN 类似,SSD 也基于卷积神经网络,首先也要产生类似预选窗口的先验框,不同的是SSD在不止一层的特征图上产生先验框,如图9。卷积神经网络中,在不同层的若干特征图中的每个像素设置不同宽高比和大小的先验框。

图9 SSD模型的先验框

先验框按照如下规则产生:

(1)确定在哪几层特征图上产生先验框,以及先验框的大小和宽高比。一般来说,在越深的层先验框的尺寸应设置的更大,于是按照式(11)决定每层特征图先验框的最大和最小尺寸。

其中,m 为要产生先验框的特征图的总层数加1,smin与smax为设定好的先验框的基准最大值和最小值,第n 层特征图对应的最小尺寸为sn,最大尺寸为sn+1。宽高比的设置例如(1,1/2,1/3,2,3),记为ri。

(2)如图10,以特征图上每个像素为中心,生成一系列同心的先验框。对于第n 层特征图,正方形先验框的最小边长为sn,最大边长为。每设置一个宽高比,若宽高比不等于1,会生成两个调换宽高的长方形,宽高为:和。

图10 先验框大小示意图

由于后续的结构不产生候选区域,针对每个先验框不仅要得出位置偏移量,还要计算出属于各个类别的概率向量,相当于将Faster R-CNN 的边框回归与分类预测合并在一起。相应的,损失函数是边框回归损失与分类置信度损失的加权和。

2.2 多尺度特征图检测

图11 SSD结构图

SSD 模型用卷积神经网络作为基础网络,如VGG16,将特征提取层添加到基础网络之后。如图11,黄色框为添加的特征提取层。特征提取层的尺寸逐渐减小,得到多尺度检测的预测值。先验框不仅在后添加特征提取层上生成,也要在基础网络的最后两层生成。通过组合不同先验框的预测结果覆盖各种位置和尺寸的对象。例如图9 中,由于4×4 的特征图与8×8的特征图具有不同的先验框尺寸,对象可能被匹配到前者的先验框,而匹配不到后者的先验框中。

2.3 获得目标位置和分类

设先验框共有k 个,目标分类共c 类。对于所有的先验框,需要得出其相对于正确标注的(x,y,w,h)这4个偏移量以及属于每个分类的概率。因此,对于m×n大小的 特征图,共产生(c+4)∙k∙m∙n 个输出。这些输出结果即包含了计算出的所有目标的位置和概率,但是部分输出结果由于分类结果的置信度不高而不准确。所以需要综合分析这些输出结果,通过设置阈值、非极大值抑制等方法得出最终的检测结果。至此SSD 目标检测模型结束。

3 实验与分析

3.1 数据采集和处理

本文的实验数据选取了商品陈列货架的图片数据,所有的数据均来源于百度图片的数据爬取,由于数据来源不足,采用了共计6 个分类857 张图片,从中随机选取20%作为测试集合,其余作为训练集。

3.2 算法流程

如图12 与图13 分别是Faster R-CNN 与SSD 两种目标检测算法的流程图,两种算法的结构大体上一致,都先通过基础卷积神经网络获得图片的特征图,Faster R-CNN 通过候选区域提取和两次边框回归得到精准的检测框,而SSD 在不同尺度的特征图上产生先验框,只进行一次边框回归获得最后的检测框。最后,需要通过非极大值抑制的方法过滤掉效果较差的检测框。

图12 Faster R-CNN目标检测算法流程图

图13 SSD目标检测算法流程图

3.3 实验结果

(1)Faster R-CNN 实验结果

表1 Faster R-CNN 模型训练参数

图14 Faster R-CNN训练曲线

表1 为训练Faster R-CNN 模型时设置的参数,图14 为训练曲线,横坐标代表迭代次数,纵坐标代表损失函数值。通过观察,损失函数值在迭代次数为12000次后趋于平稳,即训练过程收敛。保存模型,使用测试集进行测试,结果如表2 所示,每张图片的检测速度平均为118 毫秒,图15 为部分图片检测效果图。

表2 Faster R-CNN 模型测试结果

图15 Faster R-CNN检测效果图

(2)SSD 实验结果

表3 为训练SSD 模型时设置的参数,图16 为训练曲线,横坐标代表迭代次数,纵坐标代表损失函数值。通过观察,损失函数值在迭代次数为8000 次后趋于平稳,即训练过程收敛。保存模型,使用测试集进行测试,结果如表4 所示,每张图片的检测速度平均为62毫秒,图17 为部分图片检测效果图。

表3 SSD 模型训练参数

图16 SSD训练曲线

表4 SSD 模型测试结果

图17 SSD检测效果图

(3)算法效果对比

在性能方面,SSD 的检测单张图片的耗时约为Faster R-CNN 的一半;在精度方面,通过对比表3 与表4,在各个分类上,Faster R-CNN 的检测准确率均略高于SSD。对比分类之间的准确率,商品“王老吉”和“雪碧”的准确率与其他分类相差较大,通过查看测试集数据的检测框推测原因。如图18,绿色框是检测框,商品“王老吉”与“加多宝”外观相似度较大,且训练数据集中没有商品“加多宝”的数据,所以当图片中同时出现上述两种商品时会很难区分。如图19,左侧为商品“雪碧”的300ml 型号,右侧为商品“雪碧”的500ml 型号,黑色框代表正确的标注框,浅蓝色框代表检测框。由于数据不足,训练集中为将“雪碧”的各型号混合,此类数据之间本身存在一定差异,因此准确率较低。

图18 相似商品

图19 不同型号商品

4 结语

本文介绍并实现了两种目标检测算法,最后通过对测试结果对比出两种算法的优缺点和共同的不足之处。实验证明,Faster R-CNN 和SSD 两种目标检测算法,前者的速度慢于后者但准确率高于后者,对于常规的商品图片,目标检测算法的准确率能达到90%以上,但是对于肉眼能够识别的遮挡商品以及外观非常相似的商品,目标检测算法的表现较差。因此如果要达到生产需要的标准还需要作更多的改进,例如对遮挡商品进行检测和推理、对相似商品二次分类等。

猜你喜欢
先验卷积分类
康德定言命令的演绎是一种先验演绎吗?——论纯粹知性与实践理性在先天原则证成方面之异同
基于暗通道先验的单幅图像去雾算法研究与实现
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
先验想象力在范畴先验演绎中的定位研究
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
按需分类
教你一招:数的分类
说说分类那些事