模型修改之替换骨干网络(backbone)

这篇具有很好参考价值的文章主要介绍了模型修改之替换骨干网络(backbone)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

说实话这篇文章是没有在计划之内的,但是有读者说让我出一个使用transformer替换其他骨干网络的示例,想了想,最近好像没啥状态的,论文有点看不下去,正好整理一下自己的经验把。说实话替换骨干网络说简单也简单,说麻烦也麻烦,替换骨干网络个人感觉就是一个debug代码匹配输入输出的问题,作为菜鸡的一种能想到的改进模型方式之一,替换骨干网络也不失为一种锻炼自己看懂代码、改代码的能力,废话就到这里,下面开始文章的内容。

替换骨干网络的原则

为什么一些模型能够把其内部的模块进行替换?理由很简单,就是把里面的模块看作一个黑盒子,黑盒子有着输入和输出,那么作为网络中的一个部分,前面有着输入过来,后面也需要输出到其他模块,要想替换该模块而让模型能够运行起来,关键是输入输出的匹配问题,下面就以我自己实验过模型作为例子。
我要替换的骨干网络是3D目标检测的一个方法叫Group-Free 3d,它使用的骨干网络是PointNet++,就是下面的图中用红色框框出来的部分。
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉
而我想用一个transformer的骨干网络Pointformer替换掉PointNet++。首先这里我说一下为什么我想用Pointformer来替换PointNet++,因为在Pointformer这个论文中,它说Pointformer这个骨干网络可以替换PointNet++来获得更好的性能,我观察到Group-Free 3d中使用的是PointNet++作为骨干网络,但是没有人将其中的PointNet++换为Pointformer,所以我想把Pointformer替换PointNet++看能否提高Group-Free 3d的性能。**所以,在这里强调一下,我所替换的骨干网络是别人的方法所使用过的,但是在新的模型中没有实践过的。**但是我觉得原理都是一样的,就是把输入和输出匹配对应上就可以了。

过程

查看网络参数的设置

首先根据Pointformer论文的介绍,Pointforemer是不用经过修改就可以直接替换PointNet++的,但是不保证有人用PointNet++的时候会进行一些输入输出层数的修改,所以这里就需要查看输入和输出层的网络设置。就比如我这次的实验就中用到的Group-Free 3d中PointNet++的最后一层输出大小为288,而一般的都是输出256,如下图所示:
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉

因此要更改输出256为288。如果说自己使用的代码中没有像这么规范的形式把输入和输出都集中在一个文件上的,可以直接从骨干网络的代码里面找第一层网络的数据输入要求和最后一层的网络的输出数据格式进行修改。
比如:
输入:
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉
这里的真正的开始对数据进行处理的是下面的那个红色的框,这个时候就可以根据self.sa1()这个函数所涉及的输入以及其网络的参数进行查看了。
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉

输出:
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉
骨干网络的最后的一层网络是self.fp2()这个函数,同样的可以去找到它的网络参数设计:
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉
修改完之后就可以替换骨干网络了:
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉

查看输入输出是否匹配

修改完设置之后就可以进行骨干网络的替换了,替换后先查看替换后的骨干网络(Pointfomer)在新的模型中的输入输出是否与原始的骨干网络(PointNet++)的输入输出对应。首先查看原始方法中的骨干网络的输入输出是多少,这时就要用到debug模式了,如下图,PointNet++的输入为:
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉
注意是要在forward函数里面查看输入的大小,比如这里PointNet++的输入大小为torch.Size([6, 20000, 4]),格式为(batch_size, 点云数目,点云的向量长度),记住这个输入的大小,替换为Pointformer的时候也要让Pointformer能够接受这个大小的数据。
接下来查看PointNet++的输出,直接拉到forward函数的返回语句下面,然后同样的设置断点打印输出包含的东西以及大小
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉
抓住主要输出,主要关注在骨干网络输出后下一模块需要哪些输出,比如这里有三个输出集合在一个字典里面,再看看骨干网络之后的模块的输入也是需要这三个输出,如下图所示:
模型更换主干网络,深度学习,深度学习,transformer,计算机视觉
这里的骨干网络的输出为:

torch.Size([6, 288, 1024])
torch.Size([6, 1024, 3])
torch.Size([6, 1024])

同样的记住这三个数据的大小,在替换为Pointformer之后查看Pointformer的输出是不是与这些数据的大小相匹配。

总结

首先要记住的原则是,替换的骨干网络和原始的骨干网络有着相同大小的数据输入输出。然后是查看骨干网络第一层的数据输入大小和骨干网络最后一层的输出大小,对参数进行修改,修改完之后参数后进行骨干网络的替换,然后查看网络的输入输出是否与原始骨干网络的输入输出相匹配。中间涉及到很多细节,每个人遇到的问题都不一样,本篇文章旨在原理和一些经验的说明,不可能详细到每个细节,总之一句话就是记录输入输出,然后进行修改,多debug就行了
至于替换后的效果怎么样,老实说,这个是个玄学,涉及到很多东西,也许是你的学习率不够好,连替换之前的方法的精度都不如。也有可能是你加进去的模块和后面的模块有着冲突导致性能的下降,等等等。。。。

结束语

这东西做多了就自然而然的会了,不会就百度博客教程什么的。
本人水平有限,如有错误之处,敬请指出。文章来源地址https://www.toymoban.com/news/detail-697317.html

到了这里,关于模型修改之替换骨干网络(backbone)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 改进YOLOv8 | 主干网络篇 | YOLOv8 更换骨干网络之 SwinTransformer | 《基于位移窗口的层次化视觉变换器》

    论文地址:https://arxiv.org/pdf/2103.14030.pdf 代码地址:https://github.com/microsoft/Swin-Transformer 本文介绍了一种新的视觉 Transformer ,称为 Swin Transformer ,它可以作为计算机视觉通用的骨干网络。从语言到视觉的转换中,适应 Transformer 所面临的挑战源于两个领域之间的差异,如视觉实体

    2024年02月06日
    浏览(53)
  • 改进YOLOv5系列:4.YOLOv5_最新MobileOne结构换Backbone修改,超轻量型架构,移动端仅需1ms推理!苹果最新移动端高效主干网络

    本专栏包含大量的首发原创改进方式🚀, 所有文章都是全网首发内容。🌟 降低改进难度,改进点包含最新最全的 Backbone 部分、 Neck 部分、 Head 部分、 注意力机制 部分、 自注意力机制 部分等完整教程 🚀 💡本篇文章基于 YOLOv5、YOLOv7、YOLOv7-Tiny 进行 最新MobileOne结构换Backbon

    2024年02月02日
    浏览(44)
  • [yolov5/yolov8修改]替换yolov5/yolov8中的主干网络为EfficientNetv2

    yolo系列的网络作为单阶段目标检测网络中的佼佼者,在目标检测方面发挥着很大的作用,而yolov5是其中较好的一代网络,yolov8是其中最新的一代网络。但是作为我们学习和使用来说,原始的yolov5或者yolov8网络并不一定就是最合适的,基于此,在yolov5的基础上,针对主干网络进

    2024年02月06日
    浏览(84)
  • CV 经典主干网络 (Backbone) 系列: CSP-Darknet53

    CSP-Darknet53无论是其作为CV Backbone,还是说它在别的数据集上取得极好的效果。与此同时,它与别的网络的适配能力极强。这些特点都在宣告: CSP-Darknet53的重要性。 关于原理部分的内容请查看这里CV 经典主干网络 (Backbone) 系列: CSPNet 具体网络结构可以参考YOLO V3详解(一):网络

    2024年02月11日
    浏览(46)
  • YOLOv8改进轻量级PP-LCNet主干系列:最新使用超强悍CPU级骨干网络PP-LCNet,在CPU上让模型起飞,速度比MobileNetV3+快3倍,又轻又快

    💡本篇文章 基于 YOLOv8 芒果改进YOLO系列: YOLOv8改进轻量级主干系列:最新使用超强悍CPU级骨干网络PP-LCNet,在CPU上让模型起飞,速度比MobileNetV3+快3倍、打造全新YOLOv8检测器 。 🚀🚀🚀内含改进源代码,按步骤操作运行改进后的代码即可 参数量和计算量均下降 重点 :🔥🔥

    2024年02月06日
    浏览(55)
  • YOLOv5/v7 更换骨干网络之 SwinTransformer

    提供 YOLOv5 / YOLOv7 / YOLOv7-tiny 模型 YAML 文件 论文地址:https://arxiv.org/pdf/2103.14030.pdf 代码地址:https://github.com/microsoft/Swin-Transformer 本文介绍了一种新的视觉 Transformer ,称为 Swin Transformer ,它可以作为计算机视觉通用的骨干网络。从语言到视觉的转换中,适应 Transformer 所面临的

    2023年04月14日
    浏览(56)
  • YOLOv8 更换骨干网络之 MobileNetV3

    论文地址:https://arxiv.org/abs/1905.02244 代码地址:https://github.com/xiaolai-sqlai/mobilenetv3 我们展示了基于互补搜索技术和新颖架构设计相结合的下一代 MobileNets。MobileNetV3通过结合硬件感知网络架构搜索(NAS)和 NetAdapt算法对移动设计如何协同工作,利用互补的方法来提高移动端CP

    2023年04月21日
    浏览(45)
  • 【保姆级教程】【YOLOv8替换主干网络】【1】使用efficientViT替换YOLOV8主干网络结构

    《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌ 更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍 感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】

    2024年02月02日
    浏览(54)
  • yolov7模型轻量化改进之MobileOne骨干替换

    本文在之前文章yolov7分割训练的基础上进行改进: https://blog.csdn.net/qq_41920323/article/details/129464115?spm=1001.2014.3001.5502 具体GitHub工程下载,环境安装配置,数据准备等,请借鉴之前的文章,此处只介绍如何进行改进。 MobileOne地址:https://github.com/apple/ml-mobileone 预训练权重地址:

    2024年02月06日
    浏览(39)
  • 主干网络篇 | YOLOv8 更换主干网络之 VanillaNet |《华为方舟实验室最新成果》

    2023/11/14 新增 VanillaNet5 VanillaNet13 🍀 论文地址:https://arxiv.org/pdf/2305.12972.pdf 代码地址:https://github.com/huawei-noah/VanillaNet 在基础模型的核心是“多样性即不同”,这一哲学在计算机视觉和自然语言处理方面取得了惊人的成功。然而,优化和Transformer模型固有的复杂性带来了挑战

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包