DeepMind&VGG提出基于集合的人脸识别算法GhostVLAD,精度远超IJB-B数据集state-of-the-art

    在人脸识别应用中,很多场景能够获取某一个体的多幅人脸图像的集合(比如在监控视频中),使用人脸图像集来做识别,这个问题被称为基于模板的人脸识别(template-based face recognition)。

对于多幅图像,当然可以使用单幅人脸图像的识别方法,综合多幅图像的识别结果确定最终的人脸识别结果,但更好的方式是直接基于人脸图像集提取特征,比较人脸图像集的特征相似性。

这涉及到如何聚合多幅人脸图像的特征向量成为一个特征向量,使该特征紧凑而又更具鉴别性的问题。

几天前公布的一篇来自DeepMind和VGG组被ACCV2018接收的论文《GhostVLAD for set-based face recognition》,正是解决这样的问题,文中提出的算法GhostVLAD在具有较高难度的大型真实场景人脸数据集IJB-B上的识别精度,远超过目前的state-of-the-art结果!非常值得参考!

作者信息:

算法原理

作者的想法非常简单,当聚合多个人脸图像特征时,现有的平均池化等方法没能考虑到人脸图像集中一些低质量的图像(比如模糊人脸)的作用,这些图像含有的信息对识别并没有太大的贡献,应该降低这些低质量图像对最终聚合特征的贡献。

一种直接的处理方法是,在人脸图像预处理阶段将低质量图像找出来,降低其贡献权重,但作者认为,端到端自动训练的方式让网络自身去优化识别并降低该部分样本的权重更好。

作者发明的算法网络结构如下:

多幅人脸图像(每次图像个数可不同)通过CNN网络提取特征并L2归一化,然后被送入聚合模块,GhostVLAD网络模块将多个人脸特征聚合称固定维数的特征矩阵(与输入图像个数无关),再通过全连接层FC、BN层和L2归一化为紧凑鉴别的特征。

其中的关键网络模块GhostVLAD既实现特征聚合,同时降低低质量图像的权重,提高高质量图像的聚合权重。

GhostVLAD是如何实现上述功效的呢?

说白了一句话,既然不要人为参与,那就要构建一种网络结构,让网络自动学习对识别不重要的信息,并丢掉它。

作者是在NetVLAD上做出的算法改进,NetVLAD可以理解为一种可微分完全可训练的VLAD编码聚合方法,它的作用大致是自动计算特征聚类中心,计算残差,然后把残差加权,构建聚合特征矩阵,整个过程方便加入到神经网络中。

在NetVLAD中,其聚合的特征矩阵中的元素计算方法如下:

其中K是NetVLAD中手工设置的聚类中心个数,xi是第i个特征向量,ck是可训练的聚类中心,ak、bk是可训练的参数控制着加权的权重。

由上述公式得知,NetVLAD中所有聚类中心ck都参与了聚合,GhostVLAD的改进则是增加聚类中心的个数到K+G,但是增加的聚类中心在构建聚合特征矩阵的时候不参与贡献权重。

如下图所示:

红色位置即标示出的Ghost 聚类中心,后续步骤中被去除,Ghost有“幻象”的意思,可能很多模糊的人脸的确看起来是“幻象”,这也是GhostVLAD名称的由来。

这些多出来的不参与聚合特征矩阵构建的Ghost聚类中心,就相当于给了神经网络丢弃一部分信息使得网络更具鉴别性的可能,而在原来的NetVLAD中是体现不出来的。

实验结果

作者首先设计的实验是比较网络加上GhostVLAD层跟不加的精度,验证其有效性,作者使用的训练集是VGGFace2。实验设置不再赘述,这里直接给出结果。

在IJB-B数据集上的1:1人脸验证结果比较如下图,取得了大幅度的精度提升。

在IJB-B数据集上的1:N人脸识别结果比较如下图,同样取得了大幅度的精度提升。

然后作者将提出的算法GhostVLAD与目前的state-of-the-art比较。

如下图中Table 3和Table 4,在IJB-A和IJB-B上比较验证和识别结果,同样所提算法精度也胜出不少,请注意作者使用的训练集比其中很多state-of-the-art算法规模要小,但依然实现性能超越!

最后作者可视化了使用GhostVLAD后对输入样本权重的影响,发现对于那些低质量模糊人脸的确权重被降低了。

总结:

该文从一个简单的直觉开始,构建了一种帮助神经网络丢弃鉴别性不足的信息的有效方式,大幅改进了基于图像集合的人脸识别方法,算法具有较高的实用价值,思想也很值得借鉴!

值得一提的是,该文中的GhostVLAD方法不仅仅适用于人脸识别,在图像检索、行人重识别等领域也同样适用。

论文地址:

https://arxiv.org/abs/1810.09951

关于代码:

可惜的是,该文目前并无开源代码,但DeepMind和VGG组都是一向乐于分享代码的,期待作者早日开源~

推荐文章

cilantro是一个精简快速的C ++库,用于处理点云数据,重点是3D案例。它包括各种常见操作的高效实现,提供干净的API并尝试最小化样板代码的数量。该库具有广泛的模板化,可以对任意数值类型和维度(如果适用)的点数据进行操作,并具有更复杂过程的模块化/可扩展设计,同时为最常见的方法提供方便的别名/包装器案例。cilantro可以在我们的技术报告中找到高级描述。支持的功能基本操作:一般尺寸kd树(使用捆绑的nanoflann)原点云的曲面法线和曲率估计基于通用维度网格的点云重采样主成分分析用于3D点云的基本I / O实用程序(采用PLY格式,使用捆绑的tinyply)和特征矩阵RGBD图像对与点云转换实用程序配对凸壳:从顶点或半空间交叉输入计算(使用捆绑的Qhull)的一般维度凸多面体表示,并允许在各个表示之间轻松切换通用(一般维度)空间区域的表示,作为实现集合操作的凸多面体的联合集群:一般维度k-means聚类,支持nanoflann支持的所有距离度量基于各种图拉普拉斯类型的光谱聚类(使用捆绑的光谱)平核均值漂移聚类基于连通分量的点云分段,支持任意逐点相似度函数模型估计和点集注册:RANSAC估计器模板及其实例,用于稳健的平面估计和刚性点云登记用于点对点和点对面度量(及其组合)的完全通用的迭代最近点实现,支持任意点要素空间中的任意对应搜索方法可视化:经典多维尺度(使用捆绑光谱进行特征分解)功能强大,可扩展且易于使用的3D可视化工具cilantro,一个用于几何和通用点云数据处理的开源C ++库。该库提供的功能涵盖了低级点云操作,空间推理,各种点云分割方法和通用数据聚类,灵活或局部几何对齐的灵活算法,模型拟合以及强大的可视化工具。为了适应各种工作流程,cilantro几乎完全模板化,其大多数通用算法都在任意数据维度上运行。同时,该库易于使用且具有高度表现力,促进了简洁的编码风格。cilantro经过高度优化,具有最小的外部依赖性,并支持在各种环境中快速开发高性能点云处理软件。

热门文章

        对数据标注行业稍微有些了解的人都知道数据标注进入门槛低,适合很多人兼职也适合创业。        正是因为数据标注行业的门槛低这个特点最近两年从事数据标注的小公司小工作室如雨后春笋般的遍布全车大大小小的县城。        但是目前有个有趣的现象,那就是有很多进入数据标注行业做了一段时间的人慢慢的感觉数据标注行业就是个坑?为什么有些人会说数据标注就是个坑呢?        其实对与有上述问题认识的人我们认为,这些人多数都是有于对这个行业对自身条件的不了解,盲目的开始进入数据标注行业的。为什么我们会这样说呢?下面就给给大家来分析下到底有哪几方面的原因:        一、有相当一部分人是听了朋友或者网上消息说这行很火爆,好做,门槛低,也有一部分人了因此租办公室买电脑招人,然后就去群里面找分发项目的人就开张干起来了。可实际上这些人他们大多数都没有充分了解数据标注行业,更没有认真仔细得去调查分析,到底自己能不能做好一个项目,到底自己能不能有质有量按时交付的完成一个项目,到底自己有没有这个能力来管理项目。更多的人也没有去用长远的眼光去考虑数据标注项目。        二、数据标注项目虽然入门门槛低,但是相当一部分有于理解认知应变能力上都不能保证去做好数据标注项目,还有一部分人由于自己对标注项目重视程度不足接到项目之后呢?不仔细认真的去阅读理解项目规则,更没有很好的对规则质检标准去培训员工,而对员工的要求主要看重每天的产出效率,从而导致接到手的项目做的质量很差,频繁的返工,有提项目甚至因为质量太烂项目方不给结算或者是结算比例很少,最终的结果就是做好些个项目但基本都是赔钱。        三、虽然业内人都 说数据标注简单,但是标注项目他也是一个系统性的工程,一个项目能不能做好并不简单的看项目好做就能赔钱。实际上决定项目赚不赚钱考验的是一个团队的项目管理水平,质量管理能力,运营能力各方面因素的。一句话再好赚钱的项目也照样有人赚钱也有人赚钱,要赚钱不是那么简单的。        四、还有些工作室 、小公司因为对行业不够了解等他们做了一段时间后发现,自己团队经常会没有项目做,而自己团队接项目的业务能力又不具备,甚至有的时候为了员工有活干去接一些价格极低根本就不赚钱的标注项目,时间稍微一长这些工作室团队就会赔上很多钱最终关门倒闭。        五、下来要说的就是一部分人人兼职人员由于认识不到位,对项目的规则质量要求 文件不认真阅读消化理解导致做的项目质量差返工有的甚至最后不结算,最终退出这行。更有一些人由于经验不足被标注行业的项目骗子给忽悠到辛苦劳动到最后结算时找不到人。        标注行业本身由于进入门槛低,做的人很行业内盲目打价格战,导致很多转手二手三手的项目在质量工期的要求下根本就不赚钱甚至赔钱,所以在这里也提醒大家做任何事都要谨慎而行。