tf.depth_to_space与相位移位上采样是否等价?TensorFlow超分模型疑问
确认tf.depth_to_space与subpixel代码功能一致性
我之前也研究过subpixel上采样的两种实现方式,刚好可以帮你理清这个问题:
首先,咱们先明确核心逻辑:subpixel上采样的本质就是把输入张量中r²倍于输出通道数的通道信息,重新排列到空间维度,实现r倍的宽高上采样(r是缩放因子)。
你提到的subpixel代码,核心步骤大概是这样的:
- 把输入张量按通道维度拆分成r²个独立的张量(每个张量的通道数和输出一致)
- 将这些张量堆叠起来,把通道拆分后的维度重新映射到空间的行和列方向
- 最后通过转置和reshape,得到r倍宽高的输出张量
而tf.depth_to_space其实就是TensorFlow官方实现的这个逻辑!当你设置block_size=r时,它会自动完成:
- 把输入的
r²*C个通道,按行优先的规则分组为r×r的块 - 把每个通道块对应到原空间位置的
r×r邻域像素上 - 直接输出形状为
[batch, h*r, w*r, C]的上采样张量
只要你保证原代码中的缩放因子r和tf.depth_to_space的block_size参数一致,两者的功能就是完全等价的——甚至官方实现的tf.depth_to_space在性能上会更优,因为它是底层优化过的算子,不需要手动拆分、堆叠和转置这些操作。
举个简单的例子:当r=2时,输入通道数是4C,原subpixel代码会把通道拆成4个C通道的张量,然后排列成2×2的空间邻域;tf.depth_to_space(block_size=2)会做完全相同的通道→空间映射,最终输出的上采样结果完全一致。
内容的提问来源于stack exchange,提问作者user454450
相关产品推荐
相关产品推荐

