array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 论文笔记 Generative Face Completion - 爱码网

 

这篇paper将巧妙地将四个loss函数结合在一起,其中每一个loss的功能不同。但这篇paper不够elegant的地方也是loss太多!在本文中,我采用散文的写作方法谈谈自己对这篇paper的理解,其实质就是“想到哪,写到哪!”

 

论文笔记 Generative Face Completion

如上图所示,(a)输入图像;(b)用随机square模板遮住输入图像一部分;(c)复原得到的图像。理想状态下,我们希望复原出的图像与输入图像完全一致(视觉上 and 语义上)。哈哈,这个不是很简单吗,我们可以用L2范数regularize输入图像与输出图像,理想状态下,输入图像与复原出的图像完全一致!恭喜你,回答正确!作者也这样试了试,结果如Figure 3 (c)所示。

论文笔记 Generative Face Completion

哎呀!理想与现实差距有点大哦!仔细观察一下Figure 3 (c),我们可以得出结论:复原结果模糊、复原得到的patch有点像、复原patch的边缘清晰可见。其实,这个也很好理解,L2范数倾向于去平均,这样会丢失很多高频、低频信息,使得图像较为模糊、细节丢失。简而言之,复原图像与真实图像差距有点大!换句话说,就是复原图像看起来不真实!

 

这时候我脑海中浮现出一个概念,GAN的判决器不就是判定随机噪声生成图像(或者patch)是否真实的吗?哈哈,我们可以把这个思路搬过来哦!如果判决器判断不出来复原的图像是否是原图,这不就表明,复原得到的图像与原始图像一致吗?当然了,L2 loss还是必须的(可以理解为一个多任务学习)。说干就干,我直接判断生成的patch的是否真实,于是得到了Figure 3 (d)。看起来比之前好多了哦!细细看来,发现这个图片不是很真实,生成的patch在整幅图像中显得不协调!

 

不要灰心!生成的patch在整幅图像中看起来不协调,换一种理解方式就是:整幅图像看起来不真实吗?索性我在上述两个loss的基础上,再加上一个生成的全局图像是否真实的判定。这样是不是就保证了生成的patch在整幅图像中看起来比较自然些呢?请看Figure 3 (f)美女的大致轮廓已经显现,看起来也自然的多了!

 

等等!对于我这个美女控来说,怎么允许美女的脸颊有褶皱呢,参看Figure 3 (f)?男的吧,我忍了!哈哈!怎么办呢?我已经耗尽脑汁了!在山重水复疑无路时,我脑海中忽然浮现出一句诗“横看成岭侧成峰”。于是,我决定大胆试试,遮住美女或者帅哥的一只眼睛,看看复原的这只眼是不是与另外一只眼搭配呢?请看下图

论文笔记 Generative Face Completion

在(c)中,我们可以明显感觉出,所说两只眼睛单独看没有问题,但是放在帅哥的脸上,怎么那么不自然呢?给人的感觉怪怪的!我们怎么才能使得他们协调一些呢?这个问题可理解为:保证两只眼睛大小一致、五官比例匀称等一些审美上的要求吧!

 

咯咯!这怎么和语义分割概念那么相似呢?假如,我能够事先知道一些五官布局之类的语义,这不就帮我解决上述问题了吗?说干就干,就给她引入语义信息!!!结果如(d),真是“千呼万唤始出来”哦!总算得到了让我满意的“帅哥”、“美女”图像!!!

 

说了这么多,我究竟在说的是什么呢?你是在搞图像处理呢,还是在干啥?恩,不能不务正业了,下面给您放出论文中的模型

论文笔记 Generative Face Completion

是不是看着很熟悉的样子哦!Global discriminator就是判断复原图像是否真实的;local discriminator就是判断复原图像patch是否真实的。Parsing network那个是使得得到的人脸五官匀称、整齐的!至于L2 重构,您就自己意会一下吧!这不就是将我刚刚分析的几个要素整合到CNN网络中了吗?原理建模还可以这么理解哦!

 

明白了这篇paper的基本思路之后,下面就是在特定的数据集上训练我们的网络,当然了这个数据集必须包含作者需要的信息:GT parsing。作者选取的数据集是,CelebA。实际上,训练好这个网络之后,我们可以拿自己的人脸试试哦,看看是变帅了呢,还是变亮了呢?

 

说句话外话,Loss函数太多,每一个loss函数的权值怎么选,这个的确是个“黯然销魂”的问题,作者只是给出了权重,但是没有给出一些原则哦!如果您对鸟脸比较感兴趣,估计您得自己选择这些参数了哦!也许,您一下子就能选到了最佳组合,也许您在纠结到底什么权重是合适的呢?

 

以上就是自己一些粗浅的看法,不当之处,敬请各位批评指正!!!

相关文章: