1. 项目概述
这个基于深度学习的鞋面缺陷识别系统是我最近完成的一个课程设计/毕业设计项目。作为一名计算机视觉方向的开发者,我发现在传统制鞋行业中,产品质量检测仍然大量依赖人工目检,这种方式不仅效率低下,而且容易因疲劳导致误检漏检。于是,我决定利用Python和深度学习技术开发一套自动化鞋面缺陷检测系统。
这个系统能够自动识别鞋面上的划痕、污渍、色差、线头等多种常见缺陷,准确率达到了92%以上。相比传统人工检测,这套系统可以24小时不间断工作,单次检测时间不超过0.5秒,大大提升了生产线的质检效率。项目采用了YOLOv5目标检测算法作为核心,配合Flask搭建了简洁易用的Web界面,方便工厂质检人员使用。
2. 技术选型与架构设计
2.1 深度学习框架选择
在算法实现部分,我对比了TensorFlow、PyTorch和PaddlePaddle三大主流框架:
- TensorFlow:生态完善但学习曲线陡峭,部署相对复杂
- PyTorch:研究友好但工业部署需要额外转换
- PaddlePaddle:中文文档丰富但社区相对较小
最终选择了PyTorch作为基础框架,主要考虑以下几点:
- 项目需要快速迭代实验,PyTorch的动态图机制更利于调试
- 社区活跃,遇到问题容易找到解决方案
- 与YOLOv5的兼容性最好
2.2 系统架构设计
整个系统采用B/S架构,分为三个主要模块:
├── 前端展示层(Vue.js) ├── 后端服务层(Flask) └── 算法处理层(PyTorch+YOLOv5)这种分层架构的优势在于:
- 前后端分离,便于独立开发和部署
- 算法模块可以单独优化升级
- 系统扩展性强,未来可以轻松添加新功能
3. 核心算法实现
3.1 数据集准备与增强
鞋面缺陷检测面临的主要挑战是:
- 缺陷样本收集困难
- 缺陷形态多样
- 背景复杂(不同颜色/材质的鞋面)
我采用了以下解决方案:
数据收集:
- 与本地鞋厂合作,采集了2000+张带缺陷的鞋面图像
- 使用LabelImg工具手工标注了5类常见缺陷
数据增强:
transform = transforms.Compose([ transforms.RandomHorizontalFlip(p=0.5), transforms.RandomRotation(10), transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ])- 类别平衡:
- 对样本较少的缺陷类别使用过采样
- 采用Focal Loss缓解类别不平衡问题
3.2 YOLOv5模型训练
YOLOv5相比前代的主要改进:
- 更高效的网络结构(CSPNet)
- 自适应锚框计算
- 更灵活的训练配置
我的训练关键参数配置:
# yolov5s.yaml nc: 5 # 缺陷类别数 depth_multiple: 0.33 # 模型深度系数 width_multiple: 0.50 # 层宽度系数 # 训练命令 python train.py --img 640 --batch 16 --epochs 100 --data shoes.yaml --cfg yolov5s.yaml --weights yolov5s.pt训练过程中的关键发现:
- 学习率设置对模型收敛影响很大,最终采用余弦退火策略
- 早停机制(patience=15)有效防止过拟合
- 使用预训练权重可以提升约5%的mAP
3.3 模型优化技巧
注意力机制引入: 在YOLOv5的SPPF层后添加SE模块,使模型更关注缺陷区域
多尺度训练:
# 在train.py中设置 parser.add_argument('--multi-scale', action='store_true', help='adjust (67%% - 150%%) img_size every batch')- 模型量化: 使用PyTorch的量化工具将模型从FP32转为INT8,推理速度提升2倍
4. 系统实现细节
4.1 后端服务实现
采用Flask搭建RESTful API,主要接口设计:
| 端点 | 方法 | 描述 |
|---|---|---|
| /api/upload | POST | 上传待检测图像 |
| /api/detect | GET | 获取检测结果 |
| /api/history | GET | 查询检测历史 |
核心检测逻辑:
@app.route('/api/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return jsonify({'error': 'No file uploaded'}), 400 file = request.files['file'] if file.filename == '': return jsonify({'error': 'Empty filename'}), 400 # 保存文件 filename = secure_filename(file.filename) filepath = os.path.join(UPLOAD_FOLDER, filename) file.save(filepath) # 执行检测 results = detect_defects(filepath) # 保存结果到数据库 save_to_db(filename, results) return jsonify(results)4.2 前端界面开发
使用Vue.js + Element UI构建的管理界面主要功能:
- 图像上传与结果显示
- 缺陷统计图表
- 历史记录查询
关键组件设计:
<template> <div class="upload-container"> <el-upload action="/api/upload" :on-success="handleSuccess" :before-upload="beforeUpload"> <el-button type="primary">点击上传</el-button> </el-upload> <div v-if="result" class="result-container"> <h3>检测结果</h3> <el-image :src="result.image" :preview-src-list="[result.image]"></el-image> <el-table :data="result.defects"> <el-table-column prop="type" label="缺陷类型"></el-table-column> <el-table-column prop="confidence" label="置信度"></el-table-column> <el-table-column prop="position" label="位置"></el-table-column> </el-table> </div> </div> </template>5. 系统部署与优化
5.1 生产环境部署
采用Docker容器化部署方案,Dockerfile配置:
FROM pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime WORKDIR /app COPY . . RUN pip install -r requirements.txt EXPOSE 5000 CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app", "--workers=4"]部署命令:
docker build -t shoe-inspection . docker run -d -p 5000:5000 --gpus all shoe-inspection5.2 性能优化措施
- GPU加速:
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device)- 批处理优化:
- 当检测队列中有多个请求时,自动合并为批次处理
- 使用torch.no_grad()减少内存占用
- 缓存机制:
- 对常见鞋型的检测结果进行缓存
- 使用Redis存储高频访问数据
6. 实际应用效果
6.1 性能指标
在测试集上的表现:
| 指标 | 数值 |
|---|---|
| mAP@0.5 | 0.92 |
| 推理速度 | 0.45s/image |
| 最大吞吐量 | 50 images/s |
6.2 与传统方法对比
| 对比项 | 人工检测 | 本系统 |
|---|---|---|
| 单次检测时间 | 3-5秒 | 0.5秒 |
| 准确率 | ~85% | 92% |
| 连续工作时长 | 8小时 | 24小时 |
| 人力成本 | 高 | 低 |
6.3 用户反馈
在试用阶段收集到的改进建议:
- 增加多角度拍摄指导
- 支持视频流检测
- 添加缺陷严重程度分级
7. 开发经验与心得
7.1 遇到的主要挑战
小目标检测问题: 部分细小缺陷(如线头)容易被漏检。解决方案:
- 增加更多小目标样本
- 调整anchor大小
- 使用更高分辨率的输入(从640x640提升到1024x1024)
光照条件影响: 现场光照不均导致检测不稳定。解决方案:
- 在预处理中添加直方图均衡化
- 训练时增加更多光照变化的数据增强
7.2 值得分享的技巧
- 标签平滑:
# 在数据加载器中设置 hyp['label_smoothing'] = 0.1模型集成: 将YOLOv5s和YOLOv5m的预测结果加权融合,mAP提升约2%
误检过滤: 根据缺陷的位置和大小设置合理的过滤规则
7.3 项目扩展方向
- 增加3D缺陷检测能力
- 开发移动端应用,支持现场快速检测
- 集成到工厂MES系统中,实现全自动化质检流水线
这个项目从构思到实现共耗时3个月,期间遇到了不少挑战,但也收获了很多宝贵的经验。深度学习在工业质检领域的应用前景广阔,但要将实验室模型转化为真正可用的产品,还需要考虑很多工程细节。希望我的经验对正在从事相关开发的同行有所启发。