作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122015783
目录
第1章 传统计算机视觉基本原理(图像的建模)
1.1 传统的计算机视觉
1.2 不足
第2章 基于深度学习DNN的计算机视觉的基本原理(图像的判定)
2.1 基于深度学习的计算机视觉DNN
2.2 DNN的不足
第3章 常规生成对抗网络GAN的基本原理(不受控的图像的生成)
3.1 常规生成对抗网络GAN
3.2 生成对抗网络的创作本质
3.3 生成对抗网络的不足
3.4 GAN网络的改善的目标
第4章 pix2pix网络的基本原理(“形似”受控的图像生成、创作)
4.1 pix2pix网络的目标
4.2 pix2pix的问题
4.3 怎样建立输入和输出的对应关系呢?
4.4 pix2pix名称的由来
4.5 pix2pix创作的本质
4.5 pix2pix的应用
4.7 pix2pix创作的限制或不足
第5章 CycleGAN的原理(“神似”受控的图像生成、创作)
5.1 CycleGAN网络的动机与要解决的问题
5.2 CycleGAN的本质
5.3 来自于语言翻译的思想启示
5.4 CycleGAN名称的由来
5.5 CycleGAN的网络实现
5.6 CycleGAN的网络的优化
5.7 CycleGAN网络的应用
第6章 pix2pixHD
6.1 pix2pixHD要解决的问题
6.2 问题案例
6.3 pix2pixHD的解决方法
6.4 效果
6.5 主要应用
参考:
在2012年之前,CV的主要研究方法是使用人工设计(hand-designed)的图像特征来完成各种任务(见下图)。
这些特征都是人为预设的,图像的处理基于这些预设的特征,如颜色特征、外形特征等等。人为特征的最大缺陷是:不同场合的特征不一样,不同场景,需要建立不同的模型,适应性差。
传统的图形学管线(pipeline)中,输出图像需要经过建模、材质贴图、光照、渲染等一系列繁琐的步骤。
2012年,随着使用深度神经网络(Deep Neural Network, DNN) 在ImageNet的分类任务上取得了巨大成功,图像处理的任务由认为构建图像特征发展成,机器自己发现图像的特征。
如下图所示,DeepNet能够自动发现输入图像(RGB通道的像素),并根据发现的特征,完成某种任务。这些DNN包括:全连接网络、卷积网络CNN、时序网络RNN/LSTM.
基于网络自动发现的图像特征, 可以完成的任务包括(不限于)
(1)物体识别(Object detection) [Redmon etal., 2018]
(2)对人体肢体的理解(Human understanding) [Guler et al., 2018]
(3)自动驾驶(Autonomous driving) [Zhao et al., 2017]
之前的DNN可能是输入一幅图像,输出一个标签(比如说猫),那我们能不能输入“猫”这个字,输出一张猫的照片呢?
很遗憾,答案是No!
因为这种任务实在太复杂啦!
我们很难让DNN凭空输出图像这样的高维数据(High dimensional data)(这里的“高维”可以理解成数据量大)。
实际上,在很长一段时间里,DNN只能输出数字这种简单的、低分别率的小图像,就像下面这样:
而想要生成想游戏场景这类的图片,DNN这种方法根本没用。
2014年,一个叫做生成对抗网络(Generative Adversarial Network)——也就是大名鼎鼎的GAN——的东西横空出世。作者是下面这位小哥和他的小伙伴们:
至此,GAN网络可以自己输出多维度的图片数据了。
图像数据具备了真实图片集的公共特征。
生成的高纬度的图像数据会骗过网络的判决器,被判定为真实的图片。
GAN网络输出的创作图片,与输入图片无关
输入:可以是任意的随机数。
输出:与训练集上的真实图片具备相同的特征,但具体是什么样子的,什么尺寸,不受控制。
生成对抗网络虽然能生成高维的图像,该图片与参与网络训练的高纬度的真实图片,具备相同的特征。比如,自动生成人像图像或其它相关的图像。
但图像的生成或输出,与输入之间实际上并没有明显的语义上的对应关系。
(1)输出的图片没有用户控制(user control)能力
在传统的GAN里,输入一个随机噪声,就会输出一幅随机图像。随机图像能够骗过判决网络,具备与真实图片相同的特征。
但用户是有想法滴,如果我们想输出的图像是我们想要的那种图像,和我们的输入是对应的、有关联的。比如输入一只喵的草图,输出同一形态的喵的真实图片(这里对形态的要求就是一种用户控制)。
GAN网络是做不到的,GAN网络无法根据指定的图片,输出与输入有结构上关联的图片。
(2)低分辨率(Low resolution)和低质量(Low quality)问题
尽管生成的图片看起来很不错,但如果你放大看,就会发现细节相当模糊。
前面说过传统的GAN的种种局限,那么现在,我们相应的目标就是:
为了达到这样的目标,和把大象装到冰箱里一样,总共分三步:
(0)GAN: 给定一个随机数,可以输出一个具备真实图片(训练数据集)特征的图片。
(1)pix2pix:有条件地使用用户输入,它使用成对的数据(paired data)进行训练。
(2)CycleGAN:使用不成对的数据(unpaired data)的就能训练。
(3)pix2pixHD:生成高分辨率、高质量的图像。
这种方法,就是在训练的时候,就告诉网络,输入图片与输出图片具备某种对应关系,对GAN网络进行限制,而不是像GAN网络进行任意的输出符合真实图片特征的图片。
也就是说,pix2pix网络在学习真实图片的同时,与能够学习到,该真实图片来源什么的输入图片。
pix2pix对传统的GAN做了个小改动,它不再输入随机噪声,而是输入用户给定图片,输出与输入有结构对应关系的图片。
(1)情形1:
如果G网络的输出是下面这样的,D网络拿来一看,也会认为是真的图片。
这种输出它的图片满足GAN网络的要求。
(2) 情形2:
如果G网络的输出如果是下面这样,D网络会判断是真图:
这种输出它的图片也满足GAN网络的要求。
如何确保,输入图片X, 只输出情形2的图片呢?而不是情形1的图片呢?
为了体现这种对应关系,解决方案也很简单:
我们把G网络的输入和输出一起作为D的输入,D网络的判决时,不仅仅根据G网络的输出进行决,还根据G网络的输出进行判决,只有G网络的输出与G网络的输出具备对应关系,D网络才认为G网络输出的图片是期望的图片,如下图所示:
(1)情形1:输出与输入一致的情形
下列条件只有同时得到满足,输出图片才会被判为真:
(2)情形2:输出与输入不一致的情形
下列条件只要有一个不满足,输出图片就被判为假:
pix2pix通过增加判决网络对输出与输入图片的相似性检查,确保输出的图片,与输入图片有明确的对应关系来达到输入对输出的控制。
现在的问题来了:如何检查输出与输入图片的相似性呢?
(1)pix2pix的做法
pix2pix通过把输出图片与输入图片的每个像素点的距离和作为loss,来判断两个图片的相似性的,
loss越小,相识度越高。
pix2pix并没有通过增加什么新的网络,来确保输出与输入的相似性关系。
这就是pix2pix的由来!
由于pix2pix对相似性检查和保证,是直接通过像素到像素进行检查的完成的,因此pix2pix的输出与输入是显性的、表象的、强关联关系,属于“形似”。
pix2pix能够确保输出图片与输入图片有一定的关联。或者说,给定一个输入图片,输出的图片,除了满足真实图片的特征,还能体现、保留输入图片原有的信息。
pix2pix是通过数据集,而不是神经网络结构,来保证输出与输入关系的!
因此pix2pix网络,需要成对的数据集(paired数据集)。
pix2pix的这项研究还是挺成功的,大家可以去这里线体验一下demo,它能把草图(sketch)变成图片。
这里https://affinelayer.com/pixsrv/
(1)草图变图片[Isola, Zhu, Zhou, Efros, 2016]:
(2) 灰度图变彩色图[Isola, Zhu, Zhou, Efros, 2016]:
(3)自动着色 Data from [Russakovsky et al. 2015]:
(4)交互式着色[Zhang*, Zhu*, Isola, Geng, Lin, Yu, Efros, 2017]:
(1)对数据集的要求较高
在训练时,需要人为的指定参照图片与真实的输出图片的成对的对应关系(paired)。
只有这样,pix2pix网络才能按照期望的方式,对输入图片进行创作,而不是对输入普通进行任意的创作(GAN网络就是属于任意创作)!!!
(2)输出的创作图片的内容受限
输出的创作图片,完全受限于输入图片,输出内容(轮廓)与输入图片完全一样,不同的仅仅是输出图片的填充信息。
pix2pix必须使用成对的数据进行训练,很多情况下成对数据是很难获取到的,比如说,我们想把马变成斑马,现实生活中是不存在对应的真实照片的。
Cycle-constraint Adversarial Network也就是CycleGAN解决这个问题。
这种网络不需要成对的数据(称为unpaired数据集),只需要输入数据的一个集合(比如一堆马的照片)和输出数据的一个集合(比如一堆斑马的照片)就可以了。如下图所示:
CycleGAN网络在不使用paired的数据的情况下,如何亦然能够确保输出与输入有内在的关联,而不是GAN网络的随意创作呢?
如果说,pix2pix是通过优化数据集,来保证输出与输入关系的!
那么说,CycleGAN通过优化神经网络的结构,来保证输出与输入关系的!
CycleGAN在GAN的网络结构的基础之上,增加了一个还原网络,用于把输出还原,用还原后的图片的像素与原始的输入像素进行比较,来确保输出与输入的对应关系,生成与还原都是特征提取后的还原,因此输出与输入在形式上不一定完全一致,而是在深层次的特征章保持一致。
(1)语言翻译
如果一把一段话从英文A翻译成中文C,再从中文C翻译回英文B,那么你应该得到跟之前原始输入的英文A一样的内容B。
(2)图片转换
CycleGAN的原理与上述语言翻译基本相似。
先原始输入图片马A变成斑马C,然后再变回马B,那么最后的马B和开始输入的马A应该是一样的。
对输出与输入图片的相似性检查,是确保输出的图片与输入图片有明确的对应关系的重要手段。
现在的问题来了:如何检查输出与输入图片的相似性呢?
(1)pix2pix的做法
pix2pix是直接通过像素到像素进行检查的完成的,因此pix2pix的输出与输入是显性的、表象的、强关联关系,属于“形似”。
(2)CycleGAN的做法
CycleGAN通过增加还原网络,首先把输出图片重新还原成输入图片,然后对输入图片与还原后的图片进行像素到像素的检查,确保输出图片与输入图片的相似性。这个还原的过程就是形成了一个闭环,这 就是“CycleGAN”的由来。
虽然,还远后的图片与输入图片,具备像素到像素的显性的、表象的、强关联关系,属于“形似”。
但输出图片与输入图片以及还原后的图片并非这种“形似”,而是内在特征的关系。
因此,CycleGAN的输出图片与输入图片之间是隐性、内在的、语义关系。
CycleGAN同时具备如下特征:
通过对还原图片与原始图片的比较,可以确保生成图片的准确性以及与输入图片的关联性。
基本的CycleGAN网络,虽然能够还原成原始图片,但由于输出图片与输入图片之间仅仅是内在特征有一定的相似性,在形态是差异可能很大。如下图所示:
如何保证生成与还原这两个转换不是天马行空,进一步限定输出的准确性。
还需要对训练进行进一步的限制。斑马作为输入,得到普通的马,进一步还原成斑马。
因此,整个CycleGAN经过两次翻译,两次还原:
(1)普通马 =》 斑马 =》 普通马
(2)斑马 =》 普通马 =》 斑马
如果经过上次两次翻译与还原,就能够进一步确保了输出与输入之间的关联性。
类似:
英文 =》 中文 =》 英文
中文 =》 英文 =》 中文
如果两个方向的转换都满足要求的,则证明网络在进行风格转换时,具备了相当强的精确性和创造性 。
CycleGAN成功的原因在于:它分离了风格(Style)和内容(content)。
人工设计这种分离的算法是很难的,但有了神经网络,我们很容易让它学习者去自动保持内容而改变风格。
(1)马变斑马
(2)橘子变苹果
(3)图像风格的迁移:
(4)游戏场景替换
它以一些德国城市的照片作为输入,成功替换了游戏GTA5中的场景!
(5)其他应用
我们还剩一个悬而未决的问题:分辨率和图像质量。pix2pix的输出图片,其图片的分辨率都不该高,过高分辨率导致训练时间的指数增长,同时也会出现转换不准确。
pix2pixHD就是用来解决这个问题的!
假设我们输入一张高分辨率的草图:
使用pix2pix,结果很差(之前说过,让网络产生高维数据输出很难):
pix2pixHD采取了金字塔式的方法(逐渐加强)
(1)先使用GAN或pix2pix输出低分辨率的图片。
(2)将之前输出的低分辨率图片作为另一个新增网络的输入,然后生成分辨率更高的图片。该新增的网络对输出图片进行高分辨率增强,这种方法不影响现有的网络架构,同时增加了新的增强功能。
给定下面的高分辨率草图:
产生高分辨率的输出:
(1) 比如用草图生成高分辨率人脸:
(2)图像增强(Image Enhancement)
(3)图像去雾(Image Dehazing)
(4)非监督动作重定向Neural Kinematic Networks for Unsupervised Motion Retargetting
一文读懂GAN, pix2pix, CycleGAN和pix2pixHD_gdymind的博客-CSDN博客_pix2pix
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122015783