交通标志在图像中往往只占几十个像素,属于典型的小目标检测难题。今天用YOLO训练一个能识别限速、转弯、禁停标志的模型,并分享专治小目标的3个绝招。
哈喽,这里是 YOLO模型仓库。
如果你觉得安全帽检测太简单,想挑战更高难度——交通标志识别是绝佳的进阶项目。远处小小的限速牌,YOLO能不能精准框住?当然能,但需要一些特殊技巧。
今天我就把小目标检测的调优秘籍全盘托出,并附赠一个可用的交通标志数据集。
🧭 今天你将学到
1️⃣ 如何处理小目标(增大输入分辨率、多尺度训练)2️⃣ 针对小目标的数据增强策略3️⃣ 修改YOLO锚框尺寸4️⃣ 一个完整的交通标志识别项目
🚦 一、数据集:TT100K(公开数据集)
我们使用公开的TT100K(Tsinghua-Tencent 100K) 数据集的一个精简版,包含6种常见标志:
数据集特点:
🎯 二、小目标检测的3个绝招
绝招1:增大输入分辨率(imgsz)
YOLO默认训练尺寸640×640,对于小目标不够。我们提升到1280×1280。
yolo train data=traffic.yaml model=yolov8n.pt imgsz=1280 epochs=100
注意:分辨率提高会消耗更多显存。如果显存不够,可以降低batch size。
绝招2:多尺度训练(multi-scale)
让模型每10个epoch随机在0.5~1.5倍原尺寸之间切换,迫使模型适应不同尺度的目标。
# 在配置文件中multi_scale: Truescale: 0.5
绝招3:针对小目标调整锚框(autoanchor)
YOLO会自动聚类锚框,但对小目标可能不够细。可以手动指定更小的锚框:
anchors: - [10,13, 16,30, 23,42] # 小目标 - [30,61, 45,89, 60,120] # 中目标 - [90,180, 150,250, 300,400] # 大目标
使用autoanchor命令重新计算:
yolo check anchors data=traffic.yaml imgsz=1280
额外技巧:复制粘贴小目标(Copy-Paste)
把小目标从一张图复制到另一张图,增加密度。YOLO内置了copy_paste参数:
copy_paste: 0.5
📈 三、训练结果对比
🚗 四、部署到行车记录仪视频
训练好的模型可以直接用来处理行车记录仪视频:
from ultralytics import YOLOimport cv2model = YOLO('best_traffic.pt')cap = cv2.VideoCapture('road.mp4')while cap.isOpened(): ret, frame = cap.read() if not ret: break results = model(frame, imgsz=1280, conf=0.3) # 小目标降低置信度阈值 annotated = results[0].plot() cv2.imshow('Traffic Sign Detection', annotated) if cv2.waitKey(1) & 0xFF == ord('q'): break
🎁 文末福利
我打包了 《交通标志识别项目包》 ,包含:
✅ TT100K精简版数据集(6类,1000张)✅ 训练好的YOLOv8n模型(小目标优化版,mAP 0.88)✅ 小目标检测调优配置文件✅ 行车记录仪视频测试样例✅ 完整训练日志和曲线
领取方式:👉 关注公众号 YOLO模型仓库👉 后台回复关键词 【交通标志项目】👉 自动获取网盘链接,免费下载!
⏰ 限时福利:前30名回复的读者,额外赠送 《YOLO小目标检测论文合集》 + 20个实战技巧。
📌 明天预告
明天:《YOLOv5/v8/11/26怎么选?一张表终结你的选择困难》把四个主流版本的差异一次性讲透,附选型决策树。
评论区聊聊:你在小目标检测上遇到过什么坑?点赞最高的3位,送 《YOLO调参速查表》 纸质版!
—— 小目标不难,难的是你还没掌握这些技巧 ——
💡 点击下方名片关注 YOLO模型仓库,每周解锁一个新技能。