基于paddleDetect的半监督目标检测实战

基于paddleDetect的半监督目标检测实战

  • 前言
  • 相关介绍
  • 前提条件
  • 实验环境
  • 安装环境
  • 项目地址
  • 使用paddleDetect的半监督方法训练自己的数据集
    • 准备数据
    • 分割数据集
    • 配置参数文件
      • PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml
      • PaddleDetection-2.7.0/configs/semi_det/\_base_/coco_detection_percent_10.yml
    • 训练
    • 预测
    • 导出
    • 推理
  • 参考文献

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏、人工智能混合编程实践专栏或我的个人主页查看
  • 人工智能混合编程实践:C++调用Python ONNX进行YOLOv8推理
  • 人工智能混合编程实践:C++调用封装好的DLL进行YOLOv8实例分割
  • 人工智能混合编程实践:C++调用Python ONNX进行图像超分重建
  • 人工智能混合编程实践:C++调用Python AgentOCR进行文本识别
  • 通过计算实例简单地理解PatchCore异常检测
  • Python将YOLO格式实例分割数据集转换为COCO格式实例分割数据集
  • YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

相关介绍

PaddleDetection是一个基于PaddlePaddle的目标检测端到端开发套件,在提供丰富的模型组件和测试基准的同时,注重端到端的产业落地应用,通过打造产业级特色模型|工具、建设产业应用范例等手段,帮助开发者实现数据准备、模型选型、模型训练、模型部署的全流程打通,快速进行落地应用。

主要模型效果示例如下(点击标题可快速跳转):

通用目标检测小目标检测旋转框检测3D目标物检测
人脸检测2D关键点检测多目标追踪实例分割
车辆分析——车牌识别车辆分析——车流统计车辆分析——违章检测车辆分析——属性分析
行人分析——闯入分析行人分析——行为分析行人分析——属性分析行人分析——人流统计

同时,PaddleDetection提供了模型的在线体验功能,用户可以选择自己的数据进行在线推理。

前提条件

  • 熟悉Python

实验环境

Package                Version       Editable project location
---------------------- ------------- -----------------------------------------------
albumentations         1.3.1
matplotlib             3.7.1
numba                  0.56.4
numpy                  1.23.5
onnx                   1.14.0
opencv-python          4.5.5.64
opencv-python-headless 4.11.0.86
packaging              23.1
paddle-bfloat          0.1.7
paddle2onnx            1.0.6
paddleclas             2.5.1
paddledet              0.0.0
paddlepaddle-gpu       2.4.2.post116
paddleseg              2.8.0         
paddleslim             1.1.1
paddlex                1.3.7
pandas                 2.0.1
Pillow                 9.5.0
pip                    23.0.1
protobuf               3.20.0
pycocotools            2.0.7
scikit-image           0.22.0
scikit-learn           1.2.2
scipy                  1.10.1
setuptools             66.0.0
torch                  1.10.1
torchvision            0.11.2

安装环境

  • 具体安装步骤,请查阅官方安装文档:https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.8.1/docs/tutorials/INSTALL_cn.md

项目地址

  • PaddleDetection 源代码地址:https://github.com/PaddlePaddle/PaddleDetection.git
git clone --branch v2.7.0 https://github.com/PaddlePaddle/PaddleDetection.git
cd PaddleDetection-2.7.0

在这里插入图片描述

使用paddleDetect的半监督方法训练自己的数据集

准备数据

准备一个所需要训练的coco格式数据集。

在这里插入图片描述

分割数据集

paddlex --split_dataset --format COCO --dataset_dir ./trainning_dataset/coco/ --val_value 0.05 --test_value 0.05
  • –dataset_dir:coco数据集所在的文件夹路径。

在这里插入图片描述

配置参数文件

PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml

可根据实际情况修改参数,一般不需要修改,直接使用默认参数即可。

_BASE_: ['../../ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml','../_base_/coco_detection_percent_10.yml',
]
log_iter: 50
snapshot_epoch: 5
# weights: output/denseteacher_ppyoloe_plus_crn_l_coco_semi010/model_final
weights: output/best_modelepochs: &epochs 200
cosine_epochs: &cosine_epochs 240### pretrain and warmup config, choose one and comment another
pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/ppyoloe_plus_crn_l_80e_coco_sup010.pdparams # mAP=45.7
semi_start_iters: 0
ema_start_iters: 0
use_warmup: &use_warmup False# pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/pretrained/ppyoloe_crn_l_obj365_pretrained.pdparams
# semi_start_iters: 5000
# ema_start_iters: 3000
# use_warmup: &use_warmup True### global config
use_simple_ema: True
ema_decay: 0.9996
ssod_method: DenseTeacher
DenseTeacher:train_cfg:sup_weight: 1.0unsup_weight: 1.0loss_weight: {distill_loss_cls: 1.0, distill_loss_iou: 2.5, distill_loss_dfl: 0., distill_loss_contrast: 0.1}contrast_loss:temperature: 0.2alpha: 0.9smooth_iter: 100concat_sup_data: Truesuppress: linearratio: 0.01test_cfg:inference_on: teacher### reader config
batch_size: &batch_size 8
worker_num: 2
SemiTrainReader:sample_transforms:- Decode: {}- RandomDistort: {}- RandomExpand: {fill_value: [123.675, 116.28, 103.53]}- RandomFlip: {}- RandomCrop: {} # unsup will be fake gt_boxesweak_aug:- NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], is_scale: true, norm_type: none}strong_aug:- StrongAugImage: {transforms: [RandomColorJitter: {prob: 0.8, brightness: 0.4, contrast: 0.4, saturation: 0.4, hue: 0.1},RandomErasingCrop: {},RandomGaussianBlur: {prob: 0.5, sigma: [0.1, 2.0]},RandomGrayscale: {prob: 0.2},]}- NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], is_scale: true, norm_type: none}sup_batch_transforms:- BatchRandomResize: {target_size: [640], random_size: True, random_interp: True, keep_ratio: False}- Permute: {}- PadGT: {}unsup_batch_transforms:- BatchRandomResize: {target_size: [640], random_size: True, random_interp: True, keep_ratio: False}- Permute: {}sup_batch_size: *batch_sizeunsup_batch_size: *batch_sizeshuffle: Truedrop_last: Truecollate_batch: TrueEvalReader:sample_transforms:- Decode: {}- Resize: {target_size: [640, 640], keep_ratio: False, interp: 2}- NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], norm_type: none}- Permute: {}batch_size: 2TestReader:inputs_def:image_shape: [3, 640, 640]sample_transforms:- Decode: {}- Resize: {target_size: [640, 640], keep_ratio: False, interp: 2}- NormalizeImage: {mean: [0., 0., 0.], std: [1., 1., 1.], norm_type: none}- Permute: {}batch_size: 1### model config
architecture: PPYOLOE
norm_type: sync_bn
ema_black_list: ['proj_conv.weight']
custom_black_list: ['reduce_mean']
PPYOLOE:backbone: CSPResNetneck: CustomCSPPANyolo_head: PPYOLOEHeadpost_process: ~eval_size: ~ # means None, but not str 'None'
PPYOLOEHead:fpn_strides: [32, 16, 8]grid_cell_scale: 5.0grid_cell_offset: 0.5static_assigner_epoch: -1 #use_varifocal_loss: Trueloss_weight: {class: 1.0, iou: 2.5, dfl: 0.5}static_assigner:name: ATSSAssignertopk: 9assigner:name: TaskAlignedAssignertopk: 13alpha: 1.0beta: 6.0nms:name: MultiClassNMSnms_top_k: 1000keep_top_k: 300score_threshold: 0.01nms_threshold: 0.7### other config
epoch: *epochs
LearningRate:base_lr: 0.01schedulers:- !CosineDecaymax_epochs: *cosine_epochsuse_warmup: *use_warmup- !LinearWarmupstart_factor: 0.001epochs: 3OptimizerBuilder:optimizer:momentum: 0.9type: Momentumregularizer:factor: 0.0005 # dt-fcos 0.0001type: L2clip_grad_by_norm: 1.0 # dt-fcos clip_grad_by_value

PaddleDetection-2.7.0/configs/semi_det/_base_/coco_detection_percent_10.yml

这里要修改对应数据集的路径,以及数据集的类别数

  • num_classes: 1(数据集的类别数)
  • image_dir: JPEGImages
  • anno_path: train.json
  • dataset_dir: ./trainning_dataset/coco/
metric: COCO
num_classes: 1# partial labeled COCO, use `SemiCOCODataSet` rather than `COCODataSet`
TrainDataset:!SemiCOCODataSetimage_dir: JPEGImagesanno_path: train.jsondataset_dir: ./trainning_dataset/coco/data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']# partial unlabeled COCO, use `SemiCOCODataSet` rather than `COCODataSet`
UnsupTrainDataset:!SemiCOCODataSetimage_dir: JPEGImagesanno_path: test.jsondataset_dir: ./trainning_dataset/coco/data_fields: ['image']supervised: FalseEvalDataset:!COCODataSetimage_dir: JPEGImagesanno_path: val.jsondataset_dir: ./trainning_dataset/coco/allow_empty: trueTestDataset:!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'

训练

conda activate paddleDetectexport CUDA_VISIBLE_DEVICES=0 # 设置1张可用的卡nohup python PaddleDetection-2.7.0/tools/train.py -c PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml -o use_gpu=true --eval --amp &

训练的权重会保存在./output文件夹里。

在这里插入图片描述

预测

conda activate paddleDetectexport CUDA_VISIBLE_DEVICES=0 # 设置1张可用的卡python PaddleDetection-2.7.0/tools/infer.py -c PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml -o weights=output/best_model.pdparams --infer_dir=test_imgs/ --output_dir infer_output

预测出来的图片会保存在./infer_output文件夹里。

在这里插入图片描述

导出

conda activate paddleDetectpython PaddleDetection-2.7.0/tools/export_model.py -c PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.yml -o weights=output/best_model.pdparams -o trt=True

导出的权重会保存在./output_inference文件夹里。

在这里插入图片描述

推理

conda activate paddleDetectexport CUDA_VISIBLE_DEVICES=0 # 设置1张可用的卡python PaddleDetection-2.7.0/deploy/python/infer.py --model_dir=./output_inference/denseteacher_ppyoloe_plus_crn_l_coco_semi010/ --image_dir=test_imgs/ --output_dir=infer_output_pdimodel --device=GPU

推理出来的图片会保存在./infer_output_pdimodel文件夹里。
在这里插入图片描述

参考文献

[1] PaddleDetection 源代码地址:https://github.com/PaddlePaddle/PaddleDetection.git
[2] https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.8.1/configs/ppyoloe/README_cn.md
[3] https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.8.1/configs/semi_det
[4] https://github.com/Megvii-BaseDetection/DenseTeacher
[5] https://arxiv.org/abs/2207.02541v2

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏、人工智能混合编程实践专栏或我的个人主页查看
  • 人工智能混合编程实践:C++调用Python ONNX进行YOLOv8推理
  • 人工智能混合编程实践:C++调用封装好的DLL进行YOLOv8实例分割
  • 人工智能混合编程实践:C++调用Python ONNX进行图像超分重建
  • 人工智能混合编程实践:C++调用Python AgentOCR进行文本识别
  • 通过计算实例简单地理解PatchCore异常检测
  • Python将YOLO格式实例分割数据集转换为COCO格式实例分割数据集
  • YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

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

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

相关文章

计算机网络:(十)虚拟专用网 VPN 和网络地址转换 NAT

计算机网络:(十)虚拟专用网 VPN 和网络地址转换 NAT前言一、虚拟专用网 VPN1. 基础概念与作用2. 工作原理3. 常见类型4. 协议对比二、NAT:网络地址转换1. 基础概念与作用2. 工作原理与类型3. 优缺点与问题4. 进阶类型三、VPN 与 N…

数位 dp

数位dp 特点 问题大多是指“在 [l,r][l,r][l,r] 的区间内,满足……的数字的个数、种类,等等。” 但是显然,出题人想要卡你,rrr 肯定是非常大的,暴力枚举一定超时。 于是就有了数位 dp。 基本思路 数位 dp 说白了…

Selector的用法

Selector的用法 Selector是基于lxml构建的支持XPath选择器、CSS选择器&#xff0c;以及正则表达式&#xff0c;功能全面&#xff0c;解析速度和准确度非常高 from scrapy import Selectorbody <html><head><title>HelloWorld</title></head>&…

Netty封装Websocket并实现动态路由

引言 关于Netty和Websocket的介绍我就不多讲了,网上一搜一大片。现如今AI的趋势发展很热门,长连接对话也是会经常接触到的,使用Websocket实现长连接,那么很多人为了快速开发快速集成就会使用spring-boot-starter-websocket依赖快速实现,但是注意该实现是基于tomcat的,有…

行为型设计模式:解释器模式

解释器模式 解释器模式介绍 解释器模式使用频率不算高&#xff0c;通常用来描述如何构建一个简单“语言”的语法解释器。它只在一些非常特定的领域被用到&#xff0c;比如编译器、规则引擎、正则表达式、SQL 解析等。不过&#xff0c;了解它的实现原理同样很重要&#xff0c;能…

SaTokenException: 未能获取对应StpLogic 问题解决

&#x1f4dd; Sa-Token 异常处&#xff1a;未能获取对应StpLogic&#xff0c;typeuser&#x1f9e8; 异常信息 cn.dev33.satoken.exception.SaTokenException: 未能获取对应StpLogic&#xff0c;typeuser抛出位置&#xff1a; throw new SaTokenException("未能获取对应S…

Web前端性能优化原理与方法

一、概述 1.1 性能对业务的影响 大部分网站的作用是&#xff1a;产品信息载体、用户交互工具或商品流通渠道。这就要求网站与更多用户建立联系&#xff0c;同时还要保持良好的用户黏性&#xff0c;所以网站就不能只关注自我表达&#xff0c;而不顾及用户是否喜欢。看看网站性…

第十八节:第六部分:java高级:注解、自定义注解、元注解

认识注解自定义注解注解的原理元注解常用的两个元注解代码&#xff1a; MyTest1&#xff08;注解类&#xff09; package com.itheima.day10_annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Retent…

北京科技企业在软文推广发稿平台发布文章,如何精准触达客户?

大家好&#xff01;我是你们的老朋友&#xff0c;今天咱们聊聊北京科技企业如何通过软文推广发稿平台精准触达目标客户这个话题。作为企业营销的老司机&#xff0c;我深知在这个信息爆炸的时代&#xff0c;如何让你的品牌声音被目标客户听到是多么重要。下面就让我来分享一些实…

UE蒙太奇和动画序列有什么区别?

在 UE5 中&#xff0c;Animation Sequence&#xff08;动画序列&#xff09;和 Animation Montage&#xff08;动画蒙太奇&#xff09;虽然都能播放骨骼动画&#xff0c;但它们的定位、功能和使用场景有较大区别&#xff1a;1. 概念定位Animation Sequence&#xff08;动画序列…

Nordic打印RTT[屏蔽打印中的<info> app]

屏蔽打印中的 app Nordic原装的程序答应是这样的,这个有" app"打印,因为习惯问题,有时候也不想打印太多造成RTT VIEW显示被冲点,所以要把" app"去掉:这里把prefix_process函数调用屏蔽到,主要涉及到nrf_log_hexdump_entry_process和nrf_log_std_entry_proc…

Python基础和高级【抽取复习】

1.Python 的深拷贝和浅拷贝有什么区别&#xff1f; 浅拷贝【ls.copy()】&#xff1a; 将列表的不可变对象【值】复制一份&#xff0c;同时引用其中的可变对象【列表】&#xff0c;共用一个内存地址 深拷贝【lscopy.deepcopy(list)】&#xff1a; 完全的复制原可变对象&#xff…

TinyPiXOS组件开发(一):开发规范、组件开发方法介绍,快速上手组件开发,创造各种有趣的UI组件!

本文将通过实现一个点击切换进度的电量指示灯组件和exampleGUI组件库介绍如何基于TinyPiXOS开发新组件。主要内容包括组件开发规范、自定义组件开发和组件库开发三部分。 组件开发规范 命名规范 采用tp开头命名组件类&#xff0c;名称具备易读性。 目录规范 头文件放置 in…

主流熔断方案选型指南

主流熔断方案选型1. Netflix Hystrix (经典但已停止维护)适用场景&#xff1a;传统Spring Cloud项目&#xff0c;需要快速集成熔断功能优点&#xff1a;成熟稳定&#xff0c;社区资源丰富与Spring Cloud Netflix套件无缝集成提供熔断、降级、隔离等完整功能缺点&#xff1a;已停…

Django中get()与filter()对比

在 Django 中&#xff0c;get() 和 filter() 是 QuerySet API 中用于检索数据的两个核心方法&#xff0c;它们的功能和使用场景有明显区别。以下是详细对比&#xff1a; 1. 核心区别特性get()filter()返回值单个对象&#xff08;模型实例&#xff09;查询集&#xff08;QuerySe…

MySQL锁(一) 概述与分类

1.1 MySQL锁的由来 客户端发往 MySQL 的一条条 SQL 语句&#xff0c;实际上都可以理解成一个个单独的事务&#xff08;一条sql语句默认就是一个事务&#xff09;。而事务是基于数据库连接的&#xff0c;每个数据库连接在 MySQL 中&#xff0c;又会用一条工作线程来维护&#x…

PyTorch里的张量及张量的操作

张量的简介 张量是多重线性映射在给定基下的坐标表示&#xff0c;可视为向量和矩阵的泛化。 0 维张量&#xff1a;标量&#xff08;如 5&#xff09;1 维张量&#xff1a;向量&#xff08;如 [1, 2, 3]&#xff09;2 维张量&#xff1a;矩阵&#xff08;如 [[1, 2], [3, 4]]&…

向量数据库Faiss vs Qdrant全面对比

Faiss vs Qdrant 全面对比表 向量数据库是一种相对较新的方式,用于与来自不透明机器学习模型(如深度学习架构)派生的抽象数据表示进行交互。这些表示通常被称为向量或嵌入(embeddings),它们是用于训练机器学习模型完成诸如情感分析、语音识别、目标检测等任务的数据的压…

2025年AIR SCI1区TOP,缩减因子分数阶蜣螂优化算法FORDBO,深度解析+性能实测

目录1.摘要2.蜣螂优化算法DBO原理3.改进策略4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流1.摘要 传统DBO存在探索与开发能力失衡、求解精度低以及易陷入局部最优等问题。因此&#xff0c;本文提出了带有缩减因子分数阶蜣螂优化算法&#xff08;FORDBO&#xff0…

爬虫逆向之JS混淆案例(全国招标公告公示搜索引擎 type__1017逆向)

案例https://ctbpsp.com/#/ 截至2025.07.19可用 定位加密位置 加密位置&#xff1a; 定位方式&#xff0c;XHR&#xff0c;跟栈 跟栈 QL打断点&#xff0c;重新断住 分析为&#xff0c;一个函数传入四个参数 var QL QI[d9(Nv.mQ)](QJ, Qh, Qv, this[d9(Nv.m9)][0xa1a * …