写点什么

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

作者:月球背面
  • 2023-12-27
    辽宁
  • 本文字数:4071 字

    阅读完需:约 13 分钟

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

beginning

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

1.整体流程



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


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


2.目标检测数据集


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


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


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


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


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


如果你想了解更多关于轨面伤损数据集的细节,请看这里叭➡轨面伤损数据集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 卷积操作。


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 最高,所以这个标尺是可信滴)⛳⛳⛳


4.一些训练技巧


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


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


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


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


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

5.视觉测量与量化评价


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


6.图像识别应用部署


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


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


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

ending

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


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


发布于: 刚刚阅读数: 7
用户头像

月球背面

关注

cv攻城狮 2023-07-18 加入

还未添加个人简介

评论

发布
暂无评论
基于深度学习的工业缺陷检测详解——从0到1_人工智能_月球背面_InfoQ写作社区