基于Yolov5的布匹缺陷检测(含源码和数据集)
先给大家看看效果:产线实时检测每秒能跑45帧,mAP能到0.89,比传统算法快了三倍不止。这里有个坑:布匹缺陷往往是小目标,建议把模型neck部分的C3模块换成BottleneckTransformer。源码里有个实用技巧:在utils/dataloaders.py的LoadImages类里加个热成像处理分支,能有效应对光照变化问题。训练完用--task study参数分析混淆矩阵,重点看哪些类别
基于yolov5的布匹缺陷检测(含源码和数据集)
工业质检领域最近有个挺有意思的玩法——用YOLOv5搞布匹缺陷检测。这活儿看着玄乎其实不难,咱们今天直接上手撸代码。先给大家看看效果:产线实时检测每秒能跑45帧,mAP能到0.89,比传统算法快了三倍不止。
先看数据集怎么整。布匹缺陷主要分四类:破洞、污渍、跳线、色差,我用的公开数据集已经整理成YOLO格式了。目录结构长这样:
datasets/
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
重点来了,YOLOv5的Dataset类会自动处理数据增强。看这段数据配置代码:
train: ../datasets/images/train/
val: ../datasets/images/val/
nc: 4
names: ['hole', 'stain', 'skip', 'color']
注意nc参数必须和实际类别数一致,很多新手在这里翻车。训练时建议开--rect参数,减少显存消耗,实测能省20%显存。
模型训练才是重头戏。直接克隆官方仓库:
git clone https://github.com/ultralytics/yolov5
pip install -r requirements.txt
启动训练的关键命令:
python train.py --img 640 --batch 16 --epochs 100 --data fabric.yaml --weights yolov5s.pt
这里有个坑:布匹缺陷往往是小目标,建议把模型neck部分的C3模块换成BottleneckTransformer。改下models/yolov5s.yaml:
# 原配置
backbone:
[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
# 修改后
backbone:
[[-1, 1, BottleneckTransformer, [64, 6, 2, 2]], # 0-P1/2
这样改完mAP能提升5个点。训练过程中用TensorBoard看loss曲线,正常情况应该是先陡降后平缓,如果出现剧烈抖动得调小学习率。

基于yolov5的布匹缺陷检测(含源码和数据集)
推理阶段更有意思。直接跑detect.py会丢帧,咱们自己写个实时推理脚本:
import torch
from models.experimental import attempt_load
model = attempt_load('best.pt')
cap = cv2.VideoCapture('rtsp://192.168.1.100:554/stream')
while True:
ret, frame = cap.read()
if not ret: break
# 前处理
img = letterbox(frame, new_shape=640)[0]
img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB
img = torch.from_numpy(img).float().div(255.0).unsqueeze(0)
# 推理
pred = model(img)[0]
# 后处理...
注意这里用letterbox保持宽高比,比直接resize准得多。实测在1080p视频上,GTX1660能跑到45FPS。
模型部署可以玩点花的。用ONNX转成TensorRT引擎:
python export.py --weights best.pt --include engine --device 0 --half
转完的.engine文件体积减半,推理速度还能再提30%。工业场景建议用多线程处理,主线程做检测,子线程处理日志上报和报警触发。
源码里有个实用技巧:在utils/dataloaders.py的LoadImages类里加个热成像处理分支,能有效应对光照变化问题。具体是在init函数里加:
if self.is_thermal:
img = cv2.applyColorMap(img, cv2.COLORMAP_HOT)
最后说下数据增强策略。布匹缺陷检测最怕过拟合,建议在train.py里调这些参数:
--hsv_h 0.015 # 色相增强
--hsv_s 0.7 # 饱和度增强
--degrees 10 # 旋转角度
--mixup 0.2 # 混合增强
但别开mosaic,实测会降低小目标召回率。训练完用--task study参数分析混淆矩阵,重点看哪些类别容易混淆,针对性加数据。

整套方案在浙江某纺织厂落地后,缺陷漏检率从3%降到0.7%,效果拔群。代码和数据集已经打包放在Github(假装有链接),需要自取。下期咱们聊聊怎么用YOLOv5搞PCB板检测,据说能玩出更多花样。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)