首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >人脸识别,现在连动漫角色都不放过

人脸识别,现在连动漫角色都不放过

作者头像
量子位
发布于 2020-09-22 09:04:24
发布于 2020-09-22 09:04:24
1.2K0
举报
文章被收录于专栏:量子位量子位
萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI

看过的动漫太多,以至于认角色时有点脸盲?

又或者,只想给自己的二次元老婆剪个出场合辑,却不得不在各大搜索引擎搜索关于她的照片?

试试爱奇艺推出的这个卡通人脸识别基准数据集iCartoonFace,用它训练AI帮你找动漫素材,效率分分钟翻倍。

对于脸型相近、但角色不同的二次元人物,能准确识别出来(脸盲福音):

如果人物视角出现变化,也能准确识别:

不仅如此,在人脸被大面积遮挡时,也能准确地识别出来:

至于阴影和光照也不在话下,哪怕站在树荫里,也能被AI“侦测”:

效果完全不输现有的真实人脸识别。

那么,这样的技术是怎么做出来的呢?

结合真人数据,训练卡通人脸识别

团队提出了一种卡通和真人的多人物训练框架,主要包括分类损失函数未知身份拒绝损失函数域迁移损失函数三部分,如下图所示。

其中,分类损失函数主要用来对卡通脸和真人脸进行分类。

而未知身份拒绝损失函数,则是为了在不同域之间进行无监督正则化投影。

至于域迁移损失函数,目的是降低卡通和真人域之间的差异性,对他们的相关性进行约束。

针对这个框架,研究者们探讨了三个问题:哪种算法最好?人脸识别是否有助于卡通识别?上下文信息对卡通识别是否有用?

从实验结果来看,ArcFace+FL的效果最佳,所以此次团队选用了这个算法。

至于后两个问题的答案,也是肯定的。

从下图的蓝线来看,加上真人人脸识别的信息后,对于卡通检测的识别同样有帮助。

至于上下文信息,团队也做了实验,下图是算法在卡通人脸基础上扩充不同比例下的性能识别。实验证明,上下文信息越丰富,人脸识别的效果也会更好。

事实上,动物角色训练出来的特征样本,相比于人脸来说,还是有点诡异。

下图中分别是原图和对应的特征样本,相比于动漫男生和女生,虹猫的特征显得有点……不可捉摸。

不过这也说明,一个标准、大型的动漫人脸数据集是有必要的。

标注数据,只需要一步

为了减少人工标注的工作量,研究者们设计了一种半自动数据集构建框架,用于构建iCartoonFace数据集。

如下图,这个框架可以分为三个阶段:

首先,对数据进行分层收集。先获取卡通图片信息,包括专辑人物名称,再获取卡通人物图片,使得数据集结构非常清晰。

其次,对数据进行过滤。利用卡通人脸检测、特征提取器和特征聚类等,对图片数据进行噪声过滤。

其中,特征提取器的性能会发生变化:随着标注数据的增多,性能不断增强。

最后,标注人员只需要做一个步骤:根据特征聚类的结果,回答两张图片是否是同一个人物。

目前最大的卡通人物标注数据集

事实上,目前已有大量针对真人的人脸识别的技术和算法。

然而,针对二次元人脸识别的数据集依旧少之又少,大多数数据集存在着噪音比例大、数据量小的问题。

但这样的需求的确存在,不局限于对视频的结构化分析,还能应用于图片搜索、广告识别等场景。

例如,给创作者提供智能剪辑、或者是对恶搞的讽刺漫画、卡通风格人物进行审核辨识。

针对这个现象,爱奇艺开放了目前全球最大的手工标注卡通人物检测数据集与识别数据集iCartoonFace,包含超过5000个卡通人物、40万张以上的高质量实景图片。

下图是iCartoonFace与其他已有动漫数据集的对比,基于这个数据集设计框架,可以有效地提高卡通人物识别性能。

说不定,真能让广大观众对动漫角色“不再脸盲”。

传送门

论文链接: https://arxiv.org/pdf/1907.13394.pdf

数据集(在竞赛数据集一栏): https://iqiyi.cn/icartoonface

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

本文分享自 量子位 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
高并发之——两种异步模型与深度解析Future接口
本文有点长,但是满满的干货,以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类,希望大家踏下心来,打开你的IDE,跟着文章看源码,相信你一定收获不小!
冰河
2020/10/29
5450
Android Handler机制12之Callable、Future和FutureTask
说到Callable就不能不说下java.lang.Runnable,它是一个接口,它只声明了一个run()方法,由于这个run()方法的返回值是void的,所以在执行完任务之后无法返回任何结果。
隔壁老李头
2018/08/30
7660
Android Handler机制12之Callable、Future和FutureTask
Future FutrueTask Callable类源码说明以及原理使用
  JDK内置的Future主要使用到了Callable接口和FutureTask类。
小勇DW3
2018/08/30
5730
理解Future及FutureTask的实现
Future是一种异步计算的模式,本文带你理解一下什么是Future,以及基本的FutureTask的实现原理。
Erwin
2020/08/17
1.3K0
Future Java
Future是多线程开发中常见的一种设计模式。Future模式可以返回线程执行结果的契约,通过此契约程序可以选择在合适的时机取回执行的结果,如果取回结果时线程还没有执行完成,将会阻塞调用线程等待执行结果返回。
shysh95
2021/06/10
4430
Future Java
Callable/Future 使用及原理分析,Future .get()为啥能等待呢?
Callable/Future 和 Thread 之类的线程构建最大的区别在于,能够很方便的获取线程执行完以后的结果。首先来看一个简单的例子
源码之路
2020/09/04
5K0
Callable/Future 使用及原理分析,Future .get()为啥能等待呢?
JUC并发—14.Future模式和异步编程分析一
Future/Callable实现了一个异步执行并带有返回结果的功能。Future表示获取一个异步执行的结果,Callable表示一个异步执行的任务,Callable会产生一个结果并给到Future。
东阳马生架构
2025/05/07
1610
Java是如何实现Future模式的?万字详解!
https://github.com/yuanmabiji/jdk1.8-sourcecode-blogs
源码笔记
2020/06/26
5650
Java是如何实现Future模式的?万字详解!
异步编程 - 04 基于JDK中的Future实现异步编程(上)_Future & FutureTask 源码解析
在Java并发包(JUC包)中Future代表着异步计算结果,Future中提供了一系列方法用来
小小工匠
2023/09/07
3250
异步编程 - 04 基于JDK中的Future实现异步编程(上)_Future & FutureTask 源码解析
Java并发编程之Future与FutureTask
我们都知道实现异步可以通过Runnable接口来实现,但是Runnable接口是无法获取任务的返回值的,如果需要获取到任务的返回值,那么就需要利用Future机制了。
Java进阶之路
2022/08/03
4140
Java - Callable、Future、FutureTask说明及使用
Callable、Future、FutureTask组合使用可以阻塞获取多线程执行的返回值,是Runnable功能的拓展。
夹胡碰
2021/01/06
3450
Java - Callable、Future、FutureTask说明及使用
探索 JUC 之美---Future 与 FutureTaskFuture介绍FutureTask数据结构及核心参数源码解析小结
Future Future 表示一个任务的生命周期,是一个可取消的异步运算。提供了相应的方法来判断任务状态(完成或取消),以及获取任务的结果和取消任务等。 适合具有可取消性和执行时间较长的异步任务
JavaEdge
2018/05/16
8810
【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想
Future模式有点类似于网上购物,在你购买商品,订单生效之后,你可以去做自己的事情,等待商家通过快递给你送货上门。Future模式就是,当某一程序提交请求,期望得到一个答复。但是可能服务器程序对这个请求的处理比较慢,因此不可能马上收到答复。但是,在传统的单线程环境下,调用函数是同步的,它必须等到服务程序返回结果,才能继续进行其他处理。而Future模式下,调用方法是异步的,原本等待返回的时间段,在主调函数中,则可以处理其他的任务。传统的串行程序调用如下图所示:
YourBatman
2019/09/03
2K0
【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想
多线程基础(十三):java中的FutureTask
可以看到,FutrueTask实现了RunnableFuture接口,而RunnableFuture接口又继承了Future和Runnable。如下图:
冬天里的懒猫
2020/10/29
3290
多线程基础(十三):java中的FutureTask
不会用Java Future,我怀疑你泡茶没我快, 又是超长图文!!
现陆续将Demo代码和技术文章整理在一起 Github实践精选 ,方便大家阅读查看,本文同样收录在此,觉得不错,还请Star
用户4172423
2020/07/14
5870
Java 异步编程实战之基于 JDK 中的 Future 实现异步编程|送书
本节主要讲解如何使用JDK中的Future实现异步编程,这包含如何使用FutureTask实现异步编程以及其内部实现原理以及FutureTask的局限性。
江南一点雨
2020/01/13
1.8K1
Java 异步编程实战之基于 JDK 中的 Future 实现异步编程|送书
线程池续:你必须要知道的线程池submit()实现原理之FutureTask!
FutureTask思维导图.png 前言 上一篇内容写了Java中线程池的实现原理及源码分析,说好的是实实在在的大满足,想通过一篇文章让大家对线程池有个透彻的了解,但是文章写完总觉得还缺点什
一枝花算不算浪漫
2020/06/01
2.1K0
Java并发编程之Future与FutureTask
我们都知道实现异步可以通过Runnable接口来实现,但是Runnable接口是无法获取任务的返回值的,如果需要获取到任务的返回值,那么就需要利用Future机制了。
科技新语
2025/06/05
960
Java并发编程之Future与FutureTask
FutureTask 原理剖析
Future接口和实现Future接口的FutureTask,代表异步计算的结果,Future使用示例如下:
luoxn28
2020/11/05
1K0
FutureTask 原理剖析
【原创】Java并发编程系列36 | FutureTask
线程池源码中出现了很多Callable、Future、FutureTask等以前没介绍过的接口,尤其是线程池提交任务时总是把任务封装成FutureTask,今天就来为大家解惑:
java进阶架构师
2020/09/22
3730
【原创】Java并发编程系列36 | FutureTask
推荐阅读
相关推荐
高并发之——两种异步模型与深度解析Future接口
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档