摘要:小目标检测通常指的是在图像或视频中精确地检测和定位尺寸较小、面积较小的目标物体,这些目标在图像中的像素尺寸通常较小,可能小于32像素×32像素(根据 MS COCO 等数据集的定义),且可能被背景或其他物体所掩盖,难以被肉眼直接观察出来。在许多应用场景中,小目
01
背景介绍
小目标检测通常指的是在图像或视频中精确地检测和定位尺寸较小、面积较小的目标物体,这些目标在图像中的像素尺寸通常较小,可能小于32像素×32像素(根据 MS COCO 等数据集的定义),且可能被背景或其他物体所掩盖,难以被肉眼直接观察出来。在许多应用场景中,小目标的检测都至关重要。例如,在遥感图像中,检测小型车辆或建筑,可以帮助城市规划和交通管理;在自动驾驶中,检测远处的小型障碍物可以提高行车安全;在医学图像中,检测微小病灶能够辅助医生进行早期诊断。传统的目标检测算法可能因小目标的低像素密度而出现检测不准或漏检的情况,因此,专门的小目标检测算法应运而生,小目标检测可以有效提升对小物体的识别能力,确保在实际应用中不遗漏重要信息。这项技术在提高安全性和自动化水平方面发挥着重要作用。
PaddleX 小目标检测产线是专注于解决小目标定位和识别任务的端到端模型产线,可以从图像中快速准确地定位小目标位置并识别小目标类型,可以快速支持如遥感分析,城市交通监控图像分析等垂类场景的高效应用。
02
算法解读:PP-YOLOE+SOD
小目标检测(SOD)效果图
▎ 整体模型结构解读
PP-YOLOE-SOD 基于 PP-YOLOE 优化,模型结构方面,同时考虑到推理耗时和精度问题,在 PP-YOLOE 的基础上在 Neck 中引入的 Transformer encoder 模块,整体结构如下图所示:
PP-YOLOE-SOD 模型结构示意图
▎针对小目标任务的训练优化
针对小目标任务专门设计的正样本挖掘机制
在 YOLO 系列的 anchor-free 模型预测范式下,原始的 DFL 回归算法要求预测点在 GT Box 的内部,并且回归头只能预测非负值。然而,在 SOD 场景下,由于预测点的稀疏性,在原始 DFL 匹配策略下,不能保证每个 GT Box 都能匹配上正样本,由此造成小目标召回较低。针对这个问题,PaddleDetection 团队重新设计了针对 SOD 的 DFL 回归算法,核心变化有两点:允许回归头在预测时去预测负值,并且对于 GT Box 在匹配正样本时,不要求预测点一定在 GT Box 内部,而是在 GT Box 中心一定范围( center radius )即可,如上图 c 所示。同时,对于 DFL 中超参数 reg_max 的设置,飞桨团队也提出了一种基于数据集 GT Box 分布设置的方法,从而避免在训练时引入过多的噪音。
▎PaddleX 当前支持的小目标检测模型
以下列出来 PaddleX 当前支持的小目标检测模型列表,各个模型的性能指标如下:
注:以上精度指标为 VisDrone-DET 验证集 mAP(0.5:0.95)。所有模型 GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为8,精度类型为 FP32。
03
使用方法
▎安装
安装 PaddlePaddle
(详细代码请进入百度AI公众号内同篇文章查看)
安装 PaddleX Wheel 包
▎快速体验
PaddleX 提供了简单易用的 Python API,只需几行代码即可体验端到端预测效果,可以下载测试图片,方便大家快速体验效果:
上述代码中:
1、首先使用产线名称调用 create_pipeline方法实例化产线对象;
2、然后使用 predict方法进行预测,对于预测结果支持 print方法进行打印,save_to_img方法进行可视化并保存为图片以及 save_to_json方法保存预测的结构化输出。
下图中左为测试图像,右为放大的检测结果。可以看到,PP-YOLOE+ SOD 模型检出了其中的小目标。
原图
PP-YOLOE+ SOD效果图
▎二次开发
如果对产线的预训练模型效果满意,可以直接对产线进行高性能推理/服务化部署/端侧部署,如果不满意,您也可以使用 PaddleX 进行便捷高效的二次开发,使用自己场景的数据对模型微调训练获得更优的精度。
基于 PaddleX 便捷的二次开发能力,使用统一命令即可完成数据校验、模型训练与评估推理,无需了解深度学习的底层原理,按要求准备好场景数据,简单运行命令即可完成模型迭代,此处展示小目标检测模型二次开发流程:
(详细代码请进入百度AI公众号内同篇文章查看)
上述命令中:main.py 为模型开发统一入口文件;-c 用于指定模型配置文件的参数,模型配置文件 PP-YOLOE_plus_SOD-S.yaml 中包含了模型的信息,如模型名、学习率、批次大小等,其中 mode 支持指定数据校验(dataset_check)、训练(train)、评估(evaluate)和模型导出(export)。
更多参数也可以继续在命令中追加参数设置:如指定前2卡 gpu 训练:-o Global.device=gpu:0,1;设置训练轮次数为10:-o Train.epochs_iters=10。此外,相关参数均可通过修改.yaml 配置文件中的 Global 和 Train 的具体字段来进行设置。
其余更详细的使用方法及产线部署、自定义数据集相关的内容,请参考 PaddleX 官方教程文档:
小目标检测产线使用教程
来源:滑滑科技智慧