半详细yolov8更换head

半详细Yolov8更换head

为什么是半详细呢,因为步骤和我上一篇更换backbone一样,我上一篇比较详细,看那个就好。但是为什么还要再写一次呢,因为我以为有区别,然后百度了半天,几乎没有完全公开的教程,我算是半蒙半猜的吧,给弄出来了。

先上backbone连接

如上所述,需要全部步骤的,看我这个连接

https://blog.csdn.net/weixin_44900686/article/details/135404081

修改yaml

前面的步骤都是一样的,把模块代码写好,注册并且更换环境后,就直接修改yaml就好了。
我今天有一个还是比较震惊我的发现,我之前只找到了yolov8.yaml,没发现yolov8n、yolov8s、yolov8l等等yaml,结果我发现后缀居然是自动识别的,这个功能有点厉害(原谅我这个小白的震惊),也就是说,你自己写yaml的时候,你也只需要在原本yolov8.yaml的基础上改就行了,比如我这个地方:
在这里插入图片描述
当然这里面的大部分呢yaml都是原本自带的,但是对于其中任何一个yaml,你只需要在调用的时候,加上n、s、l后缀,就能使用更大的模型,比如
yolov8l-cls.yaml,直接往后加就行,特别神奇,我也不知道原理是什么,看了一下源码没看太懂(主要也不是我的重点)。

到这里也就结束了基本是,我本来是打算用rtdetr作为head的,结果发现官方自己实现了,我直接调用了。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要修改YOLOv8网络结构,我们可以针对原有模型中需要增删改的网络层进行添加、删除或修改操作。以YOLOv8模型为例,该模型的结构包含Backbone网络、SPP模块、Neck网络以及Head网络。如果需要修改其中任意一部分的网络层,则可以通过新建一个自定义的网络类来实现。 在自定义的网络类中,我们需要重载`init()`函数和`forward()`函数,并以与原有模型相同的方式接收输入和输出结果。首先,需要导入必要的模块,例如`torch.nn`和各个网络类的定义。然后,在自定义的网络类中,我们可以根据需要修改网络的结构。比如,如果需要修改Neck网络为PAN网络,可以在初始化函数中进行相应的修改。 在修改网络结构时,我们需要注意旧的网络层的输出结果对于新的网络层的输入是什么,以确保网络的连贯性和正确性。在forward函数中,我们需要按照修改后的网络结构顺序对输入进行前向传播,将输出结果作为下一层的输入。 需要注意的是,在对模型进行大规模修改时,特别是修改输入输出通道数等重要信息时,可能会导致前向传播结果与预期不符。因此,在修改模型之后,我们需要进行充分的测试和验证,确保修改后的模型仍然可以正常工作并达到预期效果。 总结来说,要修改YOLOv8网络结构,我们需要创建一个自定义的网络类,重载`init()`函数和`forward()`函数,并在其中实现对原有模型中需要修改的网络层进行添加、删除或修改的操作。在修改过程中,需要注意网络层之间的关联和输入输出的连贯性,并进行充分的测试和验证,以确保修改后的模型的正确性和性能。 : 引用 : 引用[3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值