One_self_ 2023-04-01 17:12 采纳率: 25%
浏览 20

一个很无语的yolov5出错,。

最近在跑改yolov5网络的时候,老碰到一个很奇怪的问题:就比如以加上一个ACmix模块为例,修改yolov5l.yaml文件,我在neck部分的初始加了一个ACmix模块,运行的时候跳了一个问题:
RuntimeError: Argument #4: Padding size should be less than the corresponding input dimension, but got: padding (3, 3) at dimension 3 of input 4
大概意思是说我这时候的特征太小了比3x3还小,因为这个模块有个torch.nn.ReflectionPad2d(3)的操作,即映射往周边填充3。
但也不对啊,按照网络的情况,进入ACmic模块的特征大小应该是(batch_size,1024,20,20)就是分辨率有20x20了,这问题有点奇怪,??于是我在ACmix的forward()方法中加入了一行代码,作用就是显示进入ACmix模块的特征分辨率:
print(x.shape)
结果显示:
torch.Size([1, 1024, 8, 8])
torch.Size([1, 1024, 1, 1])
预想是:torch.Size([1, 1024, 20, 20])
后面我发现运行yolo.py文件的时候,输入的图片大小是256,下采样32倍后就成了8了,但先不论为什么输入的图片大小不是640而是256,更让我疑惑的是我只在yolov5l.yaml里只用了一个ACmix模块,但这里却打印了两次???说明后面哪里又调用了这个模块,而且也不是inference阶段,模型Fuse之后再调用了ACmix的原因。。。。求求大神告知如何解决这个问题,

img

(之前再用阿里达摩院的P2T论文的时候也遇到过相似的问题,看了半天终于看懂了源代码,放到yolov5里就出问题了,原因也是说进入池化的分辨率太小,也用上面相似的方法发现它也是多次调用了模块(但明明我只设定用一次),但代码里也瞧不出问题)

img

img

img

  • 写回答

2条回答 默认 最新

  • One_self_ 2023-04-01 17:41
    关注

    经过一番乱试,现在解决了一些问题,反正就是Pycharm可以跑了
    解决方法就是再torch_utils.py文件中修改,原来是:
    stride = max(int(model.stride.max()), 32) if hasattr(model, 'stride') else 32 # max stride
    im = torch.empty((1, p.shape[1], stride, stride), device=p.device) # input image in BCHW format
    这表输入模型的大小是(1, p.shape[1], stride, stride),就是(1,3,32,32)
    我直接将其改为(1,3,640,640),这样计算出来的就是输入640时的Gflops,后面就不用:flops * imgsz[0] / stride * imgsz[1] / stride这行代码了。
    但是之前测得256是什么???不是说输入得默认是256吗?而且两次进入ACmix模块又是咋出现的?????

    评论

报告相同问题?

问题事件

  • 创建了问题 4月1日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表