让 AI 排一次 PixelShuffle:画面变大,为什么元素总数没有增加

前天 4阅读

看到超分辨率模型里的PixelShuffle,AI可能解释成“每个像素放大成四块”。这个算子实际上把通道中的已有元素搬到更大的空间网格。八个互不相同的数字就足以检查它有没有复制、插值或只是错误地改了形状。

让 AI 排一次 PixelShuffle:画面变大,为什么元素总数没有增加

AI模型生成的概念插图:通道条中的色块改排成空间拼贴;排列只表达重组,不对应正文索引、精确缩放形状或软件截图。

先把通道数也算进尺寸

忽略批次维,输入有4个通道,每通道高1、宽2。按通道编号0、1、2、3,四行数据分别为[1,2]、[3,4]、[5,6]、[7,8]。设放大因子r=2。按PyTorch定义,输出通道为4/2²=1,高为1×2=2,宽为2×2=4。

输入元素数4×1×2=8,输出也是1×2×4=8。空间面积扩大四倍,通道数缩成四分之一,整体没有多出数字。如果输入只有3个通道,在这个规则下就无法用r=2完整分组;不能默默补一个通道再称为同一算子。

同一空间位置的四个通道组成一小块

在本例的单输出通道中,输入通道0、1、2、3分别对应输出小块的左上、右上、左下、右下。输入空间位置0上四个通道的值是1、3、5、7,因此放进输出左侧2×2小块:上排[1,3]、下排[5,7]。

输入空间位置1上对应2、4、6、8,放进右侧小块:上排[2,4]、下排[6,8]。两个小块并排后,完整输出两行为[1,3,2,4]和[5,7,6,8]。每个原数出现一次,没有平均出新值,也没有把任何一个数复制四次。

直接把原来的通道连续序列1到8改成2×4,往往会得到[1,2,3,4]与[5,6,7,8]。形状和元素总数都正确,空间位置却错误。检查PixelShuffle不能只核对shape,还要用唯一编号追踪实际索引。

倒着读一遍验证重排

从输出中按每个2×2块的左上位置取数,可以收回通道0的[1,2];右上位置收回通道1的[3,4];左下、右下分别收回[5,6]和[7,8]。这是本例的PixelUnshuffle方向,说明只要尺度和排列约定一致,这次重排本身没有丢数。

让AI交出一份八行映射,每行写输入通道、输入列、数值、输出行和输出列。人工重点看数字2:它来自通道0的第二个位置,最后落在输出第一行第三列,而不是第一行第二列。这一项就能区分正确重排与简单reshape。

实际网络通常先用可学习的层生成足够多的特征通道,再通过重排输出更大的空间尺寸。哪些通道应当学到什么内容,属于前面的模型;PixelShuffle本身没有可训练权重,也不会凭空证明高频细节真实存在。

多输出通道时,每组r²个输入通道对应各自输出通道,批次也分别处理。不同数据布局或导出算子可能采用不同的维度顺序,接入时要查文档并保留这种编号测试。画面看似正常,不代表所有通道和像素都已经对位。

资料核对日期:2026年10月2日。算例为原创教学设定,已用独立Python计算复核,不代表真实模型训练或性能测试。

参考资料

PyTorch:PixelShuffle形状与重排定义

文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。