当前位置:网站首页>StyleGAN论文笔记+修改代码尝试3D点云生成
StyleGAN论文笔记+修改代码尝试3D点云生成
2022-07-27 09:48:00 【yfy2022yfy】
编辑于2019/07/04,转载请注明
论文地址:https://arxiv.org/abs/1812.04948
源码地址:https://github.com/NVlabs/stylegan
一、介绍
虽然目前的GAN生成的图片质量和分辨率都有了很大提高,但还是存在一些问题:
- 生成器依然是个黑盒,对生成图片过程中的各个方面依然无法理解,比如随机特征的起源。
- 潜在空间的性质也没有得到很好的理解,已证明的潜在空间插值并没有提供定量的方法来比较不同的生成器。
本文设计的生成器,揭示了控制图像合成过程的新方法。我们的生成器,起始于学习到的常量输入,并且在之后的每个卷积层,基于潜在代码,调整图片的“风格”,因此直接控制图像特征在不同尺度下的强度。
二、主要内容
1、基于风格的生成器网络结构

右侧Noise部分,给生成图片带来细节上的多样性:
- 高斯Noise先输入B
- B是学习出的每通道scale系数,自动控制Noise对生成图片的影响大小
- Noise在每次卷积之后输入(我的理解,相当于bias)
左侧z,w部分,控制生成图片风格:
- 把输入z映射到中间值w,z就是GAN网络常见的输入噪声。
- 通过学习得到的仿射变换A,自动控制w变成图片的“风格”style
- style输入到每个卷积+B之后的AdaIN(AdaIN是正则化,所以最后)中,每次输入都是对生成网络g的一次风格控制
中间生成网络g,是生成图片的主干:
- 起始于常量Const,这个常量并不能控制图片风格。
- g网络共18层,每两层2倍升采样一次,输出为高清的1024*1024
- 最后输出为RGB
AdaIN的定义:

表示每个feature map
表示style值,
2、风格混合
在每次训练中,使用两个潜在值z1,z2,而不是一个z来训练数据。在生成图片时,替换输入两个不同的潜在值z1,z2,映射得到w1,w2,输入到AdaIN中的风格参数是两个不同的值,生成两个被z1、z2同时控制的图片。

图中,有两组图片source A 和 B,分别用潜在值z1(n=6)和z2(n=5)生成。然后用z1和z2混合生成图片,在生成网络g中,不同尺度的层处,使用z2,其余位置用z1,可以观察到不同尺度输入z2带来的效果。
- Coarse行:
在4x4、8x8处,输入z2,B 控制了高层次信息,比如姿态、发型、脸型、眼镜等。
其余位置输入z1,A控制了中、低层次信息,比如颜色、皮肤细节。 - Middle行:
在16x16、32x32处,输入z2,B 控制了中层次信息,比如一部分发型、眼睛开闭等。
其余位置输入z1,A控制了高、低层次信息,比如姿态、脸型、眼镜,以及颜色等细节。 - Middle行:
在64x64~1024x1024处,输入z2,B 控制了低层次信息,比如颜色、皮肤细节等。
其余位置输入z1,A控制了高、中层次信息,比如姿态、发型、脸型、眼镜,以及眼睛开闭等细节。
3、 随机变化
人体肖像中有很多方面可以被认为是随机的,比如头发、胡茬、雀斑或皮肤毛孔的精确位置。本文通过在卷积层后加入像素级(特征值矩阵)的噪声来实现。

4、解纠缠
一个潜在空间,包含了多个线性子空间,这些子空间各自控制着变化的一个因素,潜在空间的采样概率应该与训练数据中对应的数据密度吻合,但是由于训练数据有限,这两者往往不吻合,这会导致一些问题。
(我的理解,z这个噪声输入,根据不同的代码,是符合某一种分布的,但是训练数据有限,肯定无法覆盖z的分布,部分z是没有对应的训练数据的)

作者举了个例子,以头发长短和性别为特征:
- 假设训练集里没有长发男性,那么训练集特征的分布就是(a),左上角长发男性缺失。
- 缺失的训练数据,迫使从z到训练集特征的映射成为曲线,如(b),从而使缺失对应的部分在z中消失,以防止对无效的采样。
- 使用f(z)=w的后,从z到w的学习映射能够“撤消”大部分的扭曲,如图中(c)
关于这z --> w 的映射详述,以及相关的两个评价指标,在文中第四章。
三、修改源码网络生成3D的图
我工作的内容是研究3D相关的,于是对源码做了点修改,看看styleGAN对3D数据效果如何。
核心思想,就是把人脸图当成是3D空间中的一张纸,每个像素对应的xyz也输入到网络中,和rgb一起训练,然后生成xyzrgb。
当然,训练就是用的3D数据,要是先用2D训练在用输出结果转换成3D就没意义了。试了试,效果如下:


左侧为生成的3D点云,右侧为生成的2D图。
边栏推荐
- 【云原生 • DevOps】一文掌握容器管理工具 Rancher
- Engineering survey simulation volume a
- Redis 为什么这么快?Redis 的线程模型与 Redis 多线程
- Review summary of engineering surveying examination
- [scm] source code management - lock of perforce branch
- Esp8266 Arduino programming example ADC
- [cloud native • Devops] master the container management tool rancher
- 圆环工件毛刺(凸起)缺口(凹陷)检测案例
- 华为交换机双上行组网Smart-link配置指南
- 吃透Chisel语言.25.Chisel进阶之输入信号处理(一)——异步输入与去抖动
猜你喜欢

Snowflake vs. Databricks谁更胜一筹?2022年最新战报

Looking for a job for 4 months, interviewing 15 companies and getting 3 offers

Esp8266 Arduino programming example - interrupt

历时一年,论文终于被国际顶会接收了

Understand chisel language. 24. Chisel sequential circuit (IV) -- detailed explanation of chisel memory

flash闪存使用和STM32CUBEMX安装教程【第三天】

I haven't delivered books for a long time, and I feel uncomfortable all over

食品安全 | 无糖是真的没有糖吗?这些真相要知道

吃透Chisel语言.27.Chisel进阶之有限状态机(一)——基本有限状态机(Moore机)

What happens if the MySQL disk is full? I really met you!
随机推荐
July training (day 05) - double pointer
面试必备:虾皮服务端15连问
Understand chisel language. 26. Chisel advanced input signal processing (II) -- majority voter filtering, function abstraction and asynchronous reset
System parameter constant table of system architecture:
LeetCode.1260. 二维网格迁移____原地暴力 / 降维+循环数组直接定位
加油程序君
7/26 思维+dp+后缀数组的学习
How to restore the original version after installing Hal Library
[raspberry pie] box related manual-4 web agent
原生input标签的文件上传
S switch stacking scheme configuration guide
Intermediate and advanced test questions ": what is the implementation principle of mvcc?
Esp8266 Arduino programming example ADC
年底了,我教你怎么拿高绩效!
July training (day 12) - linked list
吃透Chisel语言.22.Chisel时序电路(二)——Chisel计数器(Counter)详解:计数器、定时器和脉宽调制
c'mon! Please don't ask me about ribbon's architecture principle during the interview
Explain knative cloud function framework in simple terms!
Nacos配置中心动态刷新数据源
语音直播系统——开发推送通知需要遵守的原则