本发明属于深度学习技术领域,尤其是yolov3模型和模型剪枝方法。
背景技术:
随着深度学习的发展,越来越多的深度学习模型被应用到了图像分析和识别任务中。但是卷积神经网络在现实应用中因其高昂的计算成本而受阻,首先是模型大小的限制,卷积神经网络强大的能力通常伴随着数百万的训练参数。其次,卷积神经网络中间激活所需的内存空间对许多计算能力低的设备来说无法负担。面对这样的挑战和问题,如何压缩大型卷积神经网络模型,并且保持其高精度性,是目前迫切需要解决的问题。
技术实现要素:
发明目的:本发明的目的在于克服现有yolov3模型运用于实际生产中模型过大计算成本过高的不足,提出一种设计合理且快速准确的基于剪枝yolov3的吸管缺陷检测算法。
本发明解决其技术问题是采取以下技术方案实现的:
一种基于剪枝yolov3的吸管缺陷检测方法,包括如下步骤:
步骤一:收集吸管缺陷图像,并进行预处理以及人工标注,形成训练集;
步骤二:在训练集上对yolov3网络模型进行训练;
步骤三:在步骤二的基础上,依次进行三次信道稀疏正则化训练;且每次信道稀疏正则化训练后,进行通道剪纸,并对剪枝后的模型进行微调;
步骤四:使用步骤三得到的模型进行缺陷检测。
进一步,步骤二中yolov3网络模型的损失函数为:
其中,λ1,λ2,λ3为系数;目标定位损失
进一步,步骤三中微调指的是对剪枝后的模型进行训练。
进一步,步骤三中信道稀疏正则化训练具体为:
为每个通道引入稀疏因子γ,并乘以通道输出,并对yolov3的权值和稀疏因子γ进行联合训练,并对稀疏因子进行稀疏正则化处理;其中稀疏训练的目标函数为:
l=∑(x,y)l(f(x,w),y)+λ∑γ∈γg(γ)
其中(x,y)表示训练输入和目标,w表示训练权重,∑(x,y)l(f(x,w),y)表示yolov3的训练损失,g(·)是对稀疏因子的稀疏性惩罚,λ为参数因子。
进一步,选择bn层中的γ参数作为剪枝所需要的稀疏因子。
进一步,g(·)为l1范数,并采用次梯度下降法对非光滑l1惩罚项进行优化。
有益效果:该方法首先在训练集上正常训练yolov3网络,在此基础上对其进行剪枝:对批处理归一化层中的稀疏因子进行l1正则化,通过l1正则化将批处理归一层稀疏因子的值缩至0,以此来识别不重要的通道和神经元,因为每个稀疏因子对应特定的卷及通道或完全连接层中的神经元,剪枝完成后再对网络进行微调。上述过程重复多次,获得剪枝后的yolov3网络。剪枝后的yolov3网络兼顾了yolov3网络本身的高精度性,并且在此基础上压缩了网络大小,减少计算操作,节省了所需资源,提升了算法的速度,且精度有所上升。
附图说明
图1为基于剪枝yolov3的吸管缺陷检测方法总体流程图;
图2为剪枝前yolov3网络模型图;
图3为剪枝后yolov3网络模型图。
具体实施方式
下面结合附图对本发明做更进一步的解释。
本发明环境为处于基于python3.7版本的anaconda实验环境中,具体步骤如图1所示:
首先,对所收集的吸管缺陷图像进行预处理,预处理的内容包括:
(1)收集不同类别吸管不同缺陷类别的图像;
(2)将收集处理好图像进行高光去除工作;
(3)对高光取出后的图像进行人工标注数据;
随后,在训练集上对剪枝yolov3模型进行初步训练,其方法为:
(1)正常训练yolov3网络(如图2所示);
(2)进行第一次信道稀疏正则化训练,稀疏因子为0.01;
(3)剪掉小尺度因子通道,剪枝率为0.5;
(4)对模型进行微调;
(5)进行第二次信道稀疏正则化训练,稀疏因子为0.01;
(6)剪掉小尺度因子通道,剪枝率为0.65;
(7)对模型进行微调
(8)进行第二次信道稀疏正则化训练,稀疏因子为0.008;
(9)剪掉小尺度因子通道,剪枝率为0.2;
(10)对模型进行微调。
最后,可以使用微调后的网络(如图3所示)进行吸管缺陷检测和识别。
具体地,yolov3网络模型的损失函数为:
f(x)=sigmoid(x)(5)
yolov3的损失函数(公式1)由三个部分组成,分别为目标定位损失
目标定位损失(公式2)采用的是真实偏差值与预测偏差值差的平方和,
目标置信度(公式3)可以理解为预测目标矩阵框中存在目标的概率,其中ci∈{0,1},表示预测目标边界框i中是否真实存在目标,0表示不存在,1表示存在。预测值
目标类别损失(公式4),其中cij∈{0,1},表示预测目标边界框i中是否真实存在第j类目标,0表示不存在,1表示存在。将预测值
具体地,使用信道稀疏正则化训练,训练的方法为:
为每个通道引入稀疏因子γ,将它乘以通道输出,并对网络的权值和稀疏因子γ进行联合训练,并对稀疏因子进行稀疏正则化处理。稀疏训练的目标函数可见公式7:
l=∑(x,y)l(f(x,w),y)+λ∑γ∈γg(γ)(7)
其中(x,y)表示训练输入和目标,w表示训练权重,第一个求和项表示卷积神经网络正常训练时的损失值,g(x)是对稀疏因子的稀疏性惩罚,λ为参数因子。因为用于稀疏训练,因此取g(·)=|·|,即l1范数,并采用次梯度下降法对非光滑l1惩罚项进行优化。剪枝相当于删除通道的所有进出连接,通过稀疏因子γ可以识别不重要的通道并安全剪枝,因为稀疏因子和网络权值共同优化。
批处理归一化被大多数卷积神经网络作为快速收敛和学习的方法,在批处理归一化层中目标函数可见公式8、9:
其中,z(t)是隐藏层l中的隐藏单元(公式8),通过γ和β可以调整
因此,可以直接选择bn层中的γ参数作为剪枝所需要的稀疏因子,这样网络无需多余的开销。鉴于yolov3采用的是残差网络结构,在卷积层之前放置了bn层,因此将每一层的输入都视作后续多个层的输入。稀疏化是在一层的输入端实现的,即该层有选择地使用收到的通道子集,为了在测试时获取省下的参数和计算量,需要放置一个选择层掩盖确定的无关紧要的通道。
具体地,剪掉小尺度因子通道的方法为:
通过稀疏化训练,许多稀疏因子接近于0,然后可以通过去除所有进出连接和相应权值来对稀疏因子接近于0的通道进行修剪,即剪枝。该剪哪些通道由全局阈值θ决定,全局阈值θ根据剪枝率进行变化。如剪枝率为50%时,对所有稀疏因子绝对值进行排序,θ为从小到大排序的稀疏因子中50%的位置的稀疏因子值。剪枝会对精度造成一定影响,因此在剪枝结束后,需要对网络进行微调训练。
上述剪枝后的yolov3网络兼顾了yolov3网络本身的高精度性,并且在此基础上压缩了网络大小,减少计算操作,节省了所需资源,提升了算法的速度,且精度有所上升。