本文主要讲centerloss 的原理,及其创新点。然后用caffe 跑自己的数据(CASIA-WebFace | MsCelebV1-Faces-Aligned)
Reference paper:A Discriminative Feature Learning Approach for Deep Face Recognition ECCV:2016
github:https://github.com/ydwen/caffe-face
简介
一句话:通过添加center loss 让简单的softmax 能够训练出更有内聚性的特征。
作者意图,在配合softmax适用的时候,希望使学习到的特征具有更好的泛化性和辨别能力。通过惩罚每个种类的样本和该种类样本中心的偏移,使得同一种类的样本尽量聚合在一起。
相对于triplet(Google FaceNet: A Unified Embedding for Face Recognition and Clustering:2015)和contrastive(汤晓鸥Deep LearningFace Representation by Joint Identification-Verification:2014)来说,这个目标其实相对‘清晰’, 所以网络收敛的速度甚至比仅仅用softmax更快,而且不需要像前两者那样构造大量的训练对。
我们来看一张图:
在左图中,我们发现一个类如果太胖,那么出现的结果就是类内距离>类间距离。(任意红点之间的距离应该小于红蓝之间的距离。)
左边时softmax一般结果,右边时centerloss结果。我们期望特征不仅可分,而且时必须差异大。如右边图。
centerloss
其中:xi 代表 d 维空间中第 i 个deep feature。属于第 yi 类。
d——特征空间的维度。
W——全连接层的参数矩阵。W={d*n}。d行n列。联想线性分类器 f=Wx+b。
Wj——W的第j 列
m——The size of mini-batch 。
n——and the number of class。
b——偏置。
我们将问题简化(人不要为难自己,看一大堆烂公式,还不明白,代个数试试呗)
假设我们的batch=1. 也就是m=1. 数据集就一样图片。那么我们的公式就是简化成:
我们这个公式是不是非常像softmax function(去掉-log)。参见上一篇博客。
我还是一图解千言吧:
我们发现,这个softmax的损失仅仅与正确那项的概率相关。
运行截图:
验证
在lfw上验证结果:
这个图片回答了:batch_size 对于训练收敛速度有没有影响。
我们看到bath_size 大的情况下。虽然每次迭代时间消耗比batch_size =70 的时候大。但是batch_size =256的情况下。下降的更加稳健。比较少的出现波动。另外,对于最终的对于测试LFW精确率有一定的影响。
小结
【注】对于深度学习,数据成为核心,那么这个实验的核心也是数据的预处理。
LFW的数据处理应该与CASIA数据集处理方式相同。
其中检查自己的数据处理方式好不好的一个直接有效的方式是:
【1】LFW中有很多图片包含多人脸。你的算法是不是裁剪的图片正中心的那个人?
【2】Alignment做的怎么样?很明显最后一张对齐有问题。
我这里给大家提供一个已经裁剪好的LFW用来测试:http://pan.baidu.com/s/1kVzA599
宏观感受
先来看看作者对一个刚从github上拉下来的caffe做了哪些改动。
step1: 修改caffe.proto
vim caffe/src/caffe/proto/caffe.proto
图为未修改之前LayerParameter的配置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
最近一周会更新完毕!!