1. DeepFace:Closing the Gap to Human-Level Performance in Face Verification
最早将深度学习用于人脸验证的开创性工作。Facebook AI实验室出品。动用了百万级的大规模数据库。典型的识别信号提特征+验证信号refine的两步走,对DeepID等后人的工作影响很大。
技术概括
-
- 关注了人脸验证流程中的人脸对齐步,采用了比较复杂的3D人脸建模技术和逐块的仿射变换进行人脸对齐。可以解决non-planarity对齐问题。
- 提出了一个9层(其实是8层)的CNN进行特征提取。提出了一种针对对齐后人脸的的locally connected layers,无权值共享。
- 用CNN提取的特征继续进行metric learning,包括卡方距离学习和siamese network两种方法。
一些值得反思的细节
-
- CNN的结构:conv-->pooling-->conv-->3 locally connected layers-->2 fc。由于最后5层都没有权值共享,所以会造成参数膨胀,共有超过1.2亿个参数,其中95%都来源于最后5层。但locally connected layers相比原始的conv计算速度是一样的。因为动用了目前看来也是惊人的4000人的400百万幅图像,所以没有出现明显的过拟合。
- 单个CNN最后提取的特征维数是4096。
- 3D对齐的步骤是:找6个landmarks-->进行2D对齐-->重找6个landmarks-->重进行2D对齐……直到收敛-->找67个landmarks-->3D-2D映射建模-->逐块仿射变换变成正脸。此处水很深,实现起来较复杂,而且后续的论文都没有再用如此复杂的对齐手段也能得到非常好的结果,不建议复现。但对比实验表明3D对齐的作用还是很大的,可能是和采用的算法有关系吧,比如针对3D对齐定制的locally connected layers。
- pooling只使用一次,担心信息损失太多。
- 只对第一个fc layer采用了dropout。
- CNN提取完的特征还要进行两次归一化。第一次是每个分量除以训练集中的最大值,第二次是l2归一化。此步似乎多余,也没有足够的理论和实验支撑,又回到了人工特征的老路。归一化本身是一种降低特征之间差异的手段,不一定就可以增强discriminative ability,应该慎重使用。
- CNN学习出特征后,还需要用某种相似度来做验证。文中采用了两种比较简单的相似度:加权卡方距离和加权L1距离。权重分别通过SVM和siamese network学习到。这一步一般是进行迁移学习。
- 相似度量学习到后,还要训练一个SVM对两两距离做2分类,判断是否是同一个人。
- 数据库:4030个人,每人800-1200幅图像,4百40万幅图像。
- 10种网络的距离结果ensemble,累加kernel matrix,再用SVM对距离做分类,判断是否是同一个人。
- 通过牛逼的工程优化,在2.2GHz单CPU上可做到CNN0.18秒,对齐0.05秒,全部0.33秒。
2. Deep LearningFace Representation from Predicting 10,000 Classes
汤晓鸥团队DeepID系列的开创之作。也是典型的两步走策略。