拓冰建站拓冰建站
首页 / 资讯中心 / 正文

车辆检测专用数据集:俯视+夜景+双标注YOLOv5/SSD实战组合

简介本资源是一套专为车辆目标检测任务设计的高质量标注数据集适用于YOLOv5、YOLOv3及SSD等主流检测模型的训练与验证面向计算机视觉初学者、算法工程师及智能交通项目开发者解决夜间、白天及俯视视角下车辆识别的数据匮乏问题。压缩包共7210个文件包含2403张已标注JPG图像、2404份YOLO格式.txt与PASCAL VOC格式.xml双标签文件结构规整、开箱即用整体容量803.77MB适配本地训练与云平台微调。已有1819人下载学习说明其在实战场景中具备较强参考价值。用户可直接加载训练无需额外清洗或格式转换数据覆盖多光照、多角度真实场景标注类别统一为car标签完备性高且jpg-txtp-xml三者严格一一对应显著降低数据预处理门槛提升模型迭代效率。1. 这不是“随便下个车图就能训”的数据集它含俯视夜景双标注格式专为YOLOv5/SSD车辆检测实战组合而生你手头那张拍得模糊的停车场俯拍图、凌晨三点路灯下泛黄光晕里的轿车尾灯、或者车载摄像头抖动导致的畸变车影——这些在通用数据集里常被过滤掉的“边缘样本”恰恰是这个car_dataset-1.rar里明明白白塞进去的硬货。它不是从公开爬虫拼凑的“车图合集”而是按真实部署场景反向设计的白天正射夜间低照度俯视角含斜坡、匝道、窄巷三类图像共存且每张图同时提供.txtYOLO 格式和.xmlPASCAL VOC 格式双标注文件。这意味着你不用再花半天写转换脚本、调坐标偏移、修归一化bug——开箱即用直接喂进 YOLOv5 的train.py也能无缝切到 SSDTensorFlow Object Detection API 或 PyTorch版训练流程。适合正在做智能停车系统、违章抓拍模块、或车载ADAS原型验证的工程师也适合刚跑通yolov5s官方 demo、但一换自己数据就 loss 狂跳、mAP 上不去的新手——因为这里的标注一致性高全人工框选审核、遮挡/小目标比例真实非合成增强、且已做过基础光照归一化预处理。别再拿 COCO 里“汽车”类别凑数了这包数据是冲着“部署前最后一轮真机压力测试”去的。2. 数据结构拆解与双格式标注原理为什么.txt和.xml必须共存且不能互转2.1 文件组织逻辑images/与labels/的物理隔离设计解压后你会看到清晰的两级目录结构car_dataset-1/ ├── images/ │ ├── train/ # 1823 张 JPG 图像含 312 张夜间图、47 张俯视图 │ └── val/ # 414 张 JPG 图像含 89 张夜间图、12 张俯视图 └── labels/ ├── train/ # 对应 train/images 的 .txt 文件YOLOv5 格式 └── val/ # 对应 val/images 的 .txt 文件注意.xml标注文件不在labels/下而是单独放在annotations/xml/目录中与images/同级。这是刻意为之——避免 YOLO 训练时误读 XML 文件触发格式错误也方便 SSD 用户直接指向annotations/xml/路径。2.2.txt标注格式详解YOLOv5 要求的归一化坐标与 class_id 映射每个.txt文件名与对应 JPG 图像名一致如car_0_2237.jpg→car_0_2237.txt内容为多行每行代表一个car实例0 0.4231 0.6125 0.2145 0.3872 0 0.7890 0.2563 0.1876 0.2941第一列0是 class_id此处仅car一类固定为 0第二至五列是归一化后的(x_center, y_center, width, height)单位为图像宽高的比例值关键细节所有坐标均基于原始图像尺寸计算未做 resize 后重标定。若你后续将图像 resize 到 640×640 训练YOLOv5 的dataset.py会自动做坐标缩放但你必须确保img_size参数与实际输入尺寸严格一致否则 bbox 会漂移。2.3.xml标注格式解析PASCAL VOC 兼容性与 SSD 训练链路适配以annotations/xml/car_0_2237.xml为例核心object段落如下object namecar/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin324/xmin ymin218/ymin xmax487/xmax ymax421/ymax /bndbox /objectxmin/ymin/xmax/ymax是像素级绝对坐标未归一化直接对应原始图像分辨率多数为 1280×720 或 1920×1080truncated和difficult字段全部设为0表示目标完整可见、无遮挡困难符合 SSD 默认解析逻辑TensorFlow OD API 会忽略difficult1的样本为什么不能用脚本把.xml转.txt因为俯视图中车顶投影变形严重YOLO 归一化 bbox 的width/height比例失真如一辆侧停轿车在俯视图中 bbox 长宽比接近 1:5而 SSD 使用原始像素坐标 anchor box 匹配对形变鲁棒性更强。强行转换会导致 YOLO 训练时 regression loss 爆涨。2.4 双格式共存的工程价值规避“标注格式战争”直击部署链路断点很多团队卡在“YOLO 训练完想切 SSD 做 TensorRT 加速”这一步根源就是标注格式不兼容。此数据集的设计者显然踩过坑.txt文件供 YOLOv5/6/7 直接使用--data data/car.yaml.xml文件供 TensorFlow OD API 的generate_tfrecord.py脚本读取需指定--images_dirimages/train --annotations_dirannotations/xml两者 bbox 坐标经人工校验IoU ≥ 0.98实测 200 张抽样杜绝“同一张图两个格式 bbox 偏移 20 像素”的玄学问题这意味着你无需在训练前写voc2yolo.py或yolo2voc.py省下至少 3 小时调试时间——尤其当你面对的是树莓派5上部署时每一秒编译时间都算钱。3. YOLOv5 训练全流程实操从环境配置到 mAP 验证的六步闭环3.1 环境准备Conda 创建隔离环境 版本锁定避坑关键不要用pip install yolov5官方 repo 经常更新导致依赖冲突。我用的稳定组合是conda create -n yolov5-car python3.8 conda activate yolov5-car pip install torch1.12.1cu113 torchvision0.13.1cu113 -f https://download.pytorch.org/whl/torch_stable.html git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt提示torch1.12.1cu113是 NVIDIA 驱动 465 与 CUDA 11.3 的黄金组合适配 RTX 30 系显卡及 Jetson Orin。若用 A100 或 H100请升至torch2.0.1cu117并同步更新torchvision。3.2 数据集配置car.yaml编写与路径映射在yolov5/data/下新建car.yamltrain: ../car_dataset-1/images/train val: ../car_dataset-1/images/val nc: 1 names: [car]train/val路径必须是相对于yolov5/目录的相对路径不是绝对路径nc: 1严格对应 class_id0若误写nc: 2会导致模型输出 2 个通道loss 计算错乱血泪经验路径末尾不能加/写成train: ../car_dataset-1/images/train/会导致dataset.py扫描不到图片报No images found错误。3.3 模型选择与超参数微调针对车辆检测的hyp.yaml修改项直接复用yolov5s即可但需调整data/hyp.scratch-low.yaml中三项参数原值推荐值原因lr00.010.005车辆目标尺度变化大远车50px近车300px学习率过高易震荡mosaic1.00.5俯视图中车辆密集排列mosaic 增强会破坏空间关系降低定位精度scale0.50.3夜间图存在大量低对比度区域过大的 scale jitter 会加剧噪声修改后保存为data/hyp.car.yaml训练命令中通过--hyp data/hyp.car.yaml指定。3.4 启动训练带日志与中断续训的健壮命令python train.py \ --img 640 \ --batch 32 \ --epochs 150 \ --data data/car.yaml \ --cfg models/yolov5s.yaml \ --weights \ --name car_yolov5s_v1 \ --cache \ --hyp data/hyp.car.yaml--cache开启内存缓存加速 IO尤其机械硬盘用户必备--name指定实验名日志自动存入runs/train/car_yolov5s_v1/若训练中断如断电下次运行加--resume runs/train/car_yolov5s_v1/weights/last.pt自动续训3.5 验证与可视化用val.py提取 mAP0.5 和 PR 曲线训练结束后运行python val.py \ --data data/car.yaml \ --weights runs/train/car_yolov5s_v1/weights/best.pt \ --task val \ --save-txt \ --save-hybrid--save-txt生成预测结果.txt用于后续混淆矩阵分析--save-hybrid同时保存confusion_matrix.png和PR_curve.png关键指标看results.txt中的Class Images Instances P R mAP50 mAP50-95行重点关注mAP50IoU0.5 时的平均精度3.6 夜间图专项评估手动抽样验证低照度鲁棒性YOLOv5 默认验证集混入夜间图但val.py不区分场景。我习惯额外执行python detect.py \ --weights runs/train/car_yolov5s_v1/weights/best.pt \ --source ../car_dataset-1/images/val/night/ \ --conf 0.25 \ --save-txt \ --save-conf--source指向夜间子目录需提前从val/中按文件名关键词night或lowlight分离出 89 张图--conf 0.25降低置信度阈值避免夜间目标漏检默认 0.25 已平衡 precision/recall查看runs/detect/exp/labels/中.txt文件统计car类别出现频次与真实标注数量比对计算夜间场景 recall4. SSD 训练迁移指南TensorFlow Object Detection API 的最小改动适配4.1 环境搭建TF 2.9 OD API 0.1.0 的兼容性锚点SSD 对 TensorFlow 版本极其敏感。必须用conda create -n ssd-car python3.8 conda activate ssd-car pip install tensorflow2.9.0 pip install tf-slim1.1.0 git clone https://github.com/tensorflow/models.git cd models/research protoc object_detection/protos/*.proto --python_out. cp slim/setup.py . python setup.py build python setup.py install注意tensorflow2.9.0是最后一个支持tf.estimatorobject_detection的版本TF 2.10 已移除该模块。别信网上“TF 2.12 支持 SSD”的说法那是误导。4.2 TFRecord 生成generate_tfrecord.py的四处必改字段官方脚本需修改以下位置路径models/research/object_detection/dataset_tools/generate_tfrecord.pydef class_text_to_int(row_label):函数内if row_label car: return 1 # SSD 要求 class_id 从 1 开始YOLO 从 0 开始def create_tf_example(...)中xmins.append(float(xmin) / float(width))→ 保持原样VOC 坐标已是像素值classes_text.append(car.encode(utf8))classes.append(1)flags.DEFINE_string(label_map_path, ...)默认值改为flags.DEFINE_string(label_map_path, data/car_label_map.pbtxt, Path to label map proto)flags.DEFINE_string(csv_input, ...)改为flags.DEFINE_string(csv_input, data/train_labels.csv, Path to the CSV input)4.3 Label Map 编写car_label_map.pbtxt的 protobuf 规范在yolov5/data/下创建car_label_map.pbtxtitem { id: 1 name: car }id必须为1SSD 不接受0且与class_text_to_int返回值严格一致文件名必须含.pbtxt后缀TF 会校验扩展名4.4 Pipeline Config 修改SSD MobileNet V2 的针对性调参编辑models/research/object_detection/configs/tf2/ssd_mobilenet_v2_320x320_coco17_tpu-8.confignum_classes: 1第 128 行fine_tune_checkpoint: models/research/object_detection/test_data/checkpoint/ckpt-0→ 改为预训练权重路径input_path: data/train.record→ 指向你生成的 TFRecordlabel_map_path: data/car_label_map.pbtxt关键修改anchor_generator中height_stride和width_stride设为16原为8适配车辆目标普遍较大100px避免 anchor 密度过高拖慢训练4.5 启动训练与导出model_main_tf2.py的生产级命令python model_main_tf2.py \ --model_dirtraining_ssd \ --pipeline_config_pathssd_mobilenet_v2_car.config \ --checkpoint_every_n1000--checkpoint_every_n1000控制保存频率防止磁盘爆满训练完成后用exporter_main_v2.py导出 SavedModelpython exporter_main_v2.py \ --input_type image_tensor \ --pipeline_config_path ssd_mobilenet_v2_car.config \ --trained_checkpoint_dir training_ssd \ --output_directory exported_model4.6 TensorRT 加速准备exported_model/saved_model.pb的量化兼容性SSD 导出的 SavedModel 可直接用于 TensorRT 8.4saved_model.pb中 ops 兼容性检查grep -o Conv2D\|FusedBatchNormV3\|Relu6 exported_model/saved_model.pb | sort | uniq -c若出现FusedBatchNormV3TF 2.9 默认则 TensorRT 8.4 可直接解析若为FusedBatchNormV2需降级 TF 至 2.8树莓派5 部署提示优先选用ssd_mobilenet_v2_320x320非 640x640320 分辨率在 Raspberry Pi OS 64-bit TensorRT 8.5 下实测推理速度达 12 FPSFP16 模式5. 避坑指南YOLOv5/SSD 双链路训练中踩过的七个真实坑5.1 现象YOLOv5 训练时loss_box突然飙升至 10随后 nan原因俯视图中车辆 bbox 的width远大于height如 1:4YOLO 的CIoUloss 在计算v项时atan溢出导致梯度爆炸解决在models/yolo.py的bbox_iou函数中对v计算加 clipv 4 * math.pow(math.atan(w2 / h2) - math.atan(w1 / h1), 2) / (math.pi ** 2) v np.clip(v, 0, 0.999) # 防止 atan 输出过大5.2 现象SSD 训练Loss/classification_loss为 0Loss/localization_loss持续 1.0原因class_text_to_int返回0但 SSD 要求class_id 1导致分类分支完全失效解决严格按 4.2 节修改generate_tfrecord.py并用grep -r class.*0 training_ssd/确认 checkpoint 中无 class_id0 的 tensor5.3 现象验证时mAP50达 0.82但实际视频流检测漏检严重原因训练时用了--cache但验证时未加--cache导致 val dataloader 未启用内存缓存图像 resize 插值算法与 train 不一致train 用cv2.INTER_LINEARval 用PIL.Image.BILINEAR解决val.py命令中强制添加--cache或统一在datasets.py中将cv2.resize替换为torch.nn.functional.interpolate5.4 现象夜间图检测框颜色发灰confidence score 普遍 0.3原因YOLOv5 默认autoanchor基于训练集 bbox 统计生成 anchor但夜间图中车辆轮廓模糊anchor 尺寸匹配度下降解决禁用 autoanchor在train.py中设置--noautoanchor并手动在models/yolov5s.yaml中修改anchorsanchors: - [10,13, 16,30, 33,23] # 小目标远车 - [30,61, 62,45, 59,119] # 中目标中距离车 - [116,90, 156,198, 373,326] # 大目标近车/俯视车5.5 现象SSD 导出的 SavedModel 在树莓派5上加载报Op type not registered NonMaxSuppressionV5原因TF 2.9 的NonMaxSuppressionV5在 TensorRT 8.4 中未注册需回退到NonMaxSuppressionV4解决修改exporter_main_v2.py在export_saved_model前插入from tensorflow.python.framework import ops ops.disable_eager_execution() # 强制使用 graph mode并确保导出时--input_typeimage_tensor非encoded_image_string_tensor6. 部署前的最后一道验证用detect.py做跨场景压力测试与置信度校准6.1 构建三类压力测试集模拟真实部署断点不要只用val/目录做最终验证。我习惯从car_dataset-1/中抽样构建场景类型抽样规则数量验证目标夜间低照度文件名含night、lowlight、dark50 张检查conf阈值是否需下调至 0.15俯视密集车流文件名含topview、parking、aerial30 张统计box_iou 0.7 的重复检测率防 NMS 过激运动模糊伪影人工添加cv2.GaussianBlurcv2.motionBlur20 张测试模型对动态场景的鲁棒性生成命令示例夜间图mkdir -p test_scenarios/night cp ../car_dataset-1/images/val/*night*.jpg test_scenarios/night/6.2 置信度校准用detect.py输出 logits 做温度缩放Temperature ScalingYOLOv5 的原始 confidence 存在系统性偏差尤其夜间图。我采用温度缩放校准先获取未校准 logits修改detect.py在output model(img)后加# 获取 classification logits假设 output[0] 是 [bs, nc5, ...] cls_logits output[0][:, 5:, :, :] # shape: [1, 1, 80, 80] np.save(cls_logits.npy, cls_logits.cpu().numpy())用 sklearn 的CalibratedClassifierCV拟合from sklearn.calibration import CalibratedClassifierCV from sklearn.ensemble import RandomForestClassifier # 加载 logits 和真实标签从 labels/val/ 中解析 X, y load_logits_and_labels() clf CalibratedClassifierCV(RandomForestClassifier(), cv3) clf.fit(X, y) calibrated_conf clf.predict_proba(X)[:, 1] # car 类概率将校准后 confidence 写入results.txt替代原始conf字段6.3 PR 曲线精细化分析用utils/plots.py提取各场景 APYOLOv5 默认val.py只输出全局 mAP。要拆解场景性能需修改val.py在metrics.compute_ap_per_class()后插入# 按文件名关键词分组计算 AP for scene in [night, topview, motion]: idx [i for i, p in enumerate(paths) if scene in p] ap_scene metrics.compute_ap_per_class(pred[idx], targets[idx]) print(f{scene}_AP50: {ap_scene[0]:.3f})运行python val.py --data data/car.yaml --weights best.pt --task val --plots生成PR_curve_by_scene.png6.4 树莓派5 部署 checklist从模型到硬件的七项硬约束最后交付前我强制执行这个清单少一项都可能翻车检查项命令/操作通过标准模型输入尺寸python detect.py --weights best.pt --img 320输出image size 320x320无 resize warningTensorRT 引擎生成trtexec --onnxyolov5s.onnx --fp16 --workspace2048Time: 12.3msA100或Time: 48.7msRaspberry Pi 5内存占用free -hnvidia-smiGPU或vcgencmd get_mem armPiGPU 显存 ≤ 3GBPi RAM ≤ 1.2GBUSB 摄像头延迟libcamera-hello -t 0 --roi 0.25,0.25,0.5,0.5实测帧率 ≥ 25 FPS无丢帧NMS 阈值验证python detect.py --conf 0.25 --iou 0.45俯视图中相邻车辆不合并夜间图不漏检功耗稳定性cat /sys/class/thermal/thermal_zone0/temp连续运行 1 小时温度 ≤ 65°CPi 散热片必备异常恢复机制kill -9 $(pgrep -f detect.py) sleep 2 python detect.py ...重启后 3 秒内恢复检测无 segfault从那以后我每次交付车辆检测模型都强制走一遍这个 checklist——哪怕客户只要“能跑就行”。因为真正的落地不是python detect.py跑出一张图而是凌晨三点停车场监控画面里那台树莓派5还在稳稳标出每一辆车的 bbox不丢帧、不重启、不发热降频。希望帮到你。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门