Paper-info
- title : BroadFace: Looking at Tens of Thousands of People at Once for Face Recognition[ECCV-2020].
- audio : Youtube
- github : None
Motivation
对于识别任务而言,在训练模型时常常采用SGD-based方法来更新模型,而SGD-based方法均基于mini-batch,这就存在一个无法避免的问题:mini-batch的数据只包含数据集的一小部分数据【即存在数据bias】,往往无法体现数据集的整体分布情况,从而影响模型性能!
为了解决上述bug,BroadFace提出了利用辅助队列存储embedding-feature[一定数目 >> batchsize]、identity-based-center[全部的identities],在每一个iteration中可以借助更多的信息来进行模型更新,从而在一定程度上消除mini-batch带来的bias.
Core-Details
- Queuing Past Embedding Vectors
1. 当得到第N个mini-batch(N)的embedding-feature(N)之后,使用L(mini-batch(N)| theta)来更新encoder;
2. 对于fully connect layer而言,则使用 L(EQ、WQ、embedding-feature(N) | W) 来更新 FC-layer;
3. EQ.pop(), EQ.push(mini-batch(N));
4. WQ.pop(), WQ.push(W(N));
- Compensating Past Embedding Vectors
- 考虑到随着迭代的进行EQ中队首[早期入队]的那些embedding-features跟队尾[新入队]的embedding-features在特征空间中会出现conflict{体现在:encoder 在迭代更新的不同阶段对同一个identity的同一张image编码后feature在特征空间中有比较大的差异!},所以不能直接使用EQ中所有的embedding-fetures,而应该首先消除(Compensating) 早前入队的embedding-features,然后再用它们进行FC-layer权重参数的update。
- 对于补偿函数 rho(y),作者使用启发式的均方误差函数:
- 经过简单推导,可知补偿函数为:
- 从而过往embedding-features的修正格式应为:
- Learning from Numerous Embedding Vectors
- encoder参数更新只使用当前mini-batch数据信息;
- classifier参数更新,使用 EQ、当前mini-batch的信息;
Pipeline
Experiment(MS1M-Clean)
- LFW / YTF / CALFW / CPLFW / CFP-FP / AgeDB-30
- MegaFace / IJB-B / IJB-C
Comment
- 与FaceNet、CosFace、ArcFace等系列工作不同,BroadFace属于“硬涨点”的trick;
- 在training环节维护EQ、WQ两个队列,借助EQ中的embedding-feature信息,实现“一眼千面”;
- 在inference环节,与常规FR模型一致!