目录

无人机视角目标识别训练

背景

无人机视角下小目标的人物识别,现场收集到的数据量少、背景单一,拍摄角度可能是正射,也可能是倾斜的。需要通过训练使模型能够识别小目标、不同背景、不同拍摄角度等情况。

核心策略

  • 背景无关化与数据增强

做法: 将视频中识别出的人物实例(Instance)抠出来,随机“粘贴”到各种完全不同的背景图中(如沙漠、城市街道、雪地、森林等)。

意义: 强制模型学习人体的轮廓和特征,而不是人体与特定地面的空间关系。

  • 引入在 VisDroneUAVDT 数据集

不要从零开始训练。建议使用专门针对无人机视角训练过的预训练模型进行微调

  • 自己的数据集,进行抽帧

关键帧提取: 不要按固定帧率抽,而是按位移/变化抽。只有当画面中的人物移动了一定距离,或者无人机视角发生了变化时,才取一张图。

负样本收集: 抽取一些完全没有人的背景图作为负样本。这能有效降低模型在其他场景把石头、邮箱或阴影误判为人的概率。

模型架构:针对“小目标”与“高空视角”

通用 YOLO 模型在无人机视角下表现不佳,是因为感受野太粗糙,小目标在特征图上可能只占 1 个像素。

标准的 YOLO 通常有 3 个检测头(P3, P4, P5),分别对应不同的下采样倍数。

  • 改进方案: 增加一个 P2 探测头
  • 原理: P2 层下采样倍数更小(通常是 4 倍),保留了极高分辨率的特征,专门用来检测只有几个像素大小的“火点”或“人体”。
  • 效果: 对于正射视角下只有“一个小点”的头部识别效果提升极其显著。
def train_from_yolo():
    # 加载预训练权重
    model = YOLO('yolov8l-p2.yaml')
    model.load('yolov8l.pt')

    # 开始训练
    results = model.train(
        data="dataset/v251230/data.yaml",  # 数据集配置文件路径
        epochs=100,  # 训练轮数(根据任务调整,建议50~300)
        freeze=10,  # 冻结前10层(Backbone部分,保护通用特征)
        batch=4,  # 批次大小(根据GPU显存调整)
        imgsz=1280,  # 输入图像尺寸(默认640x640)
        device=0,  # 训练设备(0表示第1块GPU,cpu表示CPU)
        workers=4,  # 数据加载线程数
        name="person_yolo8_v251230A",  # 训练任务名称(用于保存结果)
        pretrained=True,  # 关闭预训练(从头训练必须设为False)
        patience=10,  # 自动早停
        lr0=0.001,  # 初始学习率(默认0.01,可按需调整)
        mosaic=1,
        mixup=0.3,
        scale=0.5,
        close_mosaic=10,
        # cos_lr=True,
        # momentum=0.937,            # 动量因子
        # weight_decay=0.0005,       # 权重衰减(防止过拟合)
        augment=True,  # 启用数据增强
        val=True,
    )

一些注意事项

  • 很糊的数据应该标注吗?
模糊类型 特征 是否标注 处理建议
运动模糊 (Motion Blur) 画面有拖影,像拉长了 建议标注 这种模糊保留了方向信息,模型可以学会识别拖影状的人体。
失焦/散焦 (Defocus) 整个画面或局部非常肉,轮廓全无 少量标注 仅标注能看出大致头肩结构的。
分辨率过低 (Low-Res) 人体只有 5x5 或 8x8 像素 必须标注 这是无人机检测的核心,配合 P2 检测头,模型能学会利用像素点的分布来识别人。
  • 标注前需要先把图片转成640x640吗?

千万不要! 虽然网上的数据集大多都是640x640的。

保持原图进行标注: 直接把拍摄的原始视频抽帧(通常是 1080P 或 4K),直接导入标注工具。

让模型决定尺寸: 在训练脚本中设置 imgsz=1280(或你选定的尺寸)。

  • YOLO 的代码(Ultralytics)会自动完成缩放、填充(Padding)和长宽比对齐。
  • 重要: 模型在训练时会自动处理这种缩放,不需要你手动预处理图片。

多尺度训练 (Multi-scale Training):

  • 训练时开启多尺度开关,模型会学会在不同分辨率下识别目标,这才是提高泛化能力的正确姿势。