背景介绍
算法解读:PP-YOLOE+ SOD
PP-YOLOE-SOD 是飞桨团队自研的小目标检测特色模型,使用数据集分布相关的基于向量的DFL算法 和 针对小目标优化的中心先验优化策略,并且在模型的Neck(FPN)结构中加入Transformer模块,以及结合增加P2层、使用large size等策略,最终在多个小目标数据集上达到极高的精度。
· 整体模型结构解读
PP-YOLOE-SOD基于PP-YOLOE优化,模型结构方面,同时考虑到推理耗时和精度问题,在PP-YOLOE的基础上在Neck中引入的Transformer encoder模块,整体结构如下图所示:
· 针对小目标任务的训练优化
· 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。
使用方法
安装
# cpu
python -m pip install paddlepaddle==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
# gpu,该命令仅适用于 CUDA 版本为 11.8 的机器环境
python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
# gpu,该命令仅适用于 CUDA 版本为 12.3 的机器环境
python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu123/
pip install https://paddle-model-ecology.bj.bcebos.com/paddlex/whl/paddlex-3.0.0b2-py3-none-any.whl
快速体验
from paddlex import create_pipeline
pipeline = create_pipeline(pipeline="small_object_detection")
output = pipeline.predict("small_object_detection.jpg")
for res in output:
res.print() ## 打印预测的结构化输出
res.save_to_img("./output/") ## 保存结果可视化图像
res.save_to_json("./output/") ## 保存预测的结构化输出
上述代码中:
首先使用产线名称调用create_pipeline()方法实例化产线对象;
然后使用predict()方法进行预测,对于预测结果支持print()方法进行打印,save_to_img()方法进行可视化并保存为图片以及save_to_json()方法保存预测的结构化输出。
二次开发
如果对产线的预训练模型效果满意,可以直接对产线进行高性能推理/服务化部署/端侧部署,如果不满意,您也可以使用 PaddleX 进行便捷高效的二次开发,使用自己场景的数据对模型微调训练获得更优的精度。
基于 PaddleX 便捷的二次开发能力,使用统一命令即可完成数据校验、模型训练与评估推理,无需了解深度学习的底层原理,按要求准备好场景数据,简单运行命令即可完成模型迭代,此处展示小目标检测模型二次开发流程:
python main.py -c paddlex/configs/small_object_detection/PP-YOLOE_plus_SOD-S.yaml \
-o Global.mode=train \
-o Global.dataset_dir=./dataset/small_det_examples
上述命令中: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官方教程文档:
小目标检测产线使用教程
小目标检测模块使用教程
精彩课程预告