人脸识别之AM-Softmax

论文:Additive Margin Softmax for Face Verification

在此篇论文中,作者提出了新的损失函数,AM_softmax。嗯,我们可以把AM-softmax看做是对A-softmax损失函数的改进,两者是很相似的,我刚写过A-softmax的博客,详情请点击这里。两者最大的不同之处在于:A-softmax是用margin m与相乘,而AM-softmax的margin则是,一个是角度距离(angular margin),一个是余弦距离(cosine margine)。当用传统的softmax作为损失函数的时候,角度距离和余弦距离是等价的,即:,但是当试着去推动边界的时候,余弦距离和角度距离就不再等价了。

回顾一下A-softmax损失函数,公式表示如下:

其中,,m通常是一个大于1的整数,是一个表示推动分类边界难度的超参数。相比较而言,AM-softmax定义更加简单和直观,。为了提高收敛速度,作者又引进一个超参数s,所以AM-softmax的最终形式为:

 

作者对additive margin做了一个直观的分析,用了一个二维特征作为例子,如图1所示,对一个具有二维的特征,正则化后,特征被表示在一个圆中,传统softmax的决策边界即是向量,那么;而AM-softmax是以决策区域替代决策边界,对于类别1的边界为向量,定义W_{1}^{T}P_{1}-m=W_{2}^{T}P_{1}, 那么。更进一步假设所有的类别都具有相同的方差,是类别2的边界向量,那么,所以

图1:传统softmax的决策边界和AM-softmax的决策边界

作者还提出,特征是否正则化处理还取决于图片的质量,高质量的图片提取出来的特征范数比较大,低质量的图片提取出来的特征范数小,那么特征正则化(feature normalization)后,在后向传播的时候,低质量的图片特征会产生更大的梯度,也会获得网络更多的注意力,如下图所示,因此,对于低质量图片的数据集,特征正则化是最适合的。也因此设置s=30。

 

 

 

发布了55 篇原创文章 · 获赞 120 · 访问量 12万+
展开阅读全文

在学习人脸识别运用keras的过程中出现了问题

05-10

本人在尝试学习"http://www.cnblogs.com/neo-T/p/6477378.html" 此博客提供的人脸识别代码 遇到了以下问题,不知该怎么解决 ``` WARNING:tensorflow:Variable *= will be deprecated. Use variable.assign_mul if you want assignment to the variable value or 'x = x * y' if you want a new python Tensor object. Epoch 1/10 Traceback (most recent call last): File "E:/python/python3.64/python代码练习/人脸识别/face_train_use_keras.py", line 189, in <module> model.train(dataset) File "E:/python/python3.64/python代码练习/人脸识别/face_train_use_keras.py", line 179, in train validation_data=(dataset.valid_images, dataset.valid_labels)) File "E:\python\anaconda\anaconda\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "E:\python\anaconda\anaconda\lib\site-packages\keras\models.py", line 1315, in fit_generator initial_epoch=initial_epoch) File "E:\python\anaconda\anaconda\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "E:\python\anaconda\anaconda\lib\site-packages\keras\engine\training.py", line 2268, in fit_generator callbacks.on_epoch_end(epoch, epoch_logs) File "E:\python\anaconda\anaconda\lib\site-packages\keras\callbacks.py", line 77, in on_epoch_end callback.on_epoch_end(epoch, logs) File "E:\python\anaconda\anaconda\lib\site-packages\keras\callbacks.py", line 339, in on_epoch_end self.progbar.update(self.seen, self.log_values) AttributeError: 'ProgbarLogger' object has no attribute 'log_values' ``` 我清楚ProgbarLogger内没有log_values的属性的意思,但是因为刚开始接触,不知道应怎样改动 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览