基于改进DenseNet201 网络的织物疵点检测算法
2022-03-24陈永恒罗维平
陈永恒 陈 军 罗维平
(1.武汉纺织大学,湖北武汉,430200;2.塔里木大学,新疆阿拉尔,843300)
织物疵点的多少是对织物品质好坏的评价标准,因此织物疵点检测对织物的质量有着十分重要的作用[1]。目前织物疵点检测的方法有:基于结构方法,但是结构方法可靠性低,只能将织物的疵点从纹理中分离出来;基于统计学方法,灰度共生矩阵高分辨率图像性能较差且计算成本很高,直方图统计法的特征向量维数过高且计算量大;基于频谱方法,傅里叶变换受结构变化影响大且实时性、通用性很差;随着“互联网+”的快速发展,对工业生产中织物疵点检测方法也有了很大的提升,通过计算机的推理处理技术可以快速高效地检测出疵点,从而很快判断出织物品质的好坏[2⁃6]。
当AlexNet[7]取得ImageNet 数据集[8]图像分类冠军之后,深度学习随之得到了长远的发展,提出了如GooleNet[9]、VGG[10]、ResNet[11]、DenseNet[12]等典型神经网络[13]。GooleNet 网络结构比较简单,满足不了生产时间的需要;VGG 增加了网络结构的深度,促进了卷积神经网络结构向更深深度的发展;ResNet 运用了残差学习,解决了神经网络结构梯度消失的问题;DenseNet 采用密集连接,性能更优于ResNet。
本研究提出一种基于改进DenseNet201 网络的织物疵点检测算法。在本研究的训练集和验证集下训练得到一个织物疵点检测模型,试验表明:该模型具有良好的泛化能力,能够精准快速识别正常织物、8 类常见织物疵点。
1 研究方法
1.1 研究思路
本研究提出的织物疵点检测算法主要工作流程:首先对数据集的图像进行预处理,可视化各种织物疵点类型的数量,剔除无效的图像;然后改进卷积层第1 层、添加SPP 层;再提取在大型数据集ImageNet 下预训练好的DenseNet201 权重参数进行迁移学习,释放原有的全连接层(分类器),添加自己的全连接层,利用数据增强和Dropout 技术降低过拟合的程度;最后运用本研究的训练集和验证集,反复调节参数,训练改进的DenseNet201 网络,得到织物疵点检测模型。
1.2 DenseNet 模型结构
为了在更大程度上解决梯度消失、加强特征传递、更有效地利用特征、减少一定的参数数量,DenseNet 网络结构直接将所有层连接起来,保证了网络中层与层之间最大程度的完整传输,实现了网络端到端的网络传输模式。Dense Block 结构如图1 所示。
在传统的卷积神经网络中,卷积神经网络有L层,那么就会有L个连接。 根据图1,在DenseNet 卷积神经网络中,如果DenseNet 卷积神经网络有L层,那么就会有L(L+1)/2 个连接,通俗地讲,就是每一层的输入都来自于前面所有层的输出,x0是整个卷积神经网络的输入,H1的输入是x0(输入),H2的输入是x0和x1(x1是H1的输出),依此类推。
图1 Dense Block 结构
现有的ResNet 网络采用跨连接,形成恒等映射的交叉结构,其恒等映射公式如式(1)所示。
式中:xl表示l层输出特征图,Hl表示网络之间的非线性变换。由式(1)可以看出,l层的输出是l-1 层的输出与l-1 层输出的非线性变换之和。DenseNet 网络每一层直接连接输入层和损失层,从而减轻梯度消失的问题,其输出公式如式(2)所示。
式中:xl是l层输出特征图,[x0,x1,...,xl-1]是l层前面所有层特征映射的拼接。因此相对于ResNet 等深度网络依赖最后一层输出的特征,而DenseNet 融合利用更多低层次的特征,其训练出来的分类器泛化性高。
以两个Dense Block 为例的DenseNet 结构如图2 所示。
图2 标准DenseNet 结构
由图2 可知,一个标准的DenseNet 结构由输入、卷积层、池化层、Dense Block 层、全连接层构成。
1.3 SPP 结构
在训练模型的过程中,只给定RGB 三色通道,没有固定输入图像的大小,输入尺寸大小不一的图像就会导致全连接层的特征数不固定,从而程序报错,训练不出合适的模型。如果在训练模型的过程中固定图像的大小,那么就会对大于标准尺寸的图像进行缩放或者是裁剪,对小于标准尺寸的图像进行拉伸,缩放和拉伸会使图片特征信息减弱,裁剪会出现部分区域图像被多次裁剪,无形之中加大了该区域的权重。因此在网络中添加SPP 层,这样就可以输入任意大小的图片,不需要进行缩放、拉伸、裁剪等预处理工作。SPP 层结构如图3 所示。
图3 SPP 层结构图
由图3 可知,利用3 种不同刻度对输入的特征图进行划分,总共得到21 块。左边把一张图片划分成16 块,中间把一张图片划分成4 块,右边的把一张图片划分成1 块,分别计算每块的最大值(局部池化),这样就可以把一张任意大小的图片转换成一个固定大小的21 维特征。
1.4 改进DenseNet201 网络
本研究尝试了DenseNet121、DenseNet169、DenseNet161、DenseNet201 等多种深度的网络后,根据试验效果和实验室环境综合考虑,选用了DenseNet201 网络[14]。DenseNet201 网络的第1层是7×7 卷积层,感受野大,不适用于本研究大多数织物中小疵点的检测,为了提取到织物疵点更多的细节特征用于精确分类,本研究选用1×1、3×3、5×5 的3 个分支卷积层替代7×7 卷积层。一方面,3 个分支卷积层可以识别各种大小织物疵点;另一方面,3 个分支卷积层使判决函数的性能得到了优化;再一方面,3 个分支卷积层的使用降低了参数量,假设卷积层输出特征图的大小为s,3 个分支卷积层的参数为(1×1×s)×s+(3×3×s)×s+(5×5×s)×s=35s2,一个7×7卷积层的参数为(7×7×s)×s=49s2,所以在不改变初始感受野的情况下改进DenseNet201 网络的第1 个卷积层,提升了织物疵点检测模型的性能。改进后的DenseNet201 网络结构如图4所示。
图4 改进后的DenseNet201 网络结构
1.5 迁移学习
迁移学习是把为A 任务开发的模型作为初始点,重新运用到B 任务训练模型的过程中。在深度学习中,要训练出一个泛化性高的模型,那么就需要大量的已标注样本以及相互独立的训练集和测试集,这在实际训练模型时很难满足。由于织物疵点数据集中的疵点种类很多,但是很多种类都不常见且数量很少,很难直接满足深度学习训练模型的需要,因此采用在大型数据集Ima⁃geNet 下预训练好的DenseNet201 模型,去掉预训练好模型的全连接层,迁移学习预训练好模型的初始参数,作为改进后的DenseNet201 网络参数,再在织物疵点数据集上重新训练顶层卷积网络,得到一个鲁棒性和泛化性好的织物疵点检测模型。
2 数据预处理
2.1 数据集
在普通的实验室环境中,建立织物疵点数据集的难度很大,因此采用江苏阳光集团在实际生产现场采集并开源的织物疵点数据集,具体的数量如图5 所示。每张图片的分辨率2 560 pixel×1 920 pixel,图像细节特征清晰,每张图片都由经验丰富的验布工人确认。
图5 织物疵点数据集数量图
由图5 可知,该织物疵点数据集包含2 163 张正常织物图片、1 584 张有疵点图像,本研究选择样本数量较多的正常织物和擦洞、吊经、跳花、织稀、毛洞、扎洞、缺经、毛斑共8 类织物疵点图像,作为该织物模型训练的数据集。
2.2 数据增强
为了保证模型训练的精度,把数据集的80%作为训练集、10%作为验证集、10%作为测试集。为了防止模型训练中出现过拟合问题,采用数据增强和Dropout 技术提高模型泛化能力。数据增强使用水平翻转、垂直翻转、水平垂直翻转、30°旋转、45°旋转、水平平移、垂直平移、水平垂直平移。
3 试验与分析
3.1 评价指标
试验过程中使用准确率(Accuracy,Acc)作为模型好坏的评价指标,准确率是模型针对全部样本的判断能力[15]。首先把数据集分为正类(无疵点)和负类(有疵点),那么对一批测试数据进行预测,结果就可以分成以下4 种。若一张图像为无疵点,分类器将其判断为无疵点,称为真正类(True Positive,TP);反之,如果分类器将其判断为有疵点,称为假负类(False Negative,FN);若一张图片为有疵点,分类器将其判断为无疵点,称为假正类(False Positive,FP);反之,若分类器将其判断为无疵点,称为真负类(True Negative,TN)。准确率的计算公式如式(3)所示。
除此之外,训练过程中的损失值也是判定一个模型好坏的指标之一,损失值越小,模型的鲁棒性就越好。
3.2 试验设计
首先利用划分好的数据集分别对当前主流的VGG16 模型、VGG19 模型、ResNet50 模型、In⁃ception 模型、DenseNet121 模型、DenseNet169 模型、标准DenseNet201 模型、改进DenseNet201 模型进行训练,训练完成后在数据集的测试集上分别测试对比;然后利用传统的织物疵点检测方法和数据集的测试集进行测试分析,方向梯度直方图(HOG)特征方法、局部二值化模式(LBP)特征方法;最后在实验室环境下采集纯色织物图像,分别测试分析模型的泛化性。
3.3 模型微调
DenseNet201 模型是一个在大型数据集Ima⁃geNet 下预训练的模型,其中有1 000 个类别的输出,与本研究使用的数据集差异性较大,所以在改进卷积层第1 层的基础上,自定义全连接层,然后在全连接层前添加SPP 层,最后利用迁移学习和自己的数据集训练织物疵点检测模型,让训练出来的模型更加与织物疵点检测相关。微调训练模型参数过程中,给定模型一个有疵点的图像,输入后将DenseNet201 模型的卷积层第1 层输出的特征图从宽度、高度、深度3 个维度进行可视化显示,将每个通道的信息绘制成二维图像,如图6~图8 所示。
图6 卷积层第1 层卷积图像信息可视化二维图
图7 卷积层第1 层卷积后归一化图像信息可视化二维图
图8 卷积层第1 层卷积、归一化后激活图像信息可视化二维图
3.4 模型训练
实验室所用的环境配置是Inter i7⁃9700K 处理器、64GB 内存、两块 NVIDIAGeForce RTX2080Ti 显卡。在程序中设置试验过程为当验证准确率改变时就保存一次模型,训练100 次以增强模型的泛化性和鲁棒性。通过训练过程中的反馈反复调节超参数、更换不同的Dropout 比例等方式,直到训练的模型达到最佳性能。其中标准DenseNet201 网络模型训练过程的损失曲线和准确率曲线如图9 所示,改进的DenseNet201网络训练过程损失曲线和准确率曲线如图10所示。
图9 标准DenseNet201 网络模型训练过程的准确率曲线和损失曲线
由图9 和图10 可知,改进的DenseNet201 网络模型训练过程的准确率曲线比标准DenseNet201 网络模型训练过程的准确率曲线收敛,训练准确率和验证准确率都平稳趋近于1;改进的DenseNet201 网络模型训练过程的损失曲线比标准DenseNet201 网络模型训练过程的损失曲线收敛,训练损失和验证损失都稳定趋近于0。因此改进的DenseNet201 网络模型泛化性和鲁棒性更好。
图10 改进的DenseNet201 网络模型训练过程的准确率曲线和损失曲线
3.5 试验分析
利用训练好的模型、其他主流深度学习模型在织物疵点数据集的测试集上分别进行试验验证,试验结果如表1 所示。
由表1 可知,改进DenseNet201 模型的权重参数相比其他试验模型是最少的,训练精度和验证精度相对于其他试验模型不是最好,但相对于其他试验模型测试精度最高、测试速度最快;改进DenseNet201 网络模型比标准DenseNet201 网络模型的测试精度提升了1.1 个百分点,测试速度提升了2 倍多,相比传统的织物疵点检测方法测试精度分别提高了27.6 个百分点、28.4 个百分点。由此可见,改进的DenseNet201 网络模型能更好适应实际工业生产环境中的织物疵点检测。
表1 其他主流深度学习模型与本研究改进模型在测试集上测试结果对比
利用实验室环境下采集的纯色织物图片验证主流深度学习算法和传统织物疵点检测算法的泛化性,试验效果如下。VGG16 模型、VGG19 模型、ResNet50 模型、Inception 模型、DenseNet121模型、DenseNet169 模型、DenseNet201 模型、改进DenseNet201 模型、HOG 模型、LBP 模型的测试精度分别为81.9%、82.6%、85.1%、85.9%、87.1%、 87.9%、 88.6%、 89.9%、 65.2%、67.3%。由于DenseNet201 模型卷积神经网络的网络层是最深的,在提取织物图像特征时会完整的保留特征信息,相对其他模型和传统织物疵点检测算法,测试精度最高,表现出了良好的泛化能力。 因此综合模型的各种性能,改进的DenseNet201 模型泛化性符合要求。
4 结论
本研究提出了基于DenseNet201 网络的织物疵点检测算法,能够有效地识别正常织物、8 种常见织物疵点。通过改进DenseNet201 的第1 层,使得在网络感受野不变的情况下,可以满足不同大小的织物疵点检测,同时还降低了整个网络的参数量。在自定义的全连接层前加入了SPP 层,不管网络的输入尺寸大小,都可以产生固定的输出,能够降低过拟合的程度,使得网络更加容易收敛。本研究改进的DenseNet201 网络进一步提升了织物疵点的识别精度和识别速度。该模型具有良好的泛化性和鲁棒性,基本满足现场工业生产检测的需求。在后期试验和研究过程中补充织物疵点的数据集,通过改进模型结构、优化模型参数等方式,训练出识别准确率更高、识别速度更快的织物疵点检测模型。