(Windows)YOLOv8成功运行DCNv4报错总结

介绍

DCNv4是可变形卷积的第四版本也是今年2024年1月份公示的,其在网络结构上和DCNv3是差不多的,最突出的优点的减小了内存访问带来的负担,加快收敛的速度,在不失精度的情况下能把速度大幅度提升,在论文作者的实验里面不对DCNv4做任何的处理,仅仅是将其替换原本DCNv3,速度提升了80%。

论文地址:[2401.06197] Efficient Deformable ConvNets: Rethinking Dynamic and Sparse Operator for Vision Applications (arxiv.org)icon-default.png?t=N7T8https://arxiv.org/abs/2401.06197

源码地址:

OpenGVLab/DCNv4: [CVPR 2024] Deformable Convolution v4 (github.com)icon-default.png?t=N7T8https://github.com/OpenGVLab/DCNv4

编译DCNv4

Linux编译

如果你的系统是Linux的话就很容易了,直接运行make.sh这个文件或者是和windows一样输入python代码来编译,基本上都能一次性解决(但是Linux没用过的话前期配置真的很烦人,搞的我快疯了都)

Windows编译

DCNv4和旧版本的DCNv3一样是需要进行编译的,直接进入DCNv4的目录下面找到setup.py文件然后终端输入

python setup.py build install

如果成功了就万事大吉,但是对于windows用户来说一般很难一次性成功,我也是搞了好久最后编译成功的(可提供windows编译环境)

报错汇总(持续更新)

1.页面大小不足

这个两个解决方法一个是修改虚拟内存大小,具体操作很多博主也写了,我自己是直接把works=8修改成works=0就解决了

2.RuntimeError: Not implemented on the CPU

这里是说我们的DCNv4在一些操作中用到CPU来训练,但是我们是要他在GPU上跑才行,然后我的解决方法是

首先找到\ultralytics-main\ultralytics\nn\task.py下的class DetectionModel(BaseModel),添加如下代码

if isinstance(m, (Detect, Segment, Pose)):
    s = 256  # 2x min stride
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") #增加的,将模型放入GPU运行
    m.inplace = self.inplace
    m.cuda() #增加的,将模型放入GPU运行
    forward = lambda x: self.forward(x)[0] if isinstance(m, (Segment, Pose)) else self.forward(x)
    m.stride = torch.tensor([s / x.shape[-2] for x in forward(torch.zeros(1, ch, s, s).to(device))])  # forward 在张量后加了一个to(device)

然后在找到_predict_once函数添加一段代码

    def _predict_once(self, x, profile=False, visualize=False, embed=None):
        self.cuda()//添加使用GPU
        """
        Perform a forward pass through the network.

        Args:
            x (torch.Tensor): The input tensor to the model.
            profile (bool):  Print the computation time of each layer if True, defaults to False.
            visualize (bool): Save the feature maps of the model if True, defaults to False.
            embed (list, optional): A list of feature vectors/embeddings to return.

        Returns:
            (torch.Tensor): The last output of the model.
        """

两个地方改完了就成功解决这个问题了

  • 39
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值