首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我有错误:给定groups=1,大小的权重[8,1024,1,1],期望输入[8,304,9,40]有1024个通道,但得到304个通道

为什么我有错误:给定groups=1,大小的权重[8,1024,1,1],期望输入[8,304,9,40]有1024个通道,但得到304个通道
EN

Stack Overflow用户
提问于 2022-09-03 15:49:39
回答 1查看 50关注 0票数 0

我正在与yolostereo3d的stereo3d对象检测(仅立体声摄像机,没有天鹅绒)在基蒂数据集上工作,以edgeNext为骨干,而不是resNet。

在使用相同的基蒂数据集将主干网从resNet更改为edgeNext之前,一切正常。但是,之后我开始出现以下错误:

代码语言:javascript
运行
复制
RuntimeError: Given groups=1, weight of size [8, 1024, 1, 1], expected input[8, 304, 9, 40] to have 1024 channels, but got 304 channels instead

下面是我如何改变脊梁的方法:

代码语言:javascript
运行
复制
class YoloStereo3DCore(nn.Module):
    """
        Inference Structure of YoloStereo3D
        Similar to YoloMono3D,
        Left and Right image are fed into the backbone in batch. So they will affect each other with BatchNorm2d.
    """
    def __init__(self, backbone_arguments):
        f = open("/home/zakaseb/Thesis/YoloStereo3D/Stereo3D/Sequence.txt", "a")
        f.write("yolosterero3dCore_init \n")
        f.close()
        super(YoloStereo3DCore, self).__init__()
        self.backbone =edgenext_small(**backbone_arguments) # Resnet, change backbone from here

        base_features = 256 #if backbone_arguments['depth'] > 34 else 64 # meaning which depth of resnet
        self.neck = StereoMerging(base_features) #stereomerging outputs features and depth output.

下面是edgenext_small()

代码语言:javascript
运行
复制
@BACKBONE_DICT.register_module
def edgenext_small(pretrained=False, **kwargs):
    FPS @ BS=1: 93.84 & @ BS=256: 1785.92 for MobileViT_S
    model = EdgeNeXt(depths=[3, 3, 9, 3], dims=[48, 96, 160, 304], expan_ratio=4,
                     global_block=[0, 1, 1, 1],
                     global_block_type=['None', 'SDTA', 'SDTA', 'SDTA'],
                     use_pos_embd_xca=[False, True, False, False],
                     kernel_sizes=[3, 5, 7, 9],
                     d2_scales=[2, 2, 3, 4],
                     classifier_dropout=0.0)

    return model
EN

回答 1

Stack Overflow用户

发布于 2022-09-03 23:57:58

如您所见,您的主干返回304个通道的功能映射,但下一个层期望1024个通道。目前有两种解决方案:

  • 如果您的主干是从头开始设计的,那么您可以调整它的体系结构,使dims参数的EdgeNeXt以1024结尾。典型情况是:
代码语言:javascript
运行
复制
model = EdgeNeXt(depths=[3, 3, 9, 3], dims=[48, 96, 160, 1024], expan_ratio=4,
                 global_block=[0, 1, 1, 1],
                 global_block_type=['None', 'SDTA', 'SDTA', 'SDTA'],
                 use_pos_embd_xca=[False, True, False, False],
                 kernel_sizes=[3, 5, 7, 9],
                 d2_scales=[2, 2, 3, 4],
                 classifier_dropout=0.0)
  • 如果您的主干具有固定的体系结构(例如,如果您使用的是经过预先培训的模型),则应该在骨干之后调整该体系结构。例如,您可以添加一个torch.Conv2D(304, 1024, kernel_size)来学习304中的1024特性。否则,您可以更改下一层的架构。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73593551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档