人工智能滤镜曾一度刷爆朋友圈,画家Prisma、何助电影《你的雷锋名字》同款滤镜都是如此,但人工智能在图像方面的开课进展远不止这些。
除了打造“艺术滤镜”,画家人工智能还可以帮助用户根据需要生成图片、何助家庭健康讲座 超群绝伦增加纹理、雷锋对原本像素很差的开课图片进行超分辨率处理,助你成为“画家”。画家其中用到的何助技术也与最近很火的“生成对抗网络”(GANs)有关。
本期公开课,雷锋网请到了图普科技机器学习工程师 Vincent 为大家揭开 AI 可以助你成为“画家”的开课秘密。 Vincent 曾在英国留学两年,画家回国后加入图普,何助担任机器学习工程师一职,雷锋参与图普多个产品的研发工作,立誓要搞深度学习搞到死。
嘉宾介绍:
Vincent,图普科技机器学习工程师,主要从事工业级深度学习算法的研发。曾任摩根大通欧洲技术中心分析师,IBM爱丁堡办公室软件工程师。熟悉自然语言处理(文本分类,语言模型等),图像转换(艺术滤镜、图片上色等)和分类算法。
以下内容章整理自公开课分享。
|深度神经网络在图像识别领域的进展
自从 2012 年 Alexnet 横空出世,一举夺得 ImageNet 图片分类大赛冠军之后,深度学习一飞冲天,智能家居新品 首屈一指以卷积网络为首的深度神经网络不断刷新各种计算机视觉任务的 State-of –the-art 。过去四五年间,我们可以看到学术界不断地开发出各种不同结构的卷积神经网络,而且,这些结构并不仅仅是在 Alexnet 的基础上加深层数,而是自成一派,各有所长。
本次公开课重点分享三种神经网络结构:
Network in Network(NIN,网络中的网络):卷积网络是一种线性操作,非线性的表现能力有限,NIN 的研发者设计了比起传统的卷积网络更繁琐的操作 —— MLPconv,并用 Global average pooling 极大的改进了卷积网络的大小。
VGG 和 GoogLeNet(inception_v1):二者是 2014 年 ImageNet 竞赛的双雄。VGG 的设计理念,全部都用了 3x3 卷积,增加了网络的深度。 GoogLeNet 属于Google 的 Inception 系列,用了比较花式的网络设计,旨在减少网络的运算量,加快训练 。
Resnet(深度残差网络): 根据无限逼近定理(Universal Approximation Theorem),我们可以用一个一层的神经网络来实现任意的维到维的映射,但网络的参数量(网络的宽度)会随着问题繁琐度的增加变得非常大,而增加网络的深度则可以让我们用更少的参数量实现同样的映射。但是,随着神经网络层数的加深,它们的训练也会变得越来越艰难,因为在训练时会出现梯度消失的状况。Resnet 很好的智能家居新品 超群绝伦解决了这个问题,让训练达1000多层的神经网络变得可能。
除了图片分类,以 RCNN 系列为首的神经网络技术在物体检测任务上也取得了重大进展,近年来也出现了速度更快(YOLO),效果更好的算法(SSD)。
最近很火的 GAN 是一个训练框架,在 GAN 出现之前, 生成模型的训练是一件相对较艰难的事情,GAN 出现后,生成模型训练的效率大大提高。
GAN的应用大部分也是生成模型的应用,用来生成图片、音乐、文字等。但是对抗训练对训练判别模型也是有非常大的帮助的,因为虽然有非线性的激活函数,但深度网络依然是高度线性的,会对误差进行累积,累积的误差结果通过肉眼分辨不出来,但是可以从卷积网络中看出。但与普通线性模型不同,深度神经网络可以拟合对抗训练可以很好的解决这个问题,解决方式是生成对抗样本,使得网络对对抗样本的容忍性更强些。
GAN这一两年来产生了许多非常有意思的应用,其中包括上期公开课中冯佳时博士提到的超分辨率,旨在把低分辨率的图片放大,而尽量不让其明了度受影响。
|纹理转换
近几个月比较火的纹理转换也就是所谓的图片风格化,在深度学习之前,这也是一个非常艰难的问题。其本质原因在于之前非深度学习的方法只能获取到目标图片低层次的图片特征,这导致这些方法无法独立的对图片的语义内容和风格的变化进行有效地建模,从而无法很好地对两者进行解耦和合成。
风格化算法现在更迭了两代。
第一代风格化算法:Neural Style
2015年的时候,德国图宾根大学的学者们提出了一种用深度神经网络各层的响应来表达图片的风格和内容的办法,方法可概括为:
准备好在 ImageNet 数据集上训练好的 VGG 网络,然后选取其中的某些层作为风格语义的提取层,某些层作为内容语义的提取层;
用这个训练好的 VGG 提取风格图片代表风格的高层语义信息,具体为,把风格图片作为 VGG 的输入,然后提取在风格语义选取层激活值的格拉姆矩阵(Gramian Matrix)。值得一提的是,格拉姆矩阵的数学意义使得其可以很好地捕捉激活值之间的相关性,所以能很好地表现图片的风格特征;
用 VGG 提取被风格化图片代表内容的高层语义信息,具体为,把该图片作为 VGG 的输入,然后提取内容语义提取层的激活值。这个方法很好地利用了卷积神经网络的性质,既捕捉了图片元素的结构信息,又对细节有一定的容错度;
随机初始化一张图片,然后用2,3介绍的方法提取其风格,内容特征,然后将它们分别与风格图片的风格特征,内容图片的内容特征相减,再按一定的权重相加,作为优化的目标函数。
保持 VGG 的权重不不变,直接对初始化的图⽚做梯度下降,直至目标函数降至一个比较小的值。
这个方法的风格化效果震惊了学术界,但它的缺点也是显而易见的,由于这种风格化方式本质上是一个利用梯度下降迭代优化的过程,所以尽管其效果不不错,但是风格化的速度较慢,处理一张图片在GPU上大概需要十几秒。deepart.io这个网站就是运用这个技术来进行图片纹理转换的。
第二代风格化算法:Fast Neural Style
有了可以解耦图片风格和内容的方式,我们就能训练一个端到端的网络,使得我们只需要做一次前向,就能得到风格化图片。因此生成图片大概的步骤是,根据转化的网络得到输出,输出至 VGG 网络,提取风格特征后,跟风格图片的特质做比较,内容图片的特征也会被提取,跟内容图片做比较。
这种算法的有点是速度快,可以在GPU上做到实时生成。去年年中火爆全世界的 Prisma,背后就是这个技术。但这个技术还是有缺陷的,比如由于卷积网络固有的性质,它无法像手动绘图一样对图片的细节进行精挑细选的处理,所以它像是一个豪放的印象派画家,对一些对细节要求比较高的任务,比如人物的动漫化,这种方式是不太适合的。
所以,前段时间⽐较流行的《你的名字》同款滤镜所用到的技术跟Prisma 并不一样,我们猜测这个滤镜不是端到端的,而是会先对原图做像素分割,找出可能是天空的部分,然后加上新海诚特色的云,其他部分则会做一些滤镜化处理。
纹理转换的另外一个非常有意思的应用是Neural Doodle,运用这个技术,我们可以让三岁的小孩子都轻易地像莫奈一样成为绘画大师。这个技术本质上其实就是先对一幅世界名画(比如皮埃尔-奥古斯特·雷诺阿的Bank of a River)做一个像素分割,得出它的语义图,让神经网络学习每个区域的风格。
然后,我们只需要像小孩子一样在这个语义图上面涂鸦(比如,我们想要在图片的中间画一条河,在右上方画一棵树),神经网络就能根据语义图上的区域渲染它,最后得出一幅印象派的大作。
大家如果有关注 AI 领域信息的话,可能也知道 Facebook 宣布了他们的 caffe2go 框架,并展示了他们在手机上的实时风格化视频,这项成果意义重大,主要体现在可以在手机端非常有效率的运行人工智能的算法,把有趣的人工智能技术实现到你的手掌心。例如现在直播或视频中可以在人脸上添加各种可人小动物表情的技术也是人工智能的技术,其主要运用了人脸关键点检测技术。
实现视频风格化的难点在于:
像图像风格化这样的重型应用,如果要在手机上做到实时效果,需要有非常多工程上的优化和算法方面,在尽量不影响效果的前提下减少网络的参数量;
⽐起单图片风格化,视频风格化需要考量的东西会更多,单独对视频的每一帧进行处理,不考虑帧与帧之间的关联,会造成风格化的视频抖动和不协调。
|黑白照片上色
最后一个要介绍的技术为黑白照片上色(Colourful Image Colourization),想象一下,如果人工智能出色地完成这个任务,我们便可以用它来为老照片,老电影增色,轻易地为漫画上色了。本次公开课我会主要介绍去年 ECCV 里加州大学伯克利分校的一篇文章介绍的方法。这个方法与之前方法的不同之处在于,它把照片上色看成是一个分类问题——预测三百多种颜色在图片每一个像素点上的概率分布。这种方法tackle了这个任务本身的不确定性,例如,当你看到一个黑白的苹果时,你可能会觉得它是红色的,但如果这个苹果是青色的,其实也并没有多少违和感。大家也可以到作者的网站网站来试用他们的demo。
这篇文章里面介绍的方法有两个非常重要的trick:
颜色重平衡(Class rebalancing)
我们都知道,各个颜色在全世界所有彩色照片里面的分布是不一样的。比如,大部分照片里面可能会有天空,墙壁,草地等。论文作者给出了 ImageNet 数据集中颜色的分布,可以看出,如果用 LAB 的方式来表示图片(L 通道为像素的亮度,AB 通道表示颜色),ab 值比较低的颜色出现的频率远高于其他颜色。
如果不考虑这个问题,我们的目标函数会对 ab 值⽐比较高的颜色极其不敏感。所以,论文作者提出了了一种方法——在训练时让每一个像素点乘上一个系数,系数的大小与该像素点 ab 值的分布有关。运用这个trick,输出图片的颜色会更有多样性,更接近真切的图片。
从概率分布得出预测颜色值(Point estimate)
我们知道,这个网络的输出是各个像素点ab值的概率分布,那么我们如何去通过这个概率分布得出这个ab值呢?当然,我们可以直接选择概率最大的值作为我们的 prediction,这种做法下输出图片的颜色会更加鲜艳,但很多时候会有不自然的patch出现。另外一种做法是,取这个概率分布的均值作为prediction,这会导致我们的输出图片对比度非常低。作者在这篇文章里提出了一个折中的做法:我们可以调整Softmax 函数的 temperature,然后再求新的概率分布的均值。
这篇文章介绍的方法虽然效果很好,但它还是有缺陷的。比如,对狗的图片上色时,即使它没有伸出舌头,神经网络总是会“想象”它伸出了,然后在鼻子下面的一小块区域涂上红色。而且,上色后的图片有时会出现一小块突兀的 patch。
以上介绍的几个技术都并不是完美的,但是瑕不掩瑜,我们能从中看到深度学习的潜力,明白它能做的远远不止是分类和检测。我相信随着社会对深度学习的热心越来越大,更多有趣的成果会不断产生。如果你觉得以上的技术很酷,那我保证,你的惊讶才刚刚开始。
|有关产品化的思索
当然,要把学术界的成果应用到工业界其实并不是一件容易的事情。我们做机器学习的都知道一个著名的定理叫No Free Lunch Theorem,它说的就是,我们并不可能找到对所有问题都最优的算法。在ImageNet数据集上表现最好的算法,在工业级庞大、繁琐、多变的数据上并不一定就会表现好。所以我们也根据各个客户数据分布的不同做了很多特定的优化。比如我们在为映客提供审核服务,直播场景本身就非常多样和繁琐,我们发现当直播视频界面出现大量用手机或者电脑等电子产品播放另一个界面的内容,相对整个图片来说,内容呈现部分所占比例很小且十分朦胧、不明显,当出现色情、暴恐等不良信息的时候,人工以及标准化的审核模型难以精准识别,误判、漏判的概率较高。于是我们需要针对这个问题具体优化,针对画中画的数据再做识别,然后再调用普通的审核模型。雷锋网雷锋网
图普的产品目前已经在多个行业领域取得很好的应用,但它们暂时只能在一定程度上减少大部分审核人力,无法完全替代人工。这一轮融资过后,我们将加大在服务和计算能力方面的投入,提升产品运行速度和鲁棒性;在算法方面,继续提高图像识别准确率和召回率,我们的愿景是完全解放审核人力,我们也将往审核之外的其他方向扩张业务,如人脸识别,增强现实等,提供更直接,高效和多样化的任务。