yolov5的工业缺陷检测

比赛介绍

工业缺陷检测是当前深度学习落地的热门项目,其中瓷砖生产过程中的“质量检测环节”需要检测出瓷砖表面的瑕疵,目前比较依赖于人工,效果和效率都层次不齐。

最近天池上线的广东工业赛事针对瓷砖表面瑕疵进行智能检测,要求选手们相应的算法,尽可能快与准确的给出瓷砖疵点具体的位置和类别,主要考察疵点的定位和分类能力。

在本篇文章中,主要为大家介绍选择yolov5作为基线的方案,供大家参考。

基于yolov5的方案

线上结果:

  • 切成 640x640 滑动窗口预测,耗时<1.5 h, 平均一张图<3s! 线上50.

  • 长边resize到6400预测,平均一张图耗时:0.6 s. 线上55+

大家们都在疯狂卷mmdet,毕竟two-stage为王,但是如果没有算力可以考虑下yolov5。而且考虑到速度和精度的均衡(复赛要求<3s),如果使用two-stage的单图大尺度预测,个人感觉上限有限,而且比赛最后都是拼细节。所以肯定会朝着切图(特别是测试时切图)的方向发展。如果two-stage妄图切图到小块然后预测,时间限制肯定会劝退大部分two-stage模型,这也是选择yolov作为基线的原因!

原始图片尺度很大,目标相对原图尺度很小,这不利于模型学习,所以无论是在线随机crop还是离线crop制作训练集,都避免不了处理切图的问题。在线切图可以参考mmdetection的官方实现RandomCrop

离线切图:和在线切图一致,参考yolt切图方式,只是要将切好的图片和新标注都保存起来。本文中训练yolov5使用的是离线切图制作的voc格式数据集

  • 假设需要切图的大小为:640x640

  • overlap比例:0.2

  • 则步长为512

  • 从原图左上角开始切图,切出来图像的左上角记为x,y,

  • 那么可以容易想到y依次为:0,512,1024,....,5120.但接下来却并非是5632,因为5632+640>6000,所以这里要对切图的overlop做一个调整,最后一步的y=6000-640.(这是最关键的一点!!!)

  • 标签变化:切图对应的标签变化就是一个简单的加减(左上角坐标)几何变化

  • 对于所有的原始数据集,切成640x640,再剔除纯背景,大约会生成1.9w+的训练图像

  • 预测的时候也是将图片切成640x640.这样一张图片大约会变成150~200张小图,而yolov5l的FPS在v100上大约为256. 所以可以保证在3s内可以完成一张图的预测。

切图后训练数据可视化:

训练

  • yolov5l

  • 训练尺度:640x640

  • 30 epoch ; 0.1比例验证(训练未见过的图片的切片) ,严格的验证还需要算上切出来的背景块。

  • 线下:mAP@0.5: 60

  • 2卡2070s训练,训练时间<6hour。

测试

单卡:RTX 2070s

  • 1 切成 640x640 滑动窗口预测,耗时<1.5 h, 平均一张图<3s! 线上50.(低于原图预测的结果我是没想到的,没有NMS后处理?或者代码写错了?或者滑窗就是不行?还是一些后处理细节没考虑清楚?)

  • 2 长边resize到6400预测,平均一张图耗时:0.6 s. 线上55+

代码运行说明:

python convert_to_voc.py #先将原始数据转为VOC格式的标注
python make_slice_voc.py #将上述图片切为小图,重新制作为voc.
python convert_voc_to_v5txt.py #将voc标注转换为yolov5的官方格式.
python make_yolov5_train_val.py #制作yolov5的train/val.

总结

  • 虽然检测比赛都是mmdet的天下,但是我相信在复赛有时间限制的情况下,加上这个赛题的特殊性,yolov5还是有比较强的竞争力的,特别是比赛后期。

  • V5提升空间很大:(1)本baseline使用两卡2070s小尺度单图训练,本身具有局限性;(2)除了yolov5l还有更强的v5x可选; (3)预测部分很粗糙,没有充分发挥yolov5速度快的特点;(4)结果后处理可以进一步探索

  • 关于切图滑窗预测, 如果处理好细节,切图预测理论上应该是会好于原图预测。特别是针对那些背景块,需要特殊处理,不然会引入极多的FP,必然导致mAP降低。关于overlap的问题,可以借鉴模型融合的方式,使用NMS或者WBF来对最后的重叠进行一个再处理。

  • 关于单图预测:考虑推理速度尺度,中心裁剪推理,因为所有图都有灰边背景,统计下这些背景的边框范围,进行centerCrop预测结果应该会更好。当然有更简单的方式,以直接在推理结果上面进行后处理。

训练/验证可视化

tensorboard

比赛地址

https://tianchi.aliyun.com/s/bc97f977ae47dcfa4b07c027cd28d907(复制粘贴或阅读原文)

### YOLOv5 工业缺陷检测训练教程 #### 准备工作 为了训练 YOLOv5 模型用于工业缺陷检测,需要准备一个高质量的数据集。该数据集应包含带有标注的图像,这些标注描述了木材或其他材料表面上存在的各种类型的缺陷[^1]。 如果无法找到现成的开源数据集,则可以通过摄像头拍摄实际生产中的样本图片并手动完成标注。常用的工具包括 LabelImg 和 Supervisely 等软件来生成符合 COCO 或 Pascal VOC 格式的标签文件[^2]。 #### 环境搭建 YOLOv5 的训练通常建议在具备 GPU 加速功能的操作系统上执行,比如 Windows 或 Linux 平台。以下是具体步骤: - 创建一个新的 Python 虚拟环境以隔离项目所需的包版本; - 安装 PyTorch 及其相关依赖项,确保它们能够识别 NVIDIA 显卡及其驱动程序 (如 CUDA 版本需匹配); - 下载官方发布的预训练权重作为初始参数加载至网络结构中以便迁移学习应用到特定领域问题解决上去; #### 配置阶段 ##### 数据配置 编辑 `data.yaml` 文件定义类别名称列表以及指向训练/验证集合路径的信息如下所示: ```yaml train: ../datasets/train/images/ val: ../datasets/valid/images/ nc: 3 # 类别数 names: ['crack', 'scratch', 'stain'] # 自定义分类名数组 ``` ##### 模型调整 通过修改 YAML 格式文档指定不同的超参组合从而探索最佳性能设置方案。例如更改 backbone 层次大小、anchor box 尺寸分布等属性值可能有助于提升最终效果表现水平[^3]: ```yaml depth_multiple: 0.33 width_multiple: 0.5 anchors: - [10,13, 16,30, 33,23] ... ``` #### 开始训练 运行命令启动整个流程并将日志保存下来供后续分析查看之用: ```bash python train.py --img 640 --batch 16 --epochs 50 --data data.yaml --cfg yolov5s.yaml --weights yolov5s.pt ``` 上述脚本指定了输入分辨率尺寸为 640×640 像素点阵图形式处理每张待测样例素材的同时还设置了批量规模数量等于十六组实例参与一轮迭代更新操作期间持续五十轮周期直至收敛为止. #### 测试评估 当模型经过充分优化之后就可以利用测试集中未曾见过的新样本对其进行效能衡量考核活动啦!借助 predict 方法即可轻松获得预测框坐标位置连同所属种类概率估计数值一并返回给调用者端加以展示呈现出来哦~ --- ###
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值