基于轻量化YOLOv3卷积神经网络的苹果检测方法

2020-08-26 07:42齐泽宇王龙军杨俊杰
农业机械学报 2020年8期
关键词:网络结构残差卷积

武 星 齐泽宇 王龙军 杨俊杰 夏 雪

(1.南京航空航天大学机电学院, 南京 210016; 2.中国农业科学院农业信息研究所, 北京 100081)

0 引言

目前,我国农业生产不断向规模化、集约化、精准化方向发展,对具有智能化、自动化的农业智能装备的需求也快速增加[1]。苹果是我国产量最大的水果,由于果园环境复杂,目前仍依靠人工采摘[2-3]。因此,在农业劳动力紧缺、采摘成本不断增加的情况下,以苹果采摘机器人代替人工采摘具有重要的现实意义和广阔的应用前景[4]。

快速准确的苹果检测是苹果采摘机器人自动采摘的关键。复杂果树背景下的苹果快速准确检测受诸多因素影响:果实之间相互重叠遮挡,树叶也会对果实产生遮挡;现场的光照环境非常复杂;苹果采摘机器人本身的计算资源有限,复杂算法运行效率不高。这些为苹果快速准确检测带来诸多困难。

苹果检测本质上属于目标检测。目前,目标检测方法主要分为传统方法和深度学习方法。传统方法受光照变化和复杂背景的影响较大,在此方面已有一些针对不同应用场景的改进方法[5-8]。文献[9]研究了基于区域增长和颜色特征的图像分割方法,提出一种基于支持向量机的苹果识别分类算法。文献[10]在不同光线和阴影的影响下,采用R-G色差分量和改进型Otsu法进行图像分割,求取目标质心,并使用同面积的圆形进行拟合,较好地实现了对成熟苹果的识别。文献[11]通过颜色和纹理检测可能属于苹果的像素,由这些像素组成种子区域,然后与理想的特征模型进行比较,从而判断该区域是否包含苹果。

近年来,以图像特征自学习为优势的深度学习方法开始运用于苹果检测。文献[12]针对4种水果提出了一种改进的SSD(Single shot multibox detector)水果检测模型,采用ResNet-101模型替换SSD模型中的VGG16输入模型。文献[13]借鉴DenseNet网络的思想对YOLOv3网络进行改进,对遮挡、重叠情况及不同生长阶段的苹果进行有效检测。文献[14]改进设计了基于ResNet-44的R-FCN(Region-based fully convolutional networks)网络,能够识别疏果前的苹果目标。虽然上述方法都具有一定的鲁棒性和泛化性,但是实验平台均为高性能计算机,缺乏考虑采摘机器人有限计算资源的影响。

YOLO[15](You only look once)网络是一种通用的one-stage目标检测算法,通过单个卷积神经网络处理图像可直接计算出多种目标的分类结果与位置坐标。然而,苹果采摘机器人只需检测单种目标(苹果),该网络结构过于庞大,计算复杂度高,检测效率不足,无法满足采摘实时应用。因此,本文在YOLOv3网络的基础上提出一种轻量化卷积神经网络改进设计方法,采用深度可分离卷积[16]替换普通卷积,定义一种融合均方误差损失和交叉熵损失的多目标损失函数,在网络训练时采用一种基于随机梯度下降(Stochastic gradient descent,SGD)和自适应矩估计(Adaptive moment estimation,Adam)的多阶段学习优化技术,并在工作站和嵌入式开发板上分别进行实验,对改进后的模型和方法进行检测速度和准确率的验证。

1 轻量化卷积神经网络设计

1.1 传统YOLOv3网络结构

YOLOv3网络的整体结构如图1所示,使用Darknet-53网络来提取特征,Darknet-53网络的主体结构如图1蓝色虚线框内所示,该网络借鉴了残差网络[17]的结构,在一些网络层之间加了跳跃连接,由此构建了残差单元,使得网络结构可以更深。网络结构中的基本单元如图1红色虚线框内所示,由卷积层、批归一化层(Batch normalization,BN)[18]和Leaky ReLU激活函数组成;由2个这样的基本单元和跳跃连接组成图1绿色实线框内所示的残差单元,再分别由1、2、8、8、4个残差单元组成5个残差块,最终组成网络的主体结构。

为了改善网络对小尺寸物体检测性能差的问题,YOLOv3使用13×13、26×26、52×52这3个不同尺度的特征图来进行目标检测,并将低分辨率的特征图上采样后与高分辨率的特征图进行拼接,如图1蓝色实线框内所示。

1.2 轻量化网络结构改进

1.2.1网络结构简化

YOLOv3使用的基础网络为Darknet-53。然而,在苹果检测这一个单类别检测任务中,并不需要如此复杂的网络。并且,神经网络本身具有较高的冗余性,因此可以对网络结构进行简化以减少计算量。本文仿照Darknet-53网络的结构设计了一个新的基础网络,该网络由5个相同结构的残差块串联组成,每个残差块包含2个残差单元和一个步长为2的卷积,减少了网络的层数和计算量。

由于本文设计的网络应用于苹果采摘机器人上,实现苹果的识别定位,所以可以不对采摘机器人工作空间之外的苹果进行检测。本文使用的苹果采摘机器人的工作空间是半径为0.85 m的球体。在网络输入为416像素×416像素的条件下,52×52特征图中单个网格的尺寸为8像素×8像素。该尺寸转换到本文使用的1 280像素×780像素图像分辨率下,单个网格的尺寸约为24.6像素×24.6像素。根据相机内参的标定结果,在机器人工作空间内,该网格所对应的最大物体的二维投影尺寸约为22.5 mm×22.4 mm,远小于正常苹果的二维投影尺寸。因此无需在该尺度上进行苹果检测,只需要使用13×13和26×26这2个尺度的特征图进行苹果检测,从而删除生成52×52尺寸特征图的相关网络结构,减少计算量。

1.2.2使用深度可分离卷积

使用深度可分离卷积替换原网络中所有3×3的普通卷积。深度可分离卷积的整个工作流程如图2所示,包括深度卷积和逐点卷积2部分,输入样本的尺寸为H(行数)×W(列数)×N(通道数)。首先,深度卷积对输入向量的每个通道使用一个单独的k×k×1的卷积核进行卷积运算,经过N个深度卷积运算得到N个尺寸为H×W的向量。其次,逐点卷积完成对上一环节输出向量的通道数调整,使用1×1×N的卷积核进行卷积运算将其压缩为H×W×1的向量,经过M个逐点卷积运算得到M个尺寸为H×W的向量。最终组成H×W×M的输出结果。

深度可分离卷积相对于常规卷积的优点是可以显著减少参数量。例如,对于一个N通道的输入向量,若想用k×k的常规卷积核去得到一个M通道的输出向量,需要的参数量为

a=k2NM

(1)

如果使用深度可分离卷积完成同样的工作,需要的参数量为

b=k2N+NM

(2)

两种情况下参数量的比值为

(3)

由此可见,当输出向量的通道数很大时,2种卷积参数量的比值近似与卷积核尺寸的平方成反比。当卷积核尺寸为3×3时,使用深度可分离卷积最多可以将参数量减少到原来的1/9。

1.3 改进结果

改进后的Light-YOLOv3网络结构如图3a所示。网络输入是416像素×416像素×3通道,输出是13×13和26×26两种尺寸的特征图。残差块结构如图3b所示,包含1个步长为2的卷积单元和2个残差单元。残差单元结构如图3c所示。文献[19]实验结果表明:当预激活结构采用BN层+激活层+卷积层的排列顺序时,包含该预激活结构的残差单元神经网络具有更好的收敛性、精度和泛化能力。因此,本文设计的网络中也采用BN层、激活层、卷积层的排列顺序。卷积单元具体结构如图3d所示,由3部分组成,每个部分均包含1个BN层、Leaky ReLU激活函数和卷积层,卷积核的尺寸分别是1×1、3×3和1×1,同样采用BN层+激活层+卷积层的排列顺序,当卷积单元用于下采样时,第1个卷积的步长为2。

1.4 损失函数

损失函数L由4部分组成,分别是边界框定位损失值Lxy、边界框尺寸损失Lwh、置信度损失Lconf和类别损失Lcls,即

L=Lxy+Lwh+Lconf+Lcls

(4)

其中边界框定位损失Lxy使用均方误差损失函数表示为

(5)

式中S2——输入图像被划分网格数

B——单个网格预测边界框数,取值为3

(xi,yi)——预测边界框中心点坐标

边界框尺寸损失Lwh使用均方误差损失函数表示为

(6)

式中wi、hi——预测边界框宽度、高度

置信度损失Lconf使用交叉熵损失函数表示为

(7)

式中λobj——权重系数,取值为1

λnobj——权重系数,取值为100,这样使得不包含目标的边界框产生更大的损失值,表明此时的模型误差较大

Ci、i——预测目标、实际目标的置信度

类别损失Lcls使用交叉熵损失函数表示为

(8)

式中c——检测到的目标所属类别

pi(c)——第i个网格检测到某个目标时,该目标属于类别c的预测概率

式(4)是单个尺度上的损失函数。本文改进的网络在两个尺度上进行检测,所以最终的损失函数值Lsum是在2个检测尺度上分别计算损失函数值相加得到的,即

Lsum=L13×13+L26×26

(9)

式中L13×13——针对13×13特征图计算的损失函数值

L26×26——针对26×26特征图计算的损失函数值

2 数据集制作

图5 数据增强后的图像Fig.5 Images after data augmentation

目前网络上有大量苹果相关的图像,本文使用Python语言开发了图像爬虫对这些图像进行批量下载,减小了数据采集的成本,提高了数据采集的效率。

图像的主要来源为百度、Bing和谷歌等网站,按照关键字“苹果”和“苹果树”分别保存一定数量的图像,然后进行人工筛选并去除重复图像,最终获得815幅图像,其中只包含单个苹果的图像262幅,包含复杂光照下的苹果图像141幅,存在树叶遮挡的苹果图像150幅,多个且不重叠苹果图像69幅,多个且存在重叠苹果图像415幅,未成熟苹果图像47幅。然后使用标注工具按PASCAL VOC数据集的标注格式对图像进行标注,生成XML类型的标注文件。

训练深度神经网络需要大量的数据,过小的数据集会导致神经网络过拟合,本文对采集到的数据集使用数据增强技术,增加数据集中的数据量,由此可以提高模型的泛化能力,提升模型的鲁棒性。

使用翻转、缩放、旋转、裁剪、平移、添加噪声和色彩抖动(包括对图像亮度、饱和度和对比度进行调整)7种方法的随机组合对采集到的图像进行数据增强,原始图像和增强后图像分别如图4和图5所示,并对每幅图像对应的标注文件进行同步变换。

图4 原始图像Fig.4 Original image

每幅图像生成20幅数据增强图像,最终有2幅图像数据增强失败,得到有效图像17 113幅。按照8∶1∶1的比例划分训练集13 690幅、验证集1 712幅与测试集1 711幅。

为了加快训练时网络的收敛速度以及防止梯度爆炸,对标注数据进行归一化处理,处理流程如图6所示。

图6 归一化流程图Fig.6 Normalized flowchart

将结果保存到txt格式的文件中,数据格式为class_idxywh,其中class_id表示类别编号,在本文使用的训练集中class_id为0表示类别为苹果;x、y、w和h分别表示归一化后的目标物体边界框的中心点坐标、宽度和高度。

3 训练与实验

3.1 训练

使用Pytorch框架搭建网络,并在工作站上进行训练。工作站的配置为i7-9800X@3.80 GHz×16、内存32 GB和显存11 GB的GeForce RTX 2080 Ti,使用的系统为Ubuntu16.04,安装了CUDA和cuDNN库,Python版本为3.6,Pytorch版本为1.3。

训练前还需要在数据集上使用K-means算法进行聚类,得到预设的6个模板框尺寸,在本文制作的数据集上得到的结果为(77,77)、(131,127)、(194,189)、(261,254)、(395,395)、(693,667)。

训练时实际的批尺寸为4,每迭代2次更新一次权值,等效的批尺寸为8,总共训练50代,每代保存一次模型权重文件,每代迭代3 423次,共迭代171 125次,耗时7.5 h。

训练时使用SGD和Adam 2种优化算法。经过实验发现,单独使用SGD优化算法时,学习率偏大会导致算法难以收敛,学习率偏小又会导致算法收敛很慢;而单独使用Adam优化算法时,最后训练的结果会比单独使用SGD时差[20],但优点是具有自适应学习率,算法收敛快。所以本文将训练过程分为2个阶段。第1阶段为前30代,使用的优化算法为Adam,使用默认的初始化参数;第2阶段为后20代,使用的优化算法为SGD,参考经验值并结合多次实验的结果,设置初始学习率为0.000 1,动量参数为0.9,每经过一代学习率减小为原来的0.9。训练时第2阶段的学习率变化曲线如图7所示。

图7 第2阶段学习率变化曲线Fig.7 Learning rate curve at the second stage

训练过程中每代完成后在验证集上对模型进行评估,计算F1值、mAP、准确率P和召回率R这4个指标,将这些数据保存至日志文件中,并使用Tensorboard软件对训练过程进行实时的监控。对于二分类问题,可以根据样本S的真实类别和模型预测类别的组合将样本S划分为4种类型:预测为正的正样本(True positive,TP),数量为TP;预测为负的正样本(False negative,FN),数量为FN;预测为正的负样本(False positive,FP),数量为FP;预测为负的负样本(True negative,TN),数量为TN[21]。

准确率P表示预测为正的所有样本中真正为正的样本所占的比例,计算公式为

(10)

召回率R表示真正为正的样本中被预测为正的样本所占的比例,计算公式为

(11)

F1值(F1)可以综合考虑准确率和召回率,是基于准确率和召回率的调和平均,定义为

(12)

在目标检测中每个类别都可以根据准确率P和召回率R绘制P-R曲线,AP值就是P-R曲线与坐标轴之间的面积,而mAP就是所有类别AP值的平均值。

3.2 训练数据分析

图8 损失值变化曲线Fig.8 Loss value curve

训练完成后,从日志文件中读取每一次迭代的损失值并绘制曲线,结果如图8所示。由图8可以看出,前30 000次迭代损失值迅速减小直至稳定,后面的训练过程中损失值在小范围内振荡。

根据日志中记录的数据绘制训练过程中F1值、mAP、准确率和召回率的变化曲线,如图9所示。由图9可知,在前30代的训练过程中,各项指标变化幅度较大,但是总体趋势是增长的;在后20代的训练过程中,各项指标逐渐趋于稳定,在小范围内振荡。

F1值最大是94.4%,对应第27代;mAP最大值为96.2%,对应第47代;准确率最大值为95.4%,对应第27代;召回率最大值为97.4%,对应第47代。

图9 训练过程中各项指标变化曲线Fig.9 Curves of various indicators during training

本文主要考虑F1值和mAP这2个指标对训练结果进行评估,最终选取第50代保存的模型权重文件作为最终的训练结果,具有较高的F1值和mAP,同时具有较高的准确率与召回率。

3.3 实验

3.3.1工作站上对比实验

针对本文所提出的YOLOv3网络结构改进措施,分别进行单项改进措施的验证实验。将仅使用深度可分离卷积的改进网络记为网络A,仅使用同构残差块串联的特征提取网络并简化特征图尺度的改进网络记为网络B,使用相同的数据集与训练参数对YOLOv3网络、网络A和网络B进行训练,在测试集上分别进行检测,测试集中共包含1 711幅图像。对比每种网络的检测时间与各项性能指标,检测时间如表1所示,F1值、mAP、准确率和召回率如表2所示。

表1 网络检测时间对比Tab.1 Comparison of network detection time

表2 网络性能指标对比Tab.2 Comparison of network performance indicators %

由表1和表2可知,相对于传统的YOLOv3网络,本文改进的网络A和网络B检测时间有较明显下降,准确率也稍有提高,实验数据验证了前文方法分析的正确性。在网络A中,使用深度可分离卷积替换普通卷积,减少了参与计算的卷积参数量,从而提高了网络的检测速度。在网络B中,针对单一目标检测的应用,使用同构残差块串联的特征提取网络,删除了生成52×52的特征图的相关网络结构,减少了参与计算的网络分支,从而提高了网络的检测速度。并且,由于网络结构的简化,一定程度上避免了复杂网络在训练阶段对样本数据的过拟合,提高了网络的泛化能力。因此,网络对验证集样本的检测准确率也稍有提高。

同时采用这2种措施改进YOLOv3网络的结构组成,得到结构精简的Light-YOLOv3网络。YOLOv3网络与Light-YOLOv3网络训练得到的模型权重文件容量、参数量和理论计算量如表3所示,其中FLOPs表示浮点运算次数。

表3 网络模型权重对比Tab.3 Comparison of network model weight

由表3可知,Light-YOLOv3网络相比于YOLOv3网络,网络权重文件容量减小了62.78%,参数量减少了63.09%,理论计算量减小了53.66%。

在工作站平台上,使用2种网络对整个测试集(包含1 711幅图像)分别进行检测,对比2种网络的检测时间与各项性能指标,检测时间如表4示,F1值、mAP、准确率和召回率如表5所示。

表4 工作站检测时间对比Tab.4 Comparison of detection time on workstation

表5 工作站网络性能对比Tab.5 Comparison of network performance on workstation %

由表4和表5可知,Light-YOLOv3网络相比较于YOLOv3网络,各项性能指标均有提高,同时检测速度更快。Light-YOLOv3网络F1值提高了3.01个百分点,mAP提高了1.93个百分点,准确率提高了4.48个百分点,召回率提高了1.41个百分点,单幅图像的平均检测时间减少了24.67%,检测速度提高了32.74%。

检测效果对比如图10所示。可以看到Light-YOLOv3网络具有更好的检测效果,能够检测图10中蓝色圆圈所包含的被遮挡的苹果。

图10 网络检测效果对比Fig.10 Comparison of network detection effect

3.3.2嵌入式开发板上对比实验

最后在Nvidia TX2嵌入式开发板上进行实验,使用的系统为Ubuntu 18.04,安装了CUDA和cuDNN库,Python版本为3.6,Pytorch版本为1.3,并使用TensorRT库实现神经网络推理加速。

在Nvidia TX2上,使用2种网络对整个测试集(包含1 711幅图像)分别进行检测,对比2种网络的检测时间,结果如表6所示。

表6 嵌入式开发板检测时间对比Tab.6 Comparison of detection time of embedded system

由表6可知,Light-YOLOv3网络在嵌入式开发板上运行时单幅图像平均检测时间为131.67 ms,相比YOLOv3网络减少了29.42%,在嵌入式开发板上检测速度可以达到7.59 f/s,提高了41.60%。

4 结论

(1)在分析YOLOv3网络结构的基础上,设计了由5个相同结构的残差块串联组成的特征提取网络,在2个尺度上进行苹果检测,并采用深度可分离卷积替换普通卷积,采用均方误差损失和交叉熵损失组成的复合损失函数,减少了参数量和降低了计算量。

(2)采集数据对网络进行训练,将训练过程分为2个阶段,分别使用SGD和Adam优化算法,加快了模型收敛,并获得较好的训练结果。分别在工作站和嵌入式开发板上进行实验,结果表明,改进后参数量减少了63.09%;在工作站上单幅图像的平均检测时间为8.55 ms,在嵌入式开发板上的平均检测时间为131.67 ms,比改进前分别减少了24.67%和29.42%;在工作站上的检测速度为116.96 f/s,在嵌入式处理器上的检测速度为7.59 f/s,比改进前分别提高了32.74%和41.60%;在测试集上的mAP为94.69%,F1值为94.57%,比改进前分别提高了1.93个百分点和3.01个百分点。

猜你喜欢
网络结构残差卷积
基于残差-注意力和LSTM的心律失常心拍分类方法研究
基于双向GRU与残差拟合的车辆跟驰建模
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
快递网络结构研究进展
基于残差学习的自适应无人机目标跟踪算法
基于深度卷积的残差三生网络研究与应用
基于AutoML的保护区物种识别①
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法