PP-YOLOE-SOD学习笔记1

项目:基于PP-YOLOE-SOD的无人机航拍图像检测案例全流程实操 - 飞桨AI Studio星河社区

一、安装环境

先准备新环境py>=3.9
1.先cd到源代码的根目录下
2.pip install -r requirements.txt
3.python setup.py install
这一步需要看自己的GPU情况,去飞浆官网对着下载即可,第四步下载不了看第六步
4.pip install paddlepaddle-gpu==2.4.2 -i xxx(镜像源)
5.pip install paddlepaddle==2.4.2-i xxx(这是CPU版本,也需要配套下载,不然GPU无法运行)
6.pip install --upgrade pip

二、标注工具

定义自己的数据集:PaddleDetection/docs/tutorials/data/DetAnnoTools.md at develop · PaddlePaddle/PaddleDetection

labelme 和 labelImg 就不介绍了很常规的标注工具。
数据格式转换:PaddleDetection/tools/x2coco.py at develop · PaddlePaddle/PaddleDetection

 X-Anylabeling

特别介绍,AnyLabeling = LabelImg + Labelme + Improved UI + Auto-labeling

工具官网:CVHub520/X-AnyLabeling: Effortless data labeling with AI support from Segment Anything and other awesome models.

工具下载:Releases · CVHub520/X-AnyLabeling

功能:

  • 支持GPU推理加速;

  • 支持图像和视频处理;

  • 支持单帧和批量预测所有任务;

  • 支持自定义模型和二次开发设计;

  • 支持一键导入和导出主流的标签格式,如COCO\VOC\YOLO\DOTA\MOT\MASK;

  • 支持多种图像标注样式,包括 多边形、矩形、旋转框、圆形、线条、点,以及 文本检测、识别 和 KIE 标注;

  • 支持各类视觉任务,如图像分类、目标检测、实例分割、姿态估计、旋转检测、多目标跟踪、光学字符识别、图像文本描述、车道线检测、分割一切系列等。

自动标注(无论是路径还是图片都禁止使用中文)后如果是自动保存的格式json需要先进行标注内容处理,因为上述格式转换过程需要标注框信息只有对角两个点,因此需要脚本处理后再进行格式转换。

import os
import json# 函数:读取和转换坐标
def convert_bbox_to_coordinates(data):# 存储转换后的标注数据converted_annotations = []# 遍历每个标注框for shape in data.get('shapes', []):# 提取四个点的坐标points = shape['points']# 获取所有 x 和 y 坐标x_coords = [point[0] for point in points]y_coords = [point[1] for point in points]# 左上角为最小的 x 和 ytop_left = (min(x_coords), min(y_coords))# 右下角为最大的 x 和 ybottom_right = (max(x_coords), max(y_coords))# 转换后的坐标coordinates = {'label': shape['label'],'points': [top_left, bottom_right],  # 只保存左上角和右下角'group_id': shape.get('group_id'),'description': shape.get('description', ''),'difficult': shape.get('difficult', False),'shape_type': shape.get('shape_type', 'rectangle'),'flags': shape.get('flags', {}),'attributes': shape.get('attributes', {})}# 将转换后的数据添加到列表converted_annotations.append(coordinates)# 返回转换后的数据data['shapes'] = converted_annotationsreturn data# 函数:处理文件夹中的所有 JSON 文件
def process_json_folder(input_folder, output_folder):# 确保输出文件夹存在os.makedirs(output_folder, exist_ok=True)# 遍历输入文件夹中的所有 JSON 文件for filename in os.listdir(input_folder):if filename.endswith('.json'):input_path = os.path.join(input_folder, filename)output_path = os.path.join(output_folder, filename)# 打开并读取 JSON 文件with open(input_path, 'r', encoding='utf-8') as file:data = json.load(file)# 执行坐标转换操作converted_data = convert_bbox_to_coordinates(data)# 保存转换后的数据到新文件夹with open(output_path, 'w', encoding='utf-8') as outfile:json.dump(converted_data, outfile, ensure_ascii=False, indent=4)print(f'Converted and saved: {filename}')# 设置输入文件夹和输出文件夹的路径
input_folder = 'input_json_folder'  # 输入文件夹路径
output_folder = 'output_json_folder'  # 输出文件夹路径# 调用函数,处理文件夹中的所有 JSON 文件
process_json_folder(input_folder, output_folder)

三、标注后准备

源代码:PaddleDetection: PaddleDetection的目的是为工业界和学术界提供丰富、易用的目标检测模型

数据路径配置文件(重点,简单参数):
PaddleDetection/configs/datasets/coco_detection.yml

metric: COCO
num_classes: 1 #类别# 训练
TrainDataset:name: COCODataSetimage_dir: train2017    # 输入图像anno_path: annotations/instances_train2017.json    # 标注文件jsondataset_dir: dataset/coco    # 输出保存地址data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']# 验证
EvalDataset:name: COCODataSetimage_dir: val2017anno_path: annotations/instances_val2017.jsondataset_dir: dataset/cocoallow_empty: true#测试
TestDataset:name: ImageFolderanno_path: annotations/instances_val2017.json # also support txt (like VOC's label_list.txt)dataset_dir: dataset/coco # if set, anno_path will be 'dataset_dir/anno_path'

模型参数配置文件(重点):
① PaddleDetection/configs/smalldet/ppyoloe_plus_sod_crn_l_80e_coco.yml

_BASE_: ['../datasets/coco_detection.yml','../runtime.yml','../ppyoloe/_base_/optimizer_80e.yml','../ppyoloe/_base_/ppyoloe_plus_crn.yml','../ppyoloe/_base_/ppyoloe_plus_reader.yml',
]
log_iter: 10        # 打印日志log的间隔
snapshot_epoch: 5     # 每过多少轮评估一次
weights: output/ppyoloe_plus_sod_crn_l_80e_coco/model_finalpretrain_weights: https://bj.bcebos.com/v1/paddledet/models/pretrained/ppyoloe_crn_l_obj365_pretrained.pdparams
depth_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.7

② PaddleDetection-release-2.8.1\configs\ppyoloe\_base_\optimizer_80e.yml

epoch: 80    # 训练轮数LearningRate:base_lr: 0.001    # 学习率{一般是10**(-3)}schedulers:- name: CosineDecaymax_epochs: 96- name: LinearWarmupstart_factor: 0.epochs: 5    # 看自己的显卡情况OptimizerBuilder:optimizer:momentum: 0.9type: Momentumregularizer:factor: 0.0005type: L2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84065.shtml

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

相关文章

力扣HOT100之二叉树:114. 二叉树展开为链表

这道题自己尝试着做了一下,感觉还是得用递归来做比较简单,但是一直想的是用前序遍历来构造链表,导致怎么做都不对,去看了下灵神的题解,然后问了下GPT,现在终于弄明白了。虽然构造出来的链表的排列顺序是按照…

Spring Boot 注解 @ConditionalOnMissingBean是什么

一句话总结: ConditionalOnMissingBean 是 Spring Boot 提供的一个 条件注解(Conditional Annotation),意思是: 只有当 Spring 容器中 不存在 某个 Bean 时,当前的 Bean 或配置才会被加载。 这是一种典型的…

PyInstaller 如何在mac电脑上生成在window上可执行的exe文件

PyInstaller跨平台打包限制 PyInstaller 无法直接从macOS生成Windows可执行文件,因为它需要访问目标平台的系统库和Python环境来构建可执行文件。要在macOS上为Windows打包Python应用,需要通过以下方法之一: 方法一:使用虚拟机或…

零基础设计模式——创建型模式 - 抽象工厂模式

第二部分:创建型模式 - 抽象工厂模式 (Abstract Factory Pattern) 我们已经学习了单例模式(保证唯一实例)和工厂方法模式(延迟创建到子类)。现在,我们来探讨创建型模式中更为复杂和强大的一个——抽象工厂…

【通用智能体】Serper API 详解:搜索引擎数据获取的核心工具

Serper API 详解:搜索引擎数据获取的核心工具 一、Serper API 的定义与核心功能二、技术架构与核心优势2.1 技术实现原理2.2 对比传统方案的突破性优势 三、典型应用场景与代码示例3.1 SEO 监控系统3.2 竞品广告分析 四、使用成本与配额策略五、开发者注意事项六、替…

Flask-SQLAlchemy核心概念:模型类与数据库表、类属性与表字段、外键与关系映射

前置阅读,关于Flask-SQLAlchemy支持哪些数据库及基本配置,链接:Flask-SQLAlchemy_数据库配置 摘要 本文以一段典型的 SQLAlchemy 代码示例为引入,阐述以下核心概念: 模型类(Model Class) ↔ 数…

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit2

RKNN Toolkit2是用来将onnx模型转成rknn专用模型,并可通过RKNN Toolkit Lite2或者RKNPU调用NPU进行加速计算的工具。 一开始我安装很多次都无法成功安装。后来跟售后技术对接,必须是PC平台的Linux环境才可以。我的电脑是windows,所以我需要用…

基于深度学习的工件检测系统设计与实现

在工业自动化领域,工件检测一直是提高生产效率和产品质量的关键环节。传统的人工检测方法不仅效率低下,而且容易受到主观因素的影响,导致误判率较高。随着深度学习技术的飞速发展,基于图像识别的自动检测系统逐渐成为研究热点。今…

CyberSecAsia专访CertiK首席安全官:区块链行业亟需“安全优先”开发范式

近日,权威网络安全媒体CyberSecAsia发布了对CertiK首席安全官Wang Tielei博士的专访,双方围绕企业在进军区块链领域时所面临的关键安全风险与防御策略展开深入探讨。 Wang博士在采访中指出,跨链桥攻击、智能合约漏洞以及私钥管理不当&#x…

Google C++ Style Guide 谷歌 C++编码风格指南,深入理解华为与谷歌的编程规范——C和C++实践指南

Google C 编程风格指南 Release Apr 07, 2017 0. ᡿享 ⡾ᵢ 4.45 ৕֒㘻 Benjy Weinberger, Craig Silverstein, Gregory Eitzmann, Mark Mentovai, Tashana Landray 㘱䈇 YuleFox, Yang.Y, acgtyrant, lilinsanity 亯ⴤѱ享 • Google Style Guide • Google 开源…

当科技邂逅浪漫:在Codigger的世界里,遇见“爱”

520,一个充满爱意的日子,人们用各种方式表达对彼此的深情。而在科技的世界里,我们也正经历着一场特别的邂逅——Codigger,一个分布式操作系统的诞生,正在以它独特的方式,重新定义我们与技术的关系。 Codigg…

嵌入式学习笔记 - Void类型的指针

void指针的基本概念和特性 void指针是一种特殊的指针类型,称为“无类型指针”或“通用指针”。它的主要特点是: ‌通用性‌:void指针可以指向任何类型的数据,这使得它在处理不确定数据类型时非常有用。 ‌灵活性‌:由…

【综述】视频目标分割VOS

相关连接 更新中....... 1、Associating Objects with Transformers for Video Object Segmentation:论文详解、AOT源码解析 2、Rethinking Space-Time Networks with Improved Memory Coverage for Efficient Video Object Segmentation 3、Recurrent Dynamic Embe…

001 嵌入式软件开发工程师实习篇面试——首战总结

2025年5月17日人生中第一次面试 紧张是藏不住的。但是不应该的。 目录 0.准备一份合适的自我介绍 1.结构体内存对齐问题 2.变量在内存中的存储模式 3.嵌入式中程序框架有哪些 4.程序代码设计要遵循什原则 5.版本号书写 6.单片机最小系统板有哪些组成 必须: 非必须:…

SIL2/PLd 认证 Inxpect毫米波安全雷达:3D 扫描 + 微小运动检测守护工业安全

Inxpect 成立于意大利,专注工业安全技术。自成立起,便致力于借助先进雷达技术提升工业自动化安全标准,解决传统安全设备在复杂环境中的局限,推出获 SIL2/PLd 和 UL 认证的安全雷达产品。 Inxpect 的雷达传感器技术优势明显。相较于…

Python数据可视化再探——Matplotlib模块 之一

目录 第一章 Matplotlib 模块教学内容​——基础图形绘制 一、Pyplot 子库介绍​ 1. 功能概述​ 2. 常用函数​ 二、绘制基本图形​ 1. 柱状图​ 2. 条形图​ 3. 折线图​ 4. 散点图​ 5. 面积图​ 6. 饼状图​ 7. 圆环图​ ​编辑 三、绘图知识点详解​ 1. 绘图…

智慧在线判题OJ系统项目总体,包含功能开发思路,内部中间件,已经部分知识点

目录 回顾一下xml文件怎么写 哪个地方使用了哪个技术 MyBatis-Plus-oj的表结构设计, 管理员登录功能 Swagger Apifox​编辑 BCrypt 日志框架引入(slf4jlogback) nacos Swagger无法被所有微服务获取到修改的原因 身份认证三种方式: JWT(Json Web Json,一…

使用Spring Boot和Spring Security构建安全的RESTful API

使用Spring Boot和Spring Security构建安全的RESTful API 引言 在现代Web应用开发中,安全性是至关重要的。Spring Boot和Spring Security是Java生态中广泛使用的框架,它们提供了强大的工具来保护RESTful API。本文将介绍如何结合Spring Boot和Spring S…

虚幻引擎5-Unreal Engine笔记之`GameMode`、`关卡(Level)` 和 `关卡蓝图(Level Blueprint)`的关系

虚幻引擎5-Unreal Engine笔记之GameMode、关卡(Level) 和 关卡蓝图(Level Blueprint)的关系 code review! 参考笔记: 1.虚幻引擎5-Unreal Engine笔记之GameMode、关卡(Level) 和 关卡蓝图&…

Java+Selenium+快代理实现高效爬虫

目录 一、前言二、Selenium简介三、环境准备四、代码实现4.1 创建WebDriver工厂类4.2 创建爬虫主类4.3 配置代理的注意事项 六、总结与展望 一、前言 在Web爬虫技术中,Selenium作为一款强大的浏览器自动化工具,能够模拟真实用户操作,有效应对…