二次元会让人脸识别失效吗?
来源 | PyTorch 开发者社区
责编 | 寇雪芹
头图 | 下载于ICphoto
人脸识别也遇到坑了,识别得了三次元,却对二次元无效。迪士尼的技术团队,正在开发这一算法,以帮助动画制作者进行后期搜索。团队利用 PyTorch,效率得到很大的提高。
1923 年成立的商业帝国迪士尼以动画起家,至今引领着全球动画电影的发展。每一部动画电影的背后,都凝结了数百人的心血与汗水。自第一部电脑3D动画《玩具总动员》的上映,迪士尼就开启了数字化动画创作的征程。随着 CGI、AI 技术的发展,迪士尼动画电影的制作、存档等方式也发生了极大的变化。
火遍全球的《疯狂动物城》历时五年制作完成
目前,迪士尼也吸收了一大批计算机科学家,他们正在用最前沿的技术,改变内容创作的方式,减轻电影幕后制作者的负担。
百年电影巨头,如何进行数字化内容管理
据了解,在华特迪士尼动画工作室中,大约有来自 25 个不同国家的 800 多名员工,包括艺术家、导演、编剧、制片人以及技术团队。
制作一部电影,需要经历从灵感产生,到故事大纲撰写,再到剧本拟定,美术设计,人物设计,配音,动画效果,特效制作,剪辑,后期等诸多复杂流程。
截至 2021 年 3 月,仅专业制作动画电影的华特迪士尼动画工作室已制作并上映了 59 部长篇动画,这些电影中的动画形象加起来就有成百上千个。
历史动画角色的相关素材数据,会在续集、彩蛋、参考设计时被高频使用
动画师在进行续集制作、或想参考某一角色时,需要在海量的内容档案库中,寻找特定角色、场景或物体。为此,他们往往需要花费数小时来观看视频,纯靠肉眼从中筛选自己需要的片段。
为了解决这个问题,迪士尼从 2016 年起,就开始了一项叫做「Content Genome」的 AI 项目,旨在创建迪士尼数字内容档案,帮助动画制作者快速、准确地识别动画中的面部(无论是人物或是什么物体)。
训练动画专用人脸识别算法
数字化内容库的第一步,是将过往作品中的内容进行检测与标记,方便制作者以及用户搜索。
人脸识别技术已经比较成熟,但是,同一套方法,能否用于动画中的面部识别呢?
Content Genome 技术团队进行试验之后,发现只在某些情况下可行。
他们选取《阿瓦勒公主埃琳娜》和《小狮王守护队》两部动画电影作品,手动注释了一些样本,用正方形标出数百帧影片中的面孔。通过该手动注释数据集,团队验证了基于 HOG + SVM pipeline 的人脸识别技术,在动画面孔(尤其是类人脸和动物面孔)中的表现不佳。
手动标注出动画形象的面部
团队分析后确认,像 HOG + SVM 这样的方法对于颜色,亮度或纹理变化具有鲁棒性,但所使用的模型只能匹配具有人类比例的动画角色(即两只眼睛,一只鼻子和一张嘴)。
此外,由于动画内容的背景通常具有平坦的区域和很少的细节,所以,Faster-RCNN 模型会错误地把简单背景下脱颖而出的所有事物,都认作是动画面孔。
《汽车总动员》中,两位「赛车」主角较为抽象的面部,就无法用传统的人脸识别技术进行检测与识别
因此,团队认为他们需要一种能够学习更抽象的人脸概念的技术。
团队选择用 PyTorch 训练模型。团队介绍道,通过 PyTorch,他们可以访问最先进的预训练模型,满足其训练需求,并使归档过程更高效。
训练过程中,团队发现,他们的数据集中,正样本是足够的,却没有充足的负样本来训练模型。他们决定使用不包含动画面孔、但具有动画特征的其他图像,来增加初始数据集。
在技术上为了做到这一点, 他们扩展了 Torchvision 的 Faster-RCNN 实现,以允许在训练过程中加载负样本而无需注释。
这也是团队在 Torchvision 核心开发人员的引导下,为 Torchvision 0.6 做出的一项新功能。在数据集中添加负样本示例,可以在推理时大大减少误报,从而得到出色的结果。
用 PyTorch 处理视频,效率提升 10 倍
实现动画形象的面部识别之后,团队的下一个目标是加快视频分析流程,而应用 PyTorch 能够有效并行化并加速其他任务。
团队介绍道,读取和解码视频也很耗时,因此团队使用自定义的 PyTorch IterableDataset,与 PyTorch 的 DataLoader 结合使用,允许使用并行 CPU 读取视频的不同部分。
视频被提取的 I-frames,被分割成不同的块(chunks),每个 CPU worker 读取不同的块
这样的读取视频方式已经非常快了,不过团队还尝试只通过一次读取就完成所有计算。于是,他们在 PyTorch 中执行了大部分 pipeline,并考虑了 GPU 的执行。每一帧只发送给 GPU 一次,然后将所有算法应用到每一个 batch 上,将 CPU 和 GPU 之间的通信减少到最小。
团队还使用 PyTorch 来实现更传统的算法,如镜头检测器,它不使用神经网络,主要执行颜色空间变化、直方图和奇异值分解(SVD)等操作。PyTorch 使得团队能以最小的成本将计算转移到 GPU,并轻松回收多个算法之间共享的中间结果。
通过使用 PyTorch,团队将 CPU 部分转移到 GPU 上,并使用 DataLoader 加速视频阅读,充分利用硬件,最终将处理时间缩短了 10 倍。
团队的开发者总结道,PyTorch 的核心组件,如 IterableDataset,DataLoader 和 Torchvision,都让团队得以在生产环境中提高数据加载和算法效率,从推理到模型训练资源到完整的 pipeline 优化工具集,团队都越来越多地选择使用 PyTorch。
相关文章:

基于第四层交换技术的负载均衡
摘 要 本文介绍了第四层交换技术的概念,技术原理以及如何使用第四层交换技术实现远程教育系统中的应用服务器负载均衡。 作者: 凌仲权,现就读于西安电子科技大学,2001级硕士研究生。主要的科研方向为计算机网络技术研究以及远程教…

開始Unity3D的学习之旅
前言:这个系列的文章纯属对自己学习的整理,非高手之作。但确实的记载了我作为一个没接触过3D游戏编程的大学生的心路历程。争取每周整理一次吧。之所以会開始学Unity3D,最基本的原因是由于在快放暑假的时候,我找了一家做iPhone游戏…

linux 定时任务crond
1.定时任务crond 1.1 crond是什么 crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。 为什么要使用crond定时任务: linux系…

用C#去除代码的SourceSafe管理
经常看一些的程序,有些一个解决方案带有多个项目,由于代码比较多,多人开发,所以好多vs.net下的工程是用source safe进行版本控制的。而用source safe进行版本控制需要局域网路径共享,因此好多项目换一台机器打开会出现…

用jarsigner对android apk进行签名
以前对apk重新打包签名都是用的apktool里面的Auto-sign 工具,后来发现有时候利用该工具对一些apk签名会失败,所以后来就使用 jarsigner这个工具,现记录一下这个工具的使用方法1 首先要生成一个自己的keyD:\>keytool -genkey -alias myKey…

利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上的疏散耦合,而非…

C#操作消息队列
public class QueueManage { /// /// 发送对象到队列中 /// /// 队列名称,因为队列名称在一个应用中应该不改变的,所以大家最好写在配置文件中 /// 要发出去的对象 public static void SendQueue(string QueuePath,MyBase.SmsQueue sq) { Syste…

2021《程序员》数字科技企业研发实力榜TOP50
互联网的盛行带来了众多数字科技企业的崛起,但如何客观地衡量每家企业的技术实力?研发投入、研发人才的数量和人才密度是关键指标。2021年5月,《程序员》根据相关企业披露的财报数据及市场调研数据,整理发布“2021数字科技企业研发实力榜TOP5…

eclipse中java项目转换为web项目
2019独角兽企业重金招聘Python工程师标准>>> 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目,有过很多次经历,今天也有同事遇到类似问题,就把这个解决方法记下来吧&#x…

MySQL · 引擎介绍 · Sphinx源码剖析(三)
在本节中我会介绍Sphinx在构建索引之前做的一些事情,主要是从mysql拉取数据保存,然后分词排序保存到内存等等一系列的操作。下面是几个相关指令 sql_query \SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, \title, content \FROM doc…

C#给图片添加版权信息
现在越来越多的网站都喜欢将用户上传的图片加上网站的版权信息,不要以为那是用photoshop之类的图片处理软件加上去的,其实我们只要写一小段代码,就可以实现这个功能。 添加版权信息的原理其实挺简单:通过图片获取Graphics类的对象…

Python + 爬虫:可视化大屏帮你选粽子
来源 | 数据分析与统计学之美头图 | 下载于ICphoto端午节快要到了,旅游?回家?拜访亲友?少不了要带上粽子。那么,选择什么牌子的粽子呢?选择什么口味的粽子呢?选择什么价格区间呢?今年…

adviser vs mentor
研究生或博士生提到自己导师的时候是说adviser呢?还是mentor呢? 至少我认识一个Berkeley的博士是说adviser的。 另外,我的导师也是说adviser。 那还是说adviser吧……

T extends Serializable这是什么意思呢?看明白这个,你的问题就自然而然的明白了!...
1.转自:https://blog.csdn.net/liwenqiang758/article/details/8131185 自己动手丰衣足食!!! 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 这种参数类型可以用在类、接口和方法的创建中&a…

C#中switch语句注意
大家肯定对switch语句并不陌生,它能够让程序根据控制表达式的值,从多个动作中作出选择(从逻辑过程看,和多分支语句if-else有些相似)。在C和java中也有这一语句,不过在C#中,这一语句则有了些变化。先看下边一…

对Cost (%CPU) 粗略的理解
今天研究执行计划,看到执行计划里面有Cost (%CPU),我这边研究了一把,不知道对与否,拿出来晒晒在Oracle 10g中,Oracle 把CPU的cost也统计在执行计划中去了, 这和以前的8i,9i(9i其实已经开始了)有很大的不同。…

后疫情时代,RTC期待新的场景大爆发
整理 | 寇雪芹头图 | 下载于ICphoto出品 | AI 科技大本营(ID:rgznai100) 过去的一年中,新冠疫情悄然改变了社会发展和人们的生活,也助推了实时音视频(Real-Time Communication)技术的落地应用,数…

JS-DOM-元素节点
查看元素节点: 1、getElementById():通过 id 取到唯一节点;如果 id 重名,只能取到第一个 getElementByName(): 通过name属性 getElementByTagName(): 通过标签名 getElementByClassName(): 通过class名 获取元素节点时,一定要注意:获取节点的语句,必须在 DOM 渲染完成之后执行。…

现代软件工程 第十章 【典型用户和场景】 练习与讨论
1. 讨论:下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2. 是否要文档 有人说,我们敏捷的团队,就喜欢直接的面对面的交流࿰…

赠书 | 读懂生成对抗神经网络 GAN,看这文就够了
生成对抗神经网络(Generative Adversarial Nets,GAN)是一种深度学习的框架,它是通过一个相互对抗的过程来完成模型训练的。典型的GAN包含两个部分,一个是生成模型(Generative Model,简称G&#…

把Doc文档转换成rtf格式
先在项目引用里添加上对Microsoft Word 9.0 object library的引用。 using System; namespace DocConvert { class DoctoRtf { static void Main() { //创建一个word的实例 Word.Application newApp new Word.Application(); // 指定源文件和目标文件 object Source&quo…

中国书法的造型元素与原理 刘彦湖
为什么80%的码农都做不了架构师?>>> --------------------------------------------------------------------------------中国书法的造型元素与原理 刘彦湖 中国书法是用最基本的元素遵从中国人特有的形式原则建构起来的大厦。 对于元素及其品质的认…

融云任杰:强互动,RTC 下一个“爆点”场景 | 拟合
从无序中寻找踪迹,从眼前事探索未来。2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

推荐一个个人感觉比较有吸引力的网站
2019独角兽企业重金招聘Python工程师标准>>> 廖雪峰的官方网站 转载于:https://my.oschina.net/AaronCN/blog/294293

C# 2进制、8进制、10进制、16进制...各种进制间的轻松转换
在.NET Framework中,System.Convert类中提供了较为全面的各种类型、数值之间的转换功能。其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32(string value, int fromBase): 可以把不同进制数值的字符串转换为数字&#x…

solrj操作单机solr
2019独角兽企业重金招聘Python工程师标准>>> 在目前的生产过程中全文检索技术应用越来越广,其中涌现了一批非常好得开源搜索引擎框架,如solr,elasticsearch等等。其中我工作使用最多的是solr,并在此对之前工作做一个总结。 solr的…

基于微软开源深度学习算法,用 Python 实现图像和视频修复
作者 | 李秋键编辑 | 夕颜出品 | AI科技大本营(ID:rgznai100)图像修复是计算机视觉领域的一个重要任务,在数字艺术品修复、公安刑侦面部修复等种种实际场景中被广泛应用。图像修复的核心挑战在于为缺失区域合成视觉逼真和语义合理的像素&…

C#实现光盘做启动盘
一 :编程思想 1、创建启动盘 插入要创建的启动盘,程序自动检测光驱中光盘,利用WMI(Windows管理架构:Windows Management Instrumentation)读取该光盘的序列号(具有唯一性)…

为云服务立规矩——首批可信云服务认证名单公布
俗话说,没有规矩不成方圆。在云服务蓬勃发展的今天,无论从规范行业发展,还是为用户提供保障,推动政府云服务采购的角度来说,云服务市场都需要立规矩。7月15日至16日,以“可信中国云,未来新生态”…