做了几年无人机视觉项目的人,大概都经历过同样的痛苦:模型结构可以抄、训练代码可以抄,唯独数据集没人替你抄。搜了半天,要么是爬楼爬出来的零散链接,要么是标注格式混乱到根本没法直接用的“半成品”。这个领域真正值钱的不是某个单一数据集,而是如何系统地知道“什么任务该用什么数据”。今天这篇就把我这些年攒下的无人机航拍检测与分割数据集,从分类逻辑到选型策略到预处理管线,一次性讲透。
1. 无人机视觉数据到底贵在哪:先给数据集分类画一张地图
1.1 一张航拍图和普通照片的差别,比你想象的大得多
同样是一张图,手机拍的街景和无人机在120米高度俯拍的画面,对于检测和分割模型来说完全是两个世界。无人机数据集的核心难点有三个:
第一是尺度剧烈变化。同一辆车,在200米高度可能只有十几个像素宽,在50米高度则是几十上百像素。模型要同时应对这种多尺度目标,数据集里就必须覆盖不同飞行高度和不同焦距的样本,否则模型在某个高度区间会直接“失明”。
第二是视角彻底改变。常规数据集大多是水平或轻微俯视角,无人机则是典型的顶视角(bird view)和大角度俯视。行人从“竖着的人”变成“圆形的头+肩部轮廓”,车辆从侧面变成车顶的全貌,类别特征差异极大。很多在常规数据集上效果不错的检测模型,迁移到航拍图后精度掉十几个百分点,原因就在这里。
第三是密集且相互遮挡。城管抓违建、园区巡逻、交通监控这些场景,往往一个画面里出现几十上百个目标,目标之间紧挨着甚至叠着。这对NMS的阈值设置、anchor的设计、分割掩膜的边缘精度都提出了额外的要求。
所以,网络上那些随便抓几张遥感图拼出来的“伪无人机数据集”,根本没法用。真正可用的航拍数据集,至少要在采集高度、相机倾角、目标密度、光照条件上有明确的定义。
1.2 给数据集分层的五个维度
我筛选和归类的逻辑,基本按照下面这张表来。它帮我快速判断一个新数据集是否适合手头的项目。
| 分类维度 | 说明 | 典型取值示例 |
|---|---|---|
| 任务类型 | 检测(2D框)、旋转框、语义分割、实例分割 | 检测 vs 分割 |
| 采集高度 | 低空(30-80m)、中空(80-200m)、高空(200m+) | 低空适合抓细节,高空适合看全局 |
| 相机角度 | 垂直俯视、倾斜45°、多角度混合 | 垂直俯视分割更好做,倾斜视角检测更难 |
| 目标类别 | 车辆、行人、建筑、植被、水面、农作物等 | 交通 vs 农业 vs 巡检 |
| 标注密度 | 每张图的平均目标数、是否包含小目标 | 高密度场景需要专门的密集检测集 |
把这五个维度先想清楚,后面选数据、做预处理、调模型,才不会跑偏。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 目标检测方向:五类航拍检测集,覆盖从通用到专项
2.1 通用航拍目标检测集:练手和预训练必备
我习惯把这一类叫“航空目标检测基准集”,特点是类别覆盖面广、场景分布多样,适合做预训练和算法验证。目前这类数据集的体量大多在几千到上万张航拍图,目标数几万到几十万个,类别包含行人、汽车、卡车、巴士、自行车等常见交通元素。
使用思路是:先用它做预训练,让模型充分学习航拍视角下的底层特征(边缘、纹理、目标分布规律),然后再用垂直场景的小样本数据集做微调。实测下来,比直接从ImageNet或COCO预训练权重开始迁移,收敛速度快了大概30%,最终mAP也高出3到5个百分点。
2.2 小目标检测专项集:被低空行业反复折磨的痛点
做过航拍检测的人都知道,小目标是最大的坑。一个1000×1500像素的图像里,目标只有10×10像素左右,有些甚至只有5×5像素,这已经接近噪声级别。
针对这个问题,有几类专项数据集值得关注:
- 高分辨率大图:原始图达到2K甚至4K分辨率,每个小目标在原始分辨率下还能看到基本轮廓,方便做切图和尺度分析。
- 超高密度小目标集:单张图中目标数量能达到上百个,而且大量是小目标,专门用于压测模型在小目标上的召回率。
- 不同高度的对比集:同一区域分别用低空和高空拍摄,形成多尺度配对数据,用来训练尺度自适应模块。
实操建议:小目标专项数据集不要单独用,而是按1:1比例混入常规数据集,否则模型会过度偏向小目标而损失大目标性能。混数据之后,再用随机缩放增强做尺度扰动,效果比单纯堆数据好得多。
2.3 车辆与交通场景数据集:车流、违章与路口监控
交通类任务大概是无人机数据集里最成熟的一块。典型场景包括十字路口车流统计、违章车辆识别、高速公路事件检测、停车场剩余车位分析等。
这类数据集的特性很明显:目标类别集中在车辆若干子类,背景主要是路面、车道线、绿化带,相对固定。最大的难点是密集车流下的遮挡和车辆阴影干扰。
选这类数据时我建议注意三点:
- 是否包含夜间和弱光样本。很多数据集白天效果好,一到夜间(车灯、路灯反光)表现就崩,所以训练集里必须混入夜拍帧。
- 是否包含不同地区、不同风格的车辆。不同城市甚至不同国家,车辆外观差异很大,要覆盖足够多样性。
- 是否有俯视角和斜视角的标注对比。斜视角车辆能看到侧面的轮廓,俯视角只能看到车顶,两种视角各自训练,再用多视角测试集验证。
2.4 人员与应急救援场景数据集
航拍搜救、人群密度估计、违规闯入检测,这类数据集的特点是目标极其密集并且是非刚性目标。行人姿态各异,有站立的、奔跑的、蹲下的;部分目标被树木或车辆遮挡,只露出半个身体。
这类数据集的标注相对复杂,许多数据集只提供点标注或中心点标注而不是完整框。使用时要特别注意:
- 检测框回归值的不确定性。同样是“人”,在50米高度和100米高度下框的大小差异可能有好几倍,所以数据里必须包含多高度样本,否则高度一变化就没法看。
- 遮挡处理策略。建议在预处理阶段把严重遮挡的样本单独抽出来做二次训练,或者用软标签(soft label)的方式让模型在遮挡区域输出低置信度,而不是强行拉高置信度。
- 负样本收集。用于搜救任务时,最难的不是找到人,而是区分“像是人但实际不是”的东西(如石头、树桩、阴影轮廓)。专门的负样本数据集,比正样本更能提升精度。
2.5 异常检测与违规定义:代码巡检之外的视觉巡查
这类数据集主要用于电力巡检、光伏板巡检、违建识别。它和前几类的显著差异在于:大部分场景是“正常”的,只有少量异常目标。也就是说,它的类别极度不平衡,正常的绝缘子、正常的屋顶占绝大多数,异常样本通常是缺陷、锈蚀、违建加层等。
处理这类数据时,就不能只靠数据集本身了,要配合数据增强策略。我常用的做法包括:
- 对异常样本做过采样和各类几何增强(旋转、翻转、尺度变换);
- 用正常的“背景图”做负样本,参与训练;
- 对缺陷目标做马赛克增强(Mosaic),提升模型在光照变化下的鲁棒性。
3. 分割方向:语义分割、实例分割与变化检测,三类数据集怎么挑
3.1 语义分割数据集:地物分类与场景理解的基石
无人机语义分割任务里,核心类别一般包括建筑、道路、植被、水体、裸地、车辆等。它的用途很广:城市规划里的地表覆盖统计、农业里的地块识别、林业里的树冠分割。
选语义分割数据集时要重点关注两件事:
一是标注掩膜的质量。很多数据集标注得非常粗糙,道路和建筑的边界模糊,植被边缘有锯齿,这种数据喂给模型,模型会学到“脏”的边缘,后续想修都难。所以拿到数据先随机抽几十张,用标注掩膜叠加原图仔细看,边界和细节是否符合实际。
二是类别覆盖是否均衡。常见的坑是背景类别占比过重,比如“空地”占了一张图的70%以上,模型训练半天,实际就是在学“大部分像素都是空地”这个分布。这种情况下要按类别做频率加权损失(如用带权重的交叉熵),或者用CutMix之类的增强把前景目标拼贴到背景区域,人为提升前景占比。
3.2 实例分割数据集:从“哪里是目标”到“哪个目标是哪块”
实例分割比语义分割多了一个维度:同一个类别,要把每个个体区分开。比如一片厂区里有20辆车,语义分割会把所有车统一标成“车辆”,实例分割则会把每辆车标成一个独立实例。
这类数据集主要用于精细的计数和属性分析场景,像车辆数目统计、建筑单体提取、光伏面板逐块识别。数据获取的难度在于标注成本极高,人工描每个目标的多边形,一张密集场景图可能要花1到2个小时。因此市面上的公开实例分割数据,数量普遍比检测数据少一个量级。
使用经验是:检测+实例分割联合训练比较划算。先用框检测锁定目标区域,再做区域内的二分类掩膜分割,比直接端到端训练实例分割模型,训练时间短且更稳定。前提是数据集同时存在框标注和掩膜标注,选数据时要看清标注文件结构。
3.3 变化检测分割集:同一场景“前后对比”才知道哪里变了
变化检测是我个人觉得最有工程价值、也最稀缺的一类。它提供同一地点在不同时间拍摄的图像对,要求模型输出变化的区域掩膜。典型应用包括:违建增长识别、灾后损毁评估、森林砍伐监测、城市开发监控。
这类数据集的独特点在于必须有配准过的图像对。飞行高度、拍摄角度、光照条件都要尽量一致,否则算法会把“视角变化”误判为“场景变化”,导致误检率飞升。
使用时要特别注意配准问题。即使数据集本身经过了粗配准,实际使用时仍建议先做一次配准预处理(如基于特征点的对齐),再输入给分割模型。经验教训是:我用某个变化检测集训练出的模型,在数据集中测试效果很好,一上自己的实拍数据就崩,问题出在时间跨度长、光照差异大,导致“光照变化”被误检为“变化区域”。后来加了光照归一化预处理,情况才好转。
3.4 水面与地面混合分割集:落地巡检时最容易忽略的场景
专门说这个,是因为很多新手做巡检项目时,默认处理的是陆地场景,结果一到河边、湖边、水库就直接翻车。水面环境有几个独有的难点:
- 水面没有稳定的纹理特征,倒影和反光容易造成误分割;
- 水面与河岸边界模糊,分割掩膜的边缘不稳定;
- 不同季节、不同时段的水面颜色差异大,泛化难度很高。
如果要买数据或找人定制采集,建议确保数据集中覆盖不同时间(早晨、中午、黄昏)、不同季节(汛期、枯水期)和不同天气(晴天、阴天、雾天)下的水面样本,这比单纯增加数据量重要得多。
4. 场景化选型:巡检、农业、城市管理、应急的数据集搭配方案
这一章直接从应用场景出发,给出可落地的数据搭配方式。
4.1 电力/光伏巡检场景
搭配逻辑:大规模通用检测集(让模型学会“找目标”)+ 少量标注精细的缺陷检集(让模型学会“找异常”)+ 大量正常设备样本作为负样本。
具体拆分:
- 通用航拍检测集做预训练,学习基础特征;
- 缺陷样本做数据过采样和Mosaic增强,提升小样本条件下的召回率;
- 正常设备图只提供背景物体,不参与前景回归,而是作为“不存在缺陷的区域”的负样本,抑制模型误报。
体感上,缺陷样本和正常样本的比例按1:3到1:5比较合理。正常样本太少,模型误报率高;正常样本太多,正样本被淹没,模型又会趋于保守,几乎不输出缺陷。
4.2 农业场景(田块分割、作物计数、病虫害检测)
农业场景的核心任务是语义分割和计数。数据搭配建议:
- 田块边界分割集(语义分割)作为基础;
- 作物或果树计数集(检测)作为补充;
- 病虫害叶片集如果尺度相差过大,不要直接混用,建议单独建一个分支模型。
农业航拍还有一个特点:季节变化极其重要。小麦在分蘖期和成熟期的纹理差异巨大,一个在夏季数据上训练的分割模型,春季根本没法用。所以农业数据集要特别注意标注拍摄时的生长阶段,训练时按阶段分组或做混阶段增强。
4.3 城市管理与测绘场景
城市管理涉及违建识别、垃圾堆放、渣土车未覆盖、道路破损检测等,任务多样但都依赖“特定目标的定位与轮廓”。推荐的数据组合是:
- 高分辨率语义分割集(建筑、道路、绿地)用于整体场景理解;
- 车辆检测集用于渣土车、翻斗车等特定工程施工车辆识别;
- 变化检测图像对用于违建增长监控。
这些数据组合在一起后,不要一次性全部混入训练,而是分阶段训练:先在分割集上训练通用特征,再在目标检测集上做针对性微调。最后再把分割和检测两条分支合并到多任务网络里,共享backbone,省算力又提升精度。
4.4 应急救援场景
应急场景数据最稀缺、也最难获取,因为真实搜救瞬间无法预演,常用模拟场景替代。
我实际项目中的做法是:用通用人员检测集 + 仿真引擎渲染的多角度、多高度、多遮挡仿真图 + 野外真人穿戴显眼标志服的拍摄样片,三者按5:3:2的比例混合。这样既有真实感,又有足够的规模和多样性。
注意,应急场景的模型评估标准要特别关注召回率而不是mAP。搜救任务漏检一个目标可能就出大问题,宁可多输出几个假阳性框让人工复核,也不要漏报。所以训练时对置信度阈值要放得很低(如0.1到0.2),并使用更强的数据增强来提升目标召回。
5. 正式训练前的数据预处理:切图、格式统一与增强的实操经验
5.1 标注格式统一:省下来的时间足够你多想好几套方案
无人机数据集来源复杂,标注格式五花八门。有的给Pascal VOC的XML,有的是COCO的JSON,有的是YOLO的TXT,还有分割任务常见的PNG掩膜图。
我强烈建议开工之前先写一个统一转换脚本,把所有数据转成目标格式(一般是COCO JSON或Ultralytics YOLO格式)。别偷懒,原因很简单:如果你有十来套数据,每套数据格式都不一样,训练时来回切换解析逻辑,debug的时间比转换脚本还长。
转换脚本主要做三件事:统一类别ID、统一坐标表示(像素坐标归一化或绝对坐标)、统一掩膜编码(RLE或polygon)。每做完一个转换,都用可视化脚本抽查几十张图,确认标注框和掩膜的位置没被转歪。
5.2 切图策略:大图不切,模型直接学废
无人机影像动辄4000×3000像素,直接整图输入模型,全局计算量太大,目标尺寸也远小于网络下采样后的特征分辨率,小目标直接被“压”没了。所以切图是航拍任务的标准操作。
切图时我建议保留一定的重叠区域(overlap),一般是10%到20%。为什么?因为如果一个目标恰好卡在两张切片的边界,另一半被截断,模型会学习到残缺的目标特征,影响精度。加了重叠后,同一目标可以在相邻切片中完整出现一次,模型能看到完整目标的机会更大。推理时同样保持重叠切图,合并预测结果,再用加权NMS去除重叠区域的重复框。
切图尺寸根据模型和显存定。YOLO系列常用640×640或1280×1280,分割模型常用960×960左右。切得太大,小目标虽保留得多,但训练速度慢;切得太小,目标可能直接超出单图视野,模型看得到车头看不到车尾。
5.3 数据增强:尺度扰动是第一优先级
通用数据增强(翻转、旋转、色彩抖动)该上就上,但航拍场景里最有效的是随机尺度变化增强:对同一张图随机缩放到原图的50%到110%,再填充或裁剪到固定尺寸。这能强制模型学习“同一个目标在不同高度下长什么样”,效果比其他花哨的增强都实在。
其次推荐马赛克增强(Mosaic)。把四张图拼成一张,相当于一张图里混合了四种场景,能够提高小目标的多样性、缓解样本不均衡问题。
开增强时也别贪多。增强不是越多越好,过度增强会改变目标的真实分布。我一般把翻转、旋转和尺度扰动作为默认开启项,色彩类增强开一组轻量的,不会同时开多种强形变,否则训练收敛变慢,精度反而下降。
5.4 类别不平衡:不做处理的模型会被“多数派”带偏
航拍数据天然存在类别不平衡,最典型的是“普通地面背景”和“少数特定目标”的差距。比如光伏巡检中“正常面板”远多于“热斑缺陷”,车辆计数中“小轿车”远多于“大巴车”。
应对方式我按优先级排序:
- 过采样:对少数类样本直接重复采样,在数据集层解决;
- 损失函数加权:给少数类更高的损失权重,Focal Loss适用于难样本,有类别不平衡时很管用;
- 合成数据:对少数类目标做前景复制粘贴(把缺陷patch贴到正常面板图上),简单但有效;
- 分层采样:保证每个batch里都包含各个类别的样本,避免有些batch全是背景。
6. 航拍数据集踩坑实录:六个高频问题与应对
6.1 标注框与目标真实轮廓不对齐
很多公开数据集,尤其来自爬虫或半自动标注的,框通常框得相当“粗”。行人的框可能把旁边台阶框进去,车辆的框可能漏掉后备箱一角。这种噪声在训练初期问题不大,后期模型收敛会卡住,精度怎么也提不上去。
应对办法是对标注置信度做一个筛查:用当前模型预测训练集,找出预测结果和标注IoU比较低的一批图,人工抽检。如果发现是标注问题,直接修标注;如果训练图片本身模糊不清,直接删除。
6.2 光照与季节偏差导致泛化不佳
夏季采集的数据,模型到了冬天或阴雨天精度掉得厉害。这是航拍数据的经典问题。
缓解手段主要有三种:
- 训练集里混入不同季节、不同天气的样本;
- 做色彩空间归一化(如把图像转到HSV后做随机饱和度和亮度扰动),强迫模型不依赖某个固定色调;
- 用风格迁移类的增强,把夏季图转成冬季色调,但这类增强开销大,需要留足算力。
6.3 飞行高度不一致导致尺度分布失配
有些数据集声称是无人机拍摄,但实际包含了大量接近地面拍摄的超大目标图,混在一起后尺度分布被拉得很宽,模型学到的尺度变化规律是乱糟糟的。
处理方式是把数据按目标尺度分组(根据真实目标尺寸和包围框面积的比值划分),训练时按组分别做归一化,或分组训练后再测试时做尺度融合。
6.4 正负样本极度不平衡
前文提到过,这里再强调一下:有些任务中正样本在整张图里只占几十个像素,要主动做样本挖掘,把困难负样本(look-alike目标)也作为监督信号参与训练。只在正样本上做文章,模型不靠谱。
6.5 多源数据标注语义不一致
同一个“汽车”类别,A数据集只标小轿车,B数据集把卡车也归为“汽车”,C数据集则单独分一个“卡车”。训练前如果不做合并,模型会在“汽车”和“卡车”之间反复横跳。
正确做法是用一个统一的类别定义表,把所有数据集的类别映射到固定类别体系,合并后在整份数据上重新统计类别分布,必要时对某些类别做降级合并(比如把“厢式货车”“皮卡”“垃圾车”统一成“货车”)。
6.6 数据集版权与使用边界:科研可以随便用,商用要查清授权
这个坑最容易被忽略,也最致命。很多航拍数据集在页面底部的授权条款写得不清不楚,甚至是“仅限科研用途”“禁止商业使用”“需申请获批”。如果项目是要交付给政企的商用项目,务必仔细核对授权条款,保存好授权截图或授权邮件,别等到项目上线后被找上门。
对于不确定授权的数据,宁可不用,也别赌。替代方案是拿公开数据集做技术验证,商用前用自采数据或委托采集机构定制数据。
我在实际数据准备中坚持的几个原则
做了几年航拍视觉项目,我对数据集的挑选和使用养成了一套自己的规矩:
第一,永远不迷信单一数据集。再大的数据集也有自己的分布偏好,至少混用两套以上来源不同的数据,模型的泛化能力才会稳定。第二,下载数据的第一天就写好标注格式转换脚本,这件事越晚做越痛苦。第三,在训练前必须做数据可视化巡检,眼睛扫一遍比任何统计指标都靠谱。
最后分享一个实用习惯:我会把每次用过的数据组合、增强参数、训练指标都记在一个实验笔记里,哪个数据集组合产生了更好的效果、哪类增强让精度掉了点,全部都记下来。下次再接到类似项目,直接翻笔记就能定数据策略,不再从头摸索。
无人机视觉赛道还很年轻,数据准备通常占掉整个项目一半以上的时间。把数据这关过好,后面调模型、上线的路会顺畅得多。
