CosFace中的cos loss(Large Margin Cosine Loss)实现(tensorflow)

原创 2018年04月15日 13:48:01

你要的答案或许都在这里小鹏的博客目录

paper:

CosFace: Large Margin Cosine Loss(MLCL) for Deep Face Recognition

下载地址: https://arxiv.org/pdf/1801.09414.pdf

论文中的cos loss:




cos loss 的 TF 实现:

def py_func(func, inp, Tout, stateful = True, name=None, grad_func=None):
    rand_name = 'PyFuncGrad' + str(np.random.randint(0,1E+8))
    tf.RegisterGradient(rand_name)(grad_func)
    g = tf.get_default_graph()
    with g.gradient_override_map({'PyFunc':rand_name}):
        return tf.py_func(func,inp,Tout,stateful=stateful, name=name)

def coco_forward(xw, y, m, name=None):
    #pdb.set_trace()
    xw_copy = xw.copy()
    num = len(y)
    orig_ind = range(num)
    xw_copy[orig_ind,y] -= m
    return xw_copy

def coco_help(grad,y):
    grad_copy = grad.copy()
    return grad_copy

def coco_backward(op, grad):
    
    y = op.inputs[1]
    m = op.inputs[2]
    grad_copy = tf.py_func(coco_help,[grad,y],tf.float32)
    return grad_copy,y,m

def coco_func(xw,y,m, name=None):
    with tf.op_scope([xw,y,m],name,"Coco_func") as name:
        coco_out = py_func(coco_forward,[xw,y,m],tf.float32,name=name,grad_func=coco_backward)
        return coco_out

def cos_loss(x, y,  num_cls, reuse=False, alpha=0.25, scale=64,name = 'cos_loss'):
    '''
    x: B x D - features
    y: B x 1 - labels
    num_cls: 1 - total class number
    alpah: 1 - margin
    scale: 1 - scaling paramter
    '''
    # define the classifier weights
    xs = x.get_shape()
    with tf.variable_scope('centers_var',reuse=reuse) as center_scope:
        w = tf.get_variable("centers", [xs[1], num_cls], dtype=tf.float32, 
            initializer=tf.contrib.layers.xavier_initializer(),trainable=True)
   
    #normalize the feature and weight
    #(N,D)
    x_feat_norm = tf.nn.l2_normalize(x,1,1e-10)
    #(D,C)
    w_feat_norm = tf.nn.l2_normalize(w,0,1e-10)
    
    # get the scores after normalization 
    #(N,C)
    xw_norm = tf.matmul(x_feat_norm, w_feat_norm)  
    #value = tf.identity(xw)
    #substract the marigin and scale it
    value = coco_func(xw_norm,y,alpha) * scale
    
    # compute the loss as softmax loss
    cos_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=value))

    return cos_loss 


版权声明:本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。 https://blog.csdn.net/u014365862/article/details/79948612

大裕量Softmax 损失函数--Large-Margin Softmax Loss for Convolutional Neural Networks

ICML2016 Large-Margin Softmax Loss for Convolutional Neural Networks本文针对CNN网络中的 Softmax Loss 做出改进,使...
  • cv_family_z
  • cv_family_z
  • 2016-10-17 16:10:19
  • 3093

损失函数改进之Large-Margin Softmax Loss

最近几年网络效果的提升除了改变网络结构外,还有一群人在研究损失层的改进,这篇博文要介绍的就是较为新颖的Large-Margin softmax loss(L-softmax loss)。Large-M...
  • u014380165
  • u014380165
  • 2017-08-08 08:23:24
  • 3615

人脸识别(四):2018 ArcFace: Additive Angular Margin Loss for Deep Face Recognition

本篇是人脸识别的第四篇文章: 人脸识别第一篇:Center Loss 人脸识别第二篇:SphereFace 人脸识别第三篇:CosFace 人脸识别第四篇:ArcFace 人脸识别第五篇:C...
  • u014230646
  • u014230646
  • 2018-03-08 17:47:56
  • 1447

【论文理解】ArcFace: Additive Angular Margin Loss for Deep Face Recognition(InsightFace)

论文地址:https://arxiv.org/abs/1801.07698github:https://github.com/deepinsight/insightface这篇论文基本介绍了近期较为流...
  • fuwenyan
  • fuwenyan
  • 2018-03-22 18:39:35
  • 432

【论文笔记】Large-Margin Softmax Loss for Convolutional Neural Networks

参考文献: Liu W, Wen Y, Yu Z, et al. Large-Margin Softmax Loss for Convolutional Neural Networks[C]//P...
  • shaoxiaohu1
  • shaoxiaohu1
  • 2016-11-25 21:54:36
  • 4606

large margin-人脸识别

最近新出的 角度间隔使得在lfw 数据库上能达到一个比较好的效果。 重新读了一下large margin 的文章,感觉如出一辙。 思想是一样的,要把两个有重叠的区域,尽可能的分开。 largin ma...
  • keyanxiaocaicai
  • keyanxiaocaicai
  • 2017-06-11 20:44:05
  • 507

机器学习(十七)- SVMs - Large Margin Classification

Large Margin Classification Optimization Objective 对于SVMs,我们从目标函数开始讲起,由于SVM的目标函数和逻辑回归的目标函数很相似,所以...
  • mike112223
  • mike112223
  • 2017-07-28 10:16:06
  • 582

阅读小结:Large-Margin Softmax Loss for Convolutional Neural Networks

徐博最近一直在看我博客,肯定是想看我什么时候不更新,然后好嘲笑我。当然,不排除徐博已经爱上我的可能。 What: 改进SoftmaxLoss,显式的控制类内的距离,(不让 已经对的样本score太...
  • Layumi1993
  • Layumi1993
  • 2016-09-26 21:30:26
  • 1251

人脸识别(五)2018 Face Recognition via Centralized Coordinate Learning

本篇是人脸识别的第五篇文章: 人脸识别第一篇:Center Loss 人脸识别第二篇:SphereFace 人脸识别第三篇:CosFace 人脸识别第四篇:ArcFace 人脸识别第五篇:C...
  • u014230646
  • u014230646
  • 2018-03-08 20:50:30
  • 644

《Large-Margin Softmax Loss for Convolutional Neural Networks》

机器学习中的一个任务是学习具有判别性的特征,使得类内距离较小,类间距离较大,或者说使得学习到的特征具有类内的紧致性和类间的分离性。传统的做法是利用contrastive loss,triplet lo...
  • Dilusense
  • Dilusense
  • 2017-01-20 04:44:41
  • 1083
收藏助手
不良信息举报
您举报文章:CosFace中的cos loss(Large Margin Cosine Loss)实现(tensorflow)
举报原因:
原因补充:

(最多只允许输入30个字)