基于yolov5的工业缺陷检测方案

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

 Datawhale干货 

作者:limzero,西安交通大学,Datawhale原创作者

比赛介绍

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

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

ae3a96ea151aec398ff613bb2f34660c.png 在本篇文章中,主要为大家介绍选择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内可以完成一张图的预测。

切图后训练数据可视化:

92373e6c1470fe62d951f578028e556b.png

训练

  • 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预测结果应该会更好。当然有更简单的方式,以直接在推理结果上面进行后处理。

训练/验证可视化

fdd35ef5564d5e6fc6a530ad5f1160b5.png
tensorboard

比赛地址

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

好消息! 

小白学视觉知识星球

开始面向外开放啦👇👇👇

 
 

31e531213197044a91acff4541d87be1.png

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值