清华大学提出APDrawingGAN,人脸照片秒变艺术肖像画
作者 | 刘永进教授
来源 | 转载自数据派THU(ID:DatapiTHU)
清华大学提出APDrawingGAN,该项工作被CVPR 2019录取为oral paper。CVPR是计算机视觉和人工智能领域内的国际顶级会议,2019共收到投稿5160篇,录取1300篇,其中oral paper288篇,仅占全部投稿的5.6%。
作者制作了一个微信小程序展示APDrawingGAN的效果,小程序二维码如下,免费使用,快来试试吧:
肖像画是一种独特的艺术形式,通常使用一组稀疏的连续图形元素如线条来捕捉一个人的外表特征。肖像画通常是在人物面前或基于人物照片进行创作的,其创作依赖于细致的观察、分析和丰富的经验。一幅好的肖像画能很好地捕捉到人的个性和情感。然而,即使是受过专业训练的艺术家,完成一幅精致的肖像画也需要很长时间。
因此,自动地将人脸照片转换为高质量的艺术肖像画具有重要的艺术价值和实用价值。
图1. 一些人脸照片和对应的艺术家画的肖像线条画。
随着深度学习的发展,使用卷积神经网络进行图像风格转换的神经风格转换(NST)方法被提出。随后,基于生成对抗网络(GAN)的方法在图像风格转换上实现了很好的效果。然而,这些已有方法多数针对于生成信息较为丰富的风格,如油画,这些风格的图像中包含很多零碎的图形元素(如笔触),而对单个元素的质量要求较低。也就是说,在这些风格的图像中,一些细节上的瑕疵会被忽视。
艺术肖像线条画(Artistic Portrait Drawings,简称APDrawings)和已有工作研究的油画肖像的风格有很大的不同。它主要有5个特点:首先它是高度抽象的,只由少数稀疏、连续的图形元素组成,因此瑕疵会比油画中更明显。其次是具有强限制性,由于包含面部特征,APDrawings相比一般的风格有更强的语义限制(因为我们对人脸很熟悉,会对人脸图像中的瑕疵容忍度更低)。第三是具有多样性,因为对于不同的面部特征,艺术家绘制的方式是不同的(如眼睛和头发)。第四是非精确性,人工创作导致了一些面部特征的轮廓没法被完全精准的定位,这对基于像素对应的方法是个很大的挑战。最后是APDrawings的概念性,艺术家有时会在原图没有亮度变化的地方添加额外的概念性的线条,比如头发区域中的白线和五官的轮廓线。因此,即使是顶尖的方法也难以产生好的艺术肖像画结果。
APDrawingGAN和一般P图、抠图、滤镜等工具的不同在于,一般的软件对真实照片进行美化得到更美观或具有某种特点的真实照片,而APDrawingGAN生成的是非真实感的抽象艺术肖像画,既能捕捉到照片特征又和真实照片观感完全不同。并且我们生成的线条风格的艺术肖像画比一般的肖像画(如卡通、铅笔素描)具有更少的图形元素,更抽象,因此也更有难度。下图展示了我们方法和一般图像处理工具的结果对比。
图2. 我们的方法和一般图像处理工具的处理结果的对比。人脸照片来源于免费版权图片网站Pixabay。
基于上述存在的问题,在CVPR2019上,清华大学计算机系刘永进教授课题组提出了APDrawingGAN,一个全新的层次化的GAN模型用于将人脸照片转化为高质量的艺术肖像线条画。为了更有效地学习不同面部区域的不同绘制风格,我们的GAN模型包括几个专门针对不同面部特征区域的局部网络,和一个用于捕捉整体特征的全局网络。为了进一步应对线条的风格和艺术家画作中不完全精确定位的轮廓,我们提出了一个全新的距离变换(Distance transform,简称DT)损失来学习艺术肖像线条画中的线条笔画风格。
APDrawingGAN的主要贡献在于:
我们提出了一个层次化的GAN模型,可以有效地从人脸照片生成高质量、富有表现力的艺术肖像线条画。不仅如此,我们的方法对黑白线条分明的复杂发型绘制有更好的效果。
为了学习不同面部区域的不同绘制风格,我们的模型将GAN的渲染输出分为不同层次,每个层次被独立的损失项控制。我们提出了一个针对艺术肖像画的损失函数,它包含四个损失项:对抗损失,像素级损失,一种新的距离变换(DT)损失(用于学习艺术肖像画中的线条笔画)和一个局部变换损失(用于引导局部网络保持面部特征)。
我们使用6655张人脸照片和非真实感渲染算法生成的结果进行了预训练,构建了一个包含140对高质量正面人脸照片和对应艺术肖像画的APDrawing数据集,用于正式的训练和测试。
图3. 我们提出的APDrawingGAN的结构图。左侧为层次化生成器网络的结构,右侧为层次化鉴别器网络的结构。
在APDrawingGAN中,生成器网络G和鉴别器网络D都采用层次化的结构。生成器网络G用于将输入照片转换为艺术肖像画,它包含6个局部生成器(对应于左右眼、鼻子、嘴巴、头发和背景),1个全局生成器和1个融合网络。局部生成器的作用是学习不同局部面部特征的绘制风格。我们将所有局部生成器的输出混合到一个图像Ilocal中。局部生成器和全局生成器都采用U-Net结构。然后我们使用一个融合网络将Ilocal和全局生成器的输出Iglobal融合在一起,以获得最终的生成图。鉴别器网络D用于判断输入图像是否是真实的,即是否是艺术家画的艺术肖像画。其中全局鉴别器对整个图像进行检查,以判断肖像画的整体特征。而局部鉴别器对不同的局部面部区域进行检查,评估细节的质量。局部鉴别器和全局鉴别器都采用PatchGAN的形式。
针对艺术肖像线条画中的线条笔画风格,我们提出了一个全新的距离变换(DT)损失。我们前面提到,在艺术家的肖像画中,线条和原图有时不是精确对应的,会有微小的错位,主要的原因有两个:1.艺术家裸眼观察,面部特征的轮廓有时无法被完全精准地定位,2.艺术家添加的线条有时是概念性的,不与原图完全对应(如头发区域中的白线)。因此仅使用L1损失是不足以应对这种情况的——L1损失会惩罚即使是很微小的错位,但是对于较大的错位并不会更敏感。于是我们提出一种新的损失来容忍这种细微的错位,而惩罚过大的错位。我们提出的这个DT损失是基于距离的,它计算的是艺术家肖像画(Ground truth)中每个线条上的像素到生成肖像画中相同类型(黑或白)的最近像素的距离之和,和生成肖像画到艺术家肖像画的距离之和的总和。DT损失对于微小的错位的惩罚是非常小的,但会真正惩罚那些过大的错位。我们使用了距离变换和倒角匹配(chamfer matching)来计算这个损失,公式如下:
图4. APDrawingGAN在没有对应艺术家肖像画的人脸照片上的测试结果。人脸照片来源于免费版权图片网站Pixabay。
图5. APDrawingGAN与Gatys,CycleGAN和Pix2Pix方法在艺术肖像风格化上的结果对比。其中红色矩形标出了CycleGAN和Pix2Pix方法结果中的一些明显瑕疵。
图6. APDrawingGAN与CNNMRF,Deep Image Analogy和Headshot Portrait方法在艺术肖像风格化上的结果对比。
图7. 更多APDrawingGAN与现有风格转换方法的结果对比。第一列是人脸照片,第二列是艺术家画的肖像画,第三列是一些方法需要的风格参考图,第四至九列是其他方法的结果,最后一列是我们方法的结果。
图8. 用户研究(user study)结果统计。73名参与者参与了用户研究。用户研究中,每位参与者每次从两种算法生成的肖像画中选择一幅更接近艺术家肖像画和图像质量更好的肖像画,并对三种方法(CycleGAN、Pix2Pix和我们的方法)两两进行了比较,由此我们得到了三种方法的排名。表中给出了每种方法排名最好(1)、中间(2)和最差(3)的百分比。在71.39%的情况下我们的方法排名最好。
论文信息:
Ran Yi, Yong-Jin Liu, Yu-Kun Lai and Paul L. Rosin. APDrawingGAN: Generating Artistic Portrait Drawings from Face Photos with Hierarchical GANs. In IEEE Conference on Computer Vision and Pattern Recognition (CVPR 19), Oral paper, 2019.
论文链接:
https://cg.cs.tsinghua.edu.cn/people/~Yongjin/Yongjin.htm
◆
精彩推荐
◆
参与投稿加入作者群,成为全宇宙最优秀的技术人~
6月29-30日,2019以太坊技术及应用大会 特邀以太坊创始人V神与以太坊基金会核心成员,以及海内外知名专家齐聚北京,聚焦前沿技术,把握时代机遇,深耕行业应用,共话以太坊2.0新生态。
扫码或点击阅读原文,既享优惠购票!
推荐阅读
Bert时代的创新:Bert在NLP各领域的应用进展 | 技术头条
免费GPU哪家强?谷歌Kaggle vs. Colab
高能!8段代码演示Numpy数据运算的神操作
Python编写循环的两个建议 | 鹅厂实战
Lambda 表达式有何用处?
9年前他用1万个比特币买了两个披萨, 9年后他把当年的代码卖给了苹果,成为了 GPU 挖矿之父
TIOBE 6月编程语言排行榜:Python 势不可挡,或在四年之内超越Java、C
漫威金刚狼男主弃影炒币了?

相关文章:

图像处理和图像识别中常用的OpenCV函数
1. cvLoadImage:将图像文件加载至内存; 2. cvNamedWindow:在屏幕上创建一个窗口; 3. cvDestroyWindow:销毁显示图像文件的窗口; 4. cvDestroyAllWindows:销毁显示图像文件的所有窗口…

SQLServer之DEFAULT约束
原文:SQLServer之DEFAULT约束DEFAULT约束添加规则 1、若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL。 2、如果“默认值”字…

tmux/screen里面如何用鼠标滚轮来卷动窗口内容
tmux里面用鼠标滚轮来卷动窗口内容在 tmux里面,因为每个窗口(tmux window)的历史内容已经被tmux接管了,所以原来console/terminal提供的ShiftPgUp/PgDn所显示的内容并不是当前窗口的历史内容,所以要用C-b [ 进入copy-mode,然后才能…

图像空间变换--imtransform
转自:http://juyishaanxi.blog.163.com/blog/static/602733002010522105439617/(非原处)空间几何变换将(w,z)坐标系上的图像变换为(x,y)坐标系上的图像,可以表示为: (x,y) T{(w,z) 比如: (x,y) T{(w,z)} (w/2, z/2) 仿射变…

谷歌用1.2万个模型“推翻”现有无监督研究成果!斩获ICML 2019最佳论文
作者 | 夕颜、Just出品 | AI科技大本营(ID:rgznai100)6 月 11 日,在美国加州长滩举行的 ICML 公布了 2019 年最佳论文奖,来自苏黎世联邦理工大学、谷歌大脑等的团队和英国剑桥大学团队摘得最佳论文奖项,此外,大会还公布了 7 篇获最…

实战:掌握PyTorch图片分类的简明教程 | 附完整代码
作者 | 小宋是呢转载自CSDN博客1.引文深度学习的比赛中,图片分类是很常见的比赛,同时也是很难取得特别高名次的比赛,因为图片分类已经被大家研究的很透彻,一些开源的网络很容易取得高分。如果大家还掌握不了使用开源的网络进行训练…

python group()
正则表达式中,group()用来提出分组截获的字符串,()用来分组 import re a "123abc456" print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整体 print re.sea…

图像配准的方法
转自:http://blog.sina.com.cn/s/blog_4b9b714a0100d5k5.html 图像配准的方法 1 基于特征的图像配准 基于特征的图像配准首先提取图像信息的特征,然后以这些特征为模型进行配准。特征提取的结果是一含有特征的表和对图像的描述,每个特征由…

微软发布Visual Studio 2017 15.8
2019独角兽企业重金招聘Python工程师标准>>> 对于C#/VB/C项目,在Git分支检出和分支切换操作后不再需要重新加载解决方案,这加快了操作的完成。15.8支持新推出的F# 4.5,这无疑将会受到F#开发人员的欢迎。此外,用于F#项目…

推荐系统产品与算法概述 | 深度
作者丨gongyouliu转载自大数据与人工智能(ID:gh_b8b5b02c348b)作者在《推荐系统的工程实现》(点击蓝字可回顾)这篇文章的第五部分“推荐系统范式”中讲到工业级推荐系统有非个性化范式、完全个性化范式、群组个性化范式、标的物关…

【iOS-cocos2d-X 游戏开发之十六】Cocos2dx编译后的Android自动使用(-hd)高清图设置自适应屏幕...
本篇主要介绍Cocos2dx项目开发过程中或者说项目务必遇到的一些知识点(ps.貌似Himi博客写的都是务必的 :tx: Himi认为写别人没写的才更容易吸引人不是~) OK,不多说废话,第一个介绍的是修改项目配置让你的Android项目支…

matlab图像处理命令(一)
转自:http://blog.csdn.net/langyuewu/archive/2009/05/02/4144120.aspx(非原处) 1.applylut 功能: 在二进制图像中利用lookup表进行边沿操作. 语法: A applylut(BW,lut) 举例 lut makelut(sum(x(:)) 4,2); BW1 imread(text.tif); BW2 applylut(BW1,lut); imsh…

MYSQL 查询数据排序数据和分组数据
在mysql查询过程中,可以对数据进行过滤,也可以对数据进行排序,可以对数据分组,下面分别讲述排序数据和分组数据例子。1,数据的排序 使用 ORDER BYselect * from where id10 order by id (正序,倒序)正序 AS…

Oracle RAC系列之:利用srvctl管理RAC数据库
srvctl即Server Control,是Oracle提供的一个命令行工具,用以用于管理Oracle的RAC环境。srvctl在Oracle 9i中被引入,Oracle10g、11g对其功能进行了很大的增强和改进。下面介绍下此命令的简单用法。 一、 查看实例状态(srvctl statu…

matlab图像处理命令(二)
转自:http://blog.163.com/crazyzcs126/blog/static/1297420502010229104452729/ (非原处) 图像增强 1. 直方图均衡化的 Matlab 实现 1.1 imhist 函数 功能:计算和显示图像的色彩直方图 格式:imhist(I,n) imhist(X,map) 说明&#x…

10万人的1000万张图像,微软悄然删除最大公开人脸数据集
作者 | 神经小姐姐转载自HyperAI超神经(ID:HyperAI)前几日,微软静悄悄地删除了一个公开的名人图片数据集。这个本为世界上最大的公开人脸识别数据集,现在已经不能通过微软的渠道访问。这个数据集包含了 10 万张名人面部…

密码学原理学习笔记
攻击的类型: 唯密文攻击(COA):攻击者只知道密文 已知明文攻击(KPA):攻击者知道同一密钥下密文对应的明文。 选择明文攻击(CPA):攻击者可以事先任意选择一定数量的明文,让被攻击的加密算法加密,并得到相应的密文。 选择…

终于申请博客了
今天终于下定决心在51CTO博客安家了。以后要坚持不断的写博客。以此来督促自己不断的学习和总结。把自己所掌握的技术和过往经验总结出来。转载于:https://blog.51cto.com/weijishui/971044

一种二维条码图像处理流程
目前,二维条码主要分两类: (1)、堆叠式二维条码:PDF417、Code 49; (2)、矩阵式二维条码:QR Code、Maxicode、Data Matrix。 本条码类似于Maxicode,处理过程大致为: (1)、图像灰度化ÿ…

vue中 静态文件引用注意事项
(一)assets文件夹与static文件夹的区别区别一:assets文件是src下的,所以最后运行时需要进行打包,而static文件不需要打包就直接放在最终的文件中了区别二:assets中的文件在vue中的template/style下用../这种…

百度AI快车道—企业深度学习实战营,推荐系统主题专场即将开课
身处信息过载的时代,在各大门户网站上,每天会有十万左右的新闻报道产出,京东淘宝等购物平台每小时就有上百万的商品上架出售,在B站、优酷、爱奇艺、搜狐等视频网站上每秒就有几百个小时的视频上线。所有人都正在经历一场信息变革。…

SIFT特征提取算法总结
转自:http://www.jellon.cn/index.php/archives/374 一、综述 Scale-invariant feature transform(简称SIFT)是一种图像特征提取与匹配算法。SIFT算法由David.G.Lowe于1999年提出,2004年完善总结,后来Y.Ke(2004)将其描述子部分用PCA代替直方…
一步步构建大型网站架构
之前我简单向大家介绍了各个知名大型网站的架构,MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型,我们可以从中获取很多有关网站架构方面的知识,看了之后你会发现你原来的想法很可能…

商汤科技举办病理、放疗两大MICCAI国际挑战赛,推动AI医疗落地
近日,商汤科技宣布将联合衡道病理、上海交通大学医学院附属瑞金医院、西京医院、上海市松江区中心医院举办MICCAI 2019消化道病理图像检测与分割国际挑战赛,联合医诺智能科技、浙江省肿瘤医院举办MICCAI 2019放疗规划自动结构勾画国际挑战赛,…

vue实战(1)——解决element-ui中upload组件使用多个时无法绑定对应的元素
解决element-ui中upload组件使用多个时无法绑定对应的元素 以前写的项目关于图片上传的都是单张或几张图片上传(主要是基于vue的element),图片路径都是固定写的,所以遇见过列表中多个上传图片的问题,先看下常用的形式 …

MVVM开发模式MVVM Light Toolkit中使用事件和参数传递
Light中定义了类GalaSoft.MvvmLight.Command.RelayCommand这个类继承了ICommand方法,实现了其中的方法,Action就是一个方法参数// 摘要: // A command whose sole purpose is to relay its functionality to other objects // by invoki…

harris角点检测与ncc匹配
转自:http://zixuanjinan.blog.163.com/blog/static/11543032620097510122831/ file1:-------------------------------------------------------------------------------------- function [y1,y2,r,c]harris(X)% 角点的检测,利用harris 算法% 输出的是…

CVPR 2019超全论文合集新鲜出炉!| 资源帖
整理 | 夕颜出品 | AI科技大本营(ID: rgznai100)实不相瞒,这是一个资源福利帖——CVPR 2019 接收论文超全合集!此前关于 CVPR 2019 论文和合集出过不少,但是这个可能是最全面最丰富的,链接奉上:…

ROS 用 roboware实现节点信息发送和接收
在ros下实现节点编程,实现一个节点发送消息,另一个节点接收。实现方式有多种,可以直接在命令窗口创建工作空间包以及节点,用catkin_make进行编译,添加.bash路径,然后执行rosrun package node_name 。这种…

javah生成JNI头文件
Administratoribm /cygdrive/z/workspace/com.example.hellojni.hellojni/src <---- 从此文件夹执行 javah *************** project root dir ******************* *** source dir *** javah -jni -classpath . com.example.hellojni.HelloJni*** package name *** ** c…