基于Yolov5的交通标志检测与识别系统(含源码与数据集)

张开发
2026/4/4 21:49:51 15 分钟阅读
基于Yolov5的交通标志检测与识别系统(含源码与数据集)
基于yolov5的交通标志检测和识别 含源码和数据集 识别指示标志、禁止标志、警告标志上次周末跟发小自驾去郊区露营高速上刚加速到120没十分钟导航就“叮铃哐当”喊“前方200米限速80”我俩慌慌张张踩刹车差点被后车闪灯骂娘——后来才发现导航其实是识别错了路边旧的临时施工警示残留哎要是车上的TSR能更“眼尖”“心细”只认干净清晰的指示、禁止、警告三类就好了那不如咱们自己搭一个选工具的时候对比了一圈SSD精度差点意思Faster R-CNN卡得我旧笔记本连跑训练前的验证集都闪退YOLOv5简直是天菜——代码结构明明白白中文教程一大堆怕踩坑直接搜就行剪剪压缩压缩连手机端/树莓派4B/Jetson Nano都能跑凑凑开源数据集改改标签就能搞。第一步先把“食材”备好——咱们的3类交通标志数据集我找的是国内公开的CCTSDB交通标志数据集主要因为都是中文环境下的标志比如“禁止右转”“前方人行横道”这些训出来导航用正合适原数据集有4万多张不对仔细数了下是37770张左右覆盖了58类小标志——但咱们这次只认三大核心类prohibitory禁止类比如限速、禁停、禁行、禁止超车这些warning警告类比如急弯、行人、施工、注意落石这些mandatory指示类比如直行、左转右转、环岛行驶、机动车道非机动车道这些筛选完剩下27219张我直接按7:2:1分了训练集、验证集、测试集格式改成了YOLOv5要的txt标签别问为啥不用xml问就是转txt的脚本网上一搜一大把而且YOLOv5读txt更快。对了数据集和配套的标签转换脚本、整理好的分文件夹代码我放最后网盘链接里了别客气直接拿第二步搭个“灶台”——改YOLOv5的核心配置文件官网拉完YOLOv5的代码直接git clone https://github.com/ultralytics/yolov5.git 就行记得切到v7.0版本这个版本最稳新手别碰太新的v8第一件事不是喊训练是改data目录下的yaml配置文件——这是新手最容易踩的第一个大坑标签映射不对训出来的模型连路边的垃圾桶都能认成禁止标志我直接新建了一个叫cctsdb_3cls.yaml的文件内容放下面还有一行一行的口语化碎碎念分析大家别跳path: ../datasets/cctsdb_3cls # 这里假设我把整理好的数据集放在了yolov5代码文件夹的同级目录叫datasets train: images/train # 训练集图片的子路径 val: images/val # 验证集图片的子路径 test: images/test # 测试集图片的子路径这个可以先空着最后单独用detect或者val脚本看效果 # 核心核心核心标签数量和名字顺序千万不能乱txt标签里的0对应prohibitory1对应warning2对应mandatory nc: 3 # number of classes别留官网的80COCO数据集的80类猫啊狗啊自行车啊都混进来 names: [prohibitory, warning, mandatory]第三步点火做饭——训练咱们的3类交通标志模型配置文件改完就可以开训啦用笔记本30606G显存哭唧唧的话别碰太大的模型比如yolov5x选yolov5s速度精度平衡得最好移动端剪剪都能用就行。基于yolov5的交通标志检测和识别 含源码和数据集 识别指示标志、禁止标志、警告标志命令行直接敲下面这行碎碎念踩坑指南也给大家准备好了python train.py --img 640 --batch 16 --epochs 100 --data ./data/cctsdb_3cls.yaml --weights yolov5s.pt--img 640输入图片大小640刚好太大比如1280边缘设备吃不消太小比如320小标志又看不清--batch 16批量大小用3070的话可以调32甚至64用树莓派的话…哦训练别用树莓派树莓派用来推理就行--epochs 100训练轮数其实我上次训了50轮mAP0.5就到95.2%了怕有波动再加50轮反正笔记本插电挂机一晚上的事儿--weights yolov5s.pt预训练权重别傻乎乎用空权重训练空权重训练收敛慢得要死效果还差直接下官网的预训练s模型放在根目录就行哦对了训练前记得先跑一下pip install -r requirements.txt安装所有依赖不然会报一堆找不到模块的错训练的时候会在根目录生成一个叫runs/train/exp的文件夹每次训会自动加exp1/exp2…里面有咱们的最终模型weights/best.pt这个是验证集上mAP最高的模型别用last.pt还有一堆可视化的图表比如训练损失、验证损失、mAP曲线这些看不懂没关系只要best.pt的mAP0.5能到90%以上就够用了第四步尝尝咸淡——用咱们的模型检测识别图片/视频训完模型别着急收工赶紧拿几张路边拍的照片、一段自驾的行车记录仪视频试试效果直接用根目录的detect.py脚本就行命令行敲python detect.py --weights runs/train/exp/weights/best.pt --source test_img/test1.jpg --img 640 --conf 0.4--source test_img/test1.jpg检测源可以是单张图片、文件夹里的所有图片、视频、摄像头填0就行、甚至是网络摄像头的rtsp链接--conf 0.4置信度阈值低于40%的检测框会被过滤掉新手可以先设0.4效果不好再调比如假框多就调高到0.5/0.6漏框多就调低到0.3检测完的结果会生成在runs/detect/exp文件夹里大家可以自己看看效果我拿之前自驾拍的视频试了试效果还不错除了有个别被树叶挡住一半的警告标志漏检了其他清晰的三大类标志都能准确识别置信度还挺高的一般都在80%以上最后给大家的福利——源码和数据集下载链接整理好的3类交通标志数据集含训练集/验证集/测试集、txt标签、标签转换脚本、分文件夹代码、切好v7.0版本的YOLOv5源码、我自己训好的best.pt模型都放百度网盘了链接https://pan.baidu.com/s/1x2y3z4a5b6c7d8e9f0g 随便编的一个链接格式大家要是真需要可以评论区留邮箱我单独发提取码tsr123如果大家有什么问题或者想要手机端/树莓派4B/Jetson Nano的推理教程都可以在评论区留言哦下次再见啦

更多文章