YOLOv5与YOLOv8骰子检测实战:从数据标注到模型部署
1. 项目背景与应用场景骰子点数检测这个看似简单的计算机视觉任务在实际应用中却有着意想不到的价值。在赌场监控、桌游自动化记录、教育类应用开发等领域快速准确的骰子识别技术能显著提升效率。传统图像处理方法对光照条件和骰子摆放角度极为敏感而基于深度学习的YOLO系列算法则展现出强大优势。我最近整理了一个包含2000标注样本的骰子检测数据集并完成了YOLOv5和YOLOv8模型的训练。这个项目特别适合想入门物体检测的新手练手——数据集规模适中、类别明确1-6点且能直观看到检测效果。下面分享从数据准备到模型部署的全流程实战经验。2. 数据集构建要点2.1 数据采集策略优质数据集需要覆盖各种现实场景多角度拍摄俯视、侧视、斜视各占1/3多样化背景纯色桌面、木质纹理、复杂图案光照变化自然光、暖光、冷光及混合光源骰子状态单个/多个骰子、静止/运动模糊实际采集时发现骰子的镜面反光会严重影响标注精度。解决方法是在拍摄时使用柔光箱或后期用PS修补高光区域。2.2 标注规范与技巧使用LabelImg标注时需注意边界框要完全包裹骰子但不过大点数标签采用dice_1到dice_6的命名规则重叠骰子标注时确保可见面点数正确# 数据集目录结构示例 dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/2.3 数据增强方案在dataset.yaml中配置以下增强策略augmentation: hsv_h: 0.015 # 色相扰动 hsv_s: 0.7 # 饱和度增强 hsv_v: 0.4 # 明度调整 degrees: 45 # 旋转角度范围 translate: 0.1 # 平移比例3. 模型训练关键步骤3.1 YOLOv5训练配置使用官方仓库的v6.0版本python train.py --img 640 --batch 16 --epochs 100 --data dice.yaml --weights yolov5s.pt关键参数解析--rect: 启用矩形训练骰子场景可提升10%速度--cache: 使用RAM缓存加速需32GB内存--adam: 替换默认的SGD优化器3.2 YOLOv8的改进点Ultralytics版本在以下方面表现更优Anchor-free设计避免骰子尺寸敏感问题更高效的C2f模块mAP提升约5%内置的TALTask Alignment Learning策略训练命令示例yolo detect train datadice.yaml modelyolov8n.pt epochs100 imgsz6403.3 模型压缩技巧针对边缘设备部署的优化方案使用TensorRT量化from torch2trt import torch2trt model_trt torch2trt(model, [input_tensor])剪枝处理适用于v5python prune.py --weights runs/train/exp/weights/best.pt --percent 0.34. 实际部署中的坑与解决方案4.1 动态光照适应在赌场等场景遇到的挑战频闪灯光导致检测波动解决方案在推理前加入HSV均衡化def adjust_hsv(image): hsv cv2.cvtColor(image, cv2.COLOR_BGR2HSV) hsv[:,:,2] cv2.equalizeHist(hsv[:,:,2]) return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)4.2 重叠骰子处理当骰子堆叠时修改NMS的iou_thres为0.3添加后处理规则if len(dices) 3: # 假设最多3个骰子重叠 dices sorted(dices, keylambda x: x[4], reverseTrue)[:3]4.3 多平台适配经验树莓派需编译带NEON加速的OpenCVJetson Nano建议使用TensorRT引擎Web端转换为ONNX后用onnxruntime推理5. 性能对比与优化记录5.1 模型精度对比在测试集上的表现模型mAP0.5推理速度(FPS)参数量(M)YOLOv5s0.8921207.2YOLOv8n0.916953.4YOLOv8s0.9346511.45.2 典型误检分析点数误判4点与5点混淆解决方案增加旋转增强样本背景干扰圆形图案误检解决方案添加负样本训练5.3 推理加速技巧使用torch.jit.trace导出脚本模型traced_model torch.jit.trace(model, example_input)开启Half精度模式model.half() # 需配合CUDA使用这个项目最让我意外的是在模型剪枝30%后准确率反而提升了2%。后来分析发现适度的剪枝起到了类似正则化的效果抑制了过拟合。建议大家在模型优化时不要一味追求压缩率要注意观察精度变化曲线。