for i in range(len(depths)): layers = [] dpr = dprs[sum(depths[:i]):sum(depths[:i + 1])] for j in range(depths[i]): if j == 0: stride, has_skip, attn_s, exp_ratio = 2, False, False, exp_ratios[i] * 2 else: stride, has_skip, attn_s, exp_ratio = 1, True, attn_ss[i], exp_ratios[i] layers.append(iRMB( emb_dim_pre, embed_dims[i], norm_in=True, has_skip=has_skip, exp_ratio=exp_ratio, norm_layer=norm_layers[i], act_layer=act_layers[i], v_proj=True, dw_ks=dw_kss[i], stride=stride, dilation=1, se_ratio=se_ratios[i], dim_head=dim_heads[i], window_size=window_sizes[i], attn_s=attn_s, qkv_bias=qkv_bias, attn_drop=attn_drop, drop=drop, drop_path=dpr[j], v_group=v_group, attn_pre=attn_pre )) emb_dim_pre = embed_dims[i] self.__setattr__(f'stage{i + 1}', nn.ModuleList(layers)) self.norm = get_norm(norm_layers[-1])(embed_dims[-1]) self.apply(self._init_weights) self.channel = [i.size(1) for i in self.forward(torch.randn(1, 3, 640, 640))]
时间: 2024-01-24 16:20:13 浏览: 352
unknown-depths:资料库
这段代码是一个神经网络模型的定义,其中包含了多个iRMB层。每个iRMB层都有不同的输入和输出维度,以及不同的超参数和正则化方式。在代码中,使用了循环来依次添加每个iRMB层,并且将它们放入不同的stage中。最后,使用了一个正则化层对模型的输出进行规范化,并且使用apply函数初始化权重。最后一行代码用于获取每个stage的输出通道数。
阅读全文