pytorch实现人脸检测与识别_人脸识别损失函数简介与Pytorch实现

c3963ebfcb8605cde970dd152198fd32.gif

a65cfe0f372b337b8cdfd536d036a4bd.png

来自 | 知乎 作者丨Uno Whoiam 来源丨https://zhuanlan.zhihu.com/p/60747096 编辑 | 深度学习这件小事 仅 作学术交流,如有侵权,请联系 删文

一般来说,人脸识别分三步走:

  1. 找人脸:图片中找出含人脸的区域框出来
  2. 对齐人脸:将人脸的眼镜鼻子嘴巴等标出来,以此作为依据对齐人脸
  3. 识别:将对齐的人脸进行识别,判定这张脸究竟是谁

本篇要介绍的损失函数,用于第三步骤,聚焦于更准确地识别这张脸究竟属于谁,本质上属于一个分类问题。

一言以蔽之ArcFace、SphereFace、CosFace三个损失函数相对于前辈们而言,改进的一个核心思路就是:

只有平常(train)更刻苦的训练,才有可能在比赛中(test)中得到更好的结果。 

它们都对卷积神经网络提出了更高的目标,在训练阶段更为艰难,也因此让其成为了一个更好的分类器。

一、从前辈说起

首先谈谈他们的前辈:  

维基百科介绍:

Softmax函数,或称归一化指数函数[1],是逻辑函数的一种推广。 它能将一个含任意实数的K维向量      “压缩”到另一个K维实向量     中,使得每一个元素的范围都在     之间,并且所有元素的和为1。 该函数的形式通常按下面的式子给出:    

简单来说 softmax 将一组向量进行压缩,使得到的向量各元素之和为 1,而压缩后的值便可以作为置信率,所以常用于分类问题。另外,在实际运算的时候,为了避免上溢和下溢,在将向量丢进softmax之前往往先对每个元素减去其中最大值,即:

想了解更多,可以参考: 忆臻: softmax函数计算时候为什么要减去一个最大值?https://zhuanlan.zhihu.com/p/29376573

再谈谈一个容易搞混的东西: 

上面我们丢入一个长度为    的    向量,得到    ,而softmax loss呢,则是:

其中    是一个长度为    的one-hot向量,即    ,只有ground truth对应的    。所以也可以简写为:

到这里我们不妨在看看交叉熵    :

其中    是真实分布,在分类任务中,    实际上等价于上面的    。而    则是预测分布,在分类任务中    实际上等价于上面的    。这样一来进行化简就得到:

我咋觉得这么眼熟呢...

所以,我们可以得到:

参考链接: https://blog.csdn.net/u014380165/article/details/77284921

二、SphereFace

论文地址: https://arxiv.org/pdf/1704.08063.pdf

要想增强    的分类能力,其实就是要在分布上做到两点:

  1. 让同类之间距离更近

  2. 让不同类之间距离更远

不妨继续看看  :

其中    代表两个向量    之间的夹角,如果对    归一化,将偏置    置为0,即    ,则有:

下标    表示    。

对于    我们乘上一个大于等于1的整数    :

这样不仅放大了类之间的距离,也因放大了同类    与    之间的间隔而使类内更聚拢。

不过上述公式仍有问题:原来的    ,如今    超出了向量之间的夹角函数    定义域范围

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值