ARTICLE DETAIL

资讯详情

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

无人机航拍车辆检测数据集:1000张图与YOLO11训练全解析

无人机航拍车辆检测数据集:1000张图与YOLO11训练全解析 简介这份资源面向无人机场景下的车辆检测任务提供1000张真实航拍高质量图片覆盖城市道路行驶车辆、道边停车、停车场、小区车辆以及车辆遮挡与严重遮挡等多种复杂场景类别划分为轿车car、货车van和巴士bus三类适合目标检测项目实战与通用车辆检测数据集补充。资源包为1个PDF文件约2MB内附数据集基本情况介绍与获取方式标注采用labelimg完成质量较高并同步提供VOC(xml)、COCO(json)、YOLO(txt)三种主流格式标签可直接投入YOLO等算法训练。此外还附赠YOLO11一键训练脚本支持GPU(GPUs)、CPU及Mac(M芯片)多平台方案并给出博主训练结果日志供参考。目前已有261人学习下载适合需要快速搭建无人机车辆检测基线、验证模型效果或扩充训练数据的开发者与研究者。1. 无人机视角下的车辆检测这份 1000 张图的数据集到底能不能直接开训做无人机视觉项目的同行大概率都遇到过这个尴尬算法框架搭好了模型结构也调通了结果卡在数据上——公开的车辆检测数据集要么是车载视角BDD100K 那种要么是固定监控视角真正从空中俯拍、带遮挡、带小区和停车场场景的标注数据少得可怜。这份无人机场景车辆检测数据集就是冲着这个缺口来的1000 张真实航拍图标注覆盖 car、van、bus 三个类别同时给出 VOC、COCO、YOLO 三种标签格式还附了一套 YOLO11 的一键训练脚本GPU、CPU、MacM 芯片三平台都能跑。它适合两类人一是手头有无人机车辆检测需求、想快速验证模型效果的工程师二是想拿一份格式齐全的数据集练手 YOLO11 全流程的新手。下面我按「数据长什么样 → 怎么转怎么训 → 坑在哪」的顺序拆一遍。2. 数据集结构与三种标签格式先搞清楚你拿到的是什么2.1 图像场景分布与类别定义这份数据的核心价值在于场景多样性。1000 张图不是从一个视频里抽帧凑出来的而是覆盖了城市道路行驶车辆、道边停车、停车场、小区内部道路以及车辆遮挡和严重遮挡这几类典型无人机作业场景。遮挡样本在航拍数据里特别关键——无人机飞到一定高度后树冠、建筑边缘、其他车辆都会造成部分遮挡如果训练集里全是干净目标模型一到真实场景就翻车。类别只有三个轿车 car、货车 van、巴士 bus。这个划分粒度是有讲究的。航拍视角下车辆尺寸本来就小如果类别再细分到 SUV、皮卡、面包车这个级别标注一致性和模型区分度都会崩。三个大类是在「够用」和「可训」之间取的平衡点。需要提醒的是van 这个类在标注时容易和大型 SUV 混淆尤其是俯拍角度下车型特征被压缩这是这份数据在使用时需要留意的边界。2.2 VOC、COCO、YOLO 三种格式的对应关系三种格式本质上是同一批标注的不同序列化方式理解它们的差异能帮你少走弯路。VOC 用 XML 存每个目标一个object节点坐标是左上角和右下角的绝对像素值COCO 用单个 JSON 存所有图坐标是[x, y, width, height]的绝对像素YOLO 用每图一个 txt坐标是归一化后的[x_center, y_center, width, height]值域 0 到 1。格式文件组织坐标类型类别字段典型用途VOC每图一个 xml绝对像素 xyxyname 字符串labelImg 原生、部分老框架COCO单个 json绝对像素 xywhcategory_id 整数mmdetection、COCO 评测YOLO每图一个 txt归一化 xywhclass_id 整数Ultralytics YOLO 系列这里有个高频踩坑点YOLO 格式的 class_id 是从 0 开始的而 COCO 的 category_id 官方习惯从 1 开始。如果你自己写转换脚本把 COCO 转 YOLO忘了减 1训练时类别会整体错位模型把 bus 学成 carloss 还降得挺好看最后推理结果全是错的。这份数据既然三种格式都给了建议直接用对应的格式别自己转。2.3 校验数据集完整性的实操步骤拿到数据先别急着训花十分钟做一次完整性校验能省掉后面几小时的排查。下面这段脚本检查图像和标签是否一一对应、YOLO 标签的坐标是否越界、类别 id 是否超出范围。import os import glob img_dir images/train lbl_dir labels/train img_files glob.glob(os.path.join(img_dir, *.jpg)) missing, bad_coord, bad_cls [], [], [] for img_path in img_files: stem os.path.splitext(os.path.basename(img_path))[0] lbl_path os.path.join(lbl_dir, stem .txt) if not os.path.exists(lbl_path): missing.append(stem) continue with open(lbl_path) as f: for line in f: parts line.strip().split() if len(parts) ! 5: continue cls_id int(parts[0]) coords [float(x) for x in parts[1:]] # 类别 id 应在 0-2 之间 if cls_id 0 or cls_id 2: bad_cls.append((stem, cls_id)) # 归一化坐标应在 0-1 之间 if any(c 0 or c 1 for c in coords): bad_coord.append(stem) print(f图像总数: {len(img_files)}) print(f缺失标签: {len(missing)} - {missing[:5]}) print(f类别越界: {len(bad_cls)} - {bad_cls[:5]}) print(f坐标越界: {len(bad_coord)} - {bad_coord[:5]})逻辑说明先按文件名 stem 匹配图像和标签这是 YOLO 数据集的基本约定stem 对不上训练时直接报找不到标签。然后逐行解析 txt检查类别 id 和归一化坐标的范围。参数上img_dir和lbl_dir按你实际的目录结构改如果图像是 png 就把 glob 的后缀换掉。跑完如果 missing 不为零说明有图没标或者文件名不匹配这种样本训练时会被跳过量大了会影响类别均衡建议先处理掉。3. YOLO11 一键训练脚本三平台怎么跑、参数怎么改3.1 环境准备与依赖安装一键脚本的前提是环境别拖后腿。YOLO11 走的是 Ultralytics 那套核心依赖就一个ultralytics包但它对 PyTorch 版本有要求。三平台的差异主要在这里GPU 平台NVIDIA 显卡需要先装好对应 CUDA 版本的 PyTorch再装 ultralytics。CPU 平台最省事直接 pip 装就行但训练速度会慢到让你怀疑人生1000 张图跑几十个 epoch 可能要几个小时。Mac 的 M 芯片走 MPS 后端PyTorch 从 1.12 之后原生支持不需要额外配 CUDA但要注意部分算子在小模型上可能有兼容问题。# 通用安装GPU 平台请先按官方指引装好 CUDA 版 torch pip install ultralytics # 验证环境是否识别到加速设备 python -c import torch; print(CUDA:, torch.cuda.is_available()); print(MPS:, torch.backends.mps.is_available())这段命令先装 ultralytics再用一行 Python 确认当前环境能用的加速后端。如果 CUDA 和 MPS 都返回 False说明你在用纯 CPU 跑训练前最好确认一下是不是装错了 torch 版本。GPU 平台如果torch.cuda.is_available()是 False九成是 pip 装成了 CPU 版 torch需要去 PyTorch 官网按 CUDA 版本重新装。3.2 data.yaml 配置与一键训练命令YOLO11 训练靠一个 data.yaml 描述数据集路径和类别这是整个流程的入口。这份数据的三类结构对应如下配置# data.yaml path: ./drone_vehicle_dataset # 数据集根目录 train: images/train # 训练集图像相对路径 val: images/val # 验证集图像相对路径 nc: 3 # 类别数 names: # 类别名顺序必须和 class_id 对应 0: car 1: van 2: buspath是根目录train和val是相对path的子路径Ultralytics 会自动去对应的 labels 目录找同名 txt。names的顺序千万不能乱class_id 0 必须对应 car这是和标注文件绑死的。如果你把顺序写反了模型学出来的类别全是错的。配置好之后一键训练命令长这样# GPU 训练 yolo detect train datadata.yaml modelyolo11n.pt epochs100 imgsz640 batch16 device0 # Mac M 芯片训练 yolo detect train datadata.yaml modelyolo11n.pt epochs100 imgsz640 batch8 devicemps # 纯 CPU 训练仅建议小规模验证 yolo detect train datadata.yaml modelyolo11n.pt epochs100 imgsz640 batch4 devicecpu参数逐个说modelyolo11n.pt是 nano 版本1000 张图这个量级用 n 或 s 就够了别一上来就上 l 或 x过拟合风险高还慢。epochs100是常见起点数据量小可以适当加到 150 到 200。imgsz640是输入分辨率航拍小目标如果检测效果差可以提到 1024但显存占用会翻倍。batch按显存调GPU 上 16 起步Mac 上 8 比较稳CPU 上 4 就够。device就是前面验证过的加速后端。3.3 训练日志解读与关键指标训练跑起来后控制台会刷一堆指标新手容易看花眼。重点盯三个box_loss、cls_loss和mAP50。box_loss 是边界框回归损失cls_loss 是分类损失两个都应该随 epoch 稳定下降。如果 box_loss 降到某个值就不动了可能是学习率需要调如果 cls_loss 震荡厉害多半是类别不均衡或者标注有噪声。mAP50 是 IoU 阈值 0.5 下的平均精度这是判断模型好坏的直接指标。1000 张图、三个类别的航拍数据mAP50 能到 0.7 以上就算可用0.8 以上算不错。如果 mAP50 一直上不去但 loss 在降检查验证集是不是和训练集分布差异太大。附带的训练结果日志可以拿来对照看看别人的收敛曲线长什么样心里有个基准。提示训练完的权重默认存在runs/detect/train/weights/下best.pt是验证集表现最好的last.pt是最后一轮的。推理用 best.pt续训用 last.pt。4. 避坑与排查这份数据用起来最容易翻车的五个地方4.1 现象训练启动就报「No labels found」原因data.yaml 里的路径写错了或者图像和标签的目录结构不符合 Ultralytics 的约定。Ultralytics 默认去images/train同级的labels/train找标签如果你的标签放在别的地方它就找不到。解决确认目录结构是dataset/images/train和dataset/labels/train这种平行结构。如果标签目录名不一样在 data.yaml 里没法直接指定 labels 路径只能调整目录结构或者用软链接。4.2 现象mAP 一直是 0 或者极低原因类别 id 和 names 顺序对不上或者坐标格式搞混了。常见的是把 VOC 的绝对坐标直接当 YOLO 归一化坐标用坐标值全大于 1模型根本学不到东西。解决跑一遍 2.3 节的校验脚本确认坐标都在 0 到 1 之间、类别 id 在 0 到 2 之间。再核对 data.yaml 的 names 顺序和标注时的类别顺序是否一致。4.3 现象Mac 上训练报 MPS 算子不支持原因M 芯片的 MPS 后端对部分 PyTorch 算子支持不完整YOLO11 的某些层在 MPS 上会 fallback 或者直接报错。解决先升级 PyTorch 到较新版本MPS 支持在持续完善。如果还报错把devicemps改成devicecpu先跑通流程或者用device0如果有外接显卡。实在不行就在 Mac 上做推理验证训练放到 GPU 机器上。4.4 现象显存溢出 OOM原因imgsz或batch设太大或者用了 l/x 大模型。航拍图如果原图分辨率很高预处理时也会吃显存。解决先把 batch 减半试还不行就降 imgsz 到 640 甚至 512。模型从 n 换到 s 也会增加显存占用量力而行。GPU 显存小于 8G 的话建议 batch 不超过 8。4.5 现象验证集指标好但实际推理效果差原因验证集和训练集来自同一批场景分布太接近模型过拟合了。或者验证集里遮挡样本太少模型没学到遮挡情况下的检测能力。解决手动从数据里切一部分遮挡严重的图做独立测试集别用训练时的验证集当最终评判。如果遮挡场景效果差可以在训练时开 Mosaic 和 MixUp 增强Ultralytics 默认是开的确认没被关掉。5. 从 1000 张图到可用模型小数据集的进阶调优技巧1000 张图在目标检测里算小数据集直接训容易过拟合但用对方法也能出可用的模型。我一般会走三步先冻结 backbone 训几个 epoch 让 head 适应新类别再解冻全量微调最后用余弦退火学习率收尾。Ultralytics 里对应的是freeze参数和cos_lr参数。# 第一阶段冻结 backbone只训检测头 yolo detect train datadata.yaml modelyolo11n.pt epochs20 freeze10 lr00.001 # 第二阶段解冻全量微调余弦退火 yolo detect train datadata.yaml modelruns/detect/train/weights/last.pt epochs100 cos_lrTrue lr00.0005freeze10表示冻结前 10 层YOLO11n 的 backbone 大概就是这个量级具体层数可以打印模型结构确认。第一阶段用稍大的学习率让 head 快速收敛第二阶段用一半的学习率加余弦退火做精细调整。这个两段式训练在小数据集上比一口气训 100 epoch 效果稳定得多血泪经验。另一个技巧是善用数据增强。航拍车辆检测最有效的增强是缩放和旋转因为无人机高度和角度本来就是变化的。Ultralytics 默认的增强参数里scale和degrees可以适当调大但mosaic别关它对小目标检测帮助很大。如果发现模型对遮挡场景效果差可以额外加copy_paste增强把标注目标复制粘贴到其他位置人为制造遮挡样本。验证模型是否真的可用别只看 mAP。找几张训练集里没有的场景图——比如不同光照、不同高度拍的——手动跑一遍推理看漏检和误检集中在哪。如果 bus 经常被漏检多半是 bus 样本太少可以考虑对 bus 类别做过采样或者调高它的损失权重。从那以后我每次拿到新数据集都强制先跑一遍完整性校验和类别分布统计再决定训练参数这个习惯帮我省了太多返工时间。希望帮到你。本文还有配套的精品资源点击获取
返回列表