基于深度学习的工业缺陷检测详解——从0到1|社区征文

2023总结
beginning

2023年可谓是人工智能浪潮翻涌的一年,AI在各个领域遍地开花。以我最熟悉的工业为例,深度学习也在其中起着重要作用。不知道小伙伴们熟不熟悉工业领域的缺陷检测腻?🧐🧐🧐今天就以钢轨表面缺陷为例,和大家唠唠基于深度学习的钢轨表面伤损细粒度图像识别与目标检测,总结一下工业缺陷检测流程,包括从最开始的数据标注,中间的算法原理,再到最后的落地应用。无论你是搞实际项目or发论文or开阔视野,相信都会有所收获。话不多说,和我一起愉快的学习叭🎈🎈🎈

picture.image

1.整体流程

picture.image 如上图所示,整个流程呢是先拍摄并标注一个大规模的轨面伤损目标检测数据集,包括轨面光带、剥离掉块、波浪磨耗等典型的轨面信息。这个数据集在图像数量、分辨率、覆盖类别、目标密度还有小目标代表方面都远远优于现有的类似数据集。有了数据集之后,用它去训练目标检测算法,我在这里使用的是yolov5进行迁移学习,得到一个基准模型。对这个基准模型的各类目标进行详细的性能评估,算法对轨面光带、剥离掉块、疲劳裂纹等这些伤损的各类难例都能进行较好的兼容。有了目标检测算法之后,就可以提出视觉测量的分析方法了,比如测量轨面的光带宽度、伤损的尺寸、轻重伤的总数这样的量化评价指标。有了视觉测量的信息之后,就可以分别定义各个尺度的数据分析、数据结构了,比如实例尺度的微观伤损形位的数据结构、图像尺度的终端视觉测量的数据结构等,由不同尺度的数据结构可以生成一条轨道交通线路的密集量化地图。最后,把这个目标检测算法模型部署应用在桌面端、云端、web端、网页端、智能手机端和智能硬件端,实现每秒钟20帧的实时检测。

下图是网页端的运行效果,用户可以直接上传手机相册里的图片,也可以现场拍摄图片,就能获得所有目标检测和视觉测量的结果啦。如果感觉挺有意思,跟我一起继续往下看叭🍭🍭🍭

picture.image

2.目标检测数据集

数据决定了问题的上限,而算法只是在不断地逼近这个上限。所以数据集是特别特别重要滴!!!尤其对于工业领域的缺陷瑕疵检测,一个高质量的数据集就等于成功了一半。

那工业领域的数据集是怎样获取滴腻?一般是人工或机器拍摄得到的宝贵数据。拿轨面伤损数据集来说,拍摄者站在两股钢轨中间,手持拍摄设备,镜头距轨面垂直距离200mm,竖直向下聚焦拍摄,侧面补光以图像没有暗影和反光为佳,补光角度大概30°。

拍摄得到数据集之后,对其中高质量的图片进行细粒度目标检测标注。细粒度标注是怎么实现的腻?如下图的标注所示,我们对伤损部位进行更精细的包围框标注。相比于现有的粗粒度条带标注和图像分类标注呢,细粒度标注能够反映每一片裂纹、每一块掉块、每一处薄膜的实例级类别和行为信息,对每一片伤损进行独立的区分,这样才有助于后续进行尺寸、面积、波长的测量和量化评价。那小伙伴们可就要问了,为啥要进行这么精细的标注呢?因为工业领域的零部件瑕疵都很微小,所以常规的目标检测标注不太适用。

picture.image

这里使用的标注工具为Labelimg,标注之后就得到记录每一张图片中每一个目标的类别和矩形框坐标位置的标注文件,下图就是PASCAL VOC标注格式的xml文件。大家可以根据需要选择标注工具和格式。

picture.image

在数据集中还出现了许多对比度低,肉眼不容易标注的图像,比如背景非常黑暗,聚焦模糊或者轨面有反光。这些图像数据在工业领域是很常见的,毕竟拍摄的环境摆在那儿了。所以我们通常要对它们进行一个图像的处理,例如直方图均衡化、图像去噪、改变对比度等。下图是对轨面图像进行基于受限对比度自适应直方图均衡化的难例图像辅助增强方法的效果图。可以看到,经过图像处理之后,原来集中在极亮区和极暗区的像素峰值就被拉平了,较均匀的分布于全部的灰度空间,细节方面得到了增强。

picture.image

如果你想了解更多关于轨面伤损数据集的细节,请看这里叭➡轨面伤损数据集Rail-5K论文🧸🧸🧸

3.基于yolov5的伤损检测算法

接下来,将构造好的数据集送入yolov5中,选取yolov5x模型作为预训练模型,在它的基础上进行迁移学习,训练轨面伤损的检测基准模型(大家也可以选择其他的检测模型喔)

小伙伴们可能了解过这个模型,有些地方或许一知半解,那我就通俗易懂的说一下它的原理腻🧐🧐🧐如下图所示,yolov5x模型由三部分组成:Backbone骨干网络、Neck颈部网络、Head检测头。图中橙色的块表示Focus操作;CBL代表卷积、batch normalization和leaky relu操作;CSP代表跨阶段局部网络CSPNet;SPP代表空间金字塔池化;concat代表沿通道方向堆叠feature map;紫色的conv代表1×1卷积操作。

picture.image

Backbone骨干网络用于提取图像特征。yolov5使用CSPDarknet和FPT作为骨干网络。CSPNet解决了大型骨干网络优化时的梯度信息重复问题,将梯度变化从头到尾集成在特征图中,减少了模型的参数量。yolov5s中包含了CSP1_X和CSP2_X这两种CSP结构,分被用于骨干网络和颈部网络。yolov5在骨干网络的第一层通过橙色的Focus操作,把长度和宽度方向的空间维度信息切片并堆叠至通道维度,长宽缩小为原来的一半,通道数增加为原来的4倍,减少了计算量。

Neck颈部网络用于整合各尺度的特征,生成特征金字塔FPN,主要由FPN和PAN组成。它把不同尺度的特征汇总整合,增强了模型对不同尺度目标的识别能力。这里再细说一下,FPN通过融合高底层特征,提升了不同尺度特别是小尺寸目标的检测效果;而PAN呢,在FPN的基础上进一步增强了自底向上的特征增强。那为什么这样能改善腻?究其原理,就在于底层卷积神经网络主要提取边缘、轮廓、颜色等底层重要的视觉特征,因此PAN它自底向上的增强就可以让顶层特征图也能充分共享到网络底层特征,提升大目标的检测效果。

Head检测头用于回归输出预测框的位置和类别。它通过1×1卷积运算输出了三组特征图,就是图中的三组蓝色方块,每组特征图都包含了对应尺度提取出的预测框类别、置信度和像素坐标信息。这三组特征图的张量数据结构分别是batchsize×54×80×80、batchsize×54×40×40和batchsize×54×20×20,其中batchsize是每一批每一步的样本数。

经过训练后就得到了如下图各类别的检测结果。可以看到轨面的AP最高,达到了0.98,说明算法对轨面类的识别性能最好,所以后续我们会使用轨面的预测框宽度和轨面实际的物理宽度来计算像素和毫米之间的换算关系,称之为定位标尺(因为轨面的AP最高,所以这个标尺是可信滴)

picture.image

4.一些训练技巧

在基准模型的基础上,可以进行一些调参对比试验,结果如下图所示。

基准模型呢是从MS COCO数据集预训练权重的基础上迁移训练得到的。那什么是迁移学习腻?简单来说,迁移学习就是通过将已有任务的知识和模型应用到新任务中,从而加速新任务的学习过程。

举个小例子:假设我们已经在一个大型图像数据集上训练了一个卷积神经网络来识别不同的动物。现在,我们面临一个新任务,要求我们构建一个模型来识别花卉照片。传统的方法是从零开始训练一个新的模型,但这需要大量的时间和计算资源。而迁移学习的思想则可以更高效地解决这个任务。我们可以利用之前训练好的动物识别模型,将其作为新任务的起点,利用在动物识别任务中训练得到的模型作为花卉识别任务的预训练模型,预训练模型已经学到了一些通用的特征,如边缘检测和纹理识别,这些特征对花卉识别也是有用的。(考虑后续可以详细介绍一下迁移学习)

picture.image

如果你不使用预训练好的模型,而是重新初始化模型权重的话,那么它在大多数类别的性能上是不如迁移学习滴🌻🌻🌻所以这就告诉我们,哪怕是你用yolo解决完全不一样的图像域,人家原始的yolo是在自然图像上训练的,而现在我们要解决钢轨表面伤损的问题,仍然是能够借鉴自然图像训练的预训练特征和权重来迁移泛化的。视觉问题都是有一些共同的、共享的特征能够让我们站在巨人肩膀上,不用自己重复造轮子,能够复用的🌴🌴🌴

除了迁移学习之外,马赛克拼接图像增强、多模型集成等一些技巧都可以使用。

5.视觉测量与量化评价

(这一节不是所有工业领域的缺陷检测所必需的步骤)我们需要获得像素和真实物理的毫米长度之间的换算关系。在钢轨领域,轨头宽度这个真实的物理毫米数我们是知道的,比如73毫米,我们预测框的像素,比如说1654像素,那么它就对应了73毫米,我们就能算出一像素代表0.044毫米,这是这张图片的测距标识。每张图片的测距标识都有可能是不一样的,所以都需要单独计算一下。有了测距标识,所有跟像素有关的量都可以转化成跟长度、面积有关的量。具体流程如下所示。

picture.image

6.图像识别应用部署

有了目标检测模型之后,就可以把整个模型应用部署在桌面端、网页端、智能硬件端等。这里推荐两个好用的应用部署。

*云端:*可以使用华为云的一站式开发平台ModerArts来开发微信小程序。ModerArts提供数据结构化标注管理,大规模分布式模型训练服务,同时支持模型在智能终端、边缘计算和云端的部署应用。在这里使用的是ModerArts自动学习功能里面的目标检测模块。只需要把数据、标注上传上去,点击自动训练,它就会自动根据训练数据集进行模型设计、参数调优、模型训练、模型压缩加速和在线部署,基本上不用写代码,无需复杂的编程算法经验,就可以完成我想要的任务啦。自动学习功能还包含图像分类、目标检测、预测分析、声音分类、文本分类等各种人工智能算法的落地应用(怎么样!!!这个是不是超好用滴,快去试试叭)✌✌✌

picture.image

*终端:*终端的话不需要网络,直接在本地进行边缘计算和推理。这里开发了一个安卓app,底层是腾讯的优图实验室针对手机移动端的高性能神经网络前向计算框架,叫做NCNN。在pytorch上训练了yolov5的基准模型,即获得了一个.pt格式的文件,通过NCNN呢把它转成NCNN的格式,然后在java native inteface中使用c++接口,对接这个NCNN的模型文件到安卓手机的应用程序中,再用安卓内置的canvas绘制预测框,就做成了一款安卓的手机应用。

ending

看到这里也许小伙伴们会问,既然是针对表面缺陷,为什么不用超声波或者激光扫描呢?这样会更准啊🧐🧐🧐准是准了,但是它贵呀!激光要做精度的话,能做的10w+一台,而工业摄像头没有那么贵。何况你细品“普通人以为的廉价几千块钱换90%的准确率,工程上认为的廉价几万几十万换99%的准确率”

相信盆友们对工业领域缺陷检测有了更深的认识了叭,如果你也觉得我的分享对你有所帮助,please一键三连嗷!!!下期见

迷之自信.jpeg

InfoQ首发链接:基于深度学习的工业缺陷检测详解——从0到1

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论