HyperStyle:利用超网络完成人脸反演

paper

HyperStyle: StyleGAN Inversion with HyperNetworks for Real Image Editing

  • 2022 CVPR
  • StyleGan反演相关

paper code page


Abstract:

将真实图像反演到 StyleGAN 的latent space是一个充分研究的问题。然而,现有方法应用于现实世界的场景效果仍然一般,这是因为图像重建和可编辑性之间存在内在权衡:可以准确表示真实图像的潜在空间区域通常会受到语义控制的影响产生退化。

近来有些工作通过微调生成器将目标图像添加到潜在空间中图像表现良好且编辑性良好的区域来进行权衡。 但这种微调方案需要针对新图片漫长训练。

在这项工作中,我们将这种方法引入到基于encoder的反演领域,提出了HyperStyle。这是一种可以学习调整StyleGan权重的超网络,简单的调制需要训练一个参数超过30亿的超网络,而我们通过仔细的网络设计,将参数减少到与现有encoder一致。HyperStyle产生的重构效果与latent优化技术重构效果相当,并具有encoder的实时推理能力。最后我们展示了利用HyperStyle在反演任务外的几个应用中有效性,包括编辑训练数据域外的图像。

请添加图片描述


为了利用生成器的pretrained models,大多数工作都避免改变生成器执行反转时的权重。

部分工作探索:

  • 针对每个图像,调整生成器以获得更准确的反演
  • 通过随机噪声向量反演BigGAN ,选择与真实图像最匹配的向量,并渐进式优化生成器权重
  • 首先通过反演得到潜在代码(它近似地重建目标图像),然后微调生成器权重以改进图像特定的细节

但这些工作需要漫长时间的优化,通常每张图像几分钟。相比之下,HyperStyle在大量图像上训练了一个超网络,用于为任意给定的图像完成反演,且具有实时性。

总结:更准确的反演 + 可编辑性良好 + 近乎实时性 (Encoder)


网络结构

请添加图片描述

(1)首先图片经过一个encoder生成initial inversion图片

(2)将原始Input和Initial Inversion图片作为Input,送入HyperStyle网络,Input通道数为6,经过ResNet Backbone输出为16*16*512

hyperstyle.py

#x:3*h*w y:3*h*w
x_input = torch.cat([x, y_hat], dim=1)

ResNet BackBone结构为

# 1层卷积+4层resnet34网络层
self.conv1 = nn.Conv2d(opts.input_nc, 64, kernel_size=7, stride=2, padding=3, bias=False)
self.bn1 = BatchNorm2d(64)
self.relu = PReLU(64)

resnet_basenet = resnet34(pretrained=True)
blocks = [
    resnet_basenet.layer1,
    resnet_basenet.layer2,
    resnet_basenet.layer3,
    resnet_basenet.layer4
]

(3)Refinement Block是用优化向量参数,但是在训练过程中参数过多,为了解决这个问题,引入了Shared Refinement Block,如下图所示:

请添加图片描述

在3*3*512*512的非toRGB层之间共享两个全连接层。 这样有效的节省了训练参数量。

p.s: 3*3*512*512意指:kernel size * kernel size * input深度 * output 深度

具体层可以见:blocks

为啥不在toRGB层共享权重?

因为实验发现这样会影响GAN的编辑能力。

(4)Generator被分成了3个级别:coarse,medium,fine,不同级别控制生成图像的不同层面。由于initial inversion趋向于捕获coarse细节,所以我们将网络输入送入medium和fine generator层。

(5)迭代细化,更新generator权重,确保更准确的反演。

Training Losses

由于类似于训练encoder,所以使用了 pixel-wise L2 loss 和 LPIPS perceptual loss

对于面部区域,进一步使用了基于身份的相似性损失(使用了一个预训练面部识别网络)

对于非面部区域,使用了一个MoCo-based相似度loss
L 2 ( x , y ^ ) + λ LPIPS  L LPIPS  ( x , y ^ ) + λ sim  L sim  ( x , y ^ ) \mathcal{L}_{2}(x, \hat{y})+\lambda_{\text {LPIPS }} \mathcal{L}_{\text {LPIPS }}(x, \hat{y})+\lambda_{\text {sim }} \mathcal{L}_{\text {sim }}(x, \hat{y}) L2(x,y^)+λLPIPS LLPIPS (x,y^)+λsim Lsim (x,y^)

总结

我们介绍了一种新颖的StyleGan反演方法:HyperStyle,利用超网络的最新进展来实现近似encoder推理时间的optimization-level优化。从某种意义上说,HyperStyle 利用给定的目标图像不断学习调整、有效地优化了生成器。这样做可以减轻重建-可编辑性的权衡,并可以在广泛的输入上有效地使用现有的编辑技术。此外,HyperStyle泛化得非常好,即使是不在训练集中的域外图像,超网络和生成器都可以反演的非常好。展望未来,从训练领域进一步扩大泛化是非常可取的。这包括对未对齐图像和非结构化域的鲁棒性。前者可能会通过 StyleGAN3得到解决,而后者可能需要在更丰富的图像集上进行训练。

生成图像

反演能力的对比展示:

请添加图片描述
请添加图片描述

可编辑性的对比展示:

请添加图片描述

请添加图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Python和PyTorch库反演土壤有机质含量的示例代码: ```python import torch import torch.nn as nn import numpy as np # 导入数据 data = np.loadtxt('soil_data.txt', delimiter=',') X = data[:, 0:4] # 输入数据,包括 pH 值、土壤温度、土壤湿度和电导率 y = data[:, 4] # 输出数据,土壤有机质含量 # 将数据转换为张量 X = torch.from_numpy(X).float() y = torch.from_numpy(y).float() # 创建神经网络模型 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(4, 12) self.fc2 = nn.Linear(12, 8) self.fc3 = nn.Linear(8, 1) def forward(self, x): x = torch.relu(self.fc1(x)) x = torch.relu(self.fc2(x)) x = self.fc3(x) return x model = Net() # 定义损失函数和优化器 criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # 训练模型 for epoch in range(100): # 前向传播 outputs = model(X) loss = criterion(outputs, y) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() # 打印损失值 print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, 100, loss.item())) # 预测新的土壤样本数据的有机质含量 new_data = np.array([[7.2, 20, 60, 1.5]]) new_data = torch.from_numpy(new_data).float() prediction = model(new_data) print(prediction) ``` 在这个示例代码中,我们首先导入土壤样本数据(包括 pH 值、土壤温度、土壤湿度和电导率以及土壤有机质含量),然后使用PyTorch库创建一个包含三个线性层的神经网络模型。最后,我们训练模型并使用它来预测新的土壤样本数据的有机质含量。 需要注意的是,这个示例代码仅供参考,实际应用中需要根据具体的数据集和问题进行修改。同时,在实际应用中还需要对数据进行预处理、评估模型性能等步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值