1. 引言
随着社会的发展使得生活水平不断提高,人们对衣食住行的要求逐渐增高。其中吃是体现生活质量的一个重要方面。随着信息领域和物流领域的迅速发展,人们能够通过网络等渠道采购到各种丰富的食材。以往人们对食材种类的认知以及对应烹饪菜谱是依靠经验得来,如何使用嵌入式移动设备(比如:手机)自动识别采购得来的食材,配合移动端的菜谱应用软件,就能生成各种美味食品的烹饪方法,对满足人们对美食的追求具有现实意义。但这也对食材识别模型和识别速度提出了更高的要求。
近年来,随着人工智能技术的发展,深度学习得到了很大的关注。深度学习与传统手工设计目标特征的方法不同,深度学习以端到端的方式训练深度神经网络,实现自动提取目标的深层特征,避免人为设计的干扰,同时,深层特征与传统特征相比,深层特征可以多层次表示目标,从浅层的局部特征到深层的全局特征,具有更强的鲁棒性和表达能力。随着深度神经网络发展,出现了许多经典的用于目标识别的神经网络模型,包括R-CNN [1]、Fast RCNN [2]、SSD [3]、YOLO系列 [4] [5] [6] 等,但是为了让模型达到更高的精度,大多数神经网络模型制造得更深,复杂度更高高,难以应用在真实场景中,所以必须要对模型进行轻量化处理,以达到移植到各种嵌入式设备的要求 [7] [8] [9] [10]。
为了提高嵌入式设备对食材图片识别的效率和能力,同时需要满足存储空间和功耗的限制,设计适用于嵌入式设备的轻量化深度神经网络架构是解决该问题的关键。在最近的研究中,人们对建立轻量级和高精度的神经网络越来越感兴趣 [11] [12] [13] [14],因此,轻量级神经网络架构的设计得到了学术界和工业界的广泛关注,也提出了一些典型的方法 [15] [16],主要包括三个方向,分别是:(1) 人工设计轻量化神经网络模型;(2) 基于神经网络架构搜索(Neural Architecture Search,NAS)的自动化神经网络架构设计;(3) 神经网络模型的压缩。
对比目标检测的其他神经网络模型,YOLOv3在速度与效果方面表现不错,因此针对食材识别任务,本文提出一种基于聚类加权中心非极大值抑制的轻量级YOLOv3方法(Cluster-Weighted-Distance NMSlightweight YOLOv3, CWDNMS-lightweightYOLOv3)。采用YOLOv3作为主要的网络结构,使用轻量化神经网络MobileNet [17] 对YOLOv3进行轻量化处理,能够有效减少整个网络的参数量,提升整个模型的运行效率,使模型能够迁移到移动端或其他嵌入式设备中。除此之外为了进一步提升模型的精度和效率,对传统有缺陷的非极大值抑制(Non-Maximum Suppression, NMS)算法作出改进,使用交并比(Intersection-over-Union, IoU)矩阵运行方式,并且加入了中心距离惩罚项改变了仅使用IoU作为判断检测框是否抑制的依据,采用加权平均法得到了更准确的最高得分检测框,进一步增强食材识别的效果。
2. 轻量级神经网络的构建
2.1. YOLOv3
YOLOv3网络结构图如图1所示,把图片输进YOLOv3,网络会对图片分别进行32倍降采样、16倍降采样、8倍降采样,输出三种尺寸的特征图。但是在进行16倍降采样检测时会先对32倍降采样的特征图进行上采样后再与16倍降采样的特征图结合输出最终的16倍降采样特征图,8倍降采样的操作与16倍降采样的操作相同,这样既可以提高非线性处理能力,增加泛化性能以提高网络精度,又能减少参数提高实时性。例如输入416 * 416的图片,会输出13 * 13、26 * 26、52 * 52的特征图。YOLOv3的降采样操作不使用池化层,而是将卷积步骤中的步长设置为2以达到降采样的目的,这样能够降低池化操作所带来的梯度负面效果。
图片经过32倍降采样后,特征图的感受野最大,适合检测较大的目标;图片经过16倍降采样后,特征图的感受野适中,适合检测一般大小的目标;图片经过8倍降采样后,特征图的感受野最小,适合检测较小的目标。YOLOv3的这种多尺度预测的特点,能够适应各种大小的识别目标。
Figure 1. Yolov3 network structure diagram
图1. YOLOv3网络结构图
YOLOv3最后输出的特征图里,每一个网络单元预测3个不同尺寸的检测框,检测框的尺寸通过对输入图片里的目标进行聚类得到,因为YOLOv3输出3种征图,每种特征图有三种尺寸的检测框,所以YOLOv3一共有9种尺寸的检测框检测不同大小的检测目标,能够提升网络的泛化能力。最终特征图里,每一个网络单元含有检测框的坐标信息,检测框的高度和宽度以及目标预测的置信度。
YOLOv3的主干网络是darknet53,上图左边部分。darknet53网络有52层卷积操作,采用3 * 3大小的卷积核,分别在第2、5、10、27、44层结构处进行降采样的操作。
2.2. MobileNet
MobileNet是一种轻量及高效的神经网络,相比于darknet53,它的网络模型较小,准确度高以及网络结构图有一定的相似之处。
MobileNet使用深度可分离卷积代替传统卷积,深度可分离卷积区别于传统卷积,在于卷积的方式和构成不一样。深度可分离卷积操作时一个通道的卷积核对一个通道的特征图进行卷积后,直接作为该通道的输出特征图,而传统卷积操作时是对每一通道特征图卷积的结果进行叠加后作为该通道的输出特征图。
YOLOv3的基本单位由3 * 3普通卷积层,批量归一化(Batch Normalization, BN)层和Relu激活函数层构成,如图2所示。其中,模型通过3 * 3普通卷积层对输入图片进行特征提取;BN层通过对数据进行归一化的操作,不仅提升模型训练速度,加快收敛过程,还能防止模型训练时容易出现的过拟合现象。Relu激活函数是非线性函数,引入模型能够增加模型的非线性因素,增加神经网络各层之间的非线性关系,增强模型的表达能力;Relu激活函数相对于其他激活函数的优势是:计算量少;不容易出现梯度消失的问题;缓解过拟合问题的发生。
MobileNet的基本单位是深度可分离卷积 [18],如图2所示,深度可分离卷积由3 * 3和1 * 1卷积层,BN层和Relu激活函数层构成,通过3 * 3深度卷积提取特征图的特征,通过1 * 1卷积操作控制输出特征图的通道数。
Figure 2. Comparison of depth separable convolution and ordinary convolution
图2 深度可分离卷积与普通卷积比较图
假设输入和输出的特征图大小为
,其中输入特征图通道数为E,输出特征图通道数为N,卷积核大小为
,则深度可分离卷积和普通卷积的计算量之比公式为:
(1)
通道数N一般较大,卷积核大小一般为3*3,所以深度可分离卷积的计算量大约只有普通卷积的计算量的九分之一 [19]。
MobileNet网络结构图如图3所示,整个网络有27层卷积操作,并且在1,4,8,12,24层进行降采样操作。整个网络与darknet53网络相似,但是MobileNet除了第一层卷积,其余卷积使用了深度可分离卷积操作,减少了网络计算量,使MobileNet移植到YOLOv3提供了可能性。
Figure 3. MobileNet network structure diagram
图3. MobileNet网络结构图
把MobileNet代替darknet53移植到YOLOv3网络中,得到YOLOv3-MobileNet网络结构,如图4所示。
图4中CBR为普通卷积,如图2左侧部分所示,DBR为深度可分离卷积,如图2右侧部分所示,Conv为普通卷积操作,不包括BN算法和激活函数。
从图4中可得在MobileNet部分第6层后输出8倍降采样的特征图,第12层后输出16倍降采样的特征图,最后输出32倍降采样的特征图。各个倍数的特征图经过卷积或上采样等操作后,输出最终的特征图。
YOLOv3-MobileNet网络结构通过将MobileNet代替darknet53移植到YOLOv3的主干网络中减少整个网络的冗余程度,参数量从61 M降到了24 M。YOLOv3-MobileNet整体结构与YOLOv3相似,并且在降低网络复杂度的同时,保留了许多YOLOv3的特性,例如多尺度预测等。
3. NMS算法设计
NMS,是目标检测的重要部分,大部分神经网络,包括YOLOv3,在最后输出特征图中保存着大量的信息,其中含有大量的检测框信息,每个检测框有各自的置信度,用来表达检测框属于某个种类的可信程度。大量的检测框互相重叠,需要NMS算法抑制大量的检测框,确保检测框的正确预测某个种类。NMS的作用就是选取置信度高的检测框,抑制重叠度高的检测框。
Figure 4. YOLOv3-MobileNet network structure diagram
图4. YOLOv3-MobileNet网络结构图
其算法流程如下:
1) 对检测框按置信度从高到低进行排序,得到集合M;
2) 选取集合M中置信度最高的检测框b,遍历其余检测框;使与b的IoU大于阈值的其余检测框置信度设为0,因为它们判断为属于同一种类;
3) 从集合M中剔除b重复步骤2和3直到遍历完集合M。
这种算法的缺点是:IoU阈值设置高了,会导致抑制错误检测框的效果较差,设置低了,容易把重叠的不同种类的检测框给抑制了。
3.1. Cluster-NMS
NMS算法在计算IoU方面的公式为:
(2)
想要加速NMS,就要将IoU计算并行化。
IoU矩阵为:
(3)
式(3)中,
为IoU矩阵,B为检测框集合,其中
,集合B按照置信度降序排列,也就是
是最高得分框,
为最低得分框。
因为
,所以
为对称矩阵,且
没有意义,所以
可以简化为:
(4)
对
执行按列取最大值操作,得到一维张量
,对
中元素进行二值化,大于IoU阈值的元素取0,小于IoU阈值的元素取1。最后张量
中
为0代表第i个检测框抑制,为1代表第i个检测框保留。
但是这种方法会导致检测框被过度抑制 [20]。例如,矩阵
第二行
是与比它低分的检测框之间的IoU数值,若
为0,代表第二高分的检测框被抑制了,也就是说矩阵
第二行应该为0,但矩阵
第二行依然有数值并且该数值有可能是某列的最大值,有可能在二值化时被设为0,造成该列的检测框被抑制。
为了解决这种缺点采取Cluster-NMS算法:
1) 使矩阵
,第一次迭代用单位矩阵
左乘矩阵
得到矩阵
,按照前面方法得到
的一维张量
;
2) 把得到的一维张量
展开成对角矩阵
,也就是使
的对角线元素与一维张量
的元素相同,其余元素为0,例如
,得到以下矩阵:
(5)
3) 使
,得到
的一维张量
和
,重复步骤(2)(3)直到
。
如果对角矩阵
中某行为0,则与矩阵
相乘后该行元素全为0,代表该行被抑制了。Cluster-NMS算法最后的结果和传统NMS算法的结果一样,但是速度比传统的NMS快 [21]。
3.2. 中心距离惩罚法(DIoU-NMS)
中心距离惩罚法的核心思想是相邻检测框的中心约接近得分最大的检测框,越有可能是冗余的检测框 [22]。检测框示意图如图5所示。
Figure 5. Diagram of two adjacent detection frames
图5. 两个相邻检测框示意图
(6)
式(6)中d为两检测框中心的距离,c为两检测框最远的距离,参数
控制惩罚项对IoU的影响程度。
用DIoU代替IoU作为NMS的评判准则,当
,惩罚项趋向0,此时DIoU=IoU,DIoU-NMS与传统NMS效果相当;当
,大部分检测框都没有被抑制。
使用DIoU-NMS能有在一定程度缓解传统NMS算法中抑制遮蔽物体检测框的问题,并且DIoU最差的效果,即惩罚项趋向于0,效果也不会比传统NMS效果差,对NMS只有改进的效果。在阈值不变的情况下,会有更多的检测框保留下来,提升检测的召回率。
3.3. 加权平均法(Weighted NMS)
传统NMS得到的置信度最高的检测框定位不一定是最精确的,也就是说冗余的检测框有可能比置信度最高的检测框定位更好,所以采取加权平均法是对坐标进行加权平均 [23],公式:
(7)
式(7)中权重
。
通过Weighted NMS,对检测框进行加权平均,能够得到定位效果较准确的最高置信度检测框,能够较为稳定地提升检测的召回率和精度。
在Cluster-NMS的基础上使用中心距离惩罚法和加权平均法对NMS进行进一步的改进,结合以上三种NMS改进算法得到聚类加权中心非极大值抑制算法(Cluster-Weighted-Distance NMS, CWDNMS),该算法可以使神经网络性能在效率和精度方面有所提升。
4. 实验结论与分析
4.1. 实验步骤与方法
实验的硬件平台是:
操作系统:Windows 10;
CPU:英特尔 i7-6700 3.4 GHz;
内存:16 GB;
显卡:英伟达 GTX 1070。
软件平台:Pycharm、Anaconda3。
实验步骤:收集食材数据集,对食材数据集进行筛选,对筛选后的食材数据集进行预处理,预处理包括划分食材数据集为训练集,验证集,测试集,对数据集进行标定。在软件平台上构建YOLOv3-MobileNet网络结构,编写Cluster-Weighted-Distance NMS算法程序。把训练集送进YOLOv3-MobileNet网络结构进行训练,得到相关的参数,把测试集送进训练后网络中,得到网络的精度和速度,评估网络的泛化能力。使用VOC 2007数据集代替食材数据集进行上述实验步骤,得出结果与食材数据集进行结果对比;把两种数据集分别送进YOLOv3和是否使用Cluster-Weighted-Distance NMS算法的网络中,进行实验结果的对比和分析。主要分析对YOLOv3进行轻量化操作后,模型的检测速度是否提升了,改进后的NMS算法,模型的检测精度是否提升了。
VOC 2007数据集是为图像识别和分类提供了一整套标准化的优秀的数据集。VOC 2007数据集共包含:训练集5011张图片,测试集4952张图片,共9963张图片,共包含20个种类,其中包括人类、单车、汽车等常见的种类。
自制食材数据集包括2300张图片,共包含10个种类,每个种类200到300张图片,种类分别是茄子、鸡蛋、肉、青菜、西红柿、西兰花、玉米、洋葱、萝卜、胡萝卜。标注工具为LabelImg,方式是人工标注,图片来源于实景拍摄。
4.2. 实验结果比较
表1是以VOC2007作为数据集对各种网络评估的结果。可以从表中得知YOLOv3-MobileNet模型的速度为36 ms,YOLOv3模型的速度为61 ms,YOLOv3-MobileNet模型比YOLOv3模型快了近一倍。在精度方面,使用IoU为0.5作为判断基准,使用NMS的YOLOv3模型的准确度为65.84%,使用NMS的YOLOv3-MobileNet的模型准确度为62.66%,YOLOv3使用了MobileNet代替darknet53作为主干网络,在精度方面有略微的下降,但是在速度方面快了近一倍。模型采用CWD-NMS算法后,检测准确度提升3%左右。
Table 1. Comparison of VOC 2007 operation results
表1. VOC 2007运行结果比较
表2是自制的食材数据集对各种网络评估的结果。可以从表中得知YOLOv3-MobileNet模型的速度为28 ms,YOLOv3模型的速度为62 ms,YOLOv3-MobileNet模型比YOLOv3模型快了一倍多。在精度方面,使用IoU为0.5作为判断基准,使用NMS的YOLOv3模型的准确度为69.29%,使用NMS的YOLOv3-MobileNet的模型准确度为68.44%,YOLOv3使用了MobileNet代替darknet53作为主干网络,在精度方面有略微的下降,但是在速度方面快了一倍多。模型采用CWD-NMS算法后,检测准确度提升7%左右。
Table 2. Comparison of VOC 2007 operation results
表2. VOC 2007运行结果比较
结合表和表中数据分析可得出结论是,YOLOv3-MobileNet对比与YOLOv3,使用MobileNet代替YOLOv3原有的darknet作为主干网络,参数减少了一大半,速度从61 ms左右上升到30 ms左右,快了一倍,精度只是略微下降;模型采用CWD-NMS算法后,精度提升了7%。使用MobileNet作为主干网络的YOLOv3模型达到轻量化的效果,精度只略微下降,采用CWD-NMS算法后,模型有不错的提升。
4.3. 实验结果分析
从表2可知,使用自制食材数据集对YOLOv3-MobileNet模型进行训练,并使用CWD-NMS算法提升精度,模型的精度达到75.21%,使用VOC 2007数据集对YOLOv3-MobileNet模型进行训练,并使用CWD-NMS算法提升精度,得到的模型精度达到65.96%。自制食材数据集在该模型中表现比VOC 2007数据集好。
由图6可得在VOC 2007的全部种类中,火车种类准确度达到87%,盆栽种类准确度只达到30%;超一半种类的准确度达到60%以上,有五个种类准确度达到80%及以上。
Figure 6. Various class accuracy maps of VOC 2007 dataset
图6. VOC 2007数据集的各种类准确度图
由图7可得食材数据集中洋葱和青菜的检测准确度很好,鸡蛋和玉米的检测准确度很低,尤其是玉米的准确度只有36%。
最终检测效果由图8所示,图片中含有青菜、鸡蛋、胡萝卜食材,全部品种都检测出来,青菜的检测置信度有100%,鸡蛋的检测置信度只有41%。
Figure 7. Various class accuracy maps of food material dataset
图7. 食材数据集的各种类准确度图
通过分析准确率及食材数据集可得出以下特点及其有待改进的地方:
1) 食材数据集中的食材图片较为简单,背景较为单一,模型容易过拟合,泛化性不足,可能会在复杂背景的食材检测中表现不佳,其中有部分食材种类的检测准确度较低,应该收集更多复杂的食材数据,提升模型的泛化性。
2) 食材数据集种类只有10种,每一种类的数据数量只有200多张,样本数量较少,人工数据收集难度大,实用性不高,可以通过数据增强增加样本数量提升实用性。
YOLOv3-MobileNet模型比YOLOv3模型在运行速度上有很大的提升,并且使用CWD-NMS算法后模型的准确度有一定的提升;CWDNMS-lightweight YOLOv3模型在VOC 2007数据集的准确度表现不错,并且在食材数据集的准确度表现方面有一定的提升,主要提升空间在于食材数据集的收集以及制作方面,更好的数据集能够给模型带来更高的准确度。
5. 结论
本文介绍了一种基于轻量级神经网络的食材识别方法,通过比较各个神经网络的表现选择了YOLOv3作为特征提取网络,然后为了满足移植到嵌入式设备的需求,对YOLOv3结构进行轻量化处理,使用轻量化神经网络MobileNet代替原有的darknet53,构建YOLOv3-MobileNet神经网络模型,使模型达到轻量化的目的并且在准确度方面保持优势,最后使用CWD-NMS算法提升模型的准确度,最终的实验结果证明YOLOv3-MobileNet比YOLOv3在不明显降低准确度的前提下快了一倍,使用CWD-NMS算法能够提升模型7%的准确度,并且因为食材的数据集收集及处理方面相对于VOC2007表现更好,所以模型在食材识别方面有一定的准确度提升空间。CWDNMS-lightweight YOLOv3模型已经达到移植其他嵌入式设备对需求,能够应用在嵌入式的菜谱应用程序中,为菜谱应用程序提供食材识别的应用场景。
基金项目
国家自然科学基金项目(项目编号:61702110);广东省重大科技专项项目(项目编号:2016B010108004)。
参考文献