基于TensorFlow的水果成熟度识别
2022-01-15任宇晴杜庆东
任宇晴 杜庆东
(沈阳师范大学,辽宁 沈阳 110000)
0 引言
近年来,水果采摘技术发展迅速,计算机视觉领域也迅速兴起,越来越多的学者将计算机视觉和图像识别与农业发展结合起来,对水果的成熟度识别投入颇多,即对收集到的水果图像运用图像识别[1]算法获取水果的成熟度信息。图像识别作为深度学习中的重要部分,无论从何种算法出发,基于RCNN 系列算法还是基于回归的YOLO系列[2]算法,与传统的机器学习算法 BP 等相比,得到的结果都是相对优化的,在深度学习的相关领域,算法所体现的优势开始逐渐取代传统方法。
受自然环境复杂背景的影响,水果成熟度的特征提取、目标检测[3]、图像识别等研究工作面临很大挑战。该文以苹果图像为研究对象,深入剖析基于TensorFlow框架[4]下的YOLO 算法及其发展前景,通过分析当前算法存在的问题进行优化改进,提出一种结合YOLO算法的优化算法,通过与传统机器学习算法、已有的YOLO算法作比较得出优化后的算法结果。
1 基于回归的目标检测算法
1.1 YOLO算法介绍
YOLO通过卷积层提取图像特征,通过全连接层进行目标苹果成熟度的预测,最后处理结果得到相应检测目标。YOLO利用卷积神经网络(CNN)将特征提取网络、类别预测等统一到一起,放在一个框架中从而实现端到端的高效训练,它也能同时预测图像的所有类的所有边界框。这意味满足速度要求的同时,精确度也能达到要求。与基于区域建议框的算法相比,其运行速度大大提高,而且改进的快速版本的Fast YOLO算法,处理速度能达到基础的三倍以上,虽然也会产生更多的定位误差,但是背景预测远优于当前传统的很多方法。
1.2 具体流程
具体而言,YOLO的卷积神经网络(CNN)将输入的图片分割成S×S网格(grid) ,如果某一个待检测的苹果的中心落入了网格单元(grid cell)中,则这个网格单元就负责检测该目标水果,网络只需要预测S×S个网格,每个网格单元预测B个边界框,速度可以有很大的提升。最终网络的输出是一个S×S×(B×5+C)的向量,可以理解为每个单元格需要做两件事:一是每个区域的单元格负对自己相应的目标object负责预测;二是每个单元格需要预测对应的x,y,w,h值,同时为每个边界框(bounding boxes,简写为bbox)预测一个得分(confidence scores)。该得分即为置信度。简单理解就是预测是否含有物体以及是这个物体的可能性是多少,具体表示如式(1)。
式中:Pr(object)为边界框含有目标的可能性大小;IOUtruthpred为边界框的精准度。
置信度一般表现在两方面,一是边界框含有目标的可能性大小(Pr(object)),二是边界框的精准度(IOUtruthpred)。如果这个网格中不存在一个目标物体,则可能性大小Pr(object)=0;否则的话,可能性大小Pr(object)=1,在检测任务中,以交并比(Intersection of Union)即两个矩形框面积的交集和并集的比值,用IOU简单表示。而边界框的准确度即可以用预测框(Prediction box)与实际框(ground truth box)的交并比来表示,即IOUtruthpred。因此置信度(confidence)可以定义为可能性大小与精准度的乘积(Pr(object×IOUtruthpred)。在测试时,边界框的具体类别的置信度如公式(2)所示。
式中:Pr(Classi|Object)为条件类别概率,即每个网格在输出边界框(bbox)值的同时要给出网格存在目标object的类型,测试时,用条件类别概率乘以单个盒子的置信度预测。
不管网格单元中包括的边界框有多少,每个单元网格只预测每个类别的概率值,即默认每个网格中的所有边界框都是同一类。在测试的非极大值抑制阶段,每个边界框按照下式被衡量是否应该保留下来。边界框bbox的预测值有(x,y,w,h,c),中心坐标(x,y) 代表了边界框的中心与网格单元边界的相对值,边界框的高用h表示,宽用w来表示,理论上(x,y,w,h)这四个元素的值都在[0,1]。c即为置信度,就是IOU值。
2 网络模型
2.1 网络结构
该文采用的网络模型结合了YOLO的基础特征提取网络Darknet-19和深度残差网络ResNet。基础特征提取网络Darknet-19[5]保留了 VGG16等网络的优势,其网络结构易计算,同时兼具着高性能。网络结构如图1所示。其中,Con(Convolutional layer)为卷积神经网络的卷积层[6],共有19个,Max(Max pooling layer)为卷积神经网络的最大池化层,共有5个,Darknet-19网络模型用全局平均池化(global average pooling)做预测,把1×1的卷积核置于3×3的卷积核之间,使用归一化指数函数(Softmax)处理不同类别间分类差异,优化网络结构。
图1 Darknet-19网络结构图
2.2 改进ResNet残差网络
ResNet残差网络是基于残差连接的网络结构。网络的基本结构为残差块,残差块则是由几层网络和一个残差连接而成,残差网络(ResNet)层数可达上百层,能够减少模型网络的训练时间,在模型可控的时间内,增加网络深度会加大对网络的反向传播,反向传播的梯度都是在上一层的基础上进行计算的,理论上当一个网络模型复杂到一定程度的情况下,可以实现其期望精度,但在实际情况中,随着网络结构的逐渐加深,梯度容易出现弥散和爆炸,梯度的问题也会随之出现,比较靠前的层梯度会很小。这表示着学习已经基本停止,也就是梯度消失。因此在实践中,添加过多的层训练,其训练误差反而会增加。就此问题, 拟提出了新的解决方案。假设输入为x,理想映射为f(x),如图2所示。改进后的映射如图2所示,拟合出残差映射f(x) +x,残差映射在实际应用中更容易被优化。引入优化改进后的残差网络ResNet思想,不仅可以提取到更深层的特征,同时避免出现梯度消失或爆炸。同时,由于水果果实的图像数据多为较大的目标,因此选择大中尺度作为回归预测的尺度,以此降低计算的复杂性。
图2 改进的残差网络
3 实验与分析
3.1 实验平台
如今出现在公众视野并被广泛应用的框架有很多,Caffe、Tensorflow、Keras、MXNet和PaddlePaddle 等。该实验以iOS系统为基础,利用Pycharm编辑器,运用Python编程语言,同时使用深度学习框架Tensorflow作为该算法的实验平台,采用基础YOLO算法网络结构优化后的算法,对苹果成熟度识别进行实验并对实验结果对比加以验证。
Tensorflow框架:Tensorflow相比于其他框架,安装与配置较为简单且功能强大,操作方便。可以实现对神经网络大规模训练,同时进行简单的并行计算。Tensorflow 具有可视化工具 Tensorboard,优化后的模型训练参数后可以快速上传至工具,通过对比实验,可以得到训练数据集和测试数据集的准确率。由于水果果实的成熟度图像样式区别略小,因此选择高灵活性的框架尤为重要,框架的简单理解如图3所示。
图3 TensorFlow框架理解图
3.2 实验过程
3.2.1 数据预处理
数据的采集分别从ImageNet图像数据库提取、室外自然光下苹果采摘园内数码相机拍摄、网上收集高清晰度图片获得。图像数据集包括不同成熟度的苹果果实,256×256大小。进行数据增强以提高模型泛化能力,对原始图片进行旋转、翻转、添加噪声的操作,使用MATLAB对原始的数据进行镜像处理。部分数据集展示如图4所示。
图4 部分数据集
3.2.2 YOLO网络结构补充
由于水果果实目标比较小,数据样本批量不够多且对苹果成熟度的识别上相似度较高,因此需要提取和学习更多的特征信息来实现对成熟度的检测,该文实验受限于使用的硬件条件以及用于检测苹果成熟度的小目标任务的需求,很难使用较大的批量大小(batchsize)值。因此该文在原Darknet-19网络的基础上进行改进优化,使用群组归一化(GN)代替YOLO算法往常卷积层上使用的批量归一化(BN),批量归一化在小批量的使用上会降低数据的准确性,对批量的大小有一定的要求。
3.2.3 模型训练
常见的神经网络模型可以表示为式(3)。
式中:x为对神经元的多个输入;wi,xi为每个输入对应的权重;为预测输出值。
神经网络训练的目的是找到最优的权重{w1,w2,...,wn}。该文采用的损失函数为常用于回归问题的平方损失公式,如式(4)。
神经网络训练的目的是找到最优的权重{w1,{x1,x2,...,xn}的真实标签{y1,y2,...,yn}拥有最小的差距,衡量差距的函数即损失函数。现实中加入函数是为了预防模型产生过拟合。
训练模型的过程如下:1) 构建网络。设置输入层输出层之间的隐藏层层数,设置各层卷积核个数、尺寸、步长,初始化网络权重W,设置学习率为η,学习率是一个在每次按梯度值更新参数都不变的超参数,选择合适的激活函数,构建符合问题的目标函数,具体流程如下。网络训练流程图如图5所示。2) 开始训
图5 网络训练流程图
3.2.4 实验结果分析
该实验将所述模型与 BP 和 YOLO 算法的识别结果进行了比较,实验结果如表1所示。
表1 该文模型与 YOLO 和 BP 算法识别精度比较
YOLO算法与传统机器学习算法BP相比,识别精度有明显的提高,验证了深度学习领域中基于回归的目标检测算法的有效性,改进网络结构后的优化算法精度为91.02%,比YOLO算法提高了1.87%,与此同时,在准确性上也有了提高,进一步说明了改进网络结构的算法实用性。
4 结语
针对水果识别这一个特定的场景,由于果实的成熟度各不相同,且自然环境背景较复杂,因此,现有的果实识别模型仍存在很多不足,水果成熟度的检测在农业方面还有待发展,水果成熟度鉴别检测对时间的把控要求很高,对实时监测的需求更大,需要做到及时并且准确,该文采用的YOLO算法的优点为速度快且精度高,随着深度学习的不断深入研究,利用好深度卷积神经的优势,在水果成熟度目标检测的后期研究工作中至关重要。