基于YOLOv3-M的智能果蔬计价设备的设计与实现
2021-03-07赵海越黄昭县宁玉富
赵海越 黄昭县 宁玉富
(山东青年政治学院 山东省济南市 250000)
在超市和市场中,消费者购买果蔬需要完成等待称重、计价、贴码,付款等一系列复杂的流程,而完成流程所需的时间长、精度低、速度慢,这必然会降低消费者的购物体验[1]。同时,该过程也需要商家招聘相应的人员来完成称重、计价、贴码等流程。这对于商家来说,无疑是加大了人力成本,且造成了一定的人力资源损失。
近年来,如何利用AI技术实现果蔬自助销售,引起人们的广泛关注。在2020年张建强等人[2]提出了基于机器视觉的果蔬自动销售系统,该系统利用了机器视觉技术实现了分类识别功能。但是其神经网络构造简单,还存在着检测速度慢、识别易混淆、需要PC上位机才能实现其功能等问题。
而毛颖颖等人[3]针对果蔬识别开发了相应的深度学习算法,通过Android端采集图像,在其建立的专属数据库完成对果蔬的识别和分类,最终取得了不错的效果。毛颖颖等人在研究过程中,发现了不同的外部环境会对识别效果产生不同的影响。但是,毛等人并未重视该影响,只是将实验至于不同环境下进行多次测试。
在2015年Joseph Redmonsho开发了YOLO[4]算法模型。YOLO算法在检测物体方面具有速度快的优势,但在识别精度上与Fast R-CNN[5]相比略有不足。后来Joseph Redmonsho提出了精度更高,识别速度又快的YOLO9000[6]、YOLOv3[7]等模型算法。
由于YOLO系列算法具有检测速率快、识别度高等优点,常常被工业界搭载到嵌入式设备上替代传统的人工检查岗位。因此,本文提出,在嵌入式设备上携带YOLOv3-M深度学习算法,使该设备能够准确、快速地识别果蔬。并设计自动计价算法,实现设备在识别果蔬后,能够同步计算出其重量、价格。经试验,该设备能独立完成识别、称重、计价等功能,可以有效的提高果蔬交易速度,减少人力支出成本,为消费者和商家提供了更加省时、省心、省力的交易方式。
1 总体系统设计
该设备由三部分组成:主控板(Raspberry 4B)、识别模块、称重模块,具体如图1所示。
图1:设备总体结构示意图
主控板为Raspberry 4B,Raspberry 4B搭载Linux系统,支持Python等编程语言,价格便宜,性能良好。
识别模块由USB摄像头组成。称重模块由HX711芯片和应变电阻传感器组成的,其称重范围为0-5kg。
整体工作流程如下:
(1)消费者将所购买的果蔬放在搭载称重模块的电子秤上,电子秤检测到有物体放入,激活处于休眠状态中的摄像头,摄像头捕获果蔬图像。
(2)摄像头将捕获到的果蔬图像传入主程序,再由主程序上的YOLO-M算法检测物体种类。
(3)称重模块将物体重量传入主程序中,主程序根据YOLO-M算法识别的果蔬种类,调用MySQL数据库中所存储的果蔬价格。
(4)树莓派计算果蔬总价,并将最终果蔬的种类、重量、单价和总价等信息展示在显示屏上。
2 F&V数据集的准备
数据集样本主要为网上采集的图片,水果蔬菜共六类:苹果、橘子、土豆、白菜、香蕉、黄瓜,每类一百张样本,共计六百张样本。用Labelimg工具标记数据样本。
在深度学习中,训练样本的数量十分重要。样本数量的多少,质量的好坏,将直接影响模型的训练状态和最终效果。为解决F&V数据集样本量少的问题,采取了数据增强的方式,对图像进行了旋转、放缩、超分辨率、浮雕、明亮、阴暗等处理。这样处理的好处是,不仅解决了数据集样本少的问题,还解决了未来设备检测环境多样性、复杂性等问题,在一定程度上增加了模型抗干扰的能力。最终,经过处理的F&V数据集样本数量达到了3600张。
最后,将处理好的数据样本分为三组,即:训练集、测试集和验证集。训练集负责训练模型,测试集用于测试模型是否具有良好的性能,验证集可以在训练过程中检查模型的情况,并且可以根据模型的当前状态调整最优的学习状态,使模型达到预期良好的效果。
本文按将训练集和测试集按照9:1的比例进行划分,将训练集和验证集按照训练集中的9:1比例进行划分,图2展示了部分F&v数据集。
图2:部分F&V数据集
3 图像识别算法
3.1 YOLOv3算法
YOLOv3是以Darknet-53为主要神经网络,FPN特征金字塔为负责加强特征提取的深度学习算法,YOLOv3结构如图3所示。
图3:YOLOv3结构图
YOLOv3算法使用了残差网络结构,模型可以适当加深网络结构,以提高算法准确率。主干神经网络Darknet-53在卷积特征图上进行BN批标准化和LeakyReLU非线性函数激活。其中,LeakyReLU激活函数相较于以往的ReLU激活函数有所不同。ReLU激活函数在输入小于0时输出值为0,而LeakyReLU则是在小于0的输入部分,按照斜率α取负值,公式如(1)所示:
这样处理的优点是,可使得输入小于0的神经元参与模型的训练。当更多的神经元参与到模型的训练中时,可有效地提升整体模型效果。
YOLOv3算法中的FPN特征金字塔是以Darknet-53的(52,52,256)、(26,26,512)、(13,13,1024)三种尺寸的特征图为输入,以卷积、上采样、多尺度融合三种处理方法为核心的算法机制。其中(13,13,1024)为最底层,(26,26,512)为中间层结构,(52,52,256)为顶层结构。
FPN特征金字塔工作流程图如图4所示。
图4:FPN特征金字塔结构图
预测结果A、B、C为不同感受野对应的预测结果,由于特征图的大小不一致,所以相对应的感受野也不一致。图像尺寸越小,感受野越大,图像检测越精细。YOLOv3算法使用三种大小不同的感受野,会对图片中大小不同的对象检测的更加全面。由于YOLOv3的工作原理是将一张图片分成多个小格进行检测,而一张图片里可能对应多个对象,每个对象对应多个小格,这样就会造成对于一个对象会出现多个检测框,这样就使得单个检测对象上存在大量的检测框,严重影响检测图像的结果。为了解决这个问题,YOLOv3采用了NMS非极大值抑制,利用K-means聚类算法筛除多余的检测框。K-means聚类算法采用的是欧式距离函数,如公式(2):
但欧式距离函数的大小是取决于检测框中心坐标点之间距离的远近,这样的坏处就是会在大的检测框部分出现大量偏差,无法达成预期的聚类结果。因此传统的欧氏距离函数并不适用于目标检测算法。
但Joseph Redmonsho将欧式距离函数中的坐标点距离改为交并比(IOU),IOU是检测框之间面积的交集比上面积的并集,改进之后的欧式距离函数可以有效的去除冗余的检测框,新的欧氏距离函数如公式(3):
YOLOv3损失函数(Loss)采用的是交叉熵,由三部分组成,分别是:
实际框与预测框hw,xy之间的差异:
实际框与预测框之间置信度的差异:
实际与预测之间种类结果的差异:
与YOLO和YOLO9000相比,YOLOv3模型的检测速率和准确率均有了很大的提高。但是,在低算力的嵌入式设备上,使用该算法会存在着检测速度慢、识别图像模糊、准确效果差等问题。因此,如何简化YOLOv3模型,使其能够以较少算力的Raspberry正常运行,就成为了工作的中心。
3.2 YOLOv3-Tiny
相对于计算量庞大的YOLOv3模型,YOLOv3-Tiny则是要精简的多。YOLOv3-Tiny改变了以往Darknet-53复杂的网络结构,其结构图如图5所示。
图5:YOLOv3-Tiny结构图
YOLOv3-Tiny去除了复杂的残差循环结构,只保留了卷积层对图像进行处理。并在每一个卷积层后面添加一个Maxpooling最大池化层做池化处理。YOLOv3-Tiny对FPN特征金字塔的处理是:去掉顶层结构,保留下两层结构。实验证明,模型的参数大量减少,检测速率大幅度提高,但是检测精度下降了许多。
导致YOLO-Tiny精度低的原因是,用于提取特征的主干网络层数的减少,从而导致了模型对图像特征提取的能力变弱。所以,要将YOLOv3-Tiny简单的主干网络替换成提取特征效果更好的轻量级神经网络作为主干网络。
3.3 MobileNet模型
MobileNet[8]模型是Google提出的轻量级模型之一。MobileNet之所以被称为轻量级模型,主要的原因就在于一个特殊的卷积:深度可分离卷积。
传统的卷积层对于一个Nw*Nh*Nc的图像处理,是将M个大小为3x3卷积核对其进行具有卷积性质的相关性运算。因此传统卷积运算的参数为:
而深度可分离卷积对于图像的处理,是先对图像用Nc个大小为3x3的卷积核进行深度运算,再用M个1x1的卷积核将Nc通道数调为M通道数。深度可分离卷积运算的参数为:
通过以上的公式分析,可以发现深度可分离卷积比传统卷积具有计算量更小、计算效率高的优点。
3.4 模型的选择
根据上文分析,对于YOLOv3模型的简化,共有三种方法:
(1)将YOLOv3主干网络Darknet-53替换为MobileNet模型,简称YOLOv3-M。
(2)将YOLOv3主干网络做简化处理,对FPN特征金字塔进行减枝处理,减少金字塔层数构建YOLOv3-Tiny,简称YOLOv3-T。
(3)将MobileNet模型替换YOLOv3-Tiny的主干网络并构建YOLOv3-Lite。
针对三种模型,根据参数量初步筛选所需要的模型,分别对其进行参数检测,具体见表1。
根据表1所示,三种新模型的参数量均远远小于YOLOv3的参数量,而YOLOv3-M与YOLOv3-Lite的参数量相似。同YOLOv3-M相比,YOLOv3-Lite只不过删除了FPN特征金字塔的部分结构以此来减少参数量,相比于检测精度的损失,减少的小部分参数并没有实际意义。所以经过初步筛选,选择YOLOv3-M和YOLOv3-T两个模型搭载到Raspberry上。
表1:四种模型的参数对比
4 算法的改进
4.1 GeLUs函数
在机器学习领域中,激活函数的选择必不可少,常见的激活函数有:Sigmoid、Tanh、ReLU、Arctan等。传统的算法模型大多以ReLU为激活函数。例如,YOLOv3中的激活函数是LeakyReLU函数,MobileNet中是以ReLU函数最大值为6的ReLU6作为激活函数。相较于ReLU函数,LeakyReLU函数和ReLU6函数一个提升了神经元的利用率,一个能避免数值崩塌且尽早的捕捉到图像稀疏特征。总体来说,LeakyReLU和ReLU6相较于ReLU均取得了不错的效果。
在2016Hendrycks D等人提出了GeLUs(Gaussian error linear units)[9]函数,其标准正态分布的GeLUs函数公式如(8)所示:
GeLUs函数完善了以往激活函数只能非线性激活的缺点,将随机正则化的能力引入非线性激活函数之内。GeLUs函数在BERT[10]、PVT[11]等Tranformer[12][13]系列体系中使用的十分广泛且效果较好,因此证明了GeLUs函数要优于ReLU等传统函数。
最终,将GeLUs函数作为激活函数引入YOLOv3的主干网络MobileNet中。
4.2 Soft-NMS
YOLOv3系列模型在很长的一段时间里保持了较好的性能,但不少学者仍发现YOLOv3中的NMS非极大值抑制存在着弊端。
假设当A与B为同类物体时,A的分数比B高且两者所处区域重合面积较大时,NMS会删去B的检测框只保留A的检测框。这样的处理结果反映出了NMS对于检测框处理过度的问题。针对此问题,模型在后续的算法改进中引入了Soft-NMS机制,不再将单一的IOU作为评判指标,而是引入种类SCORE,使NMS建立以IOU和SCORE为基础的权重判别形式,把IOU取高斯指数之后乘上SCORE,进行新的分数排序,从而将分数较小的检测框删去。
新的评判机制减缓了NMS生硬的处理机制,且提升了聚类效果,从而提高了模型对于物体的检测能力。
5 模型的训练与评估
5.1 模型的训练
模型使用F&V数据集训练,考虑到Raspberry的算力小,不可能完成模型训练的问题,因此采用迁移学习的思想在计算机上完成模型的训练。将训练好的模型文件传入Raspberry中,实现Raspberry的目标检测功能。
由于模型要部署在嵌入式设备上,所以要选择合适的神经网络框架搭载到嵌入式设备上。目前使用广泛的神经网络框架主要 有:Tensorflow、Pytorch、Caffe、PaddlePaddle等几种框架。其中Tensorflow早已广泛应用于工业界,能很好的兼容嵌入式平台。因此选择Tensorlow作为模型的主框架。最终的训练环境如下:Tensorflow-GPU-1.14.0、Keras-2.2.5、Python-3.7、OpenCVPython-4.5.1.48。
5.2 模型的评估
本文采用MAP评估模型识别物体的性能。MAP是平均的AP精度,也就是所有类的AP的平均值。MAP数值越大,代表该神经网络模型性能越好。AP是精确度和召回率在二维平面上所有点的组合。而准确率(Precision)和召回率(Recall)由TP(True Positives)、FP(False Positives)、FN(False Negatives)这三个数值组成,公式如(9)所示:
对模型进行MAP评估后,对具体参数如表2所示。
表2:三种模型性能指标
在模型训练中得到损失值(Loss),损失值越小,模型的精度越高。根据表1分析可得,YOLOv3-M的参数总量是YOLOv3的39.63%,YOLOv3-T则是YOLOv3的14.29%。分析表2可知,YOLO3-M和YOLOv3-T的性能相较于YOLOv3有所下降。但是可以反映出YOLOv3-M的性能要远好于YOLOv3-T。
所以,最后选择YOLOv3-M作为搭载到Raspberry上的模型。
6 自动计价算法
自动计价算法的核心是计算单价和重量。其中,重量是由称重模块称取物体而获得的,单价是由图像识别的结果调取MySQL数据库获得的。
称重模块的A/D转换芯片选取的是HX711芯片,传感器模块选择应变电阻传感器。将称重模块连接到Raspberry上,称重模块获得的重量数值可以传到Raspberry中。
在Raspberry中安装MySQL数据库,建立果蔬价格库,创建价格表,将每天果蔬实时单价插入表里。
最后由主程序对称重模块上果蔬的重量和识别的果蔬单价进行相应的计算,获得最终的价格。在交易结束后,Rspberry可使用Socket发送数据至服务器后端,商家可以通过每天果蔬售卖情况,分析市场需求的走向。
7 测试与分析
以PC机为Raspberry的外接显示器使用PUTTY软件连接Raspberry,输入VNCServer命令语句启动Raspberry的VNC可视化页面,并在可视化页面启动由Pyside2编写的主程序页面。在主程序页面可以看到设备在交易进行时的状态和运行结果,设备运行效果如图6所示。
图6:设备运行示意图
在检测精度方面,用设备对六种在不同环境下的果蔬分别进行50次测试,共计300次,测试结果如表3所示。
表3:测试结果
在检测速度方面,设备可实现秒级的检测速度,完成单次交易只需6秒左右。总体上,设备运行良好,可以实现快速、准确的识别果蔬并给出重量、单价和总价。
准确率和图像检测速度虽然达到了预期效果,但由于Raspberry的算力和性能较差,所以还存在着捕获图像速度略慢等问题。
8 结束语
在YOLOv3算法模型的基础上,将其改进为轻量级YOLOv3-M算法,大大的减少了模型参数,提高了模型运行速度,并在YOLOv3-M的基础上引入GeLUs激活函数和Soft-NMS机制,有效的提高了模型精度。通过YOLOv3-M设计并实现了一款智能果蔬计价设备,设备实现了识别果蔬和自动称重计价的功能,功能达到了预期设计的效果。设备可独立于PC上位机工作,且处于良好的工作状态。主程序具有一定通用性,可将程序迁移至性能更好的主控板上,使识别果蔬的速度和准确率得到进一步提升。基于深度学习的智能果蔬计价设备的设计优化了传统果蔬交易方式,对于未来“无人售货”,“智慧农贸”具有一定的参考意义。