
航拍视角下的人体检测和地面监控、车载视觉完全不是一回事。我最早接触这类需求是帮一个做校园安防的朋友处理一批无人机巡检素材——操场上有跑步的、打球的、三三两两散步的还有蹲在角落系鞋带的人一多、一散、一遮挡通用的人体检测模型直接歇菜。后来陆续又碰到体育课考勤统计、大型活动人流估算、校园应急搜救演练等场景才意识到航拍校园操场人体检测这个方向看着窄实际是个非常典型的垂直落地问题目标尺度变化剧烈、俯视视角导致人体姿态失真、背景干扰高度重复跑道线、看台座椅、树影再加上航拍图像本身的分辨率与畸变特性逼着你必须从数据集构建这一层就开始认真对待。这篇内容我打算把航拍校园操场人体检测数据集这件事从头到尾讲透。它本质上是一个面向YOLO系列目标检测框架的专用数据集构建与使用指南核心解决的是通用数据集在航拍校园场景下精度崩盘的问题。适合谁看如果你正在做无人机视觉、校园智能安防、体育场景分析或者单纯想搞一个垂直领域的目标检测数据集练手这篇都能直接抄作业。我会把采集、标注、增强、训练、调参、踩坑的完整链路拆开讲重点放在那些文档里不会写、但实际做的时候一定会撞上的细节上。1. 为什么通用人体数据集在航拍操场上会失效1.1 俯视视角带来的尺度与姿态双重畸变先把这个问题的根子说清楚。COCO、VOC这些通用数据集里的人体绝大多数是平视或轻微俯视拍摄的人体在画面里呈现的是竖条状轮廓头肩比、身高比例都符合常规认知。但航拍操场是典型的正俯视或大角度俯视人体在图像里变成了一个椭圆加四肢的俯视投影头顶和肩膀几乎重叠身高信息被压缩宽度信息被放大。这直接导致两个后果。第一基于平视数据训练出来的模型对人的特征学习是围绕竖直轮廓展开的遇到俯视投影时特征匹配度骤降。第二俯视下人体的类间差异变小——站着的人和蹲着的人从正上方看轮廓差异远小于平视模型很容易混淆。我实测过用COCO预训练的YOLOv5s直接推理航拍操场图mAP能掉到0.3以下漏检主要集中在密集人群和边缘区域。1.2 操场背景的高重复性与低区分度操场这个场景有个很坑的特点背景元素高度重复。红色跑道、绿色草坪、白色划线这些纹理在整张图里反复出现而且颜色饱和度接近纹理方向一致。对于卷积网络来说背景特征图上的响应非常均匀缺乏锚点式的区分信息。更麻烦的是阴影。航拍时光照角度固定人体在地面投下的阴影方向和长度基本一致模型很容易把阴影当成人体的一部分或者把树影、器材阴影误检成人。我在标注阶段就发现如果标注框把阴影框进去训练出来的模型会明显发胖检测框比实际人体大一圈如果不框阴影模型又会在有阴影的区域反复横跳。这个取舍后面会专门讲。1.3 小目标密集与遮挡的叠加效应操场场景的人体密度可以很高。课间操、运动会、集会的时候一个画面里几百个人是常态而且因为俯视人与人之间的遮挡关系比平视更复杂——平视时前后遮挡是部分覆盖俯视时是完全重叠一个人可能只露出一个头顶或者半个肩膀。YOLO系列对小目标的检测本身就依赖特征金字塔的多尺度融合但航拍图像里的小目标远端的、边缘的人往往只有十几个像素经过多次下采样后特征几乎消失。再加上密集遮挡NMS阶段很容易把相邻的人合并成一个框。这是航拍人体检测最核心的难点也是为什么必须用专用数据集而不是通用数据集的原因。2. 数据集构建从采集到标注的完整链路2.1 采集方案设计与设备参数选择采集这一步决定了数据集的上限。我的经验是不要只用一种高度和一种角度拍否则数据集的泛化能力会很差。建议按下面的维度做分层采集采集维度建议取值说明飞行高度30m / 50m / 80m / 120m覆盖近景到远景的尺度变化俯仰角度90度正俯视/ 60度 / 45度模拟不同航线姿态光照条件上午顺光 / 正午顶光 / 傍晚侧光 / 阴天覆盖阴影变化人群密度单人 / 5-10人 / 20-50人 / 50人以上覆盖遮挡程度场景类型跑道 / 草坪 / 篮球场 / 看台周边覆盖背景差异设备方面主流消费级无人机如大疆系列的广角镜头在120m高度拍出来的单张图操场区域大概占画面的1/4到1/3人体像素高度在20-60px之间。如果你要检测更小的人要么降低高度要么用长焦镜头。我一般建议采集时用4K分辨率后期再决定是否降采样保留原始数据总是没错的。注意采集时务必确认所在区域的飞行管理规定选择合规的飞行场地和时段避免在人群密集的敏感区域作业。校园场景建议提前与校方沟通选择非教学时段。2.2 标注规范框阴影还是不框阴影这是我在多个项目里反复纠结的问题直接给结论不框阴影但要在标注规范里明确阴影的处理方式。理由是这样的。阴影本质上是光照的产物不是人体的组成部分。如果把阴影框进去模型学到的是人体阴影的联合特征一旦光照条件变化比如从顺光变成侧光阴影方向变了模型就会失效。但完全不考虑阴影也不行因为阴影会干扰模型判断。我的做法是标注框严格贴合人体可见轮廓俯视下的头顶、肩膀、手臂外沿阴影区域不纳入。同时在数据集中保留一定比例的强阴影样本让模型学会忽略阴影。实测下来这样训练出来的模型在跨光照条件下的稳定性明显更好mAP波动能控制在5个百分点以内。标注工具用LabelImg或者CVAT都行格式统一成YOLO的txt格式class_id center_x center_y width height归一化到0-1。类别就一个person。如果场景里有明确需要区分的比如区分学生和教职工可以加类别但一般没必要会增加标注成本。2.3 数据清洗那些必须删掉的脏样本采集回来的原始数据大概有20%-30%是需要清洗掉的。我总结了几类必须删的严重模糊无人机高速移动或者风速大时的运动模糊人体轮廓完全糊成一团标了也是噪声。极端畸变画面边缘的桶形畸变区域人体被拉伸变形和真实形态差异太大。过曝/欠曝正午顶光下草坪反光过曝人体和背景融为一体无法准确标注。重复帧视频抽帧时相邻帧几乎一样保留会造成数据冗余一般按时间间隔抽帧保证帧间差异。无人区域纯背景图可以保留少量作为负样本但不要太多控制在正样本的10%左右。清洗完之后建议做一次标注质量抽检随机抽10%的图人工复核重点看密集区域的框是否漏标、重叠框是否合理。我踩过的坑是标注员在密集区域容易偷懒把三五个人标成一个大框这种样本混进去会严重带偏模型。3. 数据增强策略针对航拍场景的定制化处理3.1 常规增强的适用性分析YOLO训练常用的增强手段有Mosaic、MixUp、HSV调整、随机翻转、随机缩放等。这些在航拍人体检测里不是全都适用得挑着用。Mosaic增强是YOLO系列的招牌把4张图拼成1张能显著提升小目标检测能力。在航拍场景里我强烈建议开启因为它天然制造了多尺度、多背景的混合样本对密集小目标特别有效。但要注意Mosaic会让边缘区域出现拼接痕迹如果拼接处正好有人体会产生不自然的截断所以Mosaic的概率不要设太高0.5-0.7比较合适。随机翻转要谨慎。水平翻转没问题人体左右对称翻转后依然合理。但垂直翻转绝对不能用——航拍图垂直翻转后人体变成头朝下这在现实中不可能出现会引入错误的先验。同理大角度的随机旋转也要限制一般控制在±15度以内模拟无人机航向的轻微偏移。HSV调整很有用因为航拍的光照变化大。建议把色调H调整幅度设小一点±10饱和度和明度S、V可以设大一点±40这样能模拟不同时段的光照又不会把草坪的颜色调成跑道色。3.2 针对小目标和遮挡的专项增强常规增强之外我还会加两类专项增强第一类是随机缩放拼接。把原图缩小后再贴到一张大画布上模拟远距离小目标或者把局部区域放大模拟近距离大目标。这个操作能显著提升模型对尺度变化的鲁棒性。实现上可以用Albumentations库的RandomScale加PadIfNeeded组合。第二类是随机遮挡。在人体区域随机贴一些小方块模拟被其他人或物体遮挡强迫模型学习局部特征。这个增强对密集场景特别有效能降低漏检率。但遮挡比例要控制一般遮挡面积不超过人体的30%否则标