先给结论:生成图像时常用转置卷积从低分辨率「粉刷」到高分辨率。核尺寸不能被步长整除时,有的输出位置被刷到多次,有的只一次,默认就是不均匀。二维上两个轴的图案相乘,一维差两倍会变成四倍,看起来像棋盘。亮色离平均色越远越显眼,因为网络靠偏置就能出平均色,出鲜红更依赖这次粉刷。先放大再卷积,随机初始化就不带棋盘。
为什么「再多训一会儿」抹不掉格子
痛点是算子的默认行为,不是还没学好。转置卷积让低分辨率上的每个点在高分辨率上画一个窗。窗的边长不能被步长整除,重叠次数就随位置周期变化。多层叠在一起,伪影会在多种频率上复合;最后一层用步长一的转置卷积能抑制一部分能被核尺寸整除的频率,仍会漏。理论上网络可以学一套刚好抵消不均匀的权重,但这严重限制滤波器,多通道一交互就更难。连核被步长整除、重叠次数本该均匀时,模型也常常学出能制造类似格子的核。转置卷积太容易表示「制造伪影的函数」,避免伪影才是吃力的那一侧。
这不是某一种对抗生成训练才有的病。风格迁移直出图像同样会出棋盘,改成先放大再卷积就消失。更硬的证据:权重还是随机的时候,转置卷积生成器已经在出格子;全部改成插值加卷积,训练前就没有。格子是上采样算子自带的,不是判别器教出来的。
五步把上采样从「默认格子」改成「默认均匀」
- 先画重叠图。对每个输出位置数有多少个核窗盖到它。核不能被步长整除,就不要指望学习来抹平。二维要把两个轴的倍数乘起来看。
- 把「提高分辨率」和「计算特征」拆开。先用最近邻或双线性把特征图放大,再做普通卷积。卷积核在输出窗上是权值共享的,天生不鼓励那种周期性的多重粉刷。实践里最近邻往往比双线性好训,双线性有时把该有的高频也顶住;这是超参经验,不是定理,但棋盘会消失。
- 核可被步长整除(子像素卷积那一类)只能当减负,不能当修好。均匀重叠仍然很容易学出格子,只是默认没那么狠。
- 用随机初始化做体检。训练前生成一张图,若已有周期格子,病在算子。不要等对抗训练几个小时再看。最后两层仍用转置卷积,会留下频率二和四;只留最后一层,会留下频率二;全改插值卷积,格子没了。
- 同时检查反向。对卷积求梯度就是一次转置卷积,步长卷积的判别器会让生成器被梯度牵着画出格子。特征可视化里的高频噪声有一部分来自这里,一部分来自最大池化。抖动位置能对消一些棋盘,但那是在补偿架构,不是架构已经干净。某些像素无理由地比邻居多吃几倍梯度,既不公平,也可能放大对抗扰动。
| 上采样 | 默认行为 | 学习能否修好 | 门禁 |
|---|---|---|---|
| 核不能整除步长的转置卷积 | 周期不均匀,二维平方 | 理论上能,实践几乎修不完 | 禁止当默认 |
| 核能整除步长的转置卷积 | 重叠次数均匀 | 仍易学出格子 | 只能减负 |
| 最近邻放大 + 卷积 | 无棋盘 | 不依赖抵消重叠 | 优先默认 |
| 双线性放大 + 卷积 | 无棋盘,可能过平滑 | 要调超参 | 可试用,须看高频 |
| 最后一层步长一转置卷积 | 能抑制部分频率 | 仍会漏 | 不能当已修好 |
现场有三条。其一,亮饱和色最容易暴露问题,因为平均色靠偏置就能出,偏离平均才要上采样层出力。评审生成图时不要只看灰蒙蒙的样本。其二,矩阵视角能一次看清差别:转置卷积给每个输出窗独立的一组系数;插值卷积把放大和滤波分开,隐含权值共享,高频周期伪影要另花容量去造。其三,音频等对高频伪影更敏感的模态,同样不该默认转置式上采样。格子在图像上是棋盘,在波形上是嗡声。
把提高分辨率从「可学习的粉刷」改成「先重采样再滤波」,是在改算子的归纳偏置,不是在微调对抗损失。损失再精巧,也抹不掉随机初始化就已经存在的周期。评审时把训练前的随机出图和训练后的出图并排,格子若两边都在,就不要再把锅推给损失。
若只能改生成器一处:所有提高分辨率的步骤改成最近邻放大后接卷积,并用随机初始化体检。训练前仍能看见格子,就还没改干净。
结论:棋盘是上采样算子的默认输出,不是训练没到位
核与步长不能整除时,转置卷积默认不均匀,二维还会平方。学习很难完全抵消,均匀重叠也会学出格子。先放大再卷积,随机初始化就不带伪影。反向的步长卷积同样在铺棋盘。仍用转置卷积当默认上采样,是在让模型每天对抗自己的算子。
你下次看生成图上的格子,先数核能不能被步长整除,再看随机初始化有没有已经在出周期。两问不查,不要先去调损失。
本文侧重全链路风控方法论。落地时请用自身业务单据做回放验证,不要把示例阈值直接当生产策略。 相关:风控体检 · 方案资源
常见问题 FAQ
什么是转置卷积导致的棋盘格伪影?
转置卷积在从低分辨率上采样到高分辨率时,如果核尺寸不能被步长整除,某些输出位置会被多次覆盖,而某些只一次,导致重叠不均匀。这种不均匀在二维上两个轴的图案相乘,一维差两倍会变成四倍,看起来像棋盘格子。
为什么核与步长不能整除会产生棋盘格?
因为转置卷积让每个低分辨率点在高分辨率上画一个窗。窗边长不能被步长整除时,重叠次数随位置周期变化,导致不均匀。二维上两个轴的倍数相乘,伪影在多种频率上复合,形成明显棋盘图案。
如何避免上采样时的棋盘格伪影?
推荐先使用最近邻或双线性插值将特征图放大,再做普通卷积。这样把提高分辨率和计算特征拆开,避免了转置卷积的多重粉刷问题。实践里最近邻往往比双线性好训,棋盘会消失,但双线性可能过平滑需调超参。
为什么再多训练也抹不掉棋盘格?
棋盘格是算子的默认行为,不是训练没到位。转置卷积太容易表示制造伪影的函数,网络学习抵消不均匀会严重限制滤波器,尤其多通道交互时更难。即使核能整除步长,模型也常学出类似格子,学习修好几乎不可能。
如何用随机初始化检查上采样算子是否有棋盘格问题?
在训练前,用随机权重生成一张图像。如果已经有周期格子,说明问题在算子本身。不要等对抗训练几小时再看;最后两层仍用转置卷积会留下频率伪影,全改插值加卷积格子就没了,这能快速诊断架构缺陷。
转置卷积和先放大再卷积在避免棋盘格方面有什么区别?
转置卷积默认可能导致不均匀重叠,易产生棋盘格;先放大再卷积(如最近邻加卷积)无棋盘,不依赖抵消重叠,是优先默认。但双线性放大可能过平滑,需调超参看高频;子像素卷积等核整除步长的方法只能减负,不能修好。