ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于 YOLO11 的道路交通锥视觉识别系统 | 源码实战项目分享

基于 YOLO11 的道路交通锥视觉识别系统 | 源码实战项目分享 基于 YOLO11 的道路交通锥视觉识别系统一套面向道路养护、施工管控与自动驾驶感知场景的交通锥路锥 / 雪糕筒识别方案使用 YOLO11n Streamlit 构建稳定检出施工区、临时占道与隔离区的安全锥辅助安全防护与作业区划设。一、背景1.1 行业痛点交通锥俗称雪糕筒“路锥”是道路施工、临时占道与事故现场最常见的隔离物。围绕它的痛点很集中施工区锥桶巡检靠人眼高速沿线一个标段几十公里、上百枚锥桶人工巡查既慢又难量化是否摆够、是否倾倒自动驾驶感知短板锥桶是 corner case 之一——颜色高饱和、形状特殊、又常出现在非结构化场景传统检测器对倾倒 / 遮挡场景误检率高事故现场态势难还原交警 / 路政事后取证时希望快速统计锥桶分布传统人工标注耗时耗力。本项目用一个轻量、可部署到巡检车 / 路侧抓拍机 / 自驾感知模块的 YOLO11n 模型把识别路面上有几个锥桶、在哪里、姿态如何做成开箱即用的能力。数据集规模 6000 张来自真实交通场景覆盖白天、夜晚、阴天、雨天包含锥桶直立、倾倒、部分遮挡多种状态按 YOLO 格式组织train / valid / test单类nc1[交通锥]。视频演示与源码下载https://www.bilibili.com/video/BV1U1HJ6fExk/包含完整项目源码预训练模型权重️数据集1.2 项目运行效果Web 界面总览道路橙 警示黄主题符合交通行业视觉规范1.3 项目介绍创新点 / 亮点维度说明多场景泛化训练集覆盖高速、城市道路、停车场白天/夜晚/雨天/雾天均匀采样多姿态适应直立 / 倾倒 / 部分遮挡均参与标注不再只对标准锥桶友好单类专精单类 nc1模型只学一件事可大胆做小目标增强、负样本挖掘多源接入巡检车前视相机、施工区抓拍机、自驾感知模块都能复用系统功能概览单张图片识别路面照片 → 标注图 锥桶数量 平均置信度批量图片识别整段路上传后输出全段锥桶分布视频检测行车记录仪 / 巡检车视频逐帧检测 时间线摄像头实时直接接 RTSP / USB 摄像头实时输出技术栈层级技术选型检测模型YOLO11nUltralyticsWeb 框架Streamlit图像处理OpenCV、Pillow数据 / 图表Pandas、Streamlit 原生图表视频编解码imageio-ffmpeg部署Python 3.9本地 / 容器 / Jetson 边缘盒子类别定义nc1names[交通锥]。二、设计框架系统架构┌────────────────────────────────────────────────────────────┐ │ 接入终端巡检车前视相机 │ 施工区抓拍机 │ 自驾感知模块 │ └──────────────────────┬─────────────────────────────────────┘ │ HTTP / RTSP / 文件上传 ┌──────────────────────▼─────────────────────────────────────┐ │ Streamlit App (app/streamlit_app.py) │ │ · 模式路由单图 / 批量 / 视频 / 摄像头 │ │ · 行业品牌渲染project.yaml 驱动 │ │ · 结果分析图 / 明细表 / 导出包 │ └──────────────────────┬─────────────────────────────────────┘ │ model.predict(conf0.25, iou0.7) ┌──────────────────────▼─────────────────────────────────────┐ │ YOLO11n 推理引擎 │ │ Backbone (C2f SPPF) → Neck (FPN PAN) → Decoupled Head │ │ DFL分布式回归 → NMS │ └──────────────────────┬─────────────────────────────────────┘ │ result.boxes (cls, conf, xyxy) ┌──────────────────────▼─────────────────────────────────────┐ │ 后处理单类汇总 → DataFrame → 数量统计 / 置信度分布 │ └────────────────────────────────────────────────────────────┘YOLO11 网络结构Backbone连续Conv C2f下采样 5 次 末端SPPF多尺度池化NeckFPNPAN双向特征金字塔对远处小锥桶和近距离大锥桶同时友好Head解耦头 DFL分布式回归对倾倒锥桶这种非典型长宽比定位更稳损失BCE分类 CIoU DFL回归检测流程图像/帧 → letterbox 缩放至 imgsz640 → 推理 → 置信度过滤conf0.25→ NMSiou0.7→ 单类汇总 → 前端渲染。三、代码结构核心 50 行 解析项目结构道路交通锥识别/ ├── app/streamlit_app.py # Streamlit Web 入口 ├── configs/project.yaml # 业务配置行业 / 场景 / UI ├── model/best.pt # YOLO11n 训练权重 ├── scripts/ # 训练 / 评测 / 导出脚本 ├── 安全锥路锥雪糕筒检测数据集/ # 数据集train/valid/test └── 安全锥路锥雪糕筒目标检测train_CH_yolo11n/ # 训练产物核心 50 行精简版frompathlibimportPathimportpandasaspdimportstreamlitasstimportyamlfromultralyticsimportYOLO PROJECT_ROOTPath(__file__).resolve().parent.parent CONFIG_PATHPROJECT_ROOT/configs/project.yamlMODEL_PATHPROJECT_ROOT/model/best.ptAPP_CFGyaml.safe_load(open(CONFIG_PATH,r,encodingutf-8))APP_METAAPP_CFG.get(app,{})INFERAPP_CFG.get(inference,{})DEFAULT_CONFfloat(INFER.get(conf,0.25))DEFAULT_IOUfloat(INFER.get(iou,0.7))st.cache_resource(show_spinnerFalse)defload_model(model_path:str)-YOLO:returnYOLO(model_path)# 全局缓存避免反复加载definfer_image(model:YOLO,image_path:Path,conf:float):resultmodel.predict(str(image_path),confconf,iouDEFAULT_IOU,verboseFalse)[0]annotatedresult.plot()# 自带画框 类名 置信度rows[]ifresult.boxesisnotNone:forboxinresult.boxes:cls_idint(box.cls.item())rows.append({class_id:cls_id,class_name:result.names[cls_id],# 交通锥confidence:round(float(box.conf.item()),4),x1:float(box.xyxy[0][0]),y1:float(box.xyxy[0][1]),x2:float(box.xyxy[0][2]),y2:float(box.xyxy[0][3]),})returnannotated[:,:,::-1],pd.DataFrame(rows)# BGR - RGB# ---------------- Streamlit 主流程 ----------------st.set_page_config(page_titleAPP_META.get(title),layoutwide)modelload_model(str(MODEL_PATH))confst.sidebar.slider(置信度阈值,0.05,0.95,DEFAULT_CONF,0.05)modest.radio(输入类型,[单张图片,批量图片,视频,摄像头],horizontalTrue)ifmode单张图片:uploadedst.file_uploader(上传路面图片,type[jpg,png,jpeg])ifuploadedisnotNone:tmpPath(/tmp)/uploaded.name tmp.write_bytes(uploaded.getvalue())annotated,dfinfer_image(model,tmp,conf)col1,col2st.columns(2)col1.image(uploaded.getvalue(),caption原图,widthstretch)col2.image(annotated,caption检测结果,widthstretch)st.metric(识别锥桶数量,int(len(df)))ifnotdf.empty:st.metric(平均置信度,f{df[confidence].mean():.2%})st.dataframe(df,widthstretch)逐段解析yaml.safe_load(project.yaml)把inference.conf / inference.iou / app.title全部抽到配置层调超参不用改代码巡检 SaaS 多租户场景极友好。st.cache_resource缓存YOLO(path)Streamlit 每次交互都会重跑脚本缓存避免 200ms 级的模型加载开销让单图响应稳定在 50ms 量级。model.predict一行完成预处理 推理 NMS返回Results.plot()直接生成带标注框的 ndarray免去手画 cv2 矩形的工作量。result.boxes迭代得到cls / conf / xyxy组成 DataFrame单类项目里class_name永远是交通锥但保留字段是为了未来扩展如增加倾倒锥桶、破损锥桶子类。st.radioif/elif路由四种输入模式模型一次加载、四个入口共享。摄像头 / 视频模式只需复用infer_image把帧 ndarray 灌进去即可。四、训练效果训练采用 YOLO11n 预训练权重微调epochs200, imgsz640, batch16, patience50实际跑到 113 epoch 触发早停。best.pt对应的最佳指标指标数值Precision (B)0.786Recall (B)0.691mAP0.50.747mAP0.5:0.950.398说明当前 mAP0.5 ≈ 0.75模型仍在迭代中。从误差分布看主要瓶颈在三个方向远距离小目标高速场景下 50m 外的锥桶在 640×640 输入里只有几像素需要更高分辨率imgsz1280或 P2 检测头倾倒 / 重度遮挡长尾样本不足模型偶尔把倾倒锥桶判成背景夜间反光夜间锥桶反光条会让模型把多个连续锥桶 NMS 误合为一个。下一阶段优化方向imgsz 提到 1280 加入 P2 高分辨率检测头专治远距离小目标使用 Mosaic Copy-Paste 增强长尾倾倒样本训练时混合一定比例的夜间增强数据缓解光照域差升级到 YOLO11s 后量化部署到 Jetson Orin Nano平衡精度与推理速度。由于本阶段 mAP 尚未达到放出 PR / 混淆矩阵的内部阈值≥ 0.85暂仅展示训练 loss / 指标随 epoch 的总览图。从曲线看box / cls / dfl loss 平稳下降P/R 在中后段趋于平台期未出现过拟合震荡整体走势健康。五、项目总结做对了什么一份代码 一份project.yaml可同时跑高速养护、城市施工、自驾感知三种业务配置即业务。数据集采集时刻意覆盖了天气、光照、姿态长尾模型即使没到 SOTA泛化能力也比晴天直立锥桶训练集强不少。Streamlit 多模式入口让算法成果能直接给前线交警 / 路政人员演示缩短从训练完模型到业务方能看见效果的链路。还能怎么做接入巡检车 GPS 时间戳把锥桶检测结果落到地图上做全路段锥桶库存表回答今天 K78 处少了几枚锥桶这种业务问题。上时序跟踪ByteTrack把单帧锥桶串成事件识别锥桶被车撞倒瞬间配合视频取证做交通事故快速复盘。量化到 INT8 部署到 Jetson Orin Nano单帧推理 20ms可直接装到巡检车前视相机里离线也能跑。加入车 / 人 / 锥桶多类同框识别施工区是否有违规闯入。一句话总结YOLO11n Streamlit 给智慧交通领域提供了一个开箱即用、可配置化、可边缘部署的交通锥识别底座无论是高速养护 SaaS、自驾感知补丁还是事故现场快速取证都能在它上面拼装出自己的业务闭环。
返回列表