简介这份资源面向无人机视觉检测方向的学习者与算法工程师提供一套可直接用于YOLO系列训练的大型固定翼无人机检测数据集标签类别为mq-20-drone适合开展目标检测模型训练、算法对比与课程实验等场景。压缩包共624个文件包含362张jpg图像、260个txt标注文件以及2个yaml配置文件整体约14.56MB图像与标签一一对应yaml文件用于声明类别数与类别名称。数据集目录已按train、val、test完成划分并附有data.yamlyolov5、yolov7、yolov8等主流框架可直接读取并启动训练省去自行整理与划分数据的时间成本。目前已有1098人学习下载说明该数据集在同类任务中具备一定参考价值。读者可借此快速搭建固定翼无人机检测基线验证模型效果并在此基础上进行数据增强、参数调优与多算法性能对比。1. 几百张固定翼无人机检测数据集从拿到手到跑通第一轮训练上周有个做低空安防的朋友发来一段机场围栏外的监控片段画面里一架固定翼无人机贴着云底飞过肉眼能看见但传统运动检测算法因为云层背景干扰直接漏检。他问我有没有现成的 YOLO 格式数据能快速验证一版检测模型。这类需求其实很典型不是缺算法而是缺一份标签干净、目录规整、拿来就能喂进训练脚本的数据集。这份几百张规模的 YOLO 大型固定翼无人机检测数据集正好卡在这个位置上——它把图像、txt 标签、train/val/test 划分和 data.yaml 全部配好yolov5、yolov7、yolov8 都能直接开训。适合两类人一是想快速验证固定翼无人机检测可行性的算法工程师二是刚接触 YOLO 目标检测、需要一个真实单类数据集练手的新手。下面我按实际拆包和跑通的顺序把这份资源讲透。2. 数据集结构与 YOLO 标签格式先看清 nc1 和 txt 坐标到底怎么存拿到一个数据集我习惯先不急着写训练命令而是把目录结构和标签文件翻一遍。这一步能省掉后面 80% 的报错排查时间。这份数据集的核心配置在 data.yaml 里只有一行类别定义但恰恰是这一行决定了你后面所有训练脚本能不能跑通。2.1 目录布局与 data.yaml 的真实含义数据集已经划分好 train、val、test 三个子集每个子集下通常对应 images 和 labels 两个文件夹。data.yaml 的内容是nc: 1 names: [mq-20-drone]这里nc: 1表示单类别检测names列表里只有一个类别名mq-20-drone。注意类别名本身不影响训练它只是标签索引到可读名称的映射真正参与计算的是标签文件里的类别索引 0。很多人第一次用单类数据集时会纠结名字要不要改成中文或改成 drone其实没必要保持和标签索引一致即可。常见做法是把这个 yaml 放到数据集根目录然后在训练脚本里用--data指向它。一个完整的 data.yaml 通常还需要 train、val、test 的路径字段。如果这份资源的 yaml 里只写了 nc 和 names你需要手动补上路径否则 YOLO 会去默认位置找容易报Dataset not found。我一般会补成这样train: ../train/images val: ../val/images test: ../test/images nc: 1 names: [mq-20-drone]路径写法取决于你把 yaml 放在哪一层。如果 yaml 和 train/val/test 同级就用./train/images如果放在数据集根目录的上一级就用相对路径指过去。这一步没有玄学就是路径拼接但错一个斜杠就会翻车。2.2 YOLO txt 标签的五个数值与归一化坐标YOLO 格式的标签是每张图对应一个同名 txt 文件每行代表一个目标框格式为class_id x_center y_center width height五个值全部是归一化到 0~1 的浮点数x_center和y_center是框中心点相对图像宽高的比例width和height是框宽高相对图像宽高的比例。举个例子一张 1920×1080 的图里有个框在左上角中心点像素坐标 (480, 270)框宽 400、高 300那么 txt 里就是0 0.25 0.25 0.2083 0.2778计算方式是 480/19200.25270/10800.25400/1920≈0.2083300/1080≈0.2778。这里最容易踩的坑是有人直接把像素坐标写进 txt训练时 loss 不降反升因为模型输出的预测框也是归一化的两者尺度对不上。验证方法很简单用脚本读一张图的 txt把归一化坐标乘回图像宽高画框看是否贴合目标。import cv2 import numpy as np img cv2.imread(train/images/5.jpg) h, w img.shape[:2] with open(train/labels/5.txt) as f: for line in f: cls, xc, yc, bw, bh map(float, line.split()) x1 int((xc - bw / 2) * w) y1 int((yc - bh / 2) * h) x2 int((xc bw / 2) * w) y2 int((yc bh / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.imwrite(check.jpg, img)这段脚本的作用是把归一化标签还原成像素框并画出来参数说明xc, yc是中心点归一化坐标bw, bh是归一化宽高乘回w, h得到像素值。跑完打开 check.jpg如果框歪了或者大小不对说明标签有问题。这一步我每次拿到新数据集都会做花两分钟省后面两小时。2.3 单类数据集在 YOLO 训练中的类别索引处理单类数据集有个隐蔽的坑如果你之前跑过多类数据集模型头部的输出通道数是nc 5YOLOv5/v7或按类别数动态调整YOLOv8换到单类时如果没改nc会报维度不匹配。这份资源的nc: 1已经写对但你要确保训练命令里没有额外覆盖。YOLOv8 会自动读 yaml 里的 ncYOLOv5 则需要确认--data指向的 yaml 里 nc 正确。另一个常见问题是标签里出现了类别索引 1 或更大单类数据集里只应该有 0出现其他值说明标签混入了别的类别训练时会被忽略或报错。用一条命令就能查awk {print $1} train/labels/*.txt | sort -u输出应该只有 0。如果有其他数字需要定位到具体文件手动修正。3. 用 YOLOv5/v7/v8 直接开训命令行参数与目录指向的实操细节目录和标签确认无误后就可以进入训练环节。这份数据集宣称 yolov5、yolov7、yolov8 都能直接训练实际跑下来确实如此但三个版本的命令和参数习惯有差异下面按版本拆开讲。3.1 YOLOv5 训练命令与 batch 设置YOLOv5 的训练入口是train.py典型命令python train.py \ --data data.yaml \ --weights yolov5s.pt \ --img 640 \ --batch 16 \ --epochs 100 \ --project runs/train \ --name drone_exp参数说明--data指向你的 yaml 文件--weights用预训练权重单类小数据集强烈建议从预训练开始否则收敛慢--img 640是输入分辨率几百张图的数据集用 640 足够--batch 16在 8G 显存上比较稳显存小就降到 8--epochs 100对几百张图来说偏多通常 50~80 就能看到收敛但多跑不会有害早停会自己触发。--project和--name决定输出目录。跑之前确认data.yaml里的 train/val 路径是相对 yaml 所在目录解析的YOLOv5 对路径比较敏感写错就报No labels found。3.2 YOLOv8 训练命令与 task 参数YOLOv8 用 CLI 或 Python API 都行CLI 更接近 yolov5 习惯yolo detect train \ datadata.yaml \ modelyolov8n.pt \ imgsz640 \ batch16 \ epochs100 \ projectruns/detect \ namedrone_v8注意 YOLOv8 多了detect这个 task 参数因为同一个 CLI 还管分割和分类。modelyolov8n.pt是 nano 版本参数量小适合快速验证如果精度不够再换 s 或 m。YOLOv8 读 yaml 时对nc和names的解析更严格如果 names 列表长度和 nc 不一致会直接报错。这份资源里nc: 1和names: [mq-20-drone]长度一致没问题。另外 YOLOv8 默认会把结果存到runs/detect/name下和 v5 的runs/train/name不同找权重文件时别翻错目录。3.3 YOLOv7 训练命令与 cfg 文件关联YOLOv7 的训练命令和 v5 类似但它需要显式指定--cfg文件python train.py \ --data data.yaml \ --cfg cfg/training/yolov7.yaml \ --weights yolov7.pt \ --img 640 \ --batch 16 \ --epochs 100 \ --name drone_v7YOLOv7 的--cfg决定网络结构--weights是预训练权重两者要匹配比如 yolov7.pt 配 yolov7.yaml。如果只给 weights 不给 cfg部分版本会报错。YOLOv7 对单类数据集的支持没问题但它的标签缓存机制会在第一次训练时生成.cache文件如果中途改了标签记得删掉 cache 再训否则用的还是旧标签。这个坑我在多个项目里都遇到过现象是改了 txt 但 loss 曲线完全没变化删 cache 后恢复正常。3.4 训练前用一小批数据做冒烟测试不管用哪个版本我建议先拿 10~20 张图跑 1 个 epoch 做冒烟测试确认数据加载、标签解析、loss 计算全通再上全量。命令里加--epochs 1并把--data指向一个只含少量图的临时 yaml 即可。冒烟测试能提前暴露路径错误、标签越界、显存不足等问题比跑一半崩掉再回头查省事得多。这一步花五分钟能避免后面几小时的无效等待。4. 避坑与排查标签、路径、显存这三类问题最常翻车这一章集中讲我在使用这类单类无人机数据集时踩过的坑每条按现象、原因、解决来写你遇到报错时可以对照排查。4.1 现象训练启动即报 No labels found原因通常是 data.yaml 里的 train/val 路径写错或者 labels 文件夹名不是 YOLO 默认的labels。YOLO 在 images 同级找 labels如果你的目录是train/images和train/txt它就找不到。解决把标签文件夹统一命名为labels或者确认 yaml 路径指向的目录下确实有 images 和 labels 两个子目录。另一个可能是图片和标签文件名不一致比如图是5.jpg标签是5.jpeg.txt这种也要改。4.2 现象loss 为 nan 或训练几个 epoch 后突然爆掉原因多半是标签坐标越界归一化值小于 0 或大于 1。固定翼无人机在画面边缘时标注框可能超出图像边界如果标注时没裁剪txt 里就会出现负值或大于 1 的值。解决用脚本扫一遍所有标签把越界值 clip 到 [0,1]或者直接剔除越界严重的样本。扫描命令awk {if($20||$21||$30||$31||$40||$41||$50||$51) print FILENAME: $0} train/labels/*.txt输出为空说明标签干净有输出就逐个处理。4.3 现象显存不足 CUDA out of memory原因通常是 batch 设太大或 img 分辨率太高。几百张图的数据集用 640 分辨率、batch 16 在 8G 卡上一般够但如果你的卡是 4G 或用了 yolov7 的大模型就会爆。解决先把 batch 降到 8 或 4再把--img降到 512 试试。YOLOv8 还支持batch-1自动选 batch但自动值有时偏大还是手动稳。另外多进程 dataloader 的--workers设太高也会占显存设成 4 或 8 即可。4.4 现象验证集 mAP 一直是 0原因可能是 val 路径下没有标签或者 val 的图片和标签数量对不上。YOLO 在验证时会读 val 的 labels如果 val 只有图没有 txtmAP 无法计算。解决检查val/labels是否存在且非空数量是否和val/images一致。另一个可能是类别索引不匹配比如训练时 nc1 但标签里出现了 1验证时该类被忽略。用前面 2.3 的 awk 命令确认标签里只有 0。4.5 现象训练完检测框位置整体偏移原因通常是标签坐标系用错比如把 YOLO 的归一化中心点格式当成了左上角格式。YOLO 是中心点加宽高不是左上角加右下角。解决用 2.2 的脚本画框验证如果框整体偏右下或偏左上就是格式理解反了。重新按中心点公式转换一遍即可。这个坑在新手标注时特别常见标注工具导出格式选错就会这样。5. 从训练到验证用 predict 看真实检测效果并判断数据集够不够用训练跑完权重存在runs/.../weights/best.pt接下来要验证这份几百张的数据集到底能不能支撑实际检测。我一般分两步先看验证集指标再用 predict 跑几张训练集外的图看直观效果。5.1 用 val 确认 mAP 与召回YOLOv8 的验证命令yolo detect val \ modelruns/detect/drone_v8/weights/best.pt \ datadata.yaml \ imgsz640 \ batch16输出里重点看mAP50和mAP50-95。单类无人机检测如果 mAP50 能到 0.8 以上说明这份数据集的标签质量和数量对固定翼这个目标来说是够用的。如果只有 0.5 左右可能是样本多样性不足比如全是天空背景缺少地面、云层、不同光照的负样本。这时候可以考虑补充一些困难负样本或者用 mosaic、mixup 增强。YOLOv5 的 val 命令是python val.py --data data.yaml --weights best.pt参数类似。5.2 用 predict 跑单张图看框的贴合度指标是一方面直观效果更重要。命令yolo detect predict \ modelruns/detect/drone_v8/weights/best.pt \ sourcetest/images \ conf0.25 \ saveTrueconf0.25是置信度阈值低于这个值的框不显示。跑完去runs/detect/predict看结果图。重点观察三种情况小目标有没有漏检、云层背景有没有误检、框有没有明显偏移。如果小目标漏检多可以把imgsz提到 1280 再训一版或者用--augment做推理增强。如果误检多提高 conf 到 0.4 试试但别调太高否则召回掉得厉害。5.3 判断数据集规模是否够用的经验线几百张图对单类固定翼无人机检测来说属于入门规模。我的经验是如果目标外观单一、背景变化少300~500 张能训出一个可用的基线如果背景复杂、目标尺度变化大这个量偏少mAP 容易卡在 0.6 上不去。判断方法看验证集的混淆矩阵和 PR 曲线如果召回在低置信度区就上不去说明正样本不够如果精确率低说明负样本或背景干扰不够。这份数据集的价值在于它帮你省掉了标注和划分的功夫让你能在一两个小时内跑通全流程至于要不要扩样取决于你的实际场景复杂度。5.4 一个我常用的快速对比技巧想快速判断不同 YOLO 版本在这份数据上的表现差异不用改代码直接换权重和命令跑三遍 val把 mAP50 记下来对比。我一般会固定imgsz640、batch16、同一份 data.yaml分别跑 yolov5s、yolov7、yolov8n看哪个版本在你的硬件和场景下性价比最高。从那以后我每次拿到新数据集都会先跑这个三方对比再决定用哪个版本做后续迭代。希望这份拆解能帮你少走点弯路把这几百张图真正用起来。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?