(原)CosFace/AM-Softmax及其mxnet代码
转载请注明出处:
http://www.cnblogs.com/darkknightzh/p/8525241.html
论文:
CosFace: Large Margin Cosine Loss for Deep Face Recognition
https://arxiv.org/abs/1801.09414
Additive Margin Softmax for Face Verification
https://arxiv.org/abs/1801.05599
第一篇论文目前无代码
第二篇论文官方代码:
https://github.com/happynear/AMSoftmax
这两篇论文第三方mxnet代码:
https://github.com/deepinsight/insightface
说明:没用过mxnet,下面的代码注释只是纯粹从代码的角度来分析并进行注释,如有错误之处,敬请谅解,并欢迎指出。
先查看sphereface,查看$\psi (\theta )$的介绍:http://www.cnblogs.com/darkknightzh/p/8524937.html
论文AM中定义$\psi (\theta )$为:
$\psi (\theta )=\cos (\theta )-m$
sphereface中只对w进行归一化,AM中对w及x均进行了归一化,不过为了使得训练能收敛,增加了一个参数s=30,最终AM如下:
${{L}_{AMS}}=-\frac{1}{n}\sum\limits_{i=1}^{n}{\log \frac{{{e}^{s\centerdot (\cos {{\theta }_{yi}}-m)}}}{{{e}^{s\centerdot (\cos {{\theta }_{yi}}-m)}}+\sum\nolimits_{j=1,j\ne yi}^{c}{{{e}^{s\centerdot \cos {{\theta }_{j}}}}}}}=-\frac{1}{n}\sum\limits_{i=1}^{n}{\log \frac{{{e}^{s\centerdot (W_{yi}^{T}{{f}_{i}}-m)}}}{{{e}^{s\centerdot (W_{yi}^{T}{{f}_{i}}-m)}}+\sum\nolimits_{j=1,j\ne yi}^{c}{{{e}^{sW_{j}^{T}{{f}_{i}}}}}}}$
程序中计算时,$s\centerdot (\cos {{\theta }_{yi}}-m)=s\centerdot \cos {{\theta }_{yi}}-sm$,分别计算$s\centerdot \cos {{\theta }_{yi}}$,sm。而后将yi处的减去sm,之后通过log softmax,得到概率,在计算损失。
具体的代码如下(完整代码请见参考网址中mxnet的代码):
1 s = args.margin_s # 参数s 2 m = args.margin_m # 参数m 3 _weight = mx.symbol.Variable("fc7_weight", shape=(args.num_classes, args.emb_size), lr_mult=1.0) # (C,F) 4 _weight = mx.symbol.L2Normalization(_weight, mode='instance') # 对w进行归一化 5 6 nembedding = mx.symbol.L2Normalization(embedding, mode='instance', name='fc1n')*s # 对x进行归一化,并得到s*x,(B,F) 7 fc7 = mx.sym.FullyConnected(data=nembedding, weight = _weight, no_bias = True, num_hidden=args.num_classes, name='fc7') # Y=XW'+b,(B,F)*(C,F)'=(B,C), '为转置 8 9 s_m = s*m # 计算s*m 10 gt_one_hot = mx.sym.one_hot(gt_label, depth = args.num_classes, on_value = s_m, off_value = 0.0) # 得到one-hot矩阵,每行对应i处值为s_m 11 fc7 = fc7-gt_one_hot # 将对应i处的减去s_m
相关文章
- java正则表达式语法详解及其使用代码实例
- 如何再window下统计自己写的代码行
- C++ 几行代码就能重载操作符模拟 cout<<123<<endl;
- Android修行手册 - ConstraintLayout代码修改约束以及辅助功能
- 腾讯云微搭低代码开发指南
- ZZNUOJ_C语言1119:一维数组排序(完整代码)
- 编程笔试(解析及代码实现):国内各大银行(招商银行/浦发银行等)在线笔试常见题目(猴子吃桃/字符串逆序输出/一段话输出字的个数/单词大小转换等)及其代码实现(Java/Python/C#等)之详细攻略
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——41~66
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40
- Database之SQL:SQL语句操作三类(数据定义语句DDL/数据操作语句DML/数据控制语句DCL/其他基本语句、流程控制语句、批处理语句)概念及其代码实现案例之详细攻略
- ML之FE:特征工程中常用的五大数据集划分方法(留1法/留p法、随机划分法、K折交叉验证法、自定义分割法、特殊类型数据分割法【时间序列数据】、自助采样法)理论讲解及其代码实现
- ML之MIC:利用某数据集计算机最大信息系数MIC并可视化MIC矩阵热图及其代码实现
- ML之ME/LF:基于不同机器学习框架(sklearn/TF)下算法的模型评估指标(损失函数)代码实现及其函数(Scoring/metrics)代码实现(仅代码)
- 温控负荷的需求响应潜力评估及其协同优化管理研究(Matlab代码实现)
- 离散粒子群算法(DPSO)求解路径规划(Matlab代码实现)
- 基于进化思想的聚类算法及其类簇融合算法(Matlab代码实现)
- 【分布式能源的选址与定容】基于非支配排序多目标遗传优化算法求解分布式能源的选址与定容(Matlab代码实现)
- 【无线通信】鲸鱼优化算法及其在无线网络资源分配中的应用(Matlab代码实现)
- 一种多源信息融合方法及其应用(Matlab代码实现)
- 基于小波变换的图像边缘检测算法的研究(Matlab代码实现)
- SpringBoot三种方式配置Alibaba Druid用于监控或者查看SQL状况:yml或properties配置;Java bean代码配置;注解配置 yml和properties的在线相互转换
- 如何在IDEA中自定义模板、快速生成完整的代码?
- CSharpGL(12)用T4模板生成CSSL及其renderer代码
- 七种交叉验证及其代码
- 从一段代码看fork()函数及其引发的竞争
- 一种多源信息融合方法及其应用(Matlab代码实现)
- 数论基础及其代码实现