Anycost GANs for Interactive Image Synthesis and Editing

P r o f i l e \rm Profile Profile

平日里我们使用 P r \rm Pr Pr A e \rm Ae Ae 做视频的时候,预览模式可以选择分辨率 { f u l l , 1 / 2 , 1 / 4 , e t c . } \rm \{full, 1/2, 1/4, etc.\} {full,1/2,1/4,etc.},便于适应不同的边缘设备、模型复杂度下的实时预览和流畅的人机交互操作。
这篇文章首次将 P r e v i e w \rm Preview Preview 应用到了基于 G A N \rm GAN GAN 的图像编辑任务中——大规模的生成网络如 S t y l e G A N 2 \rm StyleGAN2 StyleGAN2 在边缘设备上执行简单的编辑需要耗费数秒的时间,带来不好的用户交互体验。

本文提出的 A n y C o s t   G A N \rm AnyCost~GAN AnyCost GAN 用于交互式的自然图像编辑,就借鉴了 Q u i c k   P r e v i e w Quick~Preview Quick Preview 的工程设计,通过1️⃣调节生成图像分辨率、2️⃣调节模型每一层的卷积核通道数来实现3️⃣大范围的渲染加速。

其中,核心思想是:同时训练一个 f u l l   g e n e r a t o r \rm full~generator full generator 和任意多的 s u b _ g e n e r a t o r s \rm sub\_generators sub_generators其中, s u b _ g e n e r a t o r \rm sub\_generator sub_generator 是隐藏在 f u l l   g e n e r a t o r \rm full~generator full generator 中的,类似于 P r u n i n g   b a s e d \rm Pruning~based Pruning based 的模型压缩,从一个全网络中抽取一个精简版本,只不过这里是通过 c h a n n e l   w i s e \rm channel~wise channel wise G a t i n g \rm Gating% Gating 来限制生成网络的部分参与训练。

主要技术创新总结如下:

MotivationTechnology
训练多种规模配置的图像生成网络1️⃣ Sampling-based multi-resolution training;
2️⃣ Adaptive-channel training;
3️⃣ Generator-conditioned discriminator.
保证全网络与各种子网络的输出图像一致性Consistency loss.
编辑真实图像( G A N   i n v \rm GAN~inv GAN inv1️⃣ Two-stage projection: ① Encoder training; ② Latent code optimization;
2️⃣ Consistency-aware image projection.

🐮🍺,好家伙 👀,不愧是 M I T + A d o b e + C M U \rm MIT+Adobe+CMU MIT+Adobe+CMU,人家投 C V P R \rm CVPR CVPR 是因为没有更 t o p \rm top top 的会议了。

P r e v i e w \rm Preview Preview

我们不妨先一睹 t e a s e r \rm teaser teaser 为快——
在这里插入图片描述
上图中 ( a ) (a) (a) 是输入待处理图像, ( b ) \rm (b) (b) 是投影重构的图像,其中 ? ×   f a s t e r \rm ?\times~faster ?× faster 是使用不同的子网络投影重构的图像, ? \rm ? ? 越大说明子网络结构更精简; ( c ) \rm (c) (c) 则是图像编辑效果。其中,标记加粗的列是全网络的输出结果,因而质量最高,但算力消耗也是最高。

M e t h o d \rm Method Method

P r o b l e m   S e t u p \rm Problem~Setup Problem Setup

NotationFormatDescription
x \rm x x x ∈ R H × W × 3 {\rm x}\in{\mathbb R}^{H\times W\times 3} xRH×W×3图像
z \rm z z z ∈ Z {\rm z}\in{\mathcal Z} zZ低维随机向量,如在 S t y l e G A N \rm StyleGAN StyleGAN 中是 512 512 512
w \rm w w w ∈ W + , w ∈ R 18 × 512 {\rm w}\in{\mathcal W}^+, {\rm w}\in{\mathbb R}^{18\times 512} wW+,wR18×512 S t y l e G A N \rm StyleGAN StyleGAN 中的 W + \mathcal W^+ W+ 空间的向量。
f f f f : Z → W + f:{\mathcal Z}\rightarrow{\mathcal W^+} f:ZW+作用于隐编码的非线性映射, w = f ( z ) {\rm w}=f({\rm z}) w=f(z)
G G G x = G ( z ) {\rm x}=G({\rm z}) x=G(z)生成网络。
G ′ G' G G ′ ( w ) ∼ G ( w ) G'({\rm w})\sim G({\rm w}) G(w)G(w) G G G 的子网络,期待输出图像与全网络视觉上尽可能一致。

A n y C o s t G A N \rm AnyCost GAN AnyCostGAN

进入主题 🍻, O v e r v i e w \rm Overview Overview 比较简单,如下图,
在这里插入图片描述
左边展示了分阶段的图像投影到 G A N \rm GAN GAN 输入隐空间的双阶段过程,即: x → [ E ] → w 0 → [ O p t i m i z a t i o n ] → w o p t {\rm x}\rightarrow[E]\rightarrow {\rm w}_0 \rightarrow [Optimization]\rightarrow{\rm w}_{\rm opt} x[E]w0[Optimization]wopt,中间则是图像编辑的原理: w e d i t = w o p t + Δ w \rm w_{edit}=w_{opt}+\Delta w wedit=wopt+Δw,右边则是让编辑后的 w e d i t \rm w_{edit} wedit 经过算力消耗较低的子网络 G ′ G' G 实现快速预览,或者经过算力耗费较高的全网络 G G G 得到最终高质量输出图像。

那么注意到,我们期望学习得到的 G G G 具有以下性质:
1️⃣ 可以动态调整不同的输出图像分辨率 → 这就要求基于 S t y l e G A N 2 \rm StyleGAN2 StyleGAN2 G G G 的每一层输出都是自然图像,而不仅仅是最后一层的输出,这就好比 M S G − G A N \rm MSG-GAN MSGGAN
2️⃣ 可以动态调整每一层卷积参与运算的核来进一步压缩模型加速计算;
** 因此,最终单一一个 G G G 就可以实现不同卷积核配置下输出不同分辨率的真实图像;而原本的 S t y l e G A N 2 \rm StyleGAN2 StyleGAN2 则不行,需要对每一个分辨率的图像单独保留一个模型。(👊 作者在文中反复强调他们的 single model,这里就先单独提出来8️⃣)

现在我们可以对比着来看看,为了满足前面第一个表格的两个 M o t i v a t i o n s \rm Motivations Motivations,作者采用的技术实现。
在这里插入图片描述

我们可以对比着 S t y l e G A N 2 \rm StyleGAN2 StyleGAN2 M S G − G A N \rm MSG-GAN MSGGAN,其中,满足动机“训练多种规模配置的图像生成网络”的 3 \rm 3 3 个技术点已经在 ( c ) \rm (c) (c) 中标记了出来。

Multi-resolution Training
如上图所示,在每次迭代中,随机选择一个输出分辨率(如 128 × 128 128\times128 128×128),输出图像送入判别器对应的层的 f r o m _ r g b \rm from\_rgb from_rgb 作编码。
不同于 M S G − G A N MSG-GAN MSGGAN,并不是每次迭代中所有的分辨率都考虑,这样的一种 all resolutions training 机制会导致在高分辨率图像数据集如 F F H Q \rm FFHQ FFHQ 上的失败,如下表所示:在这里插入图片描述
训练的损失函数是在原来基础上简单的变体,假设全网络的数据流为: x ~ = G ( w ) = g K ∘ g K − 1 ∘ . . . ∘ g k ∘ . . . ∘ g 2 ∘ g 1 ( w ) (1) \widetilde{\rm x}=G({\rm w})=g^K\circ g^{K-1}\circ...\circ g^k\circ...\circ g^2\circ g^1({\rm w})\tag{1} x =G(w)=gKgK1...gk...g2g1(w)(1)则随机采样分辨率输出就可以被表示为 x ~ k = G ( w ) = g k ∘ . . . ∘ g 2 ∘ g 1 ( w ) ,   k ≤ K (2) \widetilde{\rm x}^k=G({\rm w})=g^k\circ...\circ g^2\circ g^1({\rm w}),~k \le K\tag{2} x k=G(w)=gk...g2g1(w), kK(2)于是训练时候模型的输出集合就变成了 { x ~ 1 , x ~ 2 , . . . , x ~ K } \{\widetilde{\rm x}^1,\widetilde{\rm x}^2,...,\widetilde{\rm x}^K\} {x 1,x 2,...,x K},对应的对抗损失函数就变成了: L m u l t i − r e s = E x , k [ log ⁡ D ( x k ) ] + E w , k [ log ⁡ ( 1 − D ( G k ( w ) ) ) ] (3) {\mathcal L}_{\rm multi-res}={\mathbb E}_{{\rm x},k}[\log D({\rm x}^k)]+{\mathbb E}_{{\rm w},k}[\log(1-D(G^k({\rm w})))]\tag{3} Lmultires=Ex,k[logD(xk)]+Ew,k[log(1D(Gk(w)))](3)
Adaptive-channel Training
单纯通过降低生成图像的分辨率得到的提速并不明显(如 1024 × 1024 → 256 × 256 1024\times1024\rightarrow256\times256 1024×1024256×256 只是提升了 1.7 × 1.7\times 1.7×),更显著的加速是通过减少每一层参与计算的卷积核数来实现。
模型现在上面的随机采样分辨率设置下训练完毕;然后对每一层,根据卷积核的大小(计算同其他基于剪枝的模型压缩算法)从大到小排序,对应到输出特征上,将其分为前 α c \alpha c αc 个通道( α ∈ { 0.25 , 0.5 , 0.75 , 1.0 } \alpha \in \{0.25, 0.5, 0.75, 1.0\} α{0.25,0.5,0.75,1.0} 是一个均匀采样的 ratio c c c 是这一层的卷积核数),则每次随机采样是对这一层随机地取前 α c \alpha c αc 个核。
** 不同层的 α \alpha α 可以是一样的( u n i f o r m \rm uniform uniform),也可以是不同的( f l e x i b l e \rm flexible flexible)。
如此,在这一阶段,模型的对抗损失函数可以被设置为: L a d a − c h = E x , k [ log ⁡ D ( x k ) ] + E w [ log ⁡ ( 1 − D ( G C k ( w ) ) ) ] (4) {\mathcal L}_{\rm ada-ch}={\mathbb E}_{{\rm x},k}[\log D({\rm x}^k)]+{\mathbb E}_{\rm w}[\log (1-D(G_{\mathbb C}^k({\rm w})))] {\tag 4} Ladach=Ex,k[logD(xk)]+Ew[log(1D(GCk(w)))](4)其中 C \mathbb C C 就是每一层的通道配置。

到这里,子网络就出现了,为了保证不同的子网络输出与全网络的输出在视觉上尽可能保持一致,我们需要引入一个直接的限制: C o n s i s t e n c y   L o s s \rm Consistency~Loss Consistency Loss,表述如下 L t o t a l = L a d a − c h + E w , k , C [ l ( G C k ( w ) , G ( w ) ) ] (5) {\mathcal L}_{\rm total}={\mathcal L}_{\rm ada-ch}+{\mathbb E}_{{\rm w},k,{\mathbb C}}[{\mathcal l(G_{\mathbb C}^k({\rm w}),G({\rm w}))}] {\tag 5} Ltotal=Ladach+Ew,k,C[l(GCk(w),G(w))](5),其中的 l l l 就是 M S E   L o s s + L P I P S   L o s s \rm MSE ~Loss+LPIPS~Loss MSE Loss+LPIPS Loss。如果不加这个一致性损失函数,则会导致子网络输出与全网络输出有显著的视觉差异,如下图 ( c ) \rm (c) (c) ( d ) \rm (d) (d)Figure 4

在上面两个阶段,子网络与全网络交替训练。

Generator-conditioned Discriminator
紧接着出现的问题是,单一个 D D D 无法同时与多样化配置的 { G } ∪ { G ′ } \{G\}\cup\{G'\} {G}{G},因此,我们需要将这个“多样性”引入 D D D,结果如下表所示:在这里插入图片描述
其中, v a n i l l a \rm vanilla vanilla S t y l e G A N 2 \rm StyleGAN2 StyleGAN2 对应分辨率和对应通道数配置训练的模型(注意到这里需要训练8个网络);下面的 s a m e   D {\rm same}~D same D 就是使用单一的鉴别器训练阶段 1 和阶段 2。

具体的,作者在文中提到两个改进——
1️⃣ r e d u c e   c h \rm reduce~ch reduce ch,即对应生成网络某一层的通道数乘子(Channel multipliers),也应用到鉴别网络对应的某一层里。但是这对于生成大图像(如上表中的 256 × 256 256\times256 256×256 而言,太少的通道数极大地弱化了鉴别器的性能);
2️⃣ c o n d i t i o n e d \rm conditioned conditioned,即将生成器每一层的乘子配置用独热向量表示,如: α = 0.75 \alpha=0.75 α=0.75,则有向量 [ 0   0   1   0 ] T [0~0~1~0]^T [0 0 1 0]T,将所有层的这些向量拼接在一起,得到图中黄色的 g _ a r c h g\_arch g_arch,再经过非线性映射得到参数,以 M o d − d e M o d \rm Mod-deMod ModdeMod 的形式插入到鉴别器倒数 2 层(只选择倒数两层是为了稳定训练)。

至此,前两个动机就可以被很好满足了。
但有一个问题,就是如何根据算力预算( C o m p u t a t i o n   B u d g e t \rm Computation~Budget Computation Budget)来确定最佳的子网络?因为训练的时候我们是随机采样子网络的。

Searching under different budgets
使用进化算法搜索离散空间的最佳点❗(具体算法参见论文 B . 1 \rm B.1 B.1

I m a g e   P r o j e c t i o n   w i t h   A n y C o s t   G e n e r a t o r s \rm Image~Projection~with~AnyCost~Generators Image Projection with AnyCost Generators

实际上是在前人的工作( i G A N \rm iGAN iGAN)基础上进行的简单扩展,分为两个阶段:
1️⃣ 直接训练一个编码器 E E E E ∗ = arg min ⁡ E E x l ( G ( E ( x ) ) , x ) , w 0 = E ∗ ( x ) E^*=\argmin_E \mathbb E_{\rm x}l(G(E({\rm x})),{\rm x}), {\rm w}_0=E^*({\rm x}) E=EargminExl(G(E(x)),x),w0=E(x)2️⃣ 采用迭代优化的方式对 w 0 \rm w_0 w0 进行微调, w ∗ = arg min ⁡ w l ( G ( w , x ) ) {\rm w}^*=\argmin_{\rm w}l(G({\rm w},{\rm x})) w=wargminl(G(w,x)),作者对齐做的修改是希望让子网络投影得到的 w \rm w w 也具有全网络的投影的可编辑性,于是对优化目标增加了一致性损失函数,即 E ∗ = arg min ⁡ E E x [ l ( G ( E ( x ) ) , x ) + α E k , C l ( G C k ( E ( x ) ) , x ) ] (6) E^*= \argmin_E \mathbb E_{\rm x}[l(G(E({\rm x})),{\rm x})+\alpha\mathbb E_{k,\mathbb C}l(G_{\mathbb C}^k(E({\rm x})), {\rm x})] {\tag 6} E=EargminEx[l(G(E(x)),x)+αEk,Cl(GCk(E(x)),x)](6) w ∗ = arg min ⁡ w [ l ( G ( w , x ) + α E k , C l ( G C k ( w , x ) ) ] (7) {\rm w}^*=\argmin_{\rm w}[l(G({\rm w},{\rm x})+\alpha{\mathbb E_{k,\mathbb C}l(G_{\mathbb C}^k({\rm w},{\rm x}))}] {\tag 7} w=wargmin[l(G(w,x)+αEk,Cl(GCk(w,x))](7)作者在实验中设置 α = 1 \alpha=1 α=1

Image editing with anycost generators
最后,熟悉基于 S t y l e G A N \rm StyleGAN StyleGAN 的图像编辑的工作的读者对于 d i r e c t i o n   b a s e d \rm direction~based direction based 的隐空间漫步应该就很熟悉了。对于全网络与子网络分别有: G ( w + Δ w ) G(\rm w+\Delta w) G(w+Δw) G C k ( w + Δ w ) G_{\mathbb C}^k(\rm w+\Delta w) GCk(w+Δw)

E x p e r i m e n t s \rm Experiments Experiments

作者做了很多的实验哈😃,这里我们挑几个有意思的图表来说明一下😳
在这里插入图片描述
( a ) \rm (a) (a) 展示的是不同方法的算力消耗( M A C s \rm MACs MACs)与图像生成质量( F I D \rm FID FID)之间的权衡,其中, D i s t i l l \rm Distill Distill 是基于知识蒸馏获得小型网络的方法, C h a n n e l P r u n e \rm ChannelPrune ChannelPrune 是基于通道剪枝的模型压缩方法, V a n i l l a \rm Vanilla Vanilla 则是不同配置下的 S t y l e G A N 2 \rm StyleGAN2 StyleGAN2 专门训练的模型。
( b ) \rm (b) (b) 度量不同算力消耗下,子网络输出与全网络输出之间的差别,其中,相对于 ( a ) \rm (a) (a) V a n i l l a \rm Vanilla Vanilla D i s t i l l \rm Distill Distill(笔者认为作者这里的图标记错误了)是训练得到新的子模型,无法比较进行比较。

最后在看一些图放松一下吧🍋,
不同算力消耗的子网络的输出图像比较——
在这里插入图片描述

比较子网络与全网络的图像编辑效果——
在这里插入图片描述
好家伙! A d o b e \rm Adobe Adobe 出品,必有 D e m o \rm Demo Demo,截图感受一下吧!
Figure 9

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值