PP-PicoDet算法训练行人检测模型

news/2023/12/9 4:32:20

PP-PicoDet算法训练行人检测模型

      • 1,效果图
      • 2,PP-PicoDet介绍
      • 3,使用飞浆框架训练模型
        • 1,准备好图片和对应的标注文件
        • 2,划分训练集和验证集
        • 3,vi label_list.txt
        • 4,目录结构
        • 5,修改配置文件
          • 1,picodet_s_320_voc.yml
          • 2,voc.yml
        • 6,训练模型
        • 7,导出模型
        • 8,模型推理,预测单张图片

1,效果图

在这里插入图片描述
step:300
3000图片

2,PP-PicoDet介绍

PP-PicoDet模型特点:
方案选择PP-PicoDet轻量化模型,主要看中PP-PicoDet体积小、速度快、精度较高的优势,非常适合本项目的部署环境和性能要求。同时,飞桨提供的预训练模型也可以最大程度上提升模型的收敛速度和精度。

3,使用飞浆框架训练模型

1,准备好图片和对应的标注文件
2,划分训练集和验证集

train_val.py

import os
import glob
import random
import xml.etree.ElementTree as ETpath = '/home/aistudio/PaddleDetection/datasets/per_voc'config = {# Annotations path(Annotations 的文件夹路径)"Annotation":"/home/aistudio/PaddleDetection/datasets/per_voc/annotations",# JPEGImages path(JPEGImages 的文件夹路径)"JPEGImages":"/home/aistudio/PaddleDetection/datasets/per_voc/images",
}
# 划分数据集# 数据划分比例
# (训练集+验证集)与测试集的比例,默认情况下 (训练集+验证集):测试集 = 9:1# 按照比例划分数据集
train_per = 0.8
valid_per = 0.2
# test_per = 0.1data_xml_list = glob.glob(os.path.join(config['Annotation'], '*.xml'))
data_jpg_list = glob.glob(os.path.join(config['JPEGImages'], '*.*'))
data_xml_list.sort()
data_jpg_list.sort()
# 生成label标签:
label = set()
for xml_path in data_xml_list:label = label | set([i.find('name').text for i in ET.parse(xml_path).findall('object')])
data_list=[]
for i,j in zip(data_jpg_list,data_xml_list):data_list.append(i+" "+j)
data_xml_list=data_list
print(data_xml_list)
random.seed(666)
random.shuffle(data_xml_list)
data_length = len(data_xml_list)train_point = int(data_length * train_per)
train_valid_point = int(data_length * (train_per + valid_per))# 生成训练集,验证集, 测试集(8 : 1 : 1)
train_list = data_xml_list[:train_point]
valid_list = data_xml_list[train_point:train_valid_point]
# test_list = data_xml_list[train_valid_point:]# 写入文件中
ftrain = open('/home/aistudio/PaddleDetection/datasets/per_voc/trainval.txt', 'w')
fvalid = open('/home/aistudio/PaddleDetection/datasets/per_voc/valid.txt', 'w')
# ftest = open('./test.txt', 'w')
flabel = open('/home/aistudio/PaddleDetection/datasets/per_voc/label_list.txt', 'w')for i in train_list:ftrain.write(i + "\n")
for j in valid_list:fvalid.write(j + "\n")
# for k in test_list:
#         ftest.write(k + "\n")
for l in label:flabel.write(l + "\n")
ftrain.close()
fvalid.close()
# ftest.close()
flabel.close()
# print("总数据量:{}, 训练集:{}, 验证集:{}, 测试集:{}, 标签:{}".format(len(data_xml_list), len(train_list), len(valid_list), len(test_list), len(label)))
print("总数据量:{}, 训练集:{}, 验证集:{}, 标签:{}".format(len(data_xml_list), len(train_list), len(valid_list), len(label)))
print("done!")
3,vi label_list.txt

写入标签:person

4,目录结构

在这里插入图片描述

5,修改配置文件
1,picodet_s_320_voc.yml
vi /home/aistudio/PaddleDetection/configs/picodet/legacy_model/picodet_s_320_voc.yml.配置:
_BASE_:- '../../datasets/voc.yml'- '../../runtime.yml'- '_base_/picodet_esnet.yml'- '_base_/optimizer_300e.yml'- '_base_/picodet_320_reader.yml''../../datasets/voc.yml': 关于数据集的配置文件,包含有关VOC数据集的路径、类别信息和其他数据相关的设置。
'../../runtime.yml': 运行时的配置文件,包含有关硬件设置、分布式训练配置等信息。
'_base_/picodet_esnet.yml': 关于 PicODet 模型的架构设置,包含了使用的网络结构、激活函数、锚框设置等。
'_base_/optimizer_300e.yml': 有关优化器的配置,包含有关学习率、权重衰减等优化器相关的超参数设置。
'_base_/picodet_320_reader.yml': 有关数据读取器的配置,包含了数据增强、批次大小等与数据加载相关的设置。pretrain_weights:
预训练模型路径weights:
训练模型保存路径可以通过调节 batch_size 调节模型的收敛速度
(根据自己的显卡算力调节,太大了gpu会内存溢出报错,太小了模型收敛会很慢)
在文件的末尾加上TrainReader:batch_size: 256
2,voc.yml
vi /home/aistudio/PaddleDetection/configs/datasets/voc.yml

重要配置项:
在这里插入图片描述

6,训练模型
python tools/train.py \
-c configs/picodet/legacy_model/picodet_s_320_voc.yml  \
--use_vdl=true \
--vdl_log_dir=vdl_dir/person_voc_log \
--eval>person_voc.log 2>&1&
参数:
-c 指定配置文件
--use_vdl=true 使用VisualDL 可视化训练
--vdl_log_dir 指定VisualDL log路径
--eval 在训练过程中将对验证数据集上的模型进行评估>person_voc.log 2>&1&:这部分命令将标准输出(stdout)和标准错误(stderr)都重定向到一个名为 person_voc.log 的日志文件中。2>&1 确保将 stdout 和 stderr 结合并重定向到指定的日志文件中。末尾的 & 表示在后台运行命令,允许你继续在终端上进行其他任务。
7,导出模型
python tools/export_model.py \
-c configs/picodet/legacy_model/picodet_s_320_voc.yml \
-o weights=output/picodet_s_320_voc/best_model.pdparams \
--output_dir=inference_model
参数:
-c 指定配置文件
-o 模型文件路径
--output_dir 导出模型的存放路径
8,模型推理,预测单张图片
python deploy/python/infer.py \
--model_dir=inference_model/picodet_s_320_voc \
--output=output/test \
--image_file=output/32.jpg \
--threshold=0.5 --device=GPU
参数:
--model_dir 模型目录
--output 输出图片路径
--image_fil 预测图片路径
--threshold=0.5 设置了目标检测的置信度阈值。检测到的目标框的置信度必须大于这个阈值才会被输出--device=GPU 在GPU上进行推理

http://www.ppmy.cn/news/1230877.html

相关文章

Android VSYNC发展历程

0 前言 安卓直到android-4.1.1_r1才首次引入VSYNC实现,然后逐步演进到android-4.4才得以完善,并在android-11、12后继续大改。 1 尚未引入 android-4.0.4_r2.1之前尚未引入VSYNC[1],SurfaceFlinger被实现为一个线程,通过睡眠来实…

【Django-DRF用法】多年积累md笔记,第3篇:Django-DRF的序列化和反序列化详解

本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django REST framework能帮助我们简化开发REST API的工作。 全…

请求prometheus数据然后使用tensorflow计算正则模型

使用tensorflow 计算正则模型, 数据来源为Prometheus的数据近7天的数据, 然后计算了90%区间的上下限和当前值的概率密度 import requests import pandas as pd import tensorflow as tf from datetime import datetime, timedelta# 定义 Prometheus 查询的参数 url "htt…

钩子函数-hook

钩子函数-hook hook 的作用 利用钩子函数可以在所有测试用例执行前做一些预置操作(如:准被测试数据、测试环境) 或者在测试结束后做一些后置操作(如:清理测试数据) 钩子函数在其它框架中也有&#xff0…

uni-app:前端实现心跳机制(全局)+局部页面控制心跳暂停和重新心跳

一、App.vue全局中写入心跳 在data中定义变量heartbeatTimer,便于暂停心跳使用在onLaunch中引用开始心跳的方法startHeartbeat()写入开始心跳方法写入暂停心跳方法写入请求后端刷心跳机制 定义变量 // 在全局设置的心跳机制中添加一个变量来保存定时器的标识 data(…

HALCON根据需要创建自定义函数

任务要求: 创建函数myfun(a,b,c),输入浮点数a,b的值,计算c a b,将计算结果返回。 操作步骤: 1)打开HDevelop程序 2)打开函数菜单,选择“创建新函数”&#xff0c…

torch 的数据加载 Datasets DataLoaders

点赞收藏关注! 如需要转载,请注明出处! torch的模型加载有两种方式: Datasets & DataLoaders torch本身可以提供两数据加载函数: torch.utils.data.DataLoader()和torch.utils.data.Datase…

11 redis中分布式锁的实现

单机锁代码 import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.con…

如何解决requests库自动确定认证arded 类型

requests 库是一种非常强大的爬虫工具,可以用于快速构建高效和稳定的网络爬虫程序。对于经常使用爬虫IP用来网站爬虫反爬策略的我来说,下面遇到的问题应当值得我们思考一番。 问题背景 在使用requests库进行网络请求时,有时会遇到需要对目标服务进行认证…

c++模式之单例模式详解

c模式之单例模式详解 1.概念2.懒汉模式示例(缺点)3.懒汉模式线程安全4.饿汉式创建单例5.饿汉模式线程示例 1.概念 单例模式是指在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性. 使用单例两个原因&#xff1a…

在 Windows 中关闭 Nginx 所有进程

在 Windows 中关闭 Nginx 所有进程并强制重启的命令如下: 打开命令提示符(CMD)。 输入以下命令来查找 Nginx 进程的 PID: tasklist /fi "imagename eq nginx.exe"此命令将列出所有名为 nginx.exe 的进程以及它们的 PID…

Visio免费版!Visio国产平替软件,终于被我找到啦!

作为一个职场人士,我经常需要绘制各种流程图和图表,而Visio一直是我使用的首选工具。但是,随着公司的发展和工作的需要,我逐渐发现了Visio的优点和不足。 首先,让我们来看看Visio的优点。Visio是一个专业的流程图和图…

JVS低代码表单设计:数据联动详解(多级数据级、数据回显等)

在这信息化时代,表单作为数据的收集和展示工具,已经渗透到不同的角落。JVS低代码对表单的设计和操作进行了不断的优化和创新。其中,联动回显作为一项重要的功能,无论是多级数据级联控制、组件的联动控制,还是多表的数据…

数据中心走向绿色低碳,液冷存储舍我其谁

引言:没有最冷,只有更冷,绿色低碳早已成为行业关键词。 【全球存储观察 | 科技热点关注】 每一次存储行业的创新,其根源离不开行业端的用户需求驱动。 近些年从数据中心建设的整体发展情况来看,从风冷到…

基于单片机GPS轨迹定位和里程统计系统

**单片机设计介绍, 基于单片机GPS轨迹定位和里程统计系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 一个基于单片机、GPS和里程计的轨迹定位和里程统计系统可以被设计成能够在移动的交通工具中精确定位车辆的位置…

裸片-PCBA

裸片 PCBA, 薄膜, 邦定-COB(chip on board)技术是指将裸芯片直接贴在PCB 板上,然后用铝线或金线进行电子连接的技术

制作Go程序的Docker容器(以及容器和主机的网络问题)

今天突然遇到需要将 Go 程序制作成 Docker 的需求,所以进行了一些研究。方法很简单,但是官方文档和教程有些需要注意的地方,所以写本文进行记录。 源程序 首先介绍一下示例程序,示例程序是一个 HTTP 服务器,会显示si…

视频剪辑技巧:批量剪辑新篇章,AI智剪来领航

随着数字媒体的飞速发展,视频剪辑已经成为一项重要的工作。在繁忙的工作中,如何高效、准确地完成批量剪辑是一项具有挑战性的任务。近年来,AI智剪的出现为视频剪辑工作带来了新的解决方案,引领着批量剪辑的新篇章。在AI智剪的帮助…

ArrayList中放的是一个对象,如何同时根据对象中的三个字段对List进行排序

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator;public class YourObject {private int field1;private String field2;private double field3;// 构造函数和其他代码public int getField1() {return field1;}public String getField…
最新文章