基于改进YOLOv3的木结缺陷检测方法研究

2020-03-31 08:04岳慧慧白瑞林
自动化仪表 2020年3期
关键词:精确度聚类卷积

岳慧慧,白瑞林

(江南大学物联网工程学院,江苏 无锡 214122)

0 引言

木结缺陷为嵌入在木条表面中高度纹理化、颜色差异明显的区域。木结缺陷检测的主要挑战在于如何准确、实时地从形状不规则、分布位置不确定的自然纹理中检测出木结缺陷,对高质量木条加工有着极为重要的理论和应用价值[1]。随着卷积神经网络在图像领域的普遍应用以及图形处理器(graphics processing unit,GPU)的迅猛发展,凭借其检测速度更快、精确度更高的优点,基于卷积神经网络(convolutional neural network,CNN)的目标检测正逐渐替代低效率的人工检测、基于颜色和纹理特征提取的无监督聚类方法。Girshick等提出超快速的区域卷积神经网络(faster region-CNN,Faster R-CNN)[2]方法,运用候选区域生成网络(region proposal network,RPN)不断重复训练模型,识别精确度较高,但检测速度不满足实时性要求。徐姗姗[3]等使用支持向量机对缺陷进行分类,整体算法运行缓慢。刘英[4]等利用非下采样剪切波变换对图像进行预处理,再利用CNN提取出木材缺陷轮廓,检测速度为261 ms,无法满足实时性要求。Redmon等提出基于端到端的深层卷积神经网络(you only look once v3,YOLOv3)[5]目标检测算法,在YOLO[6]和YOLOv2[7]的基础上进行改进,兼顾了网络复杂度与识别精确度,在COCO数据集上检测速度为51 ms,平均识别精确度(mean average precision,mAP)可达57.9%的最佳检测效果;然而,该算法未应用于木结缺陷检测。吕铄[8]等针对YOLOv3使用新损失函数Tan-Squared Error,有效提高了COCO数据集的识别精确度,模型收敛更加快速。

YOLOv3目标检测算法需要建立大量木条表面图像数据集,并通过多层特征融合,无需手工设计特征,充分提取高泛化性的木结缺陷特征用于实时检测。本研究将YOLOv3算法应用于自然纹理中木结缺陷检测,并针对检测结果mAP值不高的问题,分别对活结缺陷图像进行数据扩增。采用k-means++算法提高目标框维度聚类效果,同时压缩多尺度检测网络减少检测时间,改进loss损失函数提高木条表面缺陷的识别精确度。

1 YOLOv3模型

1.1 目标框维度聚类算法

参考Faster R-CNN,YOLOv3引入一组固定尺寸的初始目标框(anchor box),通过k-means算法对数据集中人工标注目标框的高和宽进行维度聚类,得到k个初始目标框[5]。针对VOC20类和COCO80类数据集,YOLOv2设置5个初始目标框;针对COCO80类数据集,YOLOv3设置9个初始目标框。由于数据集类别与拍摄角度差异较大,并不适用木结缺陷检测。k-means算法是从样本集中随机选k个初始聚类中心导致聚类准确率偏低,故研究选用改进后的k-means++算法设置阈值ε对目标框进行聚类分析,相距较远点有更大概率被选为下一个初始聚类中心。同时,考虑到交并比(intersection over union,IOU)是目标框的预测结果与真实范围的交集面积、并集面积的比值,与anchor box尺寸大小无关,因此k-means++聚类算法改用IOU作为空间距离计算代替欧氏距离,从而降低不同尺寸初始目标框产生的误差。改进后空间距离函数Di(xj)为:

Di(xj)=1-IOU(xj,ci)

(1)

式中:xj∈X={x1,x2,…,xn}为真实目标框;ci∈{c1,c2,…,ck}为聚类中心;k为anchor box的个数。

聚类目标函数J(k)为每个样本到其聚类中心的距离之和最小值,计算公式为:

(2)

利用改进后k-means++针对目标框进行维度聚类,使用手肘法分析聚类目标函数来选取最优聚类个数k。当k小于真实值6时,J(k)会大幅度下降;而当k到达真实值6时,J(k)快速停止大幅度下降,聚类效果降低,并且随着k的不断增加,曲线趋于稳定。因此,木条表面图像数据集的最优初始目标框聚类个数为6,高和宽分别为(299.0,167.0)、(176.0,460.5)、(448.0,351.0)、(486.0,617.5)、(126.0,234.0)和(419.0,242.0)。目标框的平均交并比对比如表1所示。改进后k-means++的YOLOv3平均交并比相比YOLOv2和改进前YOLOv3提高约15%,在保证较高平均交并比的基础上减少了目标框个数,降低了计算资源的占用。

表1 目标框的平均交并比对比Tab.1 Comparison of anchor boxes’ average IOU

k-means++算法流程如图1所示。

图1 k-means++算法流程图Fig.1 Flowchart of k-means++ Algorithm

聚类目标函数的变化曲线如图2所示。

图2 聚类目标函数的变化曲线Fig.2 Curves of the clustering objective function

1.2 多尺度检测网络

YOLOv3借鉴了单个深层神经网络检测器(single shot multiBox detector,SSD)[9]、残差网络和特征金字塔网络[10],在YOLO和YOLOv2的基础上进行改进,设计了一种基于Darknet-53网络和多尺度检测网络的目标检测模型,大大降低了模型运算量,发挥了YOLO速度快的优势。Darknet-53网络共有53个卷积层。先使用5个不同的卷积核对图像进行卷积操作,再由一系列3×3和1×1交替组成的卷积得到26×26特征图。在网络训练过程中,卷积层的输出是作为下一层池化层的输入,而池化层的输出又作为下一层卷积层的输入。在第j个卷积核中,第l个卷积层的第i个卷积操作输出矩阵计算式为:

(3)

式中:F(·)为激活函数;b为偏置;x为n×n的卷积核;m为输入图像m×m的矩阵。

选用平均值池化操作对卷积层的输出进行采样,进一步减小计算量、提高泛化性。在第j个池化区域中,第l个池化层的第i个池化操作输出矩阵为:

(4)

选用识别和定位精确度高于Relu函数的Leaky函数作为卷积层激活函数。当输入x小于0时,输出不再是0,而是一个微小数字0.01x,计算式为:

F(·)=Leakey(x)=max(0.01x,x)

(5)

为获得更好的细粒度特征,通过采样融合不同网络层中高分辨率和高语义特征图,在3种尺度特征层上预测边界框,当减少尺度时会提升大目标缺陷的识别精确度、降低小目标缺陷的识别精确度[11-12]。由于木结缺陷目标多数为大目标,所以将原3种尺度压缩为2种尺度检测。当预测大尺寸木结缺陷时,既可获得更精准的检测结果,又减少了计算量。在训练模型过程中,每隔10轮改变模型的图像输入尺寸,同时将k-means++维度聚类得到的初始目标框(126.0,234.0)、(299.0,167.0)、(176.0,460.5)分配给(320×320)像素尺度上的各个网格,(419.0,242.0)、(448.0,351.0)、(486.0,617.5)分配给(416×416)像素尺度上的各个网格,用于预测木结缺陷目标框,能让模型适应不同尺度的输入图像,更具有鲁棒性。YOLOv3算法的网络结构如图3所示。

图3 YOLOv3算法的网络结构图Fig.3 YOLOv3 algorithm network structure

1.3 loss损失函数

YOLOv3将输入图像分成Sh×Sw的高×宽网格,负责预测B个目标框(bounding box,bbox)坐标和对应的置信度得分(confidence score,CS)。在训练预测特征图过程中,使用五元组B(x,y,w,h,cs)来定义预测的边界框[12]。其中:x和y为bbox的中心坐标,w和h为bbox的宽度和高度,都在[0,1]范围内。YOLOv3改进后坐标为:

(6)

式中:cx、cy为从图像左上角的坐标偏移量;pw、ph为预测目标框的宽和高;tx、ty、tw、th为网络的学习目标;bx、by、bw、bh为最终得到的bbox坐标。

假设每个网格预测C个目标类别概率,则输出的张量维度为Sh×Sw×B×(5+C)。

在训练网络过程时,网络会不断学习真实目标框尺寸特点,边界框的高宽也在不断调整以接近真实目标框。而在预测目标类别与bbox位置坐标时,YOLOv3中loss损失函数为:

(7)

式中:Errcoord为预测数据与标定数据之间的坐标误差;ErrIOU为置信度误差;Errclass为分类误差。

其中,坐标误差Errcoord为:

(8)

Lcross-entropy的计算式为:

Lcross-entropy(p,q)=p×log(q)+(1-p)×log(1-q)

(9)

置信度误差ErrIOU为:

(10)

分类误差Errclass为:

(11)

图与x的函数图像Fig.4 The function of and x

当bbox尺寸误差较小时梯度也较小,随着bbox尺寸误差逐渐变大时梯度也逐渐变大。因此将坐标误差Errcoord中的w和h改进为:

2 结果与分析

2.1 试验配置与数据集

2.1.1 试验数据集

以木结缺陷作为研究对象,对Basier-12k线扫相机采集到的松木木条表面图像进行等分切割,共7 876张。随机选取其中7 376张作为训练数据集(含有4 260个死结,821个活结),并将剩余的500张作为测试数据集(含有354个死结、89个活结)。由于活结图像数量过少导致类别不平衡问题,为提高活结识别精确度,对训练数据集中活结图像采用水平和垂直镜像、随机裁剪以及±15°、±30°旋转等方法进行数据扩增。同时,在训练模型时利用自适应直方图均衡化、饱和度和曝光度调整训练数据集,以增加样本的鲁棒性。随学习率增加的mAP值曲线如图5所示。木条表面图像数据集中缺陷目标共分为两类:①活结缺陷;②死结缺陷。

图5 mAP值随学习率增加的变化曲线Fig.5 mAP curve with learning rates increasing

2.1.2 试验软硬件配置

改进后YOLOv3算法在开源框架TensorFlow上实现,主机配置为Intel Core I5-8400 CPU,2.4 GHz主频,32 GB RAM,显卡为英伟达GTX 1080Ti,11 GB 内存,操作系统为Ubuntu14.04,GPU加速库为CUDA9.0和CUDNN7.03,数据处理使用MATLAB、Python、OpenCV库,图像采集使用型号为RAL 12288-8GM的Basier-12k线扫相机。

2.2 试验参数与性能指标

2.2.1 试验参数

考虑改进后的YOLOv3模型获得图像特征时,设置不同学习率(learning rate)和迭代次数(iteration)对mAP有明显影响。因此,研究不同学习率和迭代次数情况下mAP的变化,从而找出最优学习率和最优迭代次数。

①最优学习率。

在训练网络模型时,learning_rate分别设置为10-10、10-9、10-8、10-7、10-6、10-5、10-4、10-3、10-2、10-1和1,iteration设置为20 000。用测试集进行检测,分析图5中mAP值随学习率增加的变化曲线可知,当学习率增加到10-3时,mAP最高为87.13%,模型具有更好的性能;随着学习率继续增加,mAP呈下降趋势,因此最优学习率为10-3。

②最优迭代次数。

在训练网络模型时,iteration分别设置为11×103、12×103、13×103、14×103、15×103、16×103、17×103、18×103、19×103、20×103、25×103和30×103,learning_rate设置为10-3。随迭代次数增加的mAP值曲线如图6所示。用测试集进行检测,分析图6中mAP随迭代次数增加的变化曲线可知,当iteration增加到18 000时,mAP最高为88.63%,可得最优迭代次数为18 000。

图6 随迭代次数增加的mAP值曲线Fig.6 mAP curve with iterations increasing

最终试验参数值设置:学习率为0.001、批尺寸(batch_size)为16、衰减系数(decay)为0.000 5、迭代次数为18 000、动量(momentu)为0.9。

2.2.2 性能指标

通过木结缺陷检测结果的交并比来判别真假样本。当IOU≥0.5时,结果为真正性样本(true positive,TP);当IOU<0.5时,结果为假正性样本(false positive,FP);当IOU=0时,结果为假负性样本(false negative,FN)。召回率、精确率、AP值和mAP值分别如式(13)~式(16)所示。其中:N为木条表面图像数据集中样本数。

(13)

(14)

(15)

(16)

同时,使用AP和mAP值来评价网络模型的性能,反映算法模型的好坏程度,值越高表示算法识别检测效果越好。

2.3 试验结果

改进后,YOLOv3网络训练过程中loss收敛曲线如图7所示。

图7 网络训练中loss收敛曲线Fig.7 Loss convergence curve in network training

当网络迭代超过18 000时,各参数变化基本稳定,损失值收敛下降到约0.12,训练结果较理想。最终检测时间为0.015 6 s,mAP值为88.63%。其中,死结缺陷AP值为91.74%,活结缺陷AP值为85.50%。

使用改进前与改进后YOLOv3检测I、II类图像测试集。分析检测结果可知:改进算法的检测识别效果明显提高,基本上不存在目标框漏检和误检的问题,能较好地识别出完整的木结缺陷。Ⅰ、Ⅱ类图像检测结果如图8所示。

图8 I、II类图像检测结果图Fig.8 Detection results with image type of I and II

为了进一步验证改进后YOLOv3算法的优越性,对比Faster R-CNN、YOLOv3与改进后YOLOv3算法的mAP值和检测时间。三种算法的检测结果对比如表2所示。改进后YOLOv3算法识别木结缺陷效果更好,目标的平均识别精确度更高,检测时间大大缩短,克服了传统检测方法实时性不足的缺点。

表2 三种算法的检测结果对比Tab.2 Comparison of detection results among three algorithms

2.4 木结缺陷拼接

针对检测后的木条表面图像进行缺陷位置拼接。木结缺陷拼接如图9所示。

图9 木结缺陷拼接图Fig.9 Splicing of wood-knot defects

图9中:图1的缺陷位置为[x1,y1,w1,h1],图2的缺陷位置为[x2,y2,w2,h2],图3的位置为[x3,y3,w3,h3],可得缺陷1位置信息为[(n-1)W+x1,min(y1,y2),w1+w2,max(h1,h2)]和缺陷2位置信息为[(n-1)W+x3,0,w3,H]。由于相机分辨率为12 288像素,其1像素对应3.5 μm,可得具体木结缺陷位置信息。若判断图(n-1)与图n需要缺陷拼接,即|xi-xi+1|≤Δ,则缺陷i位置信息为{(n-1)W+xi}×3.5,0,(wi+wi+1)×3.5,H×3.5];若判断图n中含有完整缺陷,即|xi-xi+1|>Δ,则缺陷i位置信息为[{(n-1)W+xi}×3.5,0,wi×3.5,H×3.5]。

3 结论

针对死结和活结缺陷图像,本试验提出基于改进YOLOv3的自然纹理中木结缺陷检测算法,用于解决检测木结缺陷平均精确度较差、检测时间不满足实时性的问题。通过改用k-means++算法对数据集中真实目标框进行维度聚类,确定更适合木结缺陷检测的初始目标框个数和尺寸。在YOLOv3模型基础上,将原有的3种尺度检测网络压缩为2种尺度检测网络,更改loss损失函数中坐标误差,以提高识别精确度和减少运算量。通过试验验证了不同算法的性能。试验结果表明:改进后YOLOv3算法能够精确地检测出死结和活结缺陷,具有较好鲁棒性和实时性;相较于改进前,平均精确度提升7.47%,速度提高35%;相较于Faster R-CNN算法,平均精确度提升11.68%,速度提高约15倍。在后续研究中,将研究更多影响木结缺陷识别精确度和速度的因素,进一步优化YOLOv3网络,以提高检测实时性和精确度。

猜你喜欢
精确度聚类卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
“硬核”定位系统入驻兖矿集团,精确度以厘米计算
卷积神经网络的分析与设计
基于K-means聚类的车-地无线通信场强研究
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
放缩法在递推数列中的再探究
基于高斯混合聚类的阵列干涉SAR三维成像
基于Spark平台的K-means聚类算法改进及并行化实现
基于加权模糊聚类的不平衡数据分类方法