基于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板检测,据说能玩出更多花样。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐