机器之心|36万类别、1800万图像,国内机构创建全球最大人脸数据集


机器之心报道
机器之心编辑部
这项研究基于现有公开人脸数据集创建了目前全球最大的人脸数据集 , 并实现了一个高效的分布式采样算法 , 兼顾模型准确率和训练效率 , 只用八块英伟达 RTX2080Ti 显卡就可以完成数千万人脸图像的分类任务 。
人脸识别是计算机视觉社区长期以来的活跃课题 。 之前的研究者主要关注人脸特征提取网络所用的损失函数 , 尤其是基于softmax的损失函数大幅提升了人脸识别的性能 。 然而 , 飞速增加的人脸图像数量和GPU内存不足之间的矛盾逐渐变得不可调和 。
最近 , 格灵深瞳、北京邮电大学、湘潭大学和北京理工大学的研究者深入分析了基于softmax的损失函数的优化目标 , 以及训练大规模人脸数据的困难 。 研究发现 , softmax函数的负类在人脸表示学习中的重要性并不像我们之前认为的那样高 。 实验表明 , 在主流基准上 , 与使用全部类别训练的SOTA模型相比 , 使用10%随机采样类别训练softmax函数后模型准确率未出现损失 。
该研究还实现了一个高效的分布式采样算法 , 兼顾模型准确率和训练效率 , 而且只用八块英伟达 RTX2080Ti 显卡就完成了数千万人脸图像的分类任务 。 为了验证该算法的效果和稳健性 , 研究人员清洗和合并了现有的公共人脸数据集 , 得到目前最大的公共人脸识别训练数据集Glint360K 。
机器之心|36万类别、1800万图像,国内机构创建全球最大人脸数据集
本文插图

论文地址:https://arxiv.org/pdf/2010.05222.pdf
代码地址:https://github.com/deepinsight/insightface/tree/master/recognition/partial_fc
数据集规模
Glint360K数据集包含36万类别的1800万张图像 , 不论是类别数还是图像数 , 相比MS1MV2数据集都有大幅提升 。
机器之心|36万类别、1800万图像,国内机构创建全球最大人脸数据集
本文插图

Glint360K数据集的类别数和图像数比主流训练集加起来还要多 。
数据集表现
据研究者介绍 , 利用该数据集很容易在学术界的测评(比如IJB-C和megaface)上刷到SOTA 。
下表展示了IFRT上的结果(IFRT又称国产FRVT, IFRT测试集主要由不同肤色的素人构成 , 相比IJB-C和megaface更具有模型的区分度):
机器之心|36万类别、1800万图像,国内机构创建全球最大人脸数据集
本文插图

相比目前最好的训练集MS1M-V3 , Glint360K有十个点的提升 。
如何训练大规模数据
人脸识别任务的特点是数据多、类别大 , 几百万几千万类别的数据集在大公司也非常常见 , 例如2015年Google称他们有800万类别的人脸训练集 。
训练如此规模的数据时 , 很直接的一种方法就是混合并行 , 即backbone使用数据并行 , 分类层使用模型并行 , W(softmax线性变换矩阵) 分卡存储 。 该方法具备两个优点:1)缓解了 W 的存储压力 。 2)将 W 梯度的通信转换成了所有GPU的特征 X 与 softmax 局部分母的通信 , 大大降低了数据并行带来的通信开销 。
这种方法看似可以训练无限的类别(增加GPU的个数就好了) , 但是实际上大家在尝试更大规模、更多机器的时候 , 会发现显存不够用了 , 好像增加类别数的同时增加机器 , 单个GPU的显存还在增长?其实我们忽略了另外一个占据显存的张量:logits 。
首先定义 logits = X_w , 其中 w 为存储在每张GPU上的子矩阵 , X 为经过集合通信 Allgaher 收集到的全局特征 , d 为特征的维度大小 , C 为总的类别数 , k 为GPU的个数 。 其中每块GPU中 w 占用的显存为:
机器之心|36万类别、1800万图像,国内机构创建全球最大人脸数据集
本文插图

通过这个公式我们发现 , 即使有更多的类别数 , 只要增加GPU的个数 , 就可以维持 w 占用的显存不变 。 我们再看 logits , 假设每张卡上的批次大小为 N , 则对于分类层的总批次大小为 kN, 每块GPU中 logits 占用的显存为:


推荐阅读