人脸识别之数据和网络结构

更新了一部分对网络结构的尝试

针对于移动端的神经网络结构,我觉得要关注的有两个方面,一个是设计表达能力较强的网络,另一个是模型压缩,关于模型压缩的内容可以参考我之前的文章,这里我想说的是网络结构。目前CNN主要分为卷积层和全连接层,而卷积层的计算量又很大,所以我们考虑的寻找表达能力强并且计算量小的卷积,学术界和工业界已经在这方面做了很多探索比如group convolution, depthwise separable convolution, point-wise convolution等等,具体可以参见网上资料或者是mobilenet和shufflenet,我觉得手机端的网络由于内存等限制可以选择10-20层的网络,并且不需要考虑ResNet之类的结构,如果能根据你的任务进一步修改是更好的。此外移动端还需要的是一个有效的前向传播框架诸如腾讯的NCNN和百度的MDL,我们也在其上做了进一步的优化,目前测试结果比NCNN快五倍左右。

----------------------------------------分割线------------------------------------------------------------------------

最近做了点人脸方面的工作,把自己的一些感受记录在这里和大家分享下。

我觉得人脸识别关键是为了得到泛化能力强的feature,而目前我比较关注的是移动端的人脸识别,所以我认为人脸识别需要关注的点主要包括三个部分:数据集,网络结构,损失函数。下面我分开来说说

对于数据集来说我们一般认为是样本越多越好,其实这句话对也不对,因为我们收集的数据集可能存在噪声(有的类别中的样本明显不属于这个类)和分布不平衡(有的类别样本数很多,有的类别样本数很少)等情况,所以我们要做一些预处理,首先对于噪声而言我们需要滤掉错误的样本,我们可以选取用外部数据或者是该数据集中的部分数据来计算样本之间的样本相似性来滤掉错误的样本,需要注意的是要求样本是比较干净的。这里我们还可以保留一些预测错误但是其预测值比较高的样本,原因我会再接下来说明。还有一定程度的脏的数据对于训练是有益的,我觉得可以看做是为了提高泛化能力吧。

其次对于分布不平衡来说,常见的方法是降采样和过采样以及给不同的类别加权重等,但是上述方法有一定的局限性,降采样和过采样会导致重复计算和加大过拟合的可能性,而加权重的话需要不断的人工调整,费时费力。我采用的方法是加入一定比例的的long tail 数据,这样对整个训练来说是有益,但是这个比例也需要人工去实验,[1]中针对分布不平衡问题在损失函数做了改进,认为long tail data中类内距离最远的样本为hard sample,通过约束hard sample来处理分布不平衡的问题。

我认为数据平衡重要,但我们更应该去关注数据中的hard sample,所以这里不同类别加权中也需要仔细考虑了。我们用softmax训一个人脸模型,发现前期训练收敛很快,但是到后期的时候大量样本的准确率都在0.99以上,这时回传的梯度就很小了,无法再指挥网络训练了,这时候我们就需要更为hard的样本来提高模型的泛化能力。加入hard sample之后训练的精度可能不会上升,但是泛化的能力会增强,所以训练的时候不能只关注损失函数下降了多少。此外trplet loss, contrastive loss等损失函数也包含了hard sample的含义,我会在之后的文章中解释。

1.[1611.08976] Range Loss for Deep Face Recognition with Long-tail

未完待续,敬请期待,如有错误,欢迎指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值