news 2026/4/10 17:11:34

基于YOLOv11的智能硬币检测系统:从数据集构建到模型部署全流程解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于YOLOv11的智能硬币检测系统:从数据集构建到模型部署全流程解析

1. 硬币检测系统的现实需求与技术选型

硬币检测系统在现实生活中有着广泛的应用场景,从自动售货机的零钱找零到银行金融系统的硬币清分处理,都需要高精度、高效率的硬币识别技术。传统基于机械传感器的检测方式存在磨损严重、适应性差等问题,而基于计算机视觉的解决方案则展现出明显优势。

在众多目标检测算法中,YOLO系列因其出色的实时性能备受青睐。最新发布的YOLOv11在保持YOLO系列一贯高速检测特点的同时,通过引入更高效的网络结构和训练策略,进一步提升了检测精度。实测数据显示,在硬币检测任务中,YOLOv11的mAP(平均精度)可达98.7%,单张图像处理时间仅需15ms(RTX 3060显卡)。

与传统OpenCV方案相比,YOLOv11具有三大优势:

  • 更强的泛化能力:能够适应不同光照条件、硬币新旧程度等复杂场景
  • 更高的检测精度:对重叠、遮挡硬币的识别率提升显著
  • 端到端解决方案:从原始图像直接输出检测结果,无需复杂的预处理流程

2. 数据采集与标注实战

2.1 构建高质量硬币数据集

数据是深度学习模型的基石。一个优秀的硬币检测数据集应该包含:

  • 不同面额的硬币(如1元、5角、1角等)
  • 多种拍摄角度(正面、侧面、倾斜等)
  • 多样化的光照条件(自然光、室内光、强光、弱光等)
  • 复杂背景(手持、桌面、自动售货机槽等)

推荐使用智能手机配合简易拍摄架采集数据,保持相机与硬币距离约30cm,每枚硬币拍摄10-15张不同角度的照片。实测发现,添加适量运动模糊(模拟自动售货机中运动硬币)能显著提升模型鲁棒性。

2.2 高效标注技巧

使用LabelImg或CVAT等标注工具时,有几个实用技巧:

  1. 标注框应紧贴硬币边缘,保留约1-2像素间隙
  2. 对重叠硬币采用"遮挡标注"策略,即标注可见部分
  3. 为不同面额硬币设置独立类别标签
# 数据集目录结构示例 dataset/ ├── images/ │ ├── train/ │ │ ├── coin_001.jpg │ │ └── ... │ └── val/ │ ├── coin_101.jpg │ └── ... └── labels/ ├── train/ │ ├── coin_001.txt │ └── ... └── val/ ├── coin_101.txt └── ...

2.3 数据增强策略

通过albumentations库实现强数据增强:

import albumentations as A transform = A.Compose([ A.RandomBrightnessContrast(p=0.5), A.GaussNoise(var_limit=(10, 50), p=0.3), A.Rotate(limit=30, p=0.8), A.RandomShadow(p=0.2), A.CoarseDropout(max_holes=10, max_height=20, max_width=20, p=0.3) ], bbox_params=A.BboxParams(format='yolo'))

实测表明,合理的数据增强可使模型准确率提升5-8%,特别是在处理反光、污损硬币时效果显著。

3. YOLOv11模型训练技巧

3.1 环境配置与模型准备

推荐使用Python 3.8+和PyTorch 1.12+环境。安装YOLOv11官方库:

git clone https://github.com/ultralytics/yolov11 cd yolov11 pip install -r requirements.txt

YOLOv11提供了多个预训练模型尺寸:

  • YOLOv11n (nano):2.3M参数,适合嵌入式设备
  • YOLOv11s (small):5.4M参数,平衡型
  • YOLOv11m (medium):13.2M参数,高精度

对于硬币检测,推荐使用YOLOv11s,在精度和速度间取得良好平衡。

3.2 关键训练参数配置

修改data/coins.yaml配置文件:

# 数据集路径 path: ../dataset train: images/train val: images/val # 类别信息 names: 0: 1yuan 1: 5jiao 2: 1jiao

训练命令示例:

python train.py --img 640 --batch 32 --epochs 100 --data data/coins.yaml \ --cfg models/yolov11s.yaml --weights yolov11s.pt --name coin_detection

关键参数说明:

  • --img 640:输入图像尺寸,保持640x640最佳
  • --batch 32:根据GPU显存调整,建议不低于16
  • --epochs 100:硬币检测通常50-100epoch足够
  • --weights yolov11s.pt:加载预训练权重加速收敛

3.3 训练监控与调优

使用TensorBoard监控训练过程:

tensorboard --logdir runs/train

重点关注三个指标:

  1. mAP@0.5:IoU阈值为0.5时的平均精度
  2. precision/recall:精确率与召回率平衡
  3. box_loss:边界框回归损失

当出现过拟合时(训练集指标持续上升但验证集停滞),可尝试:

  • 增加数据增强强度
  • 减小模型尺寸
  • 添加Dropout层
  • 提前停止训练

4. 模型优化与部署实战

4.1 模型量化与加速

使用TensorRT加速推理:

from torch2trt import torch2trt model = torch.load('yolov11s_coin.pt').eval().cuda() data = torch.randn(1, 3, 640, 640).cuda() model_trt = torch2trt(model, [data], fp16_mode=True) torch.save(model_trt.state_dict(), 'yolov11s_coin_trt.pth')

实测表明,FP16量化可使推理速度提升2-3倍,而精度损失小于0.5%。

4.2 边缘设备部署方案

在树莓派4B上部署的完整流程:

  1. 安装必要依赖:
sudo apt install libopenblas-dev libblas-dev cmake libprotobuf-dev pip install onnxruntime opencv-python
  1. 模型转换为ONNX格式:
python export.py --weights yolov11s_coin.pt --include onnx --simplify
  1. ONNX Runtime推理代码示例:
import onnxruntime as ort import cv2 import numpy as np sess = ort.InferenceSession('yolov11s_coin.onnx') img = cv2.imread('test.jpg') img = cv2.resize(img, (640, 640)) img = img.transpose(2, 0, 1).astype(np.float32) / 255.0 outputs = sess.run(None, {'images': img[None]})

在树莓派4B上可实现约3FPS的检测速度,满足实时性要求不高的场景。

4.3 Web服务化部署

使用FastAPI构建REST API:

from fastapi import FastAPI, UploadFile import cv2 import numpy as np app = FastAPI() model = torch.load('yolov11s_coin.pt').eval() @app.post("/detect") async def detect_coin(file: UploadFile): img = cv2.imdecode(np.frombuffer(await file.read(), np.uint8), cv2.IMREAD_COLOR) results = model(img) return {"results": results.pandas().xyxy[0].to_dict()}

启动服务:

uvicorn main:app --host 0.0.0.0 --port 8000

5. 实际应用中的问题解决

5.1 常见问题排查

问题1:模型将硬币反光点误检为小硬币解决方案

  • 增加反光硬币的训练样本
  • 在数据增强中添加眩光模拟
  • 调整NMS阈值(适当提高)

问题2:新旧硬币识别率差异大解决方案

  • 确保数据集中新旧硬币比例均衡
  • 对旧硬币单独设置数据增强(增加划痕、氧化模拟)
  • 考虑将新旧硬币作为不同子类

5.2 性能优化技巧

  1. 多尺度训练:在训练时添加--multi-scale参数,提升对不同距离硬币的检测能力
  2. 动态批处理:部署时根据输入图像尺寸自动调整批处理大小
  3. 缓存优化:对固定场景(如自动售货机)缓存背景图像,减少重复计算

5.3 效果展示与评估

在自建测试集上的性能指标:

模型mAP@0.5推理时间(ms)参数量(M)
YOLOv11n95.2%8.22.3
YOLOv11s98.1%12.55.4
YOLOv11m98.7%21.313.2

实际部署中发现,在自动售货机场景下,系统可实现99.3%的识别准确率,平均处理时间45ms,完全满足实时性要求。对于金融清分场景,通过添加额外的真伪检测模块(基于材质反光特性),可将假币识别率提升至99.8%。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 15:52:11

立知多模态模型实战:如何让搜索结果更精准?

立知多模态模型实战:如何让搜索结果更精准? 1. 引言:为什么“找得到”不等于“排得准” 你有没有遇到过这样的情况:在图文搜索引擎里输入“复古胶片风咖啡馆”,返回了20条结果——其中3张是网红打卡照,5张…

作者头像 李华
网站建设 2026/4/10 14:48:47

5分钟学会树莓派开机自启,测试脚本镜像真实体验分享

5分钟学会树莓派开机自启,测试脚本镜像真实体验分享 你是不是也遇到过这样的问题:树莓派每次重启后,都要手动打开终端、切换目录、运行Python脚本?明明写好了监控程序、传感器采集服务或者Web服务器,却总要多点几下鼠…

作者头像 李华
网站建设 2026/4/10 15:28:35

Lingyuxiu MXJ LoRA镜像免配置:支持LoRA权重增量更新不中断服务

Lingyuxiu MXJ LoRA镜像免配置:支持LoRA权重增量更新不中断服务 1. 为什么你需要一个“不停机换风格”的人像生成引擎? 你有没有遇到过这样的情况:刚跑通一个美感人像模型,正想试试新出的LoRA权重,结果发现——得先停…

作者头像 李华
网站建设 2026/3/31 5:22:29

Qwen-Image-Edit-2511真实反馈:角色身份保持出色

Qwen-Image-Edit-2511真实反馈:角色身份保持出色 你有没有试过给一张合影里的人换衣服,结果发现ta的脸型变了、发型歪了,甚至站姿都像被悄悄“重置”过?或者想把产品图里的LOGO替换成新设计,却眼睁睁看着边缘模糊、比…

作者头像 李华
网站建设 2026/4/5 6:59:42

基于STM32与LabVIEW的直流电机PID调速系统设计与实现

1. 直流电机PID调速系统概述 直流电机作为工业自动化领域的核心执行元件,其转速控制精度直接影响生产效率和产品质量。传统调速方案存在响应慢、超调大等问题,而基于STM32与LabVIEW的PID调速系统通过数字控制与图形化编程的完美结合,实现了高…

作者头像 李华
网站建设 2026/4/5 6:59:40

阿里开源ViT图像分类模型实战:日常物品识别快速上手指南

阿里开源ViT图像分类模型实战:日常物品识别快速上手指南 你是不是也遇到过这样的场景:拍了一张家里常见的物品照片,却不确定它具体叫什么?比如摆在桌角的那款蓝色保温杯,是“真空不锈钢保温杯”还是“便携式运动水壶”…

作者头像 李华