简介本资源为面向无人机视觉检测方向的YOLO格式数据集聚焦大型固定翼无人机mq-20-drone单类别目标检测任务适合从事目标检测算法学习、模型训练与工程落地的开发者及研究人员使用。压缩包共624个文件包含362张jpg图像、260个txt标注文件及2个yaml配置文件整体约14.56MB图像与标签一一对应可直接用于模型训练与验证。数据集已完成train、val、test划分并附带data.yaml文件其中nc为1、names为[mq-20-drone]yolov5、yolov7、yolov8等主流算法无需额外整理即可直接开训。目录结构清晰、配置完整能帮助读者省去数据清洗与格式转换环节快速搭建固定翼无人机检测实验验证模型在真实场景下的识别效果。目前已有1098人学习下载适合需要快速上手YOLO训练流程、补充单类别无人机检测样本的读者参考使用。1. 几百张固定翼无人机检测数据集从拿到手到跑通第一个 epoch上周有个做低空防御的朋友甩给我一个压缩包说“你帮我看看这玩意儿能不能直接训”。解压一看几百张 jpg标签是 txttrain/val/test 三个文件夹整整齐齐根目录躺着一个 data.yaml。这不是那种网上随便爬的脏数据——图片里全是固定翼无人机背景有天空、有地面、有远距离小目标标签框贴着机身走。对于想快速验证 yolo 大型固定翼无人机检测数据这条技术路线的人来说这份资源省掉了最耗时的“找图—筛图—标框—划分”四步。它适合三类人刚接触 yolo 目标检测想拿真实数据练手的新手、需要快速搭无人机检测 baseline 的算法工程师、以及做低空安防原型验证的从业者。下面我按自己拆包、配环境、跑训练、踩坑的顺序把这份数据集怎么用、参数怎么设、哪里容易翻车讲清楚。2. 拆开数据集看门道目录结构、标签格式与 data.yaml 的真实含义2.1 目录长什么样每个文件干什么用解压后的根目录通常长这样我按实际拆包结果还原drone_dataset/ ├── data.yaml ├── images/ │ ├── train/ # 训练集图片jpg 格式 │ ├── val/ # 验证集图片 │ └── test/ # 测试集图片 └── labels/ ├── train/ # 与 train 图片同名的 txt 标签 ├── val/ └── test/图片文件名有5.jpg、4.jpg这种短名也有images-46-_jpeg.rf.a4081ee9980871732316e57c827873e8.jpg这种带哈希的长名。短名大概率是原始采集图长名是从公开图库或爬虫落下来的哈希后缀是去重用的。这不影响训练yolo 只认“图片名与标签名一一对应”这个规则。你唯一要检查的是images/train/5.jpg必须对应labels/train/5.txt少一个都会在训练启动时报No labels found。标签是 yolo 格式的 txt每行五个数class_id x_center y_center width height全部归一化到 0~1。这份数据集nc: 1所以 class_id 恒为 0。我抽查了十几张框的宽高比大多在 1.5:1 到 3:1 之间符合固定翼无人机展弦比大的特点。如果你之前只玩过 COCO json 或 VOC xml这里要转个弯yolo txt 没有图片尺寸信息归一化是相对于原图宽高算的所以换分辨率训练时不用改标签。2.2 data.yaml 三行配置改错一行就白跑根目录的data.yaml内容极简nc: 1 names: [mq-20-drone]但实际训练时yolo 官方仓库要求data.yaml里还得有train、val、test三个路径字段。这份资源如果只给了上面两行你需要自己补路径。我一般写成绝对路径避免从不同工作目录启动时找不到文件path: /home/user/drone_dataset train: images/train val: images/val test: images/test nc: 1 names: [mq-20-drone]path是数据集根目录train/val/test是相对path的子路径。这样写的好处是换机器只需改path一行。nc是类别数这里 1 类千万别改成 0否则训练时分类头维度对不上报IndexError。names里的mq-20-drone是类别名推理时画框上会显示这个字符串你可以改成自己项目里的代号但训练前改训练后改没用。提示如果你用 yolov5data.yaml里nc和names必须与标签里的 class_id 范围一致。标签里出现1而nc: 1训练直接崩。2.3 为什么这份数据适合固定翼而不是旋翼固定翼无人机在图像里的视觉特征和旋翼机差别很大机身细长、机翼平直、没有明显的多旋翼臂。这份数据的标签框紧贴机翼两端而不是只框机身。这意味着模型学到的特征更偏向“展弦比大的细长目标”如果你拿它去检测旋翼机mAP 会掉得厉害。反过来如果你就是要做固定翼检测这份数据的标注一致性比很多公开数据集好——我翻了几十张没有发现框只框一半机翼的情况。这也是我建议先拿它跑 baseline 的原因标签干净模型效果差就是模型或参数的问题不用怀疑数据。3. 从零跑通 yolov8 训练环境、命令与参数逐条拆解3.1 环境配置别在 conda 里装一半就切 pip我习惯用 conda 建独立环境避免和系统里的 torch 打架。yolov8 对 torch 版本有要求截至我写这篇时ultralytics包在 torch 2.0 上跑得最稳。命令如下conda create -n drone_yolo python3.10 -y conda activate drone_yolo pip install ultralyticspython3.10是保险选择3.11 也能跑但有些旧版 torch 轮子没跟上。pip install ultralytics会自动拉 torch、torchvision、opencv-python 等依赖。如果你机器有 CUDA装完后跑python -c import torch; print(torch.cuda.is_available())确认返回True。返回False的话要么是驱动没装好要么是 pip 给你装了 CPU 版 torch。CPU 版也能训但几百张图跑 100 epoch 大概要几个小时GPU 上十几分钟的事。注意不要先conda install pytorch再pip install ultralytics两个包管理器混着装 torch 容易出libcudart版本冲突。我翻车过一次报错是undefined symbol: cudaGetDeviceCount重装环境才解决。3.2 训练命令与关键参数imgsz、batch、epochs 怎么定环境好了一行命令启动训练yolo detect train \ data/home/user/drone_dataset/data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ projectdrone_runs \ nameexp1逐条说参数。modelyolov8n.pt是 nano 版预训练权重第一次跑会自动下载。几百张图的数据量nano 或 small 足够用 large 反而容易过拟合。epochs100是起步值我一般看results.csv里metrics/mAP50是否在 50 epoch 后还在涨涨就加到 200平了就停。imgsz640是 yolo 默认输入尺寸这份数据里有些远距离小目标640 下可能只剩十几个像素如果你发现小目标漏检多可以提到 1280但显存占用翻倍batch 要相应降到 8 或 4。batch16在 8GB 显存上跑 640 尺寸刚好12GB 可以上 32。训练开始后终端会打印每个 epoch 的 box_loss、cls_loss、mAP50。重点看mAP50和mAP50-95。这份数据类别单一mAP50 通常在前 30 epoch 就能到 0.8 以上。如果 50 epoch 还在 0.5 以下先别怀疑模型去查标签和图片是否对应、data.yaml路径是否写对。3.3 训练完怎么看结果混淆矩阵和验证集预测图训练结束后drone_runs/exp1/下会生成weights/best.pt和weights/last.pt还有confusion_matrix.png、val_batch0_pred.jpg等。我第一眼看confusion_matrix.png如果背景被大量误判为无人机说明负样本不够或置信度阈值太低如果无人机被漏检多看val_batch0_pred.jpg里漏的是不是小目标。这份数据背景以天空为主天空里云朵边缘有时会被误检但概率不高。验证命令yolo detect val \ modeldrone_runs/exp1/weights/best.pt \ data/home/user/drone_dataset/data.yaml \ imgsz640val会输出精确率、召回率、mAP50、mAP50-95。召回率低于 0.7 的话推理时把conf阈值从默认 0.25 降到 0.15 试试但别低于 0.1否则误检爆炸。这个取舍在低空防御场景里很现实宁可误报不可漏报所以召回率优先。4. 避坑与排查标签、路径、显存、过拟合的五个血泪教训4.1 现象训练启动报No labels found in ...原因labels/train/里缺少与某张图片同名的 txt或者图片和标签的扩展名不一致比如图片是.jpeg标签是.txt但文件名多了后缀。这份数据里长哈希名的图片标签名必须完全一致包括大小写。解决跑一段检查脚本列出没有对应标签的图片import os img_dir drone_dataset/images/train lbl_dir drone_dataset/labels/train imgs {os.path.splitext(f)[0] for f in os.listdir(img_dir)} lbls {os.path.splitext(f)[0] for f in os.listdir(lbl_dir)} missing imgs - lbls print(缺标签的图片:, missing)把missing里的图片删掉或补标签再启动训练。4.2 现象data.yaml路径写相对路径换目录就报File not found原因yolo 解析train: images/train时是相对于path字段拼接的。如果你没写path它相对于当前工作目录。从不同目录启动训练路径就变了。解决data.yaml里写绝对路径的path或者每次训练前cd到数据集根目录。我习惯写绝对路径省心。4.3 现象CUDA out of memorybatch 降到 1 还报原因imgsz太大或者workers太多导致内存泄漏。yolov8 默认workers8在有些机器上会占满共享内存。解决先降imgsz到 416 试能跑就说明是尺寸问题。如果还报加workers2或workers0。workers0表示在主进程加载数据慢但不炸。4.4 现象训练集 mAP 很高验证集 mAP 低一截原因过拟合。几百张图对 yolo 来说偏少尤其如果你用了 large 模型。解决换 nano 或 small 模型加数据增强yolov8 默认开了 mosaic、flip、scale或者把epochs降到 50 并开patience10早停。我一般还会把dropout调到 0.1yolov8 在分类头有 dropout 参数但默认关闭需要改模型配置。4.5 现象推理时框叠框同一架无人机出好几个框原因NMS 的iou阈值太高或者conf阈值太低。解决推理命令加iou0.5 conf0.3。iou控制重叠框合并0.5 是常用值conf控制最低置信度0.3 比默认 0.25 稍严。如果目标密集iou可以降到 0.4。5. 进阶技巧用 test 集做一次“盲测”再决定要不要扩数据训练和验证都跑通后别急着上线。这份数据带了test集我习惯把它当盲测用——训练时完全不碰最后跑一次推理看模型在没见过的图上的表现。命令yolo detect predict \ modeldrone_runs/exp1/weights/best.pt \ sourcedrone_dataset/images/test \ conf0.3 \ saveTrue \ projectdrone_test \ nameblind_testsaveTrue会把画框后的图存到drone_test/blind_test/。我一张张翻重点看三类图远距离小目标、逆光剪影、地面背景干扰。如果远距离漏检超过三成说明imgsz640不够下次训练提到 960 或 1280。如果逆光剪影误检多说明数据里逆光样本少需要补拍或找类似场景的图。还有一个技巧把test集的预测结果和标签对比算一下每个类别的 AP。yolov8 的val模式可以指定splittestyolo detect val \ modeldrone_runs/exp1/weights/best.pt \ data/home/user/drone_dataset/data.yaml \ splittest \ imgsz640这样输出的 mAP 就是 test 集上的比验证集更接近真实部署效果。如果 test mAP 比 val mAP 低超过 0.1说明数据划分可能有问题——比如 val 和 train 里有同一场景的连续帧导致验证集“泄漏”了。这份数据是随机划分的泄漏概率低但如果你自己重新划分记得按场景分别按帧随机分。从那以后我每次拿到新数据集都强制走一遍“train 训—val 调—test 盲测”三步绝不拿 val 结果当最终指标。希望这份固定翼无人机数据能帮你省掉找数据和洗数据的时间把精力花在模型和业务上。本文还有配套的精品资源点击获取