当前位置: 首页 > 编程日记 > 正文

基于人脸关键点修复人脸,腾讯等提出优于SOTA的LaFIn生成网络

作者 | Yang Yang、Xiaojie Guo、Jiayi Ma、Lin Ma、Haibin Ling

译者 | 刘畅

编辑 | Jane

出品 | AI科技大本营(ID:rgznai100)

【导语】现实场景中,人脸的变化是很大的,例如不同的姿势、表情和遮挡等,因此在现实场景中修复人脸图像是一件非常具有挑战性的任务。一种好的修复算法应该保证输出没有违和感,包括眼睛,鼻子和嘴巴之间的拓扑结构,以及姿势,性别,种族,表情等属性是一致的。

在今天的这篇论文中,腾讯联合天津大学、武汉大学等高校研究了一种有效的基于深度学习的方法来解决这些问题。该方法涉及人脸关键点预测子网和图像修复子网。具体而言,关键点预测器可以提供不完整面孔的结构信息(例如,拓扑关系和表情),而图像修复器则根据预测的关键点生成合理的外观(例如,性别和种族)。

在 CelebA-HQ 和 CelebA 两个数据集上的实验结果现实了本文方法的有效性,并定性定量的证明了其优于 SOTA 的方法。此外,本文假设高质量的完整面孔及其关键点可以用作增强数据,以进一步提高(任何)关键点检查的性能,在 300W 和 WFLW 两个数据集上的实验结果证实了这一想法。

论文与代码地址

https://github.com/YaN9-Y/lafin

https://arxiv.org/abs/1911.11394

引言

图像修补(Image Inpainting)指的是重建图像丢失或损坏的过程,该过程可以作为各种其他任务的预处理,如图像恢复或图像编辑。毫无疑问,研究者们期望完成的结果是无违和感的。相较于海洋、草坪等自然场景,人脸会更有挑战性。因为人脸会有更强的拓扑结构,而且需要保留一致性的人脸属性。

如图1 所示。,根据观察,研究者们会很容易的感知到重构的人脸中存在的明显缺陷。下面给出这个问题的定义:

定义:人脸修补。给定一个带有损坏区域M的人脸图像I。然后指定M’ 为M的补码。o为哈达玛积。目标是对遮挡区域填充语义上的连续且有意义的信息,换句话说,最终的结果I’ = MoI' + M'oI应当保持眼睛、鼻子、嘴巴间的拓扑结果,以及姿态、性别、种族和表情等属性的一致性。

在现实场景中完成人脸修补是一项非常具有挑战性的任务。一个合格的人脸修补算法应当仔细考虑下面两个方面,以确保输出的真实感

(1)人脸的结构非常稳固。眉毛、眼睛、鼻子和嘴巴等面部特征之间的拓扑关系始终有条有序。最终生成的脸必须首先满足此拓扑结构。

(2)人脸的属性,如姿态、性别、种族和表情在整个修补区域和可见区域应该保持一致。

有稍微不满足上述的两个条件,则会存在重大的感知缺陷。

为什么要采用人脸关键点?这项工作采用人脸关键点作为结构监督信息,是由于其紧凑性、充分性和鲁棒性。有人可能会问,边缘信息或解析信息是否比关键点指导性更强?如果得到的信息是非常准确的,那当然。但是在非常具有挑战性的环境下(如大面积损坏的大姿态人脸),要生成合理的边缘并不容易。在这种情况下,冗余和不准确的信息会损害性能。关键点相较于这些信息,更整洁健壮。从编辑操作角度看,关键点更易于控制。这些特点对于人脸修补来说,使用关键点是更好的选择。

如何保持属性的一致性?除了由关键点确定的人脸姿态和表情属性外,还需要考虑其他几个属性,例如性别、种族和容貌风格。一致性最重要一点是连接可见区域和修补区域,对于这些更细粒度的属性,修补算法应将可见信息作为图像重构的参考。

本文贡献。本文提出了一个深度网络,即“关键点指导的生产性图像修补器”(Generative Landmark Guided Face Inpaintor,简称LaFIn),它由人脸关键点预测子网和图像修补子网组成,用于解决人脸修复问题。主要贡献可以归纳为以下几个方面:

1、正如分析那样,人脸关键点整洁,充足且鲁棒,可以用作人脸修复的监督。本文构建了一个用于预测不完整面孔上的关键点模块,该模块可以映射目标面孔的拓扑结构,姿势和表情。

2、为了修复人脸,本文设计了一个以人脸关键点信息为指导的修复子网。为了实现属性一致性,子网利用了上下文信息并连接了相关联的特征图。

3、本文进行了大量的实验以验证算法的有效性,并定性定量的证明其优于目前SOTA的方法。

此外,我们可以进一步使用完成结果来提高关键点检测器的性能。由于在实际情况中,训练数据通常不足,并且手动标注关键点十分耗时,因此需要一种简单而又可靠的数据扩充方式。这是本文的另一项贡献。

4、修复后的图可能生成基于关键点的各种新面孔。因此,可以将生成的面部和相应的(GroundTruth)关键点用作增强数据。在 WFLW和300W两个数据集上的实验结果证实了这种方式的有效性。

方法

整个模型由两个子网络构成,一个是预测关键点的网络,一个是基于关键点生成新像素的图像修补网络。论文中的关键点预测子网络可以使用任意已有的关键点检测算法,但是作者的关注点有所不同,他们更希望得到一些基础拓扑结构和某些属性,而不是每个关键点的精确位置。因此作者连接融合了不同阶段的特征图来实现最终的关键点预测。

图像修补模型的输入是损坏图像和关键点(预测的结果或Ground Truth)。模型包含了生成器和判别器。其中生成器是基于U-net网络结构,但略有不同,具体的网络结构参数作者在论文附录使用表格非常详细的给出了。判别器是基于70*70的Patch-GAN网络结构。引入了SN等一些常见的稳定模型训练的结构。同样在附录里面有非常详细的结构参数。关于Loss函数,作者使用了多种Loss的结合,包括per-pixel损失、感知损失、风格损失、TV损失和对抗损失。

实验

首先实验的数据集是CelebA-HQ,其中的损坏和遮挡等是随机生成和添加。对比的方法包括CE、GFC、CA、GAFC、PIC、EC。客观评价指标使用的是PSNR、SSIM和FID。

作者还实验了使用LaFIn方法来增加关键点检测的训练数据。并在WFLW和300W两个数据集上实验了效果。如下所示。

具体的实验细节,建议阅读论文原文。一定会有不一样的发现。

总结

在这些研究中,本文开发了一个生成网络,称为LaFIn,用于人脸修复。提出的LaFIn算法首先预测关键点,然后根据关键点进行图像修复。本文依据的原则是,要有足够且鲁棒的关键点,才能为人脸修补器提供结构信息指导。为了确保属性的一致性,本文利用了上下文信息。通过大量的实验,验证了本文方法的有效性,并定性定量的证明其优于SOTA的方法。此外,还可以使用LaFIn算法来增加人脸关键点数据,实验证明了这种方法的有效性。

(*本文为AI科技大本营编译文章,转载请微信联系 1092722531)

精彩公开课

推荐阅读

  • 2020大数据十大趋势发布!华为、阿里、滴滴、百度、京东、讯飞等顶尖专家齐聚BDTC

  • 多模态人物识别技术及其在爱奇艺视频场景中的应用 | 公开课笔记

  • 远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术

  • 微软张若非:搜索引擎和广告系统,那些你所不知的AI落地技术

  • 激辩:机器究竟能否理解常识?

  • Instagram个性化推荐工程中三个关键技术是什么?

  • 从YARN迁移到k8s,滴滴机器学习平台二次开发是这样做的

  • 华为将正式起诉美国联邦通信委员会;谷歌技术故障导致美国三大航空公司网站短暂宕机;英特尔拟20亿美元买以色列AI芯片公司……

  • 2020年,区块链开发者还有哪些期待?

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

在Ubuntu上编译opencv 2.4.13源码支持android平台操作步骤

之前在https://blog.csdn.net/fengbingchun/article/details/96430706中编译过opencv源码用于海思平台,这里通过修改脚本编译opencv 2.4.13.6源码,使其支持android平台。 1. 从https://github.com/opencv/opencv/releases下载opencv 2.4.13.6源码&#…

Java组合模式

组合模式:适用于把一组相似的对象当作一个单一的对象,组合迷失一句树形结构来组合对象,用来表示部分以及整体层次。这种类的设计模式属于结构型模式,他创建了对象组的树形结构 这种模式创建了一个包含自己对象组的的类。给类提供了…

SQL故障转移集群操作方法

SQL故障转移集群操作方法1 给SQL服务器配置IP地址,每台服务器需要两个IP,一个通讯用,一个作为心跳线,修改计算机的名称,关闭服务器的防火墙,开启远程桌面.2心跳网卡配置去掉ipv6,并去掉下列几项进行验证3域控制器服务器管理器 添加角色 AD域服务启动AD域服务加入到域中打开DNS服…

Windows/Linux上使用fopen相关函数读取大文件

在介绍读取大文件之前&#xff0c;先了解下<cstdint>文件&#xff0c;标准头文件&#xff0c;存放固定宽度整数类型&#xff0c;如int32_t, uint32_t&#xff0c;不管在32位上还是64位上&#xff0c;长度都为4个字节&#xff1b;int64_t, uint64_t&#xff0c;不管在32位…

蚂蚁金服提新概率图模型GLN,正确率提升8.2%,具备可解释性 | NeurIPS 2019

作者 | 蚂蚁金服编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1b;rgznai100&#xff09;【导读】一年一度的国际顶级学术会议NeurIPS 2019将于12月8日至14日在加拿大温哥华举行。作为人工智能和机器学习领域最顶级的盛会之一&#xff0c;每年都会吸引来自全世界的AI大…

Java外观模式

外观模式&#xff1a;隐藏系统的复杂性&#xff0c;并向客户提供了一个客户端可以访问系统的接口&#xff0c;这种类型的设计模式属于结构型模式&#xff0c;他向现有的系统添加一个接口&#xff0c;来隐藏系统的复杂性 这种模式设计到一个单一的类&#xff0c;该类提供了客户请…

【spring框架】spring整合hibernate初步

spring与hibernate做整合的时候&#xff0c;首先我们要获得sessionFactory。我们一般只需要操作一个sessionFactory&#xff0c;也就是一个"单例"&#xff0c;这一点很适合交给spring来管理。下面的代码演示如何创建一个JDBC DataSource 和Hibernate SessionFactory:…

PyTorch简介

PyTorch是一个针对深度学习&#xff0c;并且使用GPU和CPU来优化的tensor library(张量库)。最新发布的稳定版本为1.9&#xff0c;源码在https://github.com/pytorch/pytorch 。它支持在Linux、Mac和Windows上编译和运行。调用Python接口可以通过Anaconda或Pip的方式安装&#x…

Java 责任链模式

顾名思义&#xff0c;责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;为请求创建了一个接收者对象的链。这种模式给予请求的类型&#xff0c;对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中&#xff0c;通常每个接收者…

2019嵌入式智能国际大会圆满落幕,7大专场精彩瞬间释出!

全球第二大市场研究机构MarketsandMarkets报告称&#xff0c;2019年全球AIoT市场规模为51亿美元&#xff0c;到2024年&#xff0c;这一数字将增长至162亿美元。5G元年&#xff0c;人工智能开始更多地转向应用智能。基于此&#xff0c;12月6-7日&#xff0c;由哈尔滨工业大学&am…

ubuntu12.04 alternate win7 双系统安装

ubuntu alternate的安装比desktop复杂一点,因为alternate的安装过程有个步骤是检测cd-rom,如果你是刻盘安装,自然没问题,但是,现在的安装一般是将系统刻到U盘里,或者在硬盘中划出一个分区,将其制作成启动盘. 这里我是用U盘安装的... 安装前的准备: 1)在硬盘上分出一个空闲分区:…

C/C++包管理工具Conan简介

Conan是一个开源的、跨平台的、去中心化的C和C包管理器&#xff0c;它的源码在https://github.com/conan-io/conan &#xff0c;License为MIT&#xff0c;最新发布版本为1.38.0&#xff0c;由Python实现。版本更新较频繁&#xff0c;但保持向前兼容。 Conan特点&#xff1a; (1…

神经架构搜索在视频理解中研究进展的综述

作者 | Michael S. Ryoo 研究员与 AJ Piergiovanni 学生研究员&#xff08;Google 机器人团队&#xff09;来源 | TensorFlow&#xff08;ID&#xff1a;TensorFlow_official&#xff09;视频理解一直是项颇具挑战性的难题。视频中包含时空数据&#xff0c;因此要提取特征表示需…

Java命令模式

命令模式&#xff08;Command Pattern&#xff09;是一种数据驱动的设计模式&#xff0c;它属于行为型模式。请求以命令的形式包裹在对象中&#xff0c;并传给调用对象。调用对象寻找可以处理该命令的合适的对象&#xff0c;并把该命令传给相应的对象&#xff0c;该对象执行命令…

关于本分类(codeforces-好题系列)

前前后后花了将近半个月&#xff0c;终于将吴神的十场cf的50题目补完了&#xff0c;看到了各种技巧和DP的好题&#xff0c;为了方便以后查阅&#xff0c;新增一个分类便于查找&#xff0c;当然本分类的题目其他分类一般都有&#xff0c;先去吃个饭&#xff0c;回来刷题解转载于…

Conan客户端简单使用示例

在https://blog.csdn.net/fengbingchun/article/details/118443862 中对Conan进行了简单介绍&#xff0c;这里调用openssl的接口&#xff0c;写一个简单的test来说明Conan的使用步骤&#xff1a; (1).首先添加一个conanfile.txt文件&#xff0c;内容如下&#xff1a;依赖项为op…

Java解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09;提供了评估语言的语法或表达式的方式&#xff0c;它属于行为型模式。这种模式实现了一个表达式接口&#xff0c;该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 意图&#xff1a;给定一个语言&…

为什么鲜有炫富的程序员?看看中国各阶级收入统计表

网上那些口口声声随随便便就能年入百万的&#xff0c;听听就行。作为开发者&#xff0c;可以不参加双11&#xff0c;但是花钱最多的地方就是买电子产品和“买课”。他们的炫富就是&#xff1a;你根本不知道有多贵的机械键盘&#xff0c;为了赚钱和幸福&#xff0c;又买了多少大…

HQL中的Like查询需要注意的地方

public List getOrgan(String organCode, String organName) { String hsql; List list; if (organCode ! null && organCode.length() > 0) { hsql "from Ab31 where bae002 ? and aab061 like ?"; list getHibernateTemplate().find…

深度神经网络中的Batch Normalization介绍及实现

之前在经典网络DenseNet介绍_fengbingchun的博客-CSDN博客_densenet中介绍DenseNet时&#xff0c;网络中会有BN层&#xff0c;即Batch Normalization&#xff0c;在每个Dense Block中都会有BN参与运算&#xff0c;下面对BN进行介绍并给出C和PyTorch实现。 Batch Normalization即…

韬光养晦的Sony AI,凭什么与Google和Facebook平起平坐?

作者 | 藏狐来源 | 脑极体&#xff08;ID&#xff1a;unity007&#xff09;伴随着感恩节气氛的日渐浓重&#xff0c;面对只剩下最后一个月份额的2019&#xff0c;奋进的、错失的&#xff0c;都已尘埃落定&#xff0c;是时候迎来盘点得失、清理思绪的冬藏时节了。整体来看&#…

Java迭代器模式

迭代器模式&#xff08;Iterator Pattern&#xff09;是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素&#xff0c;不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 意图&#xff1a;提供一种方法顺序访问一个聚合对象中各个元…

Linux下搭建高效的SVN

第一种安装方式&#xff1a;svn下载&#xff1a;http://archive.apache.org/dist/subversion/需要的包yum install gcc gcc-cyum install expat-develyum install openssl-develhttp://labs.renren.com/apache-mirror//httpd/httpd-2.2.22.tar.gz //最好用2.2版本http://subver…

通过Windows10上的VS Code打开远端Ubuntu上的项目操作步骤

Ubuntu版本要求是16.04及以上版本。这里以16.04为例。 在Ubuntu上安装OpenSSH server&#xff0c;执行&#xff1a;$ sudo apt-get install openssh-server 在Windows 10 1803上安装Windows OpenSSH Client(注&#xff1a;Windows早期版本则需要安装Git for Windows)&#xff1…

Java中介者模式

中介者模式&#xff08;Mediator Pattern&#xff09;是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类&#xff0c;该类通常处理不同类之间的通信&#xff0c;并支持松耦合&#xff0c;使代码易于维护。中介者模式属于行为型模式。 意图&#xff1a;用一个中…

那些打着AI万金油旗号的产品欺骗大众,如何识别?

作者 | Arvind Narayanan译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;如今&#xff0c;很多打着AI名号售出的产品都属于万金油系列&#xff0c;没什么实质性的功能。为什么会这样&#xff1f;我们应该如何识别这类AI&#xff1f;幻灯片上是评估性格和工…

分享一款jQuery全屏滚动页面特性案例

分享一款jQuery全屏滚动页面特性案例。我们在来往官网&#xff0c;或者小米官网都会看到全屏滚动页面的一些例子。可以说全屏滚动页面越来越受欢迎。它们就像是竖着的图片轮转一样。这样的页面有很多&#xff0c;如&#xff1a;iPhone 5C页面&#xff1a;http://www.dowebok.co…

后深度学习时代的一大研究热点?论因果关系及其构建思路

作者 | Bernhard Schlkopf译者 | Kolen编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;尽管机器学习在现阶段取得了很大成功&#xff0c;但是相比于动物所能完成的工作&#xff0c;机器学习在动物擅长的关键技术上表现不尽人意&#xff0c;比如…

Java观察者模式

当对象间存在一对多关系时&#xff0c;则使用观察者模式&#xff08;Observer Pattern&#xff09;。比如&#xff0c;当一个对象被修改时&#xff0c;则会自动通知它的依赖对象。观察者模式属于行为型模式。 意图&#xff1a;定义对象间的一种一对多的依赖关系&#xff0c;当一…

Python3中None用法

1.None是一个空值&#xff0c;空值是Python里的一个特殊值&#xff0c;用None表示。可以将None赋值给任何变量。 var None; print(var) # None if var is None:print("var has a value of None") # print else:print("var:", var) 2.None有自己的数据类型…