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.mzph.cn/diannao/84117.shtml

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

相关文章

Awesome ChatGPT Prompts:释放AI对话潜力的开源利器

项目概览 Awesome ChatGPT Prompts 是由土耳其开发者 Fatih Kadir Akın 发起的开源项目,托管于 GitHub,旨在通过精心设计的提示词模板(Prompts)优化用户与 ChatGPT 的交互体验。项目以 Markdown 和 CSV 格式管理模板,无需复杂编程语言,但需文本处理能力,目前已在 GitH…

《数据资产价值与收益分配评价模型》

标准包括数据质量评价、数据应用评价、数据变现量评价和数据收益分配评价等多个维度,通过这些评价来全面评估数据资产的价值。 评价模型基于数据在运营过程中的使用与收益情况,为数据资产评估提供了依据。此外,标准还规定了评价过程的框架和思路,包括指标体系配置和评价实施…

响应式架构下的调试挑战:WebDebugX 如何帮助前端稳住场面?

响应式编程让 UI 架构变得优雅,但也让调试难度上升了一个维度。 尤其是在移动端页面中,大量前端状态不再由传统 DOM 操控,而是由 Vue/React 的响应系统控制。这类系统中,UI 是数据流的结果,任何一步状态出错&#xff…

解决wsl没代理的问题

解决wsl没有网的问题 背景:尝试在wsl2安装go 命令为sudo apt-get install golang-go,但是显示一堆404,同时发现wsl终端报错如下: wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localho…

Java:希尔排序

1.步骤 将一组数组以 gap 为单位,将数组分为 n / gap 组。如图。 将每一组的数据按照对应的大小进行排序。再将 gap 的值逐渐小。gap 的每一次减小都对数组进行一次排序直至 gap 1。gap 的初始值没有定论,可以取 gap n / 2 ,也可以取 gap …

COMPUTEX 2025 | 广和通率先发布基于MediaTek T930 平台的5G模组FG390

5月19日,全球领先的无线通信模组和AI解决方案提供商广和通率先发布基于MediaTek T930平台的5G模组FG390系列。FG390系列模组为以5G固定无线接入(Fixed Wireless Access,FWA)为代表的MBB终端产品而设计,将在CPE&#xf…

LangChain文档加载器实战:构建高效RAG数据流水线

导读:在现代数据驱动的应用开发中,RAG(Retrieval-Augmented Generation)系统因其高效的数据处理能力和强大的生成能力而备受关注。然而,作为 RAG 系统的第一步,文档加载器的设计与实现却常常成为开发者面临…

47页 @《人工智能生命体 新启点》中國龍 原创连载

《人工智能生命体新启点》探讨了通过建立意识来创造独立、自主的人工智能生命体,赋予其灵魂和思想指导。书中阐述了如何通过技术手段实现这一目标,使AI具备自我意识和决策能力,从而成为真正的生命体。这一理念不仅挑战了传统生命定义&#xf…

JavaScript中从原数组中删除某个元素

一、删除基本数组中的某元素 1. 删除第一个匹配的元素(修改原数组) 使用 indexOf 找到元素索引,再用 splice 删除: function removeFirst(arr, value) {const index arr.indexOf(value);if (index ! -1) {arr.splice(index, 1…

uni-app学习笔记六-vue3响应式基础

一.使用ref定义响应式变量 在组合式 API 中&#xff0c;推荐使用 ref() 函数来声明响应式状态&#xff0c;ref() 接收参数&#xff0c;并将其包裹在一个带有 .value 属性的 ref 对象中返回 示例代码&#xff1a; <template> <view>{{ num1 }}</view><vi…

【JAVA基础】什么情况下可以直接使用类名.方法名调用方法?

在Java中&#xff0c;直接通过类名.方法名调用方法需要满足以下条件&#xff0c;这些场景和规则可以通过搜索结果中的技术细节得到验证&#xff1a; 条件 1. 调用静态方法 静态方法&#xff08;用static修饰&#xff09;属于类而非对象&#xff0c;因此可以直接通过类名调用&…

wifi 如果检查失败,UI 就会出现延迟或缺失打勾的现象。

问题&#xff1a;connectedSsid 的初始化依赖 onCreate 中的状态检查&#xff0c;如果检查失败&#xff0c;UI 就会出现延迟或缺失打勾的现象。 WIFI界面上上的一个标识代表成功连接。重启后出现偶尔不打勾的情况。 原始代码&#xff1a; // if (connectedSsid !…

Skywalking安装部署使用教程

目录 核心功能 架构设计 安装与配置 使用场景 社区与支持 总结 官网 https:///apache/skywalking 部署Skywalking 添加报警配置 自定义告警规则如果您需要自定义告警规则,则需要编辑 alarm-settings.yml 文件并添加自定义的规则。具体来说,您需要按照 YAML 格式定义…

2025版 JavaScript性能优化实战指南从入门到精通

JavaScript作为现代Web应用的核心技术&#xff0c;其性能直接影响用户体验。本文将深入探讨JavaScript性能优化的各个方面&#xff0c;提供可落地的实战策略。 一、代码层面的优化 1. 减少DOM操作 DOM操作是JavaScript中最昂贵的操作之一&#xff1a; // 不好的做法&#x…

基于企业数字化转型战略的数据治理方法论与顶层设计思路

文档围绕企业数字化转型战略的数据治理方法论与顶层设计思路展开,指出数字化技术(如人工智能、云计算等)驱动企业商业模式变革,需构建云架构与平台化思想的数字化生态。数据治理范畴涵盖战略、组织、标准等,需经历数据资产盘点、清洗、重新组织、持久化管理等流程,涉及主…

科学养生指南:解锁健康生活密码

健康是人生最宝贵的财富&#xff0c;在快节奏的现代生活中&#xff0c;科学养生成为保持良好状态的关键。遵循现代医学与营养学的研究成果&#xff0c;无需依赖传统中医理论&#xff0c;我们也能找到适合自己的养生之道。​ 均衡饮食是健康的基石。现代营养学强调 “食物多样&…

ML 48.机器学习之临床生存树(rpartSurv)

简介机器学习中生存树&#xff08;Survival Tree&#xff09;的原理详解 生存树是结合决策树与生存分析的机器学习模型&#xff0c;主要用于处理带有时间-事件数据&#xff08;包含删失数据&#xff09;的预测问题。其核心目标是&#xff1a;通过树状结构对数据进行递归分割&am…

测试文章1

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…

【Ubuntu修改串口延时(Latency Timer)为1毫秒(设备拔插或系统重启后自动生效)】

Ubuntu修改串口延时Latency Timer为1毫秒-设备拔插或系统重启后自动生效 在Ubuntu系统中&#xff0c;串口设备的延时参数(latency_timer)可以通过udev规则永久修改。以下是完整步骤&#xff1a; 创建udev规则文件 sudo vim /etc/udev/rules.d/99-ftdi-low-latency.rules添加以…

【C++进阶篇】红黑树的实现(赋源码)

红黑树&#xff1a;如何用颜色和旋转征服复杂数据 一. 红黑树简介1.1 基本概念1.2 红黑树效率1.3 意义1.4 应用场景 二. 红黑树实现2.1 红黑树结构2.2 插入&#xff08;难点&#xff09;2.2.1 单纯变色的情况2.2.2 单旋变色2.2.3 双旋变色 2.3 查找2.4 红黑树的验证2.5 AVL与RB…