顾伟, 王巧华,李庆旭,施行,张洪洲
华中农业大学工学院/农业农村部长江中下游农业装备重点实验室,武汉 430070
棉种在轧花、脱绒或磨光等过程中,都会有不同程度的破损,这将直接影响棉花的产量和品质[1]。新疆南疆地区是我国重要的棉花生产基地,棉籽精选对提高该地区的棉花产量具有重要意义。目前,国内外有关种子检测方法的研究较多,如王亚丽等[2]、Tigabu等[3]使用近红外(NIR)光谱分别对玉米种子和松树种子进行分类;董翠翠等[4]、闫彬等[5]采用机器视觉对种子的颜色以及破损情况进行研究与分选;余淑华等[6-7]运用色选理论对棉籽的成熟度以及完整度进行识别;Golshan等[8]、Brennen等[9]利用不同的算法自动检测图像中的种子;Dean等[10]利用种子的密度成功分选了候选突变体。以上研究大多都针对单粒种子的检测,单粒棉籽的检测效率低,实际应用很难满足生产需求,因此提高棉籽检测效率是该研究的主要方向。
基于传统的机器学习方法实现破损棉籽的鉴别,需要人工提取棉籽数据特征才能建立破损棉籽的判别模型,因此该方法的检测效率很难满足生产需要[11]。卷积神经网络(deep convolutional neural network)自动提取图像特征优势明显,且在农业检测领域应用广泛[12-13]。由于棉籽尺寸较小,在图像中属于小目标,手动提取特征较为困难。SSD-VGG16网络能够快速检测出图像中的棉籽,并识别其类别与位置信息,适用于多目标检测,但对于群体棉籽的品质检测还需要进一步的改进。
本研究在SSD网络[14]的基础上,提出一种基于ResNet50网络[15]改进的群体棉籽破损检测方法,利用ResNet50网络作为基础网络自动提取棉籽图像特征,并利用SSD网络对群体棉籽实现破损判别,旨在为检测群体破损棉籽信息提供新的思路,加速分选棉籽智能化,进一步提高棉籽检测效率,为后续研发相关自动化设备提供技术支持。
棉籽采集装置主要是由暗箱、光源、相机、镜头、背景板以及计算机组成(图1)。相机使用AD-080GE工业相机,分辨率为1 024×768 dpi,帧率为30 FPS,品牌为JAI;镜头使用Kowa公司制造的LM6NC3型号。光源为12 W的正白光LED环形光源,采集计算机为Lenovo B50-30,采集软件为JAI SDK。棉籽在暗箱内的物距、焦距和光圈在采集过程中保持不变。
1.暗箱 Black box; 2.背景板 Background plate; 3.棉籽 Cottonseed; 4.相机和镜头 Camera and lens; 5.环形光源 Ring light; 6.数据传输线 Data transmission line; 7.计算机 Computer.
非破损棉籽原图如图2 A所示,破损棉籽图像如图2 B所示,采集得到的群体棉籽图像如图2C所示,通过棉籽表面可以明显观察出破损棉籽与非破损棉籽的区别,破损棉籽表面坑洼,非破损棉籽表面光滑。
图2 棉籽采集图像Fig.2 Image collection of cottonseed
取新疆新路早棉籽10 000粒,其中破损与非破损棉籽数量比例为1∶1。将破损与非破损棉籽按1∶1比例均匀洒落在背景板上,利用CCD相机采集群体棉籽图像,之后用LabelImg软件对采集的图像进行人工标注,分别标注出破损棉籽与非破损棉籽,其中训练、验证、测试集按7∶2∶1比例划分,10 000粒棉籽图像具有足够的泛化代表性,以此来验证棉籽检测的准确率。
共采集500张群体棉籽图片,每张图片约有20粒棉籽,分辨率为1 024×768 dpi,将图像分辨率调小至300×300 dpi,在使用SSD训练数据前,需要手动标记并制作tfrecord标签文件,图像标注时利用棉籽的最小外接矩形进行标注,保证每粒棉籽尽量在1个矩形框里。标注完成将会生成含有类别和位置信息的xml文件。标注完成后将500幅图像划分为训练集、测试集和验证集,其中训练集350幅图像、测试集100幅图像、验证集50幅图像。每幅图像含有约20个棉籽样本,500幅图像中含边框标注样本个数为10 000(其中破损棉籽和非破损棉籽的比例为1∶1),训练集中棉籽7 000粒,测试集中棉籽2 000粒,验证集中棉籽1 000粒,能够满足深度学习样本数量要求,具体数据如表1所示。
表1 棉籽试验数据集Table 1 Cottonseed test data sets
1)改进前SSD模型结构。本研究主要目标是从采集的一幅群体棉籽图像中检测出棉籽目标并将其分类。SSD是基于前向传播的 CNN 网络,经典SSD 模型主网络是由 VGG16中部分卷积层组成,并将最后2层的 Conv6 和 Conv7 换成全连接层,用来进行图像分类。训练模型时,检测框架的损失函数用位置损失(Lconf)和置信损失(Lloc) 的加权和表示,如公式(1)所示。对于目标检测,基于区域的卷积神经网络有RCNN[16]、Fast RCNN[17]和 Faster RCNN[18],核心思想是在卷积层后接入了感兴趣区域(region of interest,ROI),池化层使网络可以定位ROI[19],然后在当前区域内进行分类。SSD的检测框架由2个部分组成(图3),一部分是前面的卷积神经网络,经典模型中采用的是VGG16,用于对图像特征的初步提取,第二部分是位于后端的多尺度特征检测网络,用于对前端网络产生的特征层进行不同尺度条件下的特征提取,利用多尺度特征检测网络当中的浅层特征图尺寸较大的特点,检测棉籽这一类尺寸较小的物体。图 3 所示 SSD 针对 Conv4_3、FC7、Conv8_2、 Conv9_2、Conv10_2 和 Conv11_2 特征层的每个单元按照不同长宽比分别提取4~6个默认框,最终获取8 732个默认框,训练阶段利用公式(1)为预测框做坐标偏移的回归分析,使其尽可能接近标注框。测试阶段每个默认框都和标注框进行重叠率匹配,并按照匹配分数从高到低排序,利用非极大值抑制[20]的方法,去掉所有冗余框,保留置信度最大的框。
图3 改进前的SSD网络结构Fig.3 Improving the former SSD network structure
(1)
其中:
(2)
(3)
(4)
2)改进SSD模型。SSD-ResNet网络是基于经典的SSD网络改进而来的目标检测算法,ResNet在ImageNet数据集上的错误率远低于VGG网络。本研究选用ResNet50代替原有的VGG16模型作为SSD的基础网络,来提取群体棉籽的特征。考虑到生产实际应用,需要综合考虑算法的效率以及精度,模型大小不宜太大,因此未选用更深层次的网络对SSD进行改进。经典SSD网络可分为基础网络和辅助网络,SSD-ResNet50将基础网络使用ResNet50的前4个卷积阶段代替原SSD中的VGG16的前5个卷积阶段,并将ResNet50的第4个卷积阶段的步长都改为1,以实现对输入图像特征的提取。ResNet网络引入了一种残差学习框架,以应对传统网络的退化问题,由试验可知,这种残差学习框架有利于棉籽的检测,如图4所示为普通结构与残差结构的差异。
图4 普通与残差对比图Fig.4 Comparison between ordinary and residual
ResNet使用的方法就是对多层的残差映射进行拟合,假设H(x)为几个网络层堆叠的期望映射,x即为当前堆叠块的入口,使用的relu激活函数缩短学习周期,使用relu激活函数越多,节省的参数就越多,在使用relu激活函数过程中,必须保持经过残差的堆叠块x和最后输出的期望映射H(x)的高度、宽度、维度一致。假设n个非线性层可近似地表达为某个复杂函数(残差函数),将堆叠起来的网络层拟合成为另一个映射,映射为F(x)=H(x)-x,从而基础映射便成为H(x)=F(x)+x。引入残差学习框架,可以大幅降低提取特征的重复度、减少网络模型的计算量、增强网络的泛化能力,对比VGG网络,ResNet网络训练完成后,随机去除某个网络层,并不会导致网络大幅度的退化,而VGG网络删减任何一层都会导致模型的性能崩溃。
3)基于ResNet50改进SSD模型。基础网络(base network)是用于图像分类的标准神经网络,基础网络的理论基础是生成模型,生成模型可以自适应地从输入图像中学习重要的特征,以解决传统的全连接网络特征提取能力不足的问题。但是由于生成模型提取到的特征信息冗余太多,无法得到棉籽的准确信息,所以使用基础网络对输入数据进行特征提取,为后续网络层提供输入信息,以加快后续棉籽检测的训练速度,提高网络的表达能力。ResNet通过引入残差学习来提高模型的检测性能,残差学习模块的构造是合并n个堆叠块,构造块定义为:
y=F(x,Wi)+x
(5)
式(5)中:x为模块输入向量;y为输出向量;Wi为权重层参数;F(x,Wi)为当前网络想要学习的残差结构。
在残差模块的第1层公式F=W2σ(W1x)中,σ为relu激活函数; 第2层则通过快捷连接来执行F+x操作,当公式(5)中的输入向量x和函数F的维度一致时,需要对输入向量x执行线性投影Ws来实现维度匹配:
y=F(x,Wi)+Wsx
(6)
为了提升棉籽检测网络的检测速度以及减小其参数量,选择Resnet 50残差结构进行网络替换,选取的特征提取层为conv1_x(卷积核大小为7×7×64),conv2_x(卷积核大小为1×1×64,3×3×64,1×1×256), conv3_x(卷积核大小为1×1×128,3×3×128,1×1×512), conv4_x(卷积核大小为1×1×256,3×3×256,1×1×1 024),卷积过后得到第1个预测特征层大小为(38×38×1 024),再经过conv5_x分别进行卷积、Batch Normalization、relu得到第2个预测特征层,后5个阶段均按照此方法进行,一共得到6个预测特征层。其中在conv5_x、conv6_x、conv7_x前3个阶段中步距均为2,Padding均为1,后2个阶段的步距均为1,Padding均为0,最后得到的后5个预测特征层大小分别为(19×19×512)、(10×10×512)、(5×5×256)、(3×3×256)、(1×1×256),后5个阶段相比较原来的VGG16都添加了Batch Normalization层,可加速网络的收敛并提升准确率[21]。图5为SSD-ResNet50的网络结构图。
图5 基于ResNet50改进的SSD网络结构Fig.5 Improved SSD network structure based on ResNet50
4)训练参数设置。不同层的特征图在卷积神经网络中感受域大小也不同,此处采用不同位置的默认框对应不同的区域和目标尺寸。设有m个特征图用来预测, 则每个特征图中默认框的尺寸为:
(7)
式(7)中:Smin为网络结构中最底层的默认框尺度,值为0.2;Smax为最高层的默认框尺度,值为0.95。
使用不同的宽高比取值ar∈{1,2,3,1/2,1/3},则计算默认框的宽、高分别为:
(8)
(9)
(10)
本研究建立SSD-ResNet50训练模型,选择Softmax作为损失函数,公式为:
(11)
其中,Sj为类别j的得分,yi为目标的真实标签。不同类别上的目标分值离散程度越高,损失值越低,模型性能越好。
5)迁移学习。在深度学习领域中,利用迁移学习这种模型训练手段可以避免随机初始化网络权重和偏置等参数导致的模型收敛速度慢和网络的不稳定[22]等问题。利用大数据集下已经训练好的预训练模型,通过共享网络前端的权值参数和微调网络后端的参数,可以使新任务下的模型收敛更为迅速,在小数据集下也只需要少量的训练时间和计算资源开销,便可以实现对新任务的适应。本研究利用COCO数据集下预训练好的模型权重初始化SSD网络的权重,通过训练对SSD网络参数进行微调,进一步减少了模型的训练时间与资源。
模型训练的硬件平台为:GPU为NIVIDIA GeForce RTX 2080Ti;CPU为AMD Ryzen Threadripper 2920X @3.5 GHz;内存为128 G。软件平台为:CUDA Toolkit 9.2 + CUDNN V9.2 + Python 3.5 +Tensorflow-GPU 1.8.0。由于深度学习需要大量的数据进行训练,本研究在采集得到图片后,将其标为破损与非破损,训练、验证、测试集比例按7∶2∶1划分,本研究训练和测试时均使用GPU加速。
模型训练的过程是模型不断调整自身参数,使得预测值与真实值不断接近的过程,训练过程中使用的目标损失函数为公式(11),基于ResNet 50改进的SSD模型底层权重均使用迁移学习的方法进行初始化,其余权重采用均值为0、方差为0.03的高斯分布进行随机初始化。梯度更新是训练过程中不断调整权重和偏置的方法,从而使模型的性能不断优化,本研究使用批量随机梯度下降算法寻找梯度下降方向。初始学习率设置为0.03,学习率衰减方法为指数衰减法,衰减率设置为0.98。训练的批次图像数量(batch size)设置为16,最大训练次数设置为1×105,单步训练时间约为2 s,每训练10 min保存1次模型的参数,改进前后模型训练参数保持一致。以基于ResNet 50网络改进的SSD群体棉籽检测网络的训练过程为例,改进前的VGG16版本训练过程与之类似。图6为使用了迁移学习损失函数变化曲线图,从曲线可以看出模型的训练过程。基于ResNet50改进的SSD网络在使用迁移学习进行训练10 743次后维持在较低水平的小幅度震荡。
图6 迁移学习损失函数曲线Fig.6 Transfer learning loss function curve
目前评价深度学习目标检测模型性能优劣的主要手段是测试模型在验证集数据上的检测效果。常用的评价指标有准确率(precision)、召回率(recall)、漏检率(missed detection rate)、检测速度(speed)和模型大小(parameter size)。本研究利用训练好的SSD-ResNet50模型和改进前SSD模型分别对验证集50幅图像(含1 000粒棉籽)进行测试,采用上述5个评价指标对比两者的优劣。漏检率定义为:
(12)
式(12)中,N为棉籽的总数量,B为误将棉籽当做背景的数量。
对50幅群体棉籽图像的测试结果进行统计,包括准确率、召回率、漏检率、检测速度和模型大小5项评价指标。共1 000粒棉籽,SSD-ResNet50错判了39粒棉籽,其中将无损棉籽错判为破损22粒,将破损棉籽判为无损棉籽17粒,漏检0粒。SSD-VGG16错判了75粒,其中将无损棉籽错判为破损36粒,将破损棉籽判为无损棉籽25粒,漏检14粒。此外,使用本研究所提出的方法与目前比较成熟的YOLOV3进行了详细的对比,3种模型的测试结果如表2所示。其中,YOLOV3网络参数设置值与上述SSD网络参数设置值保持一致。
表2 模型测试结果Table 2 Model test results
由表2可知,基于ResNet50改进的SSD模型在精度和速度方面均优于改进前的SSD-VGG16网络,精度更优于现在成熟的YOLOV3网络。在使用ResNet50过程中,将破损棉籽错判为无损的原因是部分破损棉籽的裂纹过细,即棉籽损伤过小,导致误判。将非破损棉籽错判为破损的原因是部分棉籽脱绒不干净,棉籽上面残留少量棉绒,导致误判为破损的棉籽。YOLOV3的准确率较低的原因在于YOLO、FasterRCNN等算法只会在最后一层做锚框(anchor),因此它没有多尺度的特征,对尺度变化不敏感。因此,对于棉籽这类尺寸较小的物体使用SSD目标检测效果比较好。
综合考虑检测精度和速度,基于ResNet50改进的SSD模型对群体棉籽的识别效果最佳。基于ResNet50改进的SSD模型的检测速度可以达到86 FPS,快于改进前的59 FPS,且模型大小仅为11.10 Mb,满足部署到嵌入式系统的模型参数要求。此外,漏检率是衡量模型可靠性的重要指标,改进后SSD模型的漏检率为0,说明模型的可靠性高于SSD-VGG16网络以及YOLOV3的网络。图7 A、B分别为同一幅群体棉籽图像模型和基于ResNet50和VGG16改进的SSD模型的检测结果,图7C为YOLOV3模型检测结果。本研究并未使用当前最新网络对棉籽进行检测,主要原因是后续将群体棉籽检测模型应用到生产实际,需要考虑网络的成熟度以及抗干扰能力,所以选用已经成熟的网络作为棉籽检测的框架。将模型应用到实际生产,检测精度需大于95%,速度不小于20 FPS,综合考虑速度与精度,本研究选用SSD-ResNet50对群体棉种进行破损识别。
图7 不同模型的检测图Fig.7 Test charts of different models
本研究以新路早-50#脱绒群体棉籽为研究对象,使用基于ResNet50网络改进的SSD模型对群体棉籽中的破损棉籽和无损棉籽进行识别检测,研究结果显示其对群棉籽中无损和破损的识别性能最佳,准确率和召回率分别为96.1%、97.3%。模型大小为11.10 Mb,检测速度达到了86 FPS。本研究通过迁移学习,将COCO大数据集下预训练好的模型权重迁移到群体棉籽中破损和无损检测的任务下,加速了群体棉籽检测模型的收敛速度,节约了模型的训练成本;同时本研究解决了群体棉籽图像难以分割的问题,直接利用卷积神经网络获取棉籽的位置和类别信息,不必再使用传统图像识别方法,将群体棉籽中的个体单独分割出来进行检测。