0

0

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

WBOY

WBOY

发布时间:2023-04-09 18:41:10

|

1410人浏览过

|

来源于51CTO.COM

转载

目标检测是计算机视觉领域的基础任务,没个称手的Model Zoo怎么行?

今天给大家安利一个简单好用的目标检测的算法模型库miemiedetection,目前在GitHub已斩获130+颗star

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

代码链接:https://github.com/miemie2013/miemiedetection

miemiedetection是基于YOLOX进行二次开发的个人检测库,还支持PPYOLO、PPYOLOv2、PPYOLOE、FCOS等算法。

得益于YOLOX的优秀架构,miemiedetection里的算法训练速度都非常快,数据读取不再是训练速度的瓶颈。

代码开发使用的深度学习框架为pyTorch,实现了可变形卷积DCNv2、Matrix NMS等高难度算子,支持单机单卡、单机多卡、多机多卡训练模式(多卡训练模式建议使用Linux系统),支持Windows、Linux系统。

并且由于miemiedetection是一个不需要安装的检测库,用户可以直接更改其代码改变执行逻辑,所以向库中添加新算法也很容易。

作者表示未来还会加入更多的算法支持(还有女装)。

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

算法如假包换

复现模型,最重要的就是准确率要跟原版的基本相同。

先看PPYOLO、PPYOLOv2、PPYOLOE这三个模型,作者均经过了loss对齐、梯度对齐的实验。

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

为了保留证据,在源码中还可以看到注释掉的读写*.npz 的部分,都是做对齐实验遗留的代码。

并且作者还详细记录了性能对齐的过程,对于新手来说,照着这条路走一遍,也是一个不错的学习过程!

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

全部的训练日志也都记录保存在仓库中,足以证明复现PPYOLO系列算法的正确性!

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

最后的训练结果显示,复现的PPYOLO算法和原版仓库具有一样的损失、一样的梯度。

另外,作者也试着用原版仓库和miemiedetection迁移学习voc2012数据集,也获得了一样的精度(使用了相同的超参数)。

和原版实现一样,使用了同样的学习率、同样的学习率衰减策略warm_piecewisedecay(PPYOLO和PPYOLOv2使用)和warm_cosinedecay(PPYOLOE使用)、同样的指数滑动平均EMA、同样的数据预处理方式、同样的参数L2权重衰减、同样的损失、同样的梯度、同样的预训练模型,迁移学习得到了同样的精度。

实验做得足,测试做得多,保证大家有美好的使用体验!

不要998,也不要98,只要点个star,所有目标检测算法免费带回家!

模型下载与转换

想跑通模型,参数很重要,作者提供了转换好的预训练pth权重文件,可以通过百度网盘直接下载。

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

链接:https://pan.baidu.com/s/1ehEqnNYKb9Nz0XNeqAcwDw

提取码:qe3i

或者按照下面的步骤获取:

第一步,下载权重文件,项目根目录下执行(即下载文件,Windows用户可以用迅雷或浏览器下载wget后面的链接,这里为了展现美观,只以ppyoloe_crn_l_300e_coco为例):

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

注意,带有pretrained字样的模型是在ImageNet上预训练的骨干网路,PPYOLO、PPYOLOv2、PPYOLOE加载这些权重以训练COCO数据集。其余为COCO上的预训练模型。

第二步,转换权重,项目根目录下执行:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

其中各个参数的含义为:

- -f表示的是使用的配置文件;

- -c表示的是读取的源权重文件;

- -oc表示的是输出(保存)的pytorch权重文件;

- -nc表示的是数据集的类别数;

- --only_backbone为True时表示只转换骨干网络的权重;

执行完毕后就会在项目根目录下获得转换好的*.pth权重文件。

手把手教学

在下面的命令中,大部分都会使用模型的配置文件,所以一开始就有必要先详细解释配置文件。

mmdet.exp.base_exp.BaseExp为配置文件基类,是一个抽象类,声明了一堆抽象方法,如get_model()表示如何获取模型,get_data_loader()表示如何获取训练的dataloader,get_optimizer()表示如何获取优化器等等。

mmdet.exp.datasets.coco_base.COCOBaseExp是数据集的配置,继承了BaseExp,它只给出数据集的配置。该仓库只支持COCO标注格式的数据集的训练!

其它标注格式的数据集,需要先转换成COCO标注格式,才能训练(支持太多标注格式的话,工作量太大)。可以通过miemieLabels将自定义的数据集转换成COCO的标注格式。所有的检测算法配置类都会继承COCOBaseExp,表示所有的检测算法共用同样的数据集的配置。

COCOBaseExp的配置项有:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

其中,

- self.num_classes表示的是数据集的类别数;

- self.data_dir表示的是数据集的根目录;

- self.cls_names表示的是数据集的类别名文件路径,是一个txt文件,一行表示一个类别名。如果是自定义数据集,需要新建一个txt文件并编辑好类别名,再修改self.cls_names指向它;

- self.ann_folder表示的是数据集的注解文件根目录,需要位于self.data_dir目录下;

- self.train_ann表示的是数据集的训练集的注解文件名,需要位于self.ann_folder目录下;

- self.val_ann表示的是数据集的验证集的注解文件名,需要位于self.ann_folder目录下;

- self.train_image_folder表示的是数据集的训练集的图片文件夹名,需要位于self.data_dir目录下;

- self.val_image_folder表示的是数据集的验证集的图片文件夹名,需要位于self.data_dir目录下;

Upscale
Upscale

AI图片放大工具

下载

对于VOC 2012数据集,则需要修改数据集的配置为:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

另外,你也可以像exps/ppyoloe/ppyoloe_crn_l_voc2012.py中一样,在子类中修改self.num_classes、self.data_dir这些数据集的配置,这样COCOBaseExp的配置就被覆盖掉(无效)了。

将前面提到的模型下载好后,在VOC2012数据集的self.data_dir目录下新建一个文件夹annotations2,把voc2012_train.json、voc2012_val.json放进这个文件夹。

最后,COCO数据集、VOC2012数据集、本项目的放置位置应该是这样:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

数据集根目录和miemiedetection-master是同一级目录。我个人非常不建议把数据集放在miemiedetection-master里,那样的话PyCharm打开会巨卡无比;而且,多个项目(如mmdetection、PaddleDetection、AdelaiDet)共用数据集时,可以做到数据集路径和项目名无关。

mmdet.exp.ppyolo.ppyolo_method_base.PPYOLO_Method_Exp是实现具体算法所有抽象方法的类,继承了COCOBaseExp,它实现了所有抽象方法。

exp.ppyolo.ppyolo_r50vd_2x.Exp是PPYOLO算法的Resnet50Vd模型的最终配置类,继承了PPYOLO_Method_Exp;

PPYOLOE的配置文件也是类似这样的结构。

预测

首先,如果输入的数据为一张图片,则在项目根目录下执行:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

其中各个参数的含义为:

- -f表示的是使用的配置文件;

- -c表示的是读取的权重文件;

- --path表示的是图片的路径;

- --conf表示的是分数阈值,只会画出高于这个阈值的预测框;

- --tsize表示的是预测时将图片Resize成--tsize的分辨率;

预测完成后控制台会打印结果图片的保存路径,用户可打开查看。如果是使用训练自定义数据集保存的模型进行预测,修改-c为你的模型的路径即可。

如果预测的是一个文件夹下的所有图片,则在项目根目录下执行:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

将--path修改为对应图片文件夹的路径即可。

训练COCO2017数据集

如果读取ImageNet预训练骨干网络训练COCO数据集,则在项目根目录下执行:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

一条命令直接启动单机八卡训练,当然了,前提是你真的有一台单机8卡的超算。

其中各个参数的含义为:

-f表示的是使用的配置文件;

-d表示的是显卡数量;

-b表示的是训练时的批大小(所有卡的);

-eb表示的是评估时的批大小(所有卡的);

-c表示的是读取的权重文件;

--fp16,自动混合精度训练;

--num_machines,机器数量,建议单机多卡训练;

--resume表示的是是否是恢复训练;

训练自定义数据集

建议读取COCO预训练权重进行训练,因为收敛快。

以上述的VOC2012数据集为例,对于ppyolo_r50vd模型,如果是1机1卡,输入下述命令开始训练:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

如果训练因为某些原因中断,想要读取之前保存的模型恢复训练,只要修改-c为想要读取模型的路径,再加上--resume参数即可。

如果是2机2卡,即每台机上1张卡,在0号机输入以下命令:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

并在1号机输入以下命令:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

只需要把上面2条命令的192.168.0.107改成0号机的局域网ip即可。

如果是1机2卡,则输入下面的命令即可开始训练:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

迁移学习VOC2012数据集,实测ppyolo_r50vd_2x的AP(0.50:0.95)可以到达0.59+、AP(0.50)可以到达0.82+、AP(small)可以到达0.18+。不管是单卡还是多卡,都能得到这个结果。

迁移学习时和PaddleDetection获得了一样的精度、一样的收敛速度,二者的训练日志位于train_ppyolo_in_voc2012文件夹下。

如果是ppyoloe_l模型,在单机输入下面的命令即可开始训练(冻结了骨干网络)

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

迁移学习VOC2012数据集,实测ppyoloe_l的AP(0.50:0.95)可以到达0.66+、AP(0.50)可以到达0.85+、AP(small)可以到达0.28+。

评估

命令和具体的参数如下。

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

在项目根目录下运行结果为:

GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法

转换权重后精度有一点损失,大约为0.4%。

相关文章

Github
Github

Github是一款非常实用的代码开放工具,用户可以按照自己的需求进行搜索,从而快速定位到所需的代码或项目位置,还能在软件中建立自己的代码仓库,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

76

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

117

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

350

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

63

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

109

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

108

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

243

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

684

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

179

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号