文章目录

  • 官方资料
  • 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.pswp.cn/diannao/96059.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96059.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96059.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Candle用 Rust 打造“小而快”的机器学习栈

1. 为什么是 Candle?(三条硬理由)Serverless & 轻量部署 传统 Python 生态在函数冷启动/GIL/体积上常见掣肘。Candle 是纯 Rust 二进制,可将推理程序打包成一个小体积可执行文件,非常适合边缘侧 & Serverless。…

小波卷积YYDS!小波变换+CNN创新结合

2025深度学习发论文&模型涨点之——小波卷积小波卷积通过先将输入信号或图像进行小波分解,得到不同尺度的子带信号,然后在每个子带信号上应用卷积操作来提取局部特征,最后通过逆小波变换将经过卷积处理的子带信号重构为最终的输出信号或图…

高性价比的5G专网设备,助力企业降本增效

在数字化转型的浪潮中,企业亟需兼顾先进技术与投入成本的平衡。作为全球领先的核心网供应商,IPLOOK始终坚持以客户为中心,推出高性价比的5G行业专网设备,帮助企业在保障性能的同时,有效降低网络建设与运维成本。 高性…

可编辑150页PPT | 某制造集团产业数字化转型规划方案

推荐摘要:某制造集团产业数字化转型规划方案,直击传统制造向智能智造跃迁的核心命题。该集团作为装备制造领域龙头,业务横跨工程机械、农业机械、能源装备三大板块,拥有12个生产基地、400余家供应链企业,但面临设备联网…

Kafka 面试题及详细答案100道(11-22)-- 核心机制1

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面试题-专栏总目录 文章目录 一、本文面试题目录 11. 什么是Kafka的分区(P…

PHP反序列化的CTF题目环境和做题复现第1集

1 通过post参数提交反序列信息 2 题目 http://192.168.1.8/fxl1/fxl1.php <?php highlight_file(__FILE__);class ezUnserialize{public $key;public function __destruct(){if($this->key "FLAG"){include(flag.php);echo $flag;}} } unserialize($_POST[a…

[论文阅读] 软件工程工具 | EVOSCAT可视化工具如何重塑软件演化研究

EVOSCAT可视化工具如何重塑软件演化研究 论文信息 原标题&#xff1a;EVOSCAT: Exploring Software Change Dynamics in Large-Scale Historical Datasets主要作者及机构&#xff1a; Souhaila Serbout&#xff08;University of Zurich, Zurich, Switzerland&#xff09;Diana…

【入门级-算法-6、排序算法:排序的基本概念冒泡排序】

一、排序概念&#xff1a;是将一组数据按照特定规则重新排列的过程&#xff0c;是计算机科学中最基础且重要的算法之一。 二、排序的基本要素 排序键(Key)&#xff1a;是排序过程中用于比较和确定元素顺序的特定数据项或数据属性。 稳定性&#xff1a;排序过程中&#xff0c;相…

搭建私有Claude体验平台:Open WebUI + Anthropic API + Trojan完整部署指南

言简意赅的讲解Open WebUI Anthropic API Trojan解决的痛点 身边的小伙伴们都想体验Claude&#xff0c;但直接访问Anthropic API存在网络连接问题。本文记录了我如何通过Docker部署Open WebUI&#xff0c;结合网络代理和Anthropic Manifold Pipe&#xff0c;为团队搭建了一个…

Hadoop技术栈(一)hadoop搭建与HDFS常用命令

概念 hadoop是一个大数据的分布式存储&#xff0c;调度&#xff0c;计算框架。也可以说是一个生态圈&#xff0c;包含很多技术&#xff1a;Hive、Hbase、Flume、Kafka... Hadoop的优点 Hadoop具有存储和处理数据能力的高可靠性。 Hadoop通过可用的计算机集群分配数据&#xf…

electron之win/mac通知免打扰

目录 系统区别 win&#xff1a;不支持桌面通知&#xff0c;使用气泡显示 mac&#xff1a;有镜像/共享屏幕时 通知免打扰设置 代码 Vuex&#xff1a;免打扰状态 src/store/App/mutations.ts src/store/App/state.ts src/views/miracast/index.vue Util 【可选】src/ut…

为什么Integer缓存-128 ~ 127

背景 面试题, 相关问题的考察. 题目大概是, 包装类型Integer 比较的时候 : -127 ~ 128 是否相等. 其他是否相等? 原理比较的是地址. 如果是不同的对象, 那么就不相等. 实践 下面是几个简单实践. 全部新建对象 解释: 新建对象后, 地址不同, 所以都是false不新建对象 暂时的理解…

微软Wasm学习-创建一个最简单的c#WebAssembly测试工程

要创建一个最简单的微软 WebAssembly&#xff08;Wasm&#xff09;测试工程&#xff0c;最直接的方式是使用 Blazor WebAssembly&#xff0c;这是微软官方推荐的 WebAssembly 开发框架。下面是创建和运行最简单 Blazor WebAssembly 项目的步骤&#xff1a; 相关&#xff1a;微…

通过 GitHub520 项目自动获取最新 Hosts 配置,无需手动查询 IP。

操作步骤&#xff1a;打开终端Command 空格 聚焦搜索“终端”&#xff0c;打开应用。执行一键脚本复制以下命令粘贴到终端运行&#xff08;需输入密码授权&#xff09;&#xff1a;bashsed -i "" "/# GitHub520 Host Start/,/# Github520 Host End/d" /et…

C# 目录与文件操作笔记

一、基本概念1. 数据存储方式对比存储方式适用场景特点数据库存储大量、关系复杂、有序的数据结构化强&#xff0c;支持复杂查询和事务文件存储少量、关系简单的数据&#xff08;如日志&#xff09;操作简便&#xff0c;可存储于任意介质2. 文件与流文件&#xff1a;存储在磁盘…

docker部署flask并迁移至内网

需要直接使用的可以使用下面的链接&#xff1a; 通过网盘分享的文件&#xff1a;docker_flask.tar 链接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwdqxqm 提取码: qxqm 来自百度网盘超级会员v6的分享 外网部署docker版flask 目录结构 ./miniconda-docker/ ├── d…

161. Java Lambda 表达式 - 使用工厂方法创建 Predicates

文章目录161. Java Lambda 表达式 - 使用工厂方法创建 Predicates&#x1f3af; Predicate 工厂方法概览&#x1f9ea; 示例一&#xff1a;Predicate.isEqual() 工厂方法&#x1f9ea; 示例二&#xff1a;Predicate.not() 工厂方法&#xff08;Java 11&#xff09;&#x1f3af…

c#Blazor WebAssembly在网页中多线程计算1000万次求余

在 Blazor WebAssembly 中实现多线程计算并获取线程 ID 是可行的&#xff0c;但需要正确配置多线程环境并处理线程安全和 UI 更新逻辑。以下是完整示例和检测方法&#xff1a;一、准备工作&#xff1a;启用多线程支持首先需确保项目已启用 WebAssembly 多线程&#xff0c;修改项…

鼠标右键没有“通过VSCode打开文件夹”

1, WinR 打开运行&#xff0c;输入regedit&#xff0c;打开注册表&#xff0c;找到HKEY_CLASSES_ROOT\*\shell分支&#xff0c;如果没有shell分支&#xff0c;则在*下点击右键&#xff0c;选择“新建&#xff0d;项”&#xff0c;建立shell分支。 2, 在shell下新建“VisualCod…

[ Spring 框架 ] 框架搭建和属性赋值

目录 1. Spring定义: (1). IOC( Inversion of Control): (2). AOP (Aspect Oriented Programming): (3)一站式: 2. spring搭建: (1). 创建一个Maven项目 (2). 导入核心 jar包 (3). 编写 spring 配置文件 (4). 编写实体类,并生成set方法 (5). 在resource中加入spring核…