styleGAN3 阅读笔记

前言

Alias-Free Generative Adversarial Networks
arXiv:2106.12423

主要解决aliasing问题。

用我的理解来说。
styleGAN2有问题,生成的纹理学到的是固定的相对位置。
(absolute relative position)
原文称为 texture sticking。
例如体现在,转动人脸,胡子固定不动。

我们当然希望生成的胡子跟随人脸转动。(smooth)

aliasing source
  1. 由非理想的上采样滤波器带来的像素网格的微小余像(faint after-images,直译成这样,具体是啥我还没懂…等一个大佬)。

    faint after-images of the pixel grid resulting from non-ideal
    upsampling filters such as nearest, bilinear, or strided convolutions,’

    我不李姐。从后面看,这文章做idea filter的地方是在downsample部分,根本不是upsample啊。

  2. 逐元素的非线性激活函数。

    pointwise application of nonlinearities such as ReLU

此处需要引入混叠(aliasing)的概念。

我个人的理解是,
采样频率太低(不满足采样定理时)
会导致还原的信号不仅失真,而且【叠加到同一个周期内】。
这样就使得还原出来的信号,周期可以叠加到无穷大。
采样频率越低(越趋于0),还原的信号周期越趋于无穷。

理论铺垫

根据Nyquist–Shannon sampling theorem,
离散的采样信号,需要采样频率大于2倍的连续信号频率,才能充分表示。

f采>2fmax。

假设存在一个2维的 脉冲函数Dirac impulse的 sampled feature map。
设采样频率s。
结果就是一个sxs的二维矩阵。
每个grid上一个标量表示采样值。

想个办法插值。
Whittaker–Shannon interpolation formula
惠特克—香农插值公式的一维形态。
f ( t ) = ∑ n = − ∞ ∞ f [ n ] sinc ⁡ ( t − n M M ) f(t)=\sum_{n=-\infty}^{\infty} f[n] \operatorname{sinc}\left(\frac{t-n M}{M}\right) f(t)=n=f[n]sinc(MtnM)

https://zhuanlan.zhihu.com/p/112587699
http://web.eecs.umich.edu/~aey/eecs451/pdf2/sample2.pdf

@mmdong2
https://zhuanlan.zhihu.com/p/279513793
根据Whittaker–Shannon interpolation formula, 带宽为W的带限信号可以表示成sinc函数的累加和。

我把上面这个式子稍微改写成易懂的
f ( t ) = ∑ n = − ∞ ∞ f [ n ] sinc ⁡ ( t M − n ) f(t)=\sum_{n=-\infty}^{\infty} f[n] \operatorname{sinc}\left(\frac{t}{M}-n\right) f(t)=n=f[n]sinc(Mtn)

其中 s = 1 / M s=1/M s=1/M可以认为是采样频率。
进一步地
f ( t ) = ∑ n = − ∞ ∞ f [ n ] sinc ⁡ ( s t − n ) f(t)=\sum_{n=-\infty}^{\infty} f[n] \operatorname{sinc}\left(st-n\right) f(t)=n=f[n]sinc(stn)

这个式子的直观意义是,
从负无穷到正无穷,取无数个采样点n,
每个采样点的值f(n)做一个加权和。
权重由sinc(s-n)来计算。

再简化一点,
f ( t ) = ∑ 采 样 点 ∗ 权 重 f(t)=\sum采样点*权重 f(t)=
可以用这种方式,用很多离散采样点逼近一个连续函数。

注意到
二维sinc的定义是
sinc(x,y)=sinc(x)sinc(y)
因此二维的插值定理是

f ( x , y ) = ∑ 采 样 点 f ( i , j ) ∗ 权 重 ( i , j ) = ∑ f ( i , j ) ∗ s i n c ( s t − i , s t − j ) = ∑ f ( i , j ) s i n c ( s − i ) s i n c ( s − j ) f(x,y)=\sum 采样点f(i,j)*权重(i,j) \\ = \sum f(i,j)*sinc(st-i,st-j) = \\ \sum f(i,j)sinc(s-i)sinc(s-j) f(x,y)=f(i,j)(i,j)=f(i,j)sinc(sti,stj)=f(i,j)sinc(si)sinc(sj)

注意到这个式子,跟论文里的 s i n c ( s x 0 ) s i n c ( s x 1 ) sinc(sx_0)sinc(sx_1) sinc(sx0)sinc(sx1)差了一个bias项i,j。

在这里插入图片描述

按论文的说法,

对原始的二维连续信号 z ( x ) z(\boldsymbol{x}) z(x)做element-wise production,乘以Dirac comb Ш s ( x ) \text{Ш}_s( \boldsymbol{x}) Шs(x)
会得到二维离散信号 Z [ x ] Z[\boldsymbol{x}] Z[x]

其中  Ш  s ( x ) = ∑ X ∈ Z 2 δ ( x − ( X + 1 2 ) / s ) \text { Ш }_s(\boldsymbol{x}) =\sum_{X \in \mathbb{Z}^{2}} \delta\left(\boldsymbol{x}-\left(X+\frac{1}{2}\right) / s\right)  Ш s(x)=XZ2δ(x(X+21)/s)

而对二维离散信号 Z [ x ] Z[\boldsymbol{x}] Z[x]采用ideal interpolation filter ϕ s \phi_s ϕs为卷积核的卷积操作,可以得到二维连续信号 z ( x ) z(\boldsymbol{x}) z(x)

这河里吗?
我也不知道,感觉少一点严谨。
虽然直觉上有点意思。

可以将第一个,离散卷积到连续的过程写作
z ( x ) = ( ϕ s ∗ Z ) ( x ) z(\boldsymbol{x})=(\phi_s * Z)(\boldsymbol{x}) z(x)=(ϕsZ)(x)

将第二个,连续、逐元素乘到离散的过程写作
Z [ x ] = ( Ш s ⊙ z ) ( x ) Z[\boldsymbol{x}]= (\text{Ш}_s \odot z) ( \boldsymbol{x}) Z[x]=(Шsz)(x)

我修正了一下这条式子的写法,更可读。

注意,此处 x \boldsymbol{x} x代表一个二维的,坐标值在[0,1]之间的单位正方形(unit square)空间的张量。

我们掌握了从连续空间到离散空间的变换和逆变换之后,很容易可以想到。

所有!
CV里的操作!
Conv2d之类,其实都是在离散空间上进行的。

我们又认为每一张图片(一个二维的离散信号),其实都对应着一个原始的连续信号。

不妨设我们的操作为F,原始连续信号z。
于是一个常见的计算机视觉操作,可以写成。
f ( z ) = ϕ s ′ ∗ F ( Ш s ⊙ z ) \mathbf{f}(z)=\phi_{s^{\prime}} * \mathbf{F}\left(\text{Ш}_{s} \odot z\right) f(z)=ϕsF(Шsz)

对连续信号z,先元素乘到离散,再做F操作,再卷积回连续空间。
而这个离散空间上的 F \mathbf{F} F操作,我们认为它对应着连续空间上的另一个操作,设为 f \mathbf{f} f

也即,先将离散信号Z卷积回连续空间,做 f \mathbf{f} f操作,然后元素乘回来。
F ( Z ) = Ш s ′ ⊙ f ( ϕ s ∗ Z ) \mathbf{F}(Z)= \text{Ш}_{s}^{\prime} \odot \mathbf{f}\left(\phi_s* Z\right) F(Z)=Шsf(ϕsZ)

我们认为所有的CV经典操作都有这种对应关系。
conv2d,BN,interpolate等等。

这篇文章的核心理论部分就是这样了。
假设这种对应关系成立,
我们就可以把原来的直接离散操作F,
通过理论推导的形式,
用对应的连续算子f来等价替换。

而通过设计连续算子f的一些特征,可以满足我们的具体需求。
本文中,作者的具体需求是保持 translation 和 rotation equivariance。

Case: F=conv2d

由卷积的交换性可知

卷积的本质是带权和, ∑ a x \sum ax ax 线性运算。 两个线性算子显然满足交换性。

公式2显然成立。
在这里插入图片描述
因为K也是一个卷积运算。
按公式2的结果,你在离散空间做一个conv2d操作K,
等价于用这个K的离散卷积核,去扫描连续信号z,然后得到另一个连续信号 f conv ( z ) \mathbf{f}_{\text{conv}}(z) fconv(z)

Case: F=upsample

我们认为上采样操作的连续算子f,
f up ( z ) = z \mathbf{f}_{\text{up}}(z)=z fup(z)=z,即对连续信号什么都不做。

为什么会这样呢?

F u p ( Z ) = Ш s ′ ⊙ ( ϕ s ∗ Z ) \mathbf{F}_{\mathrm{up}}(Z)=\text{Ш}_{s^{\prime}} \odot\left(\phi_{s} * Z\right) Fup(Z)=Шs(ϕsZ)

用连续空间的观点来解释,
就是先把离散的二维图片信号Z以采样率s变换到连续空间,再以新的采样频率s’变换回离散空间。

显然,如果上采样n倍,则 s ′ = n s s'=ns s=ns

Case: F=downsample

f down ( z ) = ψ s ′ ∗ z \mathbf{f}_{\text{down}}(z)=\psi_{s^\prime}*z fdown(z)=ψsz
其中 ψ s = s 2 ∗ ϕ s \psi_s = s^2*\phi_s ψs=s2ϕs,是一个 “ideal low-pass filter … nomalized to unit mass”。

原文说In downsampling, we must low-pass filter z to remove frequencies above the output bandlimit,
所以比起上采样时,什么都不做,这里要加一个滤波器。

为什么降采样是一个band-limit呢。
原来有2t和4t的采样点,现在频率1/2(周期2)的都删了,只留频率1/4(周期4)的点。
就是降采样了。
也就是low-pass filter。

F d o w n s a m p l e = Ш s ′ ⊙ ( ψ s ′ ∗ ( ϕ s ∗ Z ) ) = 1 / s 2 ⋅ Ш s ′ ⊙ ( ψ s ′ ∗ ψ s ∗ Z ) = ( s ′ / s ) 2 ⋅ Ш s ′ ⊙ ( ϕ s ′ ∗ Z ) \mathbf{F}_{downsample} \\ =Ш_{s^{\prime}} \odot\left(\psi_{s^{\prime}} *\left(\phi_{s} * Z\right)\right) \\ =1 / \mathrm{s}^{2} \cdot Ш_{s^{\prime}} \odot\left(\psi_{s^{\prime}} * \psi_{s} * Z\right) \\ =\left(s^{\prime} / s\right)^{2} \cdot Ш_{s^{\prime}} \odot\left(\phi_{s^{\prime}} * Z\right) Fdownsample=Шs(ψs(ϕsZ))=1/s2Шs(ψsψsZ)=(s/s)2Шs(ϕsZ)

连续用2个低通滤波器,理论上只会保留频率更低的那个。
ψ s ∗ ψ s ′ = ψ min ⁡ ( s , s ′ ) \psi_{s} * \psi_{s^{\prime}}=\psi_{\min \left(s, s^{\prime}\right)} ψsψs=ψmin(s,s)

我太菜了。到这里还没有理解,然后咨询了隔壁大佬。

Q:为什么上采样什么都不做,下采样需要低通滤波。
A:这是从采样定理角度考虑的。
上采样,采样率变大,s’>s,之前的采样率s是满足>2f的条件的,所以s’也一定满足。
下采样,s’<s,就不一定满足>2f的条件了。
所以要做个低通滤波,把>fc(会产生alias)的滤掉

Q:为什么要用系数 s 2 s^2 s2
A:for normalization。
sinc(sx_0) * sinc(sx_1)关于x的积分在-∞到+∞的积分等于1/s^2。

Q:为什么说 ψ s = s 2 ∗ ϕ s \psi_s = s^2*\phi_s ψs=s2ϕs是low-pass filter?
A:上面这个式子只是定义了字母的转换含义。
而实际使用的 ψ s ′ \psi_{s'} ψs是特定构造出来的,我们就是要构造一个low-pass filter,所以它就是了。

具体的构造法就是原文写的
ϕ s ∘ ( x ) = jinc ⁡ ( s ∥ x ∥ ) ∣ = 2 J 1 ( π s ∥ x ∥ ) / ( π s ∥ x ∥ ) \phi_{s}^{\circ}(\boldsymbol{x})=\operatorname{jinc}(s\|\boldsymbol{x}\|) \mid=2 J_{1}(\pi s\|\boldsymbol{x}\|) /(\pi s\|\boldsymbol{x}\|) ϕs(x)=jinc(sx)=2J1(πsx)/(πsx)

J1 is the first order Bessel function
这样构造的好处是使之满足
①低通,符合采样定理的低通。
②Translation equivalence
③rotation equivalence

F d o w n s a m p l e = ( s ′ / s ) 2 ⋅ Ш s ′ ⊙ ( ϕ s ′ ∗ Z ) \mathbf{F}_{downsample}=\left(s^{\prime} / s\right)^{2} \cdot Ш_{s^{\prime}} \odot\left(\phi_{s^{\prime}} * Z\right) Fdownsample=(s/s)2Шs(ϕsZ)
可以看出降采样就是用构造出的卷积核(更小的采样率)对离散数据卷一下,再以点乘的形式drop一些采样点。

CASE: Non-linear activation

作者认为使用非线性激活函数可能引入任意高频信号。

applying, e.g., ReLU in the continuous domain may introduce arbitrarily high frequencies that cannot be represented in the output

这个认为,合理吗?
我认为不合理。

在graph领域已经证明了,ReLU是促进smooth的。(Oono2020)
一张图片可以认为是特殊的图结构数据。
对应到CV任务上,ReLU是促进图像平滑,而不是促进锐化的。
也就是说,ReLU是增加低频信号的,而不是增加高频信号的。

我不认同这部分解释。

感悟

对于一张原始输入,我们总是默认原始尺寸(采样率)是满足>2f的。
但是对后续的离散操作,并不能保证。

在其他dnn里面,凡是涉及到维度改变的操作,
例如fc的 (n,d0)->(n,d1),都可以认为是采样率s改变了。

而传统方法是不检查s' > 2f ?

尤其是维度减小的时候,
通常在第一步 input_dim -> hidden_dim
或者U型结构的encoder部分,
传统的方法都没有低通滤波这个步骤

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值