deep-learning - U-Net 的连接步骤,用于不等数量的通道
问题描述
我正在尝试实现用于图像分割的 U-NET 架构,同时在扩展路径中实现裁剪和连接步骤,我无法理解如何连接不相等数量的通道。
根据该架构,第一个上采样步骤的输入必须与收缩路径的相应输出连接,但问题是收缩路径中的通道数是 512,而在上采样步骤之后它们是 1024,它们应该如何连接.我的裁剪和连接代码是 -
def crop_and_concat(self, upsampled, bypass, crop=False):
if crop:
c = (bypass.size()[2] - upsampled.size()[2]) // 2
bypass = F.pad(bypass, (-c, -c, -c, -c))
return torch.cat((upsampled, bypass), 1)
我收到的错误
- 我在RuntimeError: Given groups=1, weight of size 128 256 5 5, expected input[4, 384, 64, 64] to have 256 channels, but got 384 channels instead
哪里做错了?
解决方案
首先,当涉及到 U-Net 之类的架构时,您不必那么严格,之后有许多衍生产品(例如,参见PixelShuffle 的fastai 变体)。
在编码器的情况下,在基本版本中,您的频道(每块):
1 - 64 - 128 - 256 - 512
标准卷积编码器。之后是一个共享层 1024
。
在解码器中,它向下,但是当您连接每个块的编码器状态时,它有更多的通道。
这将是:
1024 -> 512 -> 512(解码器)+ 512(编码器),总共 1024 -> 512
512 -> 256 -> 256(解码器)+ 256(编码器),总共 512 -> 256
等等。
你的情况是256
从解码器被记入帐户,但从128
编码器添加的不是。只需将您的频道增加到 256 + 128,然后为您的 UNet 的每个块遵循上述方案。
推荐阅读
- django - 未找到“页面”的反向。“页面”不是有效的视图函数或模式名称
- c++ - Qt SQL Driver 相对路径
- vba - MS Access VBA:如何在表单上显示表格中的图片
- javascript - 我想得到一个数组,它告诉一个元素重复了多少次?
- ansible - Ansible 失败了!=> {"msg": "'users' 未定义"}
- f# - 为什么 F# seq 以小写字母开头?
- c++ - 列表初始化如何工作?是否有任何超载?
- amazon-cloudformation - EKS 集群无法添加服务帐户 EntityAlreadyExists:提供 url https://oidc.eks
- html - 内容部分位于侧边栏下方
- javascript - NextJS 在客户端和服务器端获取数据