前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >破解PRISMA(下)

破解PRISMA(下)

作者头像
刀刀老高
发布2018-04-10 18:08:35
1K0
发布2018-04-10 18:08:35
举报
文章被收录于专栏:奇点大数据奇点大数据

经过了两周的各种尝试,在各种及其惨烈的测试结果之后,我们还是在网上找到了相关的Paper作为工作指导。

前两周我们的各种尝试是基于一篇名为《Image Style Transfer Using Convolutional Neural Networks》的论文。这篇论文最为核心的部分是用了三个卷积网络来做风格模拟,一个网络用来对大师作品进行风格感知,一个对输入的照片进行内容感知,还有一个网络是在迭代中不断进行调整,最终将一个白噪声图片经过多次涂鸦处理逼近成一个大师风格并保留照片本身的内容信息。

在处理风景照片的时候效果还不错,但是处理人物的时候问题就比较严重了。这种算法的问题有两个非常致命的地方,第一个是速度慢,而且极慢,即便是用GPU也要跑十几分钟才能出来一张图,CPU就更久基本都是要以天来计算了;第二个是不清晰,人像在这里表现得非常模糊,该有的轮廓该有的五官特征线条不明朗,而且这个问题不仅在人像方面表现如此,在其它物体成像方面也有这个问题,感官非常不爽。这两个问题必须都克服才能进行商用,那什么思路呢?

第一个速度慢,用梯度下降肯定是没办法解决的,因为梯度下降就是只能一次一次迭代,在图片这种百万维度级别的计算再快也是分钟级的。最好是一种像分类器一样的东西,一次“哭嚓”一下就过去,然后图片就生成了,这是最好的。

第二个不清晰,这种问题就是要想办法让算法对边缘轮廓以及关键性的图形信息——比如人的五官、车的大灯、动物身上的斑纹要更为敏感。这需要做特殊的刺激处理。

好在我们又找到一篇比较干的论文,而且比前两次看到的论文还要干几倍。这篇论文的名字叫《Perceptual Losses for Real-Time Style Transferand Super-Resolution》。

这篇论文首先是比较长的,共18页,比前面的《Image Style Transfer Using Convolutional Neural Networks》长出来将近一倍,而且里面援引的论文数量61篇,有极多的引用内容却写得极为简略,让人看这篇论文的时候觉得好像是看一部40集的连续剧,你打开电视的时候突然给你播了一个皆大欢喜的大结局,然后剧终了……这里作为重要引用的有4到5篇论文,基本支撑了整个论文的核心思路问题。如果你有时间的话,而且英文和数学都还过得去,真的不妨把它们都看一遍,虽然我没都看完,但是看过的几篇确实感觉很有启发。

如果这篇论文太长而又不想全都看完的话,其实只要看这几个地方就够了。

  1. 结构图

这个结构图是核心中的核心,简单说思路就是,我们想要得到一个fw,就是左边这个虚线圈住的部分,这是一个卷积神经网络构成的分类器,期望用一个图片x从这里卷一遍通过去得到y横线这个结果图就变成我们想要的大师风格的图片,因为输入不便的原因我在后面就用z来表示y横线了。这种卷积操作一遍在GPU上理论上确实能够秒得。所以这个思路环节没问题。

右边这个部分是φ网络,是一个叫损失网络的东西,其实很简单,就是为了求损失函数的,这里也是用了一个非常经典的VGG-16卷积神经网络来实现。所以整个系统里其实是两个卷积神经网络。

ys是大师的作品,yc是输入的照片,这个φ网络不是随便给定的,这里面关键的信息是在每一层的激励函数上。

2. 损失函数

我们看看这三个足够烧坏很多人钛合金大脑的方程,包括我的……

这里z其实就是损失函数LOSS,后面的3项分别是三个不同的损失含义。Z的定义是在后面三项加和最低情况下输出的y,或者直接认为是z函数的极小值时候的y,我们写成LOSS(y)会更好理解一些,而y的初始化还是老规矩是一张白噪声图。Lfeat是指特征损失,在这里说的是图片变换的过程中y和yc的特征差异,是在各个卷积层的池层上的“光斑投影”差异程度。Lstyle是风格差异是指y和ys的风格差异,最后一项是激励y的空间平滑度的正则化项。前面三个拉姆达表示对这种损失定义的情况下的权重,哪一项大就说明哪一项在转化中受到重视,是偏重特征保留还是偏重风格保留。

Lfeat和Lstyle的定义也给出来了,Lfeat是让这个白噪声y和z都从损失网络φ里面卷一遍,各池层上的刺激差异作为损失。Lstyle是用格拉姆矩阵做的风格损失的评估,这个部分和《Image Style Transfer Using Convolutional Neural Networks》)里提到的风格损失评估极为相似。

那好,到这里还有两个工作,一个是z怎么求。其实z只是写的形式太绕脑了而已,z=LOSS=f(w,x),只要x是给定值那就直接对w求偏导,在w向量空间里用梯度下降就解决了,因为x我们是有的。那就剩下最后一个工作,就是怎么给一个合适的损失网络φ里面各池层的刺激。这个时候卷积神经网络强大而且变态的特性就看出来了,你只要让一张图片在卷积网络里卷,在卷积核的作用下在池层上都会投射下对于颜色、轮廓、纹理信息的提取,就是我们说的那些“光斑”。然后呢,呵呵,聪明的你马上就能想到,干脆让他们比光斑吧——是的,真的是这么干。论文里说是用微软COCO作为刺激用的照片库,是可以滴,没问题,用别的照片也可以。好,开整。

第一次就用这么个大师的作品吧,啊,好棒啊,真不愧是大师的作品,为什么画的什么我完全看不懂……不管了,训练!

在GPU被我们折磨了20小时以后,损失网络和fw都已经训练好了。先找一个不怕死的帅哥扔进去看看。嗯,佳铖,就你吧,你已经成家了没有后顾之忧的,对吧。

1秒钟以后,结果出来了,当场所有被我叫来见证奇迹的人统统都目瞪狗呆。在停留了5秒钟以后,我的作品得到评价了。按照口德排序,分别为“色盲测试本”、“三维立体画”、“密集恐惧症患者谋杀器”以及“马赛克公司的5毛钱特效”。我当时那个心啊,拔凉拔凉的啊,不过也不能说我交友不慎,这玩意儿别说他们,连我都看不下去了。

这里的问题其实也很明显,就是大师作品的纹理实际上是可以做resize的,我们的尺寸给的太小了,所以色块太过细碎,变大一些就好了。为了和PRISMA有一定的对比效果,我们果断滴截取了PRISMA的COMPOSITION风格作为大师风格进行训练,并且优化了一下训练过程,大约2.5小时训练完毕。

为了不对无辜的群众造成伤害,还是让自己先来吧。在等待了1秒以后,当我偷偷睁开眼睛看的时候,咦?居然还说的过去。前面这个是我的fw输出的,后面这个是PRISMA的。

对比原先的效果,两周以前三不忍赌的涂鸦,现在的边缘清晰多了,而且速度基本达到商用标准。这里凌乱的原因有几个,我想在后面的调整中会比较快克服。第一就是大事图片的清晰度不够好,毕竟是截屏下来的作品,没有做过色彩强化处理。第二就是损失网络训练的次数太少,应该加大次数来降低损失函数,尤其是对Lstyle前面的参数应该加大试一下。

在万娟妹妹从fw里面卷过来的时候我发现大部分的颜色和PRISMA处理的风格已经非常接近了,嗯,思路已经验证了,后面就慢慢来调整吧。

上次有朋友说凑够100个大拇哥的是不是可以给妹子的联系方式,我觉得有点太苛刻了,强人所难嘛……不过99个是可以考虑给一下的。

好了今天就写这么多,祝大家也能玩得顺利。感谢某峥老师的辛勤努力,也感谢所有给我当模特的妹子们!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档