首页/新闻资讯/正文详情

夜间交通目标检测数据集实战:9000张YOLO标注图像训练与避坑指南

发布时间:2026/9/27 1:44:57 来源:云帆数科 栏目:资讯中心
夜间交通目标检测数据集实战:9000张YOLO标注图像训练与避坑指南
简介这份资源面向夜间场景下的目标检测任务提供约9000张已标注图像及对应标签采用YOLO标注格式适合从事车辆、行人检测的算法工程师与深度学习学习者使用。数据集共包含bicycle、car、dog、person四个类别并已按7:3比例划分训练集与验证集可直接用于模型训练与验证。压缩包内共2000个文件以1999个txt标注文件和1个py脚本为主整体约371.05MB其中txt文件对应各图像的边界框与类别信息py脚本可用于数据预览或格式检查。目前已有34人学习下载。资源配套YOLOv5改进实战内容读者可结合标注数据完成从数据加载、训练到推理的完整流程并参考作者主页中图像分类、图像分割及目标检测网络改进项目快速复现夜间目标检测方案排查标注与训练中的常见问题。1. 夜间交通场景的目标检测数据集9000 张已标注图像能直接跑什么夜间交通场景的目标检测难点从来不在模型结构而在数据。白天数据集里训练出来的 YOLO 模型一到夜间就频繁漏检行人、把车灯反光误判成车辆、把远处路牌当成行人。这份约 9000 张的夜间交通车辆与行人图像目标检测数据集已经按 YOLO 标注格式完成标注覆盖车辆与行人两类核心目标适合直接用于 YOLOv5/v8/v11 乃至 YOLOv26 系列的训练与微调。它解决的是「没有夜间标注数据、自己标成本太高」这个最现实的问题。适合做自动驾驶感知、夜间安防监控、交通流量统计的从业者也适合想跑通 YOLO 训练全流程但缺数据的学生和转行者。拿到手就能拆成 train/val改个 data.yaml 就能开训不用再花两周去标图。2. 拆开这份数据集目录结构、标注格式与类别定义2.1 图像与标签的配对逻辑YOLO 格式的数据集有一个硬性约定每张图像对应一个同名 txt 标签文件放在平行的 labels 目录下。这份数据集约 9000 张图像标签文件数量应当与图像数量一致。常见做法是图像放images/标签放labels/再按train/、val/划分。先别急着训练第一步是核对配对完整性因为缺标签的图像会让训练中途报错或者被静默跳过导致实际参与训练的样本远少于预期。# 统计图像与标签数量确认是否一一对应 find images -type f \( -name *.jpg -o -name *.png \) | wc -l find labels -type f -name *.txt | wc -l # 找出有图像但缺标签的样本血泪经验这一步能省掉后面几小时的排查 for img in images/*.jpg; do base$(basename $img .jpg) [ -f labels/$base.txt ] || echo 缺标签: $img done第一段命令分别统计图像和标签总数两个数字应当相等。第二段逐张检查配对输出缺标签的文件名。参数上注意扩展名如果你的图像是 png把*.jpg换掉。这一步不做训练时 YOLO 会直接忽略没有标签的图像你以为是 9000 张在训实际可能只有 8000 张指标对不上还找不到原因。2.2 YOLO 标注格式逐字段拆解YOLO 的 txt 标签每行代表一个目标格式是类别索引 中心x 中心y 宽度 高度后四个值都是归一化到 0~1 的相对坐标。这一点和 VOC 的绝对像素坐标、COCO 的 JSON 结构完全不同也是很多人转换时翻车的地方。归一化意味着坐标值必须落在 0 到 1 之间一旦出现大于 1 或负数说明标注或转换出了问题。# 校验标签文件检查坐标范围、类别索引、空文件 import os CLASS_NUM 2 # 本数据集为车辆、行人两类按实际类别数修改 bad_files [] for label in os.listdir(labels): path os.path.join(labels, label) if os.path.getsize(path) 0: bad_files.append((label, 空标签文件)) continue with open(path) as f: for i, line in enumerate(f): parts line.strip().split() if len(parts) ! 5: bad_files.append((label, f第{i}行字段数{len(parts)})) continue cls int(parts[0]) coords [float(x) for x in parts[1:]] if cls 0 or cls CLASS_NUM: bad_files.append((label, f第{i}行类别越界:{cls})) if any(c 0 or c 1 for c in coords): bad_files.append((label, f第{i}行坐标越界:{coords})) print(f问题文件数: {len(bad_files)}) for item in bad_files[:20]: print(item)这段脚本遍历所有标签检查三件事文件是否为空、每行是否恰好 5 个字段、类别索引是否在合法范围、坐标是否归一化。CLASS_NUM要按数据集实际类别数改如果这份数据只有车辆和行人就是 2。空标签文件在 YOLO 里是合法的表示该图无目标但如果是标注遗漏导致的空文件就会变成负样本污染训练。坐标越界通常来自转换脚本没做归一化或者标注工具导出时用了像素坐标。2.3 类别分布统计与长尾判断夜间数据集的类别分布往往不均衡车辆多、行人少是常态。训练前统计一下每个类别的目标框数量能预判模型会不会偏向多数类。# 统计各类别目标框数量 from collections import Counter counter Counter() for label in os.listdir(labels): with open(os.path.join(labels, label)) as f: for line in f: if line.strip(): counter[int(line.split()[0])] 1 for cls, cnt in sorted(counter.items()): print(f类别 {cls}: {cnt} 个目标框)如果行人类别只有车辆的十分之一直接训练会让模型对行人召回偏低。常见做法是在 data.yaml 里不额外处理但训练时观察混淆矩阵必要时对行人样本做重采样或加类别权重。这份数据约 9000 张如果行人占比过低夜间行人漏检就是必然结果这不是模型问题是数据分布问题。3. 从零跑通 YOLO 训练环境、配置与启动命令3.1 环境配置与依赖版本选择YOLO 训练的环境坑主要集中在 PyTorch 与 CUDA 版本匹配上。ultralytics 官方包对 torch 版本有要求装错版本会出现CUDA out of memory之外的玄学报错比如 BN 层崩溃、loss 变 NaN。我一般先用 conda 建独立环境再按显卡驱动支持的 CUDA 版本装 torch。# 创建环境并安装依赖以 CUDA 11.8 为例按自己驱动调整 conda create -n yolo_night python3.10 -y conda activate yolo_night pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install ultralytics第一行建 Python 3.10 环境版本太新或太旧都可能和 ultralytics 冲突。第二行激活。第三行装对应 CUDA 11.8 的 torch--index-url指定官方源别用默认源装成 CPU 版。第四行装 ultralytics它自带 YOLOv8/v11 等模型定义和训练入口。装完用python -c import torch; print(torch.cuda.is_available())验证返回 True 才算 GPU 可用。V100 这类卡算力足够但显存 16G 起步batch 别开太大。3.2 data.yaml 的写法与路径陷阱YOLO 训练靠 data.yaml 找数据和类别名。这个文件写错路径是新手最常见的翻车点因为报错信息往往只说找不到文件不告诉你哪个路径错了。# data.yaml path: /home/user/night_traffic # 数据集根目录绝对路径最稳 train: images/train val: images/val nc: 2 names: 0: vehicle 1: pedestrianpath是根目录train和val是相对根目录的路径。很多人把 train 写成绝对路径又和 path 冲突或者 labels 目录没和 images 平行放导致 YOLO 找不到标签。约定是如果 train 指向images/trainYOLO 会自动把路径里的images替换成labels去找标签。所以目录结构必须是images/train和labels/train平行。nc是类别数names的索引必须从 0 开始且和标签里的类别索引一致写反了车辆行人就全错。3.3 启动训练与关键参数含义配置对了就能开训。命令行方式最直接也方便记录参数。yolo detect train \ datadata.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ device0 \ projectruns/night \ nameexp1data指向配置文件model用预训练权重起步夜间数据量不算大从 yolov8n 或 yolov8s 开始比从头训稳。epochs100是常见起点夜间场景收敛可能更慢可以加到 150 观察。imgsz640是标准输入尺寸夜间小目标多的话可以试 960但显存和速度要权衡。batch16在 16G 显存上跑 640 尺寸比较安全爆显存就降到 8。device0指定第一块 GPU。project和name决定结果保存路径方便多次实验对比。训练中重点看mAP50和mAP50-95以及各类别的 P/R行人召回低就回头查数据分布。4. 夜间数据训练避坑五条踩出来的排查记录4.1 训练 loss 变 NaN 或 BN 层崩溃现象训练几个 epoch 后 loss 突然变 NaN或者报 BN 相关错误中断。原因通常是学习率过高、batch 太小导致 BN 统计不稳或者数据里有坐标越界的脏标签。解决先把 batch 提到 16 以上学习率用默认的 0.01 起步别乱调再用第 2.2 节的脚本全量校验标签把越界和空文件清掉。夜间图像对比度低脏标签的破坏比白天更明显。4.2 行人漏检严重、召回上不去现象车辆检测正常行人 mAP 很低夜间远处行人基本检不到。原因多半是行人样本占比过低或者行人框普遍偏小640 输入下特征太弱。解决先统计类别分布确认是否长尾再考虑提高输入尺寸到 960或对行人样本过采样。别一上来就改模型结构数据问题用数据解。4.3 验证集指标虚高但实际推理很差现象val 上 mAP 不错拿真实夜间视频一跑全是误检漏检。原因是 train/val 划分时同一场景、同一时段的图像被分到两边造成数据泄漏。解决按场景或时间段划分别用随机划分。夜间数据集尤其要注意同一路段的连续帧高度相似随机分会让验证集失去意义。4.4 标签类别索引与 names 对不上现象训练不报错但推理时车辆框标成行人。原因是标签里的类别索引和 data.yaml 的 names 顺序不一致或者转换时类别映射写反。解决用第 2.2 节脚本统计标签里出现的类别索引和 names 逐一核对。这类错误不报错但结果全错属于最隐蔽的坑。4.5 显存够却报 CUDA out of memory现象16G 显存跑 batch16 仍爆显存。原因可能是 imgsz 设太大、dataloader 的 workers 过多占用内存、或者没释放上一次训练的缓存。解决先降 batch 或 imgsz再把workers设小训练前torch.cuda.empty_cache()。V100 上跑 640 尺寸 batch16 一般没问题爆了先怀疑尺寸和 workers。5. 进阶用混淆矩阵和验证脚本判断这份数据到底能不能用训练跑通只是第一步判断数据集质量要看混淆矩阵和逐类指标。YOLO 训练结束会在结果目录生成confusion_matrix.png和results.csv。混淆矩阵对角线是正确分类非对角线是错分。夜间场景常见的是行人和车辆互相错分或者背景被误检成目标。如果车辆和行人之间的错分很高说明两类在夜间图像里特征区分度不够可能需要更多样本或更强 backbone。# 用训练好的权重在验证集上单独评估输出逐类指标 yolo detect val \ modelruns/night/exp1/weights/best.pt \ datadata.yaml \ imgsz640 \ device0这条命令加载 best.pt 在 val 上重新评估输出每类的 P、R、mAP50、mAP50-95。重点看行人的 R如果低于 0.5这份数据直接用于夜间行人检测就不够得补样本。imgsz要和训练时一致否则指标不可比。再进一步可以写个脚本把预测结果可视化肉眼确认漏检和误检的具体形态。# 用验证集图像跑推理并保存可视化结果 from ultralytics import YOLO model YOLO(runs/night/exp1/weights/best.pt) results model.predict( sourceimages/val, imgsz640, conf0.25, # 置信度阈值夜间可适当降低看召回 saveTrue, projectruns/vis, nameval_pred ) print(f共处理 {len(results)} 张图像)conf0.25是默认阈值夜间想提高召回可以降到 0.15 看漏检是否减少但误检会上升需要权衡。saveTrue把带框图像存到runs/vis/val_pred。跑完抽几十张看重点看远处行人、车灯反光、路牌这三类夜间高频误检源。如果反光被大量误检成车辆说明数据里这类负样本不足或者标注时把反光也标成了车。我一般拿到一份新数据集不管它标得多好都会先跑一遍配对校验、坐标校验、类别统计再训一个 yolov8n 的小模型看混淆矩阵三步走完才决定要不要投入正式训练。这份约 9000 张的夜间交通数据集如果配对完整、类别分布合理直接微调就能出一个可用的夜间检测基线如果行人占比过低就得先补数据再谈调参。从那以后我每次拿到标注数据都强制走一遍这三步省下的返工时间比标图还多。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

C语言真题卷(2)考点拆解与避坑指南:指针、数组、函数、结构体全解析
C语言真题卷(2)考点拆解与避坑指南:指针、数组、函数、结构体全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 1:44:51

BL350不是芯片型号,而是工业级双核SoC平台代号
BL350不是芯片型号,而是工业级双核SoC平台代号

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 1:44:51

CS117标准解读:军工装备雷电间接效应传导抗扰核心
CS117标准解读:军工装备雷电间接效应传导抗扰核心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 1:44:51

建设信用交通网站省速查手册:3步搞定合规与省钱
建设信用交通网站省速查手册:3步搞定合规与省钱

建设信用交通网站省速查手册:3步搞定合规与省钱 找建站公司怕被坑高价?别急,这份 建设信用交通网站省 的速查手册,能帮你避开90%的隐形收费陷阱。… · 2026/9/27 2:28:02

六大应用场景二:体感手柄;运动监控(WIFI,蓝牙,USB)
六大应用场景二:体感手柄;运动监控(WIFI,蓝牙,USB)

六大应用场景二:体感手柄;运动监控(WIFI,蓝牙,USB) · 2026/9/27 2:27:56

邯郸专业做网站3大技术栈从零搭建成本大比拼
邯郸专业做网站3大技术栈从零搭建成本大比拼

邯郸专业做网站3大技术栈从零搭建成本大比拼 在邯郸做网站,最怕的不是技术难,而是被建站公司忽悠着选了最贵的方案,或者选了最烂的模板。很多老板为了省事,直接找本地服务商,结果花了两万块,做出来的站连百度收录都费劲,更别提转化客户了。这种高价低… · 2026/9/27 2:27:50

C++ 核心进阶:继承详解——从基础语法到菱形继承与虚继承
C++ 核心进阶:继承详解——从基础语法到菱形继承与虚继承

文章目录前言一、继承的基本概念二、继承的基本语法三、三种继承方式1. 基类成员本身的访问权限2. 派生类采用的继承方式3.1 public 继承3.2 protected 继承3.3 private 继承3.4 private 成员到底有没有被继承?四、class 和 struct 的默认继承方式五、继承类模板六、… · 2026/9/27 2:27:49

MySQLTuner-perl 参考资料库:MySQL / MariaDB / Percona 官方文档、工程博客与专家深读指南
MySQLTuner-perl 参考资料库:MySQL / MariaDB / Percona 官方文档、工程博客与专家深读指南

数据库运维 【免费下载链接】MySQLTuner-perl MySQLTuner is a script written in Perl that will assist you with your MySQL configuration and make recommendations for increased performance and stability. 项目地址: https://gitcode.com/gh_mirrors/my/My… · 2026/9/27 2:27:25

重庆潼南网站建设报价3个实战案例拆解域名坑
重庆潼南网站建设报价3个实战案例拆解域名坑

重庆潼南网站建设报价3个实战案例拆解域名坑 域名服务器搞不懂,是绝大多数老板在咨询重庆潼南网站建设报价时最头疼的事。很多客户拿着“5000块全包”的低价单来问我,结果一聊才发现,连域名解析和服务器IP对应关系都理不清。这种信息差,往往是后期… · 2026/9/27 2:27:25

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码