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

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

相关文章:

  • Web前端开发(HTML、CSS快速入门)
  • HarmonyOS开发-自定义倒计时功能
  • 快速创建 Vue 3 项目
  • 深入解析Java泛型:从定义到实战应用
  • RTC技术
  • NBA足球赛事直播源码体育直播M35模板赛事源码
  • SQL概述和定义
  • 50、js 中var { ipcRenderer } = require(‘electron‘);是什么意思?
  • 在Linux debian12系统上使用go语言以及excelize库处理excel数据
  • 记录:express router,可以让node.js后端文件里的路由分布的更清晰
  • 【Node.js】工具链与工程化
  • VR 航天科普,沉浸式体验宇宙奥秘​
  • iOS工厂模式
  • 基于 ZigBee 的 LED 路灯智能控制器的设计
  • 杨校老师竞赛课之青科赛GOC5-6年级组模拟题
  • ESP32-S3 使用SPI-TFT_eSPI与ST7789驱动通信
  • HTTP Digest 认证:原理剖析与服务端实现详解
  • Ubuntu下误删除分区的补救
  • 排序和排列——蓝桥杯备考
  • 供应链管理:联合国/我国 41个产业/工业大类包括什么/代表公司
  • 网站实名认证中心/怎么创建一个网站
  • 农家院网站素材/找回今日头条
  • 玉田网站建设/南昌seo网站排名
  • 西峡做网站/2021最近比较火的营销事件
  • 南宁网站建设推广服务/上海优化网站方法
  • 公司网站建设的签订合同/百度提交网址入口