GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法
目标检测是计算机视觉领域的基础任务,没个称手的Model Zoo怎么行?
今天给大家安利一个简单好用的目标检测的算法模型库miemiedetection,目前在GitHub已斩获130+颗star
代码链接:https://github.com/miemie2013/miemiedetection
miemiedetection是基于YOLOX进行二次开发的个人检测库,还支持PPYOLO、PPYOLOv2、PPYOLOE、FCOS等算法。
得益于YOLOX的优秀架构,miemiedetection里的算法训练速度都非常快,数据读取不再是训练速度的瓶颈。
代码开发使用的深度学习框架为pyTorch,实现了可变形卷积DCNv2、Matrix NMS等高难度算子,支持单机单卡、单机多卡、多机多卡训练模式(多卡训练模式建议使用Linux系统),支持Windows、Linux系统。
并且由于miemiedetection是一个不需要安装的检测库,用户可以直接更改其代码改变执行逻辑,所以向库中添加新算法也很容易。
作者表示未来还会加入更多的算法支持(还有女装)。
算法如假包换
复现模型,最重要的就是准确率要跟原版的基本相同。
先看PPYOLO、PPYOLOv2、PPYOLOE这三个模型,作者均经过了loss对齐、梯度对齐的实验。
为了保留证据,在源码中还可以看到注释掉的读写*.npz 的部分,都是做对齐实验遗留的代码。
并且作者还详细记录了性能对齐的过程,对于新手来说,照着这条路走一遍,也是一个不错的学习过程!
全部的训练日志也都记录保存在仓库中,足以证明复现PPYOLO系列算法的正确性!
最后的训练结果显示,复现的PPYOLO算法和原版仓库具有一样的损失、一样的梯度。
另外,作者也试着用原版仓库和miemiedetection迁移学习voc2012数据集,也获得了一样的精度(使用了相同的超参数)。
和原版实现一样,使用了同样的学习率、同样的学习率衰减策略warm_piecewisedecay(PPYOLO和PPYOLOv2使用)和warm_cosinedecay(PPYOLOE使用)、同样的指数滑动平均EMA、同样的数据预处理方式、同样的参数L2权重衰减、同样的损失、同样的梯度、同样的预训练模型,迁移学习得到了同样的精度。
实验做得足,测试做得多,保证大家有美好的使用体验!
不要998,也不要98,只要点个star,所有目标检测算法免费带回家!
模型下载与转换
想跑通模型,参数很重要,作者提供了转换好的预训练pth权重文件,可以通过百度网盘直接下载。
链接:https://pan.baidu.com/s/1ehEqnNYKb9Nz0XNeqAcwDw
提取码:qe3i
或者按照下面的步骤获取:
第一步,下载权重文件,项目根目录下执行(即下载文件,Windows用户可以用迅雷或浏览器下载wget后面的链接,这里为了展现美观,只以ppyoloe_crn_l_300e_coco为例):
注意,带有pretrained字样的模型是在ImageNet上预训练的骨干网路,PPYOLO、PPYOLOv2、PPYOLOE加载这些权重以训练COCO数据集。其余为COCO上的预训练模型。
第二步,转换权重,项目根目录下执行:
其中各个参数的含义为:
- -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的配置项有:
其中,
- 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目录下;
对于VOC 2012数据集,则需要修改数据集的配置为:
另外,你也可以像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数据集、本项目的放置位置应该是这样:
数据集根目录和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的配置文件也是类似这样的结构。
预测
首先,如果输入的数据为一张图片,则在项目根目录下执行:
其中各个参数的含义为:
- -f表示的是使用的配置文件;
- -c表示的是读取的权重文件;
- --path表示的是图片的路径;
- --conf表示的是分数阈值,只会画出高于这个阈值的预测框;
- --tsize表示的是预测时将图片Resize成--tsize的分辨率;
预测完成后控制台会打印结果图片的保存路径,用户可打开查看。如果是使用训练自定义数据集保存的模型进行预测,修改-c为你的模型的路径即可。
如果预测的是一个文件夹下的所有图片,则在项目根目录下执行:
将--path修改为对应图片文件夹的路径即可。
训练COCO2017数据集
如果读取ImageNet预训练骨干网络训练COCO数据集,则在项目根目录下执行:
一条命令直接启动单机八卡训练,当然了,前提是你真的有一台单机8卡的超算。
其中各个参数的含义为:
-f表示的是使用的配置文件;
-d表示的是显卡数量;
-b表示的是训练时的批大小(所有卡的);
-eb表示的是评估时的批大小(所有卡的);
-c表示的是读取的权重文件;
--fp16,自动混合精度训练;
--num_machines,机器数量,建议单机多卡训练;
--resume表示的是是否是恢复训练;
训练自定义数据集
建议读取COCO预训练权重进行训练,因为收敛快。
以上述的VOC2012数据集为例,对于ppyolo_r50vd模型,如果是1机1卡,输入下述命令开始训练:
如果训练因为某些原因中断,想要读取之前保存的模型恢复训练,只要修改-c为想要读取模型的路径,再加上--resume参数即可。
如果是2机2卡,即每台机上1张卡,在0号机输入以下命令:
并在1号机输入以下命令:
只需要把上面2条命令的192.168.0.107改成0号机的局域网ip即可。
如果是1机2卡,则输入下面的命令即可开始训练:
迁移学习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模型,在单机输入下面的命令即可开始训练(冻结了骨干网络)
迁移学习VOC2012数据集,实测ppyoloe_l的AP(0.50:0.95)可以到达0.66+、AP(0.50)可以到达0.85+、AP(small)可以到达0.28+。
评估
命令和具体的参数如下。
在项目根目录下运行结果为:
转换权重后精度有一点损失,大约为0.4%。
以上是GitHub开源130+Stars:手把手教你复现基于PPYOLO系列的目标检测算法的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

文本标注工作是将标签或标记与文本中特定内容相对应的工作。其主要目的是为文本提供额外的信息,以便进行更深入的分析和处理,尤其是在人工智能领域。文本标注对于人工智能应用中的监督机器学习任务至关重要。用于训练AI模型,有助更准确地理解自然语言文本信息,提高文本分类、情感分析和语言翻译等任务的性能。通过文本标注,我们可以教AI模型识别文本中的实体、理解上下文,并在出现新的类似数据时做出准确的预测。本文主要推荐一些较好的开源文本标注工具。1.LabelStudiohttps://github.com/Hu

图像标注是将标签或描述性信息与图像相关联的过程,以赋予图像内容更深层次的含义和解释。这一过程对于机器学习至关重要,它有助于训练视觉模型以更准确地识别图像中的各个元素。通过为图像添加标注,使得计算机能够理解图像背后的语义和上下文,从而提高对图像内容的理解和分析能力。图像标注的应用范围广泛,涵盖了许多领域,如计算机视觉、自然语言处理和图视觉模型具有广泛的应用领域,例如,辅助车辆识别道路上的障碍物,帮助疾病的检测和诊断通过医学图像识别。本文主要推荐一些较好的开源免费的图像标注工具。1.Makesens

写在前面&笔者的个人理解目前,在整个自动驾驶系统当中,感知模块扮演了其中至关重要的角色,行驶在道路上的自动驾驶车辆只有通过感知模块获得到准确的感知结果后,才能让自动驾驶系统中的下游规控模块做出及时、正确的判断和行为决策。目前,具备自动驾驶功能的汽车中通常会配备包括环视相机传感器、激光雷达传感器以及毫米波雷达传感器在内的多种数据信息传感器来收集不同模态的信息,用于实现准确的感知任务。基于纯视觉的BEV感知算法因其较低的硬件成本和易于部署的特点,以及其输出结果能便捷地应用于各种下游任务,因此受到工业

C++中机器学习算法面临的常见挑战包括内存管理、多线程、性能优化和可维护性。解决方案包括使用智能指针、现代线程库、SIMD指令和第三方库,并遵循代码风格指南和使用自动化工具。实践案例展示了如何利用Eigen库实现线性回归算法,有效地管理内存和使用高性能矩阵操作。

人脸检测识别技术已经是一个比较成熟且应用广泛的技术。而目前最为广泛的互联网应用语言非JS莫属,在Web前端实现人脸检测识别相比后端的人脸识别有优势也有弱势。优势包括减少网络交互、实时识别,大大缩短了用户等待时间,提高了用户体验;弱势是:受到模型大小限制,其中准确率也有限。如何在web端使用js实现人脸检测呢?为了实现Web端人脸识别,需要熟悉相关的编程语言和技术,如JavaScript、HTML、CSS、WebRTC等。同时还需要掌握相关的计算机视觉和人工智能技术。值得注意的是,由于Web端的计

多模态文档理解能力新SOTA!阿里mPLUG团队发布最新开源工作mPLUG-DocOwl1.5,针对高分辨率图片文字识别、通用文档结构理解、指令遵循、外部知识引入四大挑战,提出了一系列解决方案。话不多说,先来看效果。复杂结构的图表一键识别转换为Markdown格式:不同样式的图表都可以:更细节的文字识别和定位也能轻松搞定:还能对文档理解给出详细解释:要知道,“文档理解”目前是大语言模型实现落地的一个重要场景,市面上有很多辅助文档阅读的产品,有的主要通过OCR系统进行文字识别,配合LLM进行文字理

向大家介绍一个最新的AIGC开源项目——AnimagineXL3.1。这个项目是动漫主题文本到图像模型的最新迭代,旨在为用户提供更加优化和强大的动漫图像生成体验。在AnimagineXL3.1中,开发团队着重优化了几个关键方面,以确保模型在性能和功能上达到新的高度。首先,他们扩展了训练数据,不仅包括了之前版本中的游戏角色数据,还加入许多其他知名动漫系列的数据纳入训练集中。这一举措丰富了模型的知识库,使其能够更全面地理解各种动漫风格和角色。AnimagineXL3.1引入了一组新的特殊标签和美学标

FP8和更低的浮点数量化精度,不再是H100的“专利”了!老黄想让大家用INT8/INT4,微软DeepSpeed团队在没有英伟达官方支持的条件下,硬生生在A100上跑起FP6。测试结果表明,新方法TC-FPx在A100上的FP6量化,速度接近甚至偶尔超过INT4,而且拥有比后者更高的精度。在此基础之上,还有端到端的大模型支持,目前已经开源并集成到了DeepSpeed等深度学习推理框架中。这一成果对大模型的加速效果也是立竿见影——在这种框架下用单卡跑Llama,吞吐量比双卡还要高2.65倍。一名
