当前位置: 首页 > news >正文

用PaddleDetection套件训练自己的数据集,PP-YOLO-SOD训练全流程

文章目录

  • 官方资料
  • ppyoloe+ 训练全流程
    • 环境配置与套件准备
    • 数据集准备与VOC格式ppdet的要求
    • 标签列表txt文件生成脚本
    • 数据集配置
    • 预训练权重
    • 模型配置
    • ppyoloe训练命令
    • ppyoloe评估命令
    • ppyoloe推理命令与可视化结果
  • ppyoloe-SOD 训练全流程
    • 预训练权重
    • 模型配置
    • ppyoloe训练命令

官方资料

PaddlePaddle框架官方文档:https://www.paddlepaddle.org.cn/
在这里插入图片描述

论文:PP-YOLOE: An evolved version of YOLO
PaddleDection套件:pp-yoloe-sod-高精度小目标检测模型
在这里插入图片描述
小目标检测模型说明:PP-YOLOE-SOD 小目标检测模型(PP-YOLOE Small Object Detection)
在这里插入图片描述

PP-YOLOE-SOD预训练权重:模型库
在这里插入图片描述

ppyoloe+ 训练全流程

环境配置与套件准备

pip install paddlepaddle-gpu==3.0.0b1 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
# 进入套件
cd PaddleDetection-release-2.8.1# 初始化
python setup.py install# 安装依赖
pip install -r requirements.txt
pip install visualdl -i https://mirror.baidu.com/pypi/simple

直接运行以下命令安装 libgomp1

apt-get update && apt-get install -y libgomp1

数据集准备与VOC格式ppdet的要求

VOC格式数据集,训练集、验证集、测试集划分好,本别一个文件夹。
在这里插入图片描述
以训练集为例,需要含这四个:
在这里插入图片描述

  • 图片文件夹:JPEGImages
    在这里插入图片描述

  • 标签文件夹:Annotations
    在这里插入图片描述

  • 类别列表文件:label_list.txt
    在这里插入图片描述

  • 标签列表文件:train_list.txt
    在这里插入图片描述

标签列表txt文件生成脚本

import osdef generate_list_file(voc_root, output_list_path):"""生成VOC数据集的列表文件,每行格式为:JPEGImages/图像名 Annotations/标注名参数:voc_root: VOC数据集根目录(包含JPEGImages和Annotations文件夹)output_list_path: 输出的列表文件路径(如train_list.txt)"""# 检查输入目录是否存在jpeg_dir = os.path.join(voc_root, "JPEGImages")anno_dir = os.path.join(voc_root, "Annotations")if not os.path.exists(jpeg_dir):raise ValueError(f"JPEGImages目录不存在:{jpeg_dir}")if not os.path.exists(anno_dir):raise ValueError(f"Annotations目录不存在:{anno_dir}")# 获取所有图像文件(仅保留常见图像格式)image_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.JPG', '.JPEG', '.PNG', '.BMP')image_files = [f for f in os.listdir(jpeg_dir) if f.endswith(image_extensions)]if not image_files:print(f"警告:在 {jpeg_dir} 中未找到任何图像文件")return# 写入列表文件with open(output_list_path, 'w') as f:count = 0for img_file in image_files:# 图像文件名(不含扩展名)img_name = os.path.splitext(img_file)[0]# 对应的标注文件名称anno_file = f"{img_name}.xml"# 检查标注文件是否存在anno_path = os.path.join(anno_dir, anno_file)if not os.path.exists(anno_path):print(f"警告:未找到 {img_file} 对应的标注文件 {anno_file},已跳过")continue# 按要求格式写入(相对路径)line = f"JPEGImages/{img_file} Annotations/{anno_file}\n"f.write(line)count += 1print(f"已生成 {output_list_path},包含 {count} 对有效图像和标注")if __name__ == "__main__":# 配置你的数据集路径train_voc_root = "/mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-train-VOC"val_voc_root = "/mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-val-VOC"# 输出列表文件路径(可根据需要修改,建议放在数据集根目录)train_list_path = os.path.join(train_voc_root, "train_list.txt")val_list_path = os.path.join(val_voc_root, "val_list.txt")# 生成训练集列表print("开始处理训练集...")generate_list_file(train_voc_root, train_list_path)# 生成验证集列表print("\n开始处理验证集...")generate_list_file(val_voc_root, val_list_path)

数据集配置

PaddleDetection套件的所有配置文件都在PaddleDetection-release-2.8.1/configs目录下,数据集的配置文件在PaddleDetection-release-2.8.1/configs/datasets
在这里插入图片描述voc.yml是官方的VOC数据集的配置文件,自己新建一个DUT-drone_voc.yaml配置文件

后面的模型配置文件中需要修改为../datasets/DUT-drone_voc.yaml

metric: VOC
map_type: 11point
num_classes: 1TrainDataset:name: VOCDataSet  # 使用框架默认的VOC数据集类dataset_dir: /mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-train-VOC  # 绝对路径anno_path: train_list.txtlabel_list: label_list.txtdata_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']EvalDataset:name: VOCDataSetdataset_dir: /mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-val-VOCanno_path: val_list.txtlabel_list: label_list.txtdata_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']TestDataset:name: ImageFolderimage_dir: /mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-val-VOC/JPEGImagesanno_path: /mnt/Virgil/PaddleDetetion/DUT-datasets/DUT-Anti-UAV-val-VOC/label_list.txt

预训练权重

模型库地址:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.8.1/configs/smalldet
模型库含有的:

  • VisDrone模型
  • COCO模型
  • 切图模型
  • 拼图模型

我下载的是PP-YOLOE+_l的模型
在这里插入图片描述

随后在模型配置文件中指定路径

pretrain_weights: /mnt/Virgil/PaddleDetetion/ppyoloe_plus_crn_l_80e_coco.pdparams

模型配置

模型的配置文件在PaddleDetection-release-2.8.1/configs/ppyoloe

在这里插入图片描述PaddleDetection-release-2.8.1/configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml是官方的模型配置文件,自己新建一个DUT_ppyoloe_plus_crn_l_80e_coco.yml

_BASE_: ['../datasets/DUT-drone_voc.yaml','../runtime.yml','./_base_/optimizer_80e.yml','./_base_/ppyoloe_plus_crn.yml','./_base_/ppyoloe_plus_reader.yml',
]log_iter: 100
epoch: 100
snapshot_epoch: 5weights: output/ppyoloe_plus_crn_l_80e_coco/model_final
#pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/pretrained/ppyoloe_crn_l_obj365_pretrained.pdparams
pretrain_weights: /mnt/Virgil/PaddleDetetion/ppyoloe_plus_crn_l_80e_coco.pdparamsdepth_mult: 1.0
width_mult: 1.0TrainReader:batch_size: 8

ppyoloe训练命令

参考飞浆官方乒乓球识别比赛的命令:

python tools/train.py -c configs/picodet/ppq.yml \--use_vdl=true \--vdl_log_dir=/home/aistudio/work/vdl_dir \--eval \-o save_dir=/home/aistudio/work/model
cd /mnt/Virgil/PaddleDetetion/PaddleDetection-release-2.8.1
python -u tools/train.py -c configs/ppyoloe/DUT_ppyoloe_plus_crn_l_80e_coco.yml \--use_vdl=true \--vdl_log_dir=vdl_dir/scalar \--eval

ppyoloe评估命令

参考飞浆官方乒乓球识别比赛的命令:

python tools/eval.py -c configs/picodet/ppq.yml \-o weights=/home/aistudio/work/model/ppq/best_model.pdparams \# --classwise \

ppyoloe推理命令与可视化结果

参考飞浆官方乒乓球识别比赛的命令:

cd PaddleDetection-2.5.0
!python tools/infer.py -c configs/picodet/ppq.yml \--infer_img=/home/aistudio/work/dataset/val/JPEGImages/game_1_frame_012375.png \-o weights=/home/aistudio/work/model/ppq/best_model.pdopt \--output_dir=/home/aistudio/work/img

参考飞浆官方乒乓球识别比赛的可视化:

import matplotlib.pyplot as plt
import cv2# 读取图像
image_path = "/home/aistudio/work/img/game_1_frame_012375.png"
image = cv2.imread(image_path)# 检查图像是否成功加载
if image is None:print(f"Failed to load image: {image_path}")
else:# 转换 BGR 到 RGBimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 显示图像plt.imshow(image)plt.axis("off")  # 关闭坐标轴plt.show()

ppyoloe-SOD 训练全流程

预训练权重

模型库地址:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.8.1/configs/smalldet

我下载的是PP-YOLOE+_SOD-l的模型
在这里插入图片描述

随后在模型配置文件中指定路径

pretrain_weights: /mnt/Virgil/PaddleDetetion/ppyoloe_plus_sod_crn_l_80e_visdrone.pdparams

模型配置

模型的配置文件在PaddleDetection-release-2.8.1/configs/smalldet

在这里插入图片描述

PaddleDetection-release-2.8.1/configs/smalldet/ppyoloe_plus_sod_crn_l_80e_coco.yml是官方的模型配置文件,自己新建一个DUT_ppyoloe_plus_sod_crn_l_80e_coco.yml

修改数据集目录为:../datasets/DUT-drone_voc.yaml

_BASE_: ['../datasets/DUT-drone_voc.yaml','../runtime.yml','../ppyoloe/_base_/optimizer_80e.yml','../ppyoloe/_base_/ppyoloe_plus_crn.yml','../ppyoloe/_base_/ppyoloe_plus_reader.yml',
]log_iter: 100
epoch: 100
snapshot_epoch: 5
weights: output/ppyoloe_plus_sod_crn_l_80e_coco/model_final#pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/pretrained/ppyoloe_crn_l_obj365_pretrained.pdparams
pretrain_weights: /mnt/Virgil/PaddleDetetion/ppyoloe_plus_sod_crn_l_80e_visdrone.pdparamsdepth_mult: 1.0
width_mult: 1.0CustomCSPPAN:num_layers: 4use_trans: TruePPYOLOEHead:reg_range: [-2, 17]static_assigner_epoch: -1assigner:name: TaskAlignedAssigner_CRcenter_radius: 1nms:name: MultiClassNMSnms_top_k: 1000keep_top_k: 300score_threshold: 0.01nms_threshold: 0.7TrainReader:batch_size: 2

ppyoloe训练命令

cd /mnt/Virgil/PaddleDetetion/PaddleDetection-release-2.8.1
python -u tools/train.py -c configs/smalldet/DUT_ppyoloe_plus_sod_crn_l_80e_coco.yml \--use_vdl=true \--vdl_log_dir=vdl_dir/scalar \--eval
http://www.dtcms.com/a/336300.html

相关文章:

  • 领域快速入门过程记录之--电力网络
  • ROS常用命令手册
  • # C++ 中的 `string_view` 和 `span`:现代安全视图指南
  • GaussDB常用术语缩写及释义
  • 【Linux】IO多路复用
  • nodejs 错误处理
  • Shell脚本-条件判断相关参数
  • 任务型Agent架构简介
  • JUC并发编程04 - 同步/syn-ed(01)
  • prototype 和 _ _ proto _ _的关联
  • 计算机网络 OSI 七层模型和 TCP 五层模型
  • 【Linux系列】如何在 Linux 服务器上快速获取公网
  • 遥感数据介绍——MODIS、VIIRS、Sentinel-2
  • 飞算JavaAI结合Redis实现高性能存储:从数据瓶颈到极速读写的实战之旅
  • 三种变量类型在局部与全局作用域的区别
  • 大模型算法岗面试准备经验分享
  • 【Linux网络编程】NAT、代理服务、内网穿透
  • css中 hsl() 的用法
  • Java-I18n
  • 43 C++ STL模板库12-容器4-容器适配器-堆栈(stack)
  • 百度笔试编程题 选数
  • PWM控制LED亮度:用户态驱动开发详解
  • Soundraw - 你的AI音乐生成器
  • 51单片机-驱动静态数码管和动态数码管模块
  • linux线程被中断打断,不会计入调度次数
  • 解决 SECURE_PCI_CONFIG_SPACE_ACCESS_VIOLATION蓝屏报错
  • 攻防世界—unseping(反序列化)
  • 机器学习----PCA降维
  • RocketMQ面试题-未完
  • 芋道RBAC实现介绍