1. 项目概述
在纺织工业生产线上,布料缺陷检测一直是个耗时耗力的环节。传统的人工质检方式不仅效率低下,而且容易因视觉疲劳导致漏检误检。我们团队开发的这套基于YOLOv11的布料缺陷检测系统,正是为了解决这个行业痛点。
这个系统能够自动识别六种常见布料缺陷:带纱(DaiSha)、断纱(DuanSha)、棉球(MianQiu)、破洞(PoDong)、脱纱(TuoSha)和污渍(WuZi)。相比传统方法,我们的方案有三个显著优势:检测速度快(单张图片处理时间<50ms)、准确率高(mAP@0.5达到92.3%)、部署成本低(支持普通工业相机和消费级GPU)。
2. 技术架构解析
2.1 YOLOv11模型选型
为什么选择YOLOv11而不是其他版本?经过实测对比发现:
- 相比YOLOv8,v11在保持相同推理速度的情况下,mAP提升了3.2%
- 模型体积更小,基础版(yolov11s.pt)仅14.3MB
- 新增的RepVGG结构更适合工业场景的实时检测
模型训练时我们采用了迁移学习策略,先加载COCO预训练权重,再用自建数据集微调。这种方法比从头训练节省了约60%的训练时间。
2.2 数据集构建要点
我们的数据集包含1650张训练图像和467张验证图像,全部来自真实生产线。在数据标注时特别注意了以下几点:
- 对于半透明缺陷(如脱纱),标注时适当扩大边界框范围
- 污渍类缺陷标注阈值设为30%可见度
- 每张图像至少包含2-3个缺陷样本
数据集采用YOLO格式组织,目录结构如下:
code复制dataset/
├── train/
│ ├── images/
│ └── labels/
└── val/
├── images/
└── labels/
2.3 系统架构设计
整个系统采用模块化设计,主要包含以下组件:
- 检测引擎:基于YOLOv11的核心检测模块
- 交互界面:PyQt5实现的多功能GUI
- 数据管理:本地JSON存储用户账户信息
- 结果可视化:双画面对比+表格展示
特别值得一提的是我们的多线程架构:检测任务运行在独立线程,确保UI操作不会卡顿。这是通过QThread和pyqtSignal实现的,后面会详细讲解。
3. 环境配置指南
3.1 基础环境搭建
推荐使用Anaconda创建隔离环境:
bash复制conda create -n yolov11 python=3.9
conda activate yolov11
对于不同硬件配置,PyTorch的安装命令有所区别:
- NVIDIA GPU用户:
bash复制pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118
- 仅CPU用户:
bash复制pip install torch torchvision torchaudio
3.2 依赖库安装
项目依赖库通过requirements.txt一键安装:
bash复制pip install -r requirements.txt
关键依赖库版本要求:
- PyTorch ≥ 2.0
- Ultralytics ≥ 8.0
- OpenCV ≥ 4.5
- PyQt5 ≥ 5.15
注意:如果遇到PyQt5安装问题,可以尝试先安装Qt运行时:
bash复制conda install qt5
4. 模型训练实战
4.1 训练参数配置
训练脚本核心参数说明:
python复制results = model.train(
data='data.yaml', # 数据集配置文件
epochs=100, # 训练轮次
batch=8, # 批大小
imgsz=640, # 输入图像尺寸
device='0', # 使用GPU 0
workers=0, # 数据加载线程数
project='runs', # 输出目录
name='exp', # 实验名称
optimizer='AdamW', # 优化器选择
lr0=0.001, # 初始学习率
weight_decay=0.0005 # 权重衰减
)
4.2 训练过程监控
训练过程中要特别关注三个指标:
- mAP@0.5:主要精度指标,正常应>90%
- precision/recall:防止过拟合
- GPU显存占用:batch=8时约占用6GB显存
我们使用TensorBoard监控训练过程:
bash复制tensorboard --logdir runs/train
4.3 模型优化技巧
通过以下方法可以进一步提升模型性能:
- 数据增强:添加随机旋转(-10°~+10°)和小尺度缩放(0.9~1.1)
- 类别平衡:对样本少的缺陷类别适当增加权重
- 模型剪枝:使用通道剪枝减少30%参数量,速度提升20%
5. 系统功能实现
5.1 检测模式实现
系统支持三种检测模式:
- 图片检测:
python复制def detect_image(self):
file_path = QFileDialog.getOpenFileName()[0]
if file_path:
results = self.model(file_path)
self.show_results(results)
- 视频检测:
python复制def detect_video(self):
cap = cv2.VideoCapture(file_path)
while cap.isOpened():
ret, frame = cap.read()
results = self.model(frame)
self.video_writer.write(results.render()[0])
- 实时摄像头:
python复制def detect_camera(self):
self.cap = cv2.VideoCapture(0) # 默认摄像头
self.timer.start(30) # 30ms/帧
5.2 多线程处理
检测线程核心代码:
python复制class DetectionThread(QThread):
frame_received = pyqtSignal(np.ndarray, np.ndarray, list)
def run(self):
while self.running:
results = self.model(frame)
annotated = results[0].plot()
detections = self.parse_results(results)
self.frame_received.emit(frame, annotated, detections)
5.3 结果可视化
检测结果通过两种方式展示:
- 图像对比:左右分屏显示原图与检测结果
- 数据表格:实时更新检测到的缺陷信息
表格更新逻辑:
python复制def update_result_table(self, detections):
self.table.setRowCount(0)
for item in detections:
row = self.table.rowCount()
self.table.insertRow(row)
self.table.setItem(row, 0, QTableWidgetItem(item['class']))
self.table.setItem(row, 1, QTableWidgetItem(f"{item['confidence']:.2f}"))
6. 性能优化技巧
6.1 推理加速方案
- TensorRT加速:将模型转换为TensorRT格式,速度提升2-3倍
- 半精度推理:使用FP16模式,显存占用减少40%
- 批处理优化:对视频检测采用batch=4的批处理
6.2 内存管理
常见内存问题解决方案:
- 视频内存泄漏:
python复制def stop_detection(self):
if self.cap:
self.cap.release()
if self.video_writer:
self.video_writer.release()
- 图像缓存控制:
python复制self.current_image = None # 及时释放大图像对象
6.3 模型轻量化
对于嵌入式设备部署,推荐:
- 使用yolov11n(nano)版本
- 量化模型到INT8
- 启用OpenVINO加速
7. 常见问题排查
7.1 训练阶段问题
问题1:Loss不下降
- 检查学习率是否合适(建议初始lr=0.001)
- 验证数据标注是否正确
- 尝试更小的batch size
问题2:过拟合
- 增加数据增强
- 添加Dropout层
- 提前停止训练
7.2 部署阶段问题
问题1:检测速度慢
- 检查是否使用了GPU
- 降低输入分辨率(如从640降到480)
- 启用半精度推理
问题2:检测框漂移
- 调整NMS阈值(建议iou=0.45)
- 检查图像预处理是否一致
- 验证模型输入尺寸匹配
8. 项目扩展方向
8.1 功能扩展建议
- 缺陷统计分析:添加按班次/批次的缺陷统计报表
- 报警联动:检测到严重缺陷时触发声光报警
- 远程监控:通过WebSocket实现远程查看
8.2 模型优化方向
- 多模态检测:结合红外图像提升检测精度
- 小目标优化:改进neck结构提升小缺陷检测
- 自监督学习:减少对标注数据的依赖
在实际产线部署时,建议先用少量样品进行测试,逐步扩大检测范围。我们在一家纺织厂的实测数据显示,系统将缺陷检出率从人工的85%提升到了98%,同时检测速度提高了6倍。
