Center-Loss

2024-06-16 18:48
文章标签 loss center

本文主要是介绍Center-Loss,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要

  • 这篇博客是对论文A Discriminative Feature Learning Approach for Deep Face Recognition的总结。这篇论文中,作者提出了一种新的辅助损失函数(center loss),结合 softmax交叉熵损失函数,在不同数据及上提高了识别准确率。

简介

  • 卷积神经网络在许多领域都取得了state-of-the-art的结果,包括检测,识别等。通常情况下,CNN作为特征提取器提取deep features(最后一个隐层的输出)用于之后的识别/确认。在诸如动作识别、场景识别情况下,可能的测试样本类别包含在训练集中(closed-set),这种情况下模型性能下降较小;在人脸识别中,因为我们不可能实现收集所有人的人脸图像,因此在使用中总会遇到不在训练集中的人脸,这种情况下就要求CNN提取的deep features不仅是可分的,而且要具有较高的判别度。

相关工作

  • 基于triplet loss的image pair方法
    在这种方法中,训练样本两个样本对pair_1 : (positive_1, positive_2), pair_2 : (positive_1, negative_1),训练的目标是使得pair_1之间的距离小于pair_2之间的距离。这种方法的缺点在于样本对的数量会爆炸,假设有10个人,每个人10张图片,则共有81000( C110C210C12C190 C 10 1 C 10 2 C 2 1 C 90 1 )个样本对。
  • 基于孪生网络的方法
    着这种方法中,训练时输入一对图片,标签为0或者1,0表示图片属于不同的人,1表示图片属于相同的人。训练的目标在于使得属于同一个人的图片距离尽可能小,属于不同人的图片距离尽可能大。与triplet loss相同,这种方法同样面临样本对爆炸的可能。假设有10个人,每个人10张图片,则共有900( C110C210+C210C110 C 10 1 C 10 2 + C 10 2 C 10 1 )个样本对。

提出的方法

  • 通常在用CNN做人脸识别等分类问题时,我们通常采用softmax交叉熵作为损失函数,在close-set测试中模型性能良好,但在遇到unseen数据情况下,模型性能会急剧下降。在做分类时,模型的最后一层通常是全连接(很难不用全连接而使得最后一层的维度刚好和类别数相等),可以将最后一层看做线性分类器。一个直观的感觉是:如果模型学到的特征判别度更高,那么再遇到unseen数据时,泛化性能会比较好。为了使得模型学到的特征判别度更高,论文提出了一种新的辅助损失函数,之说以说是辅助损失函数是因为新提出的损失函数需要结合softmax交叉熵一起使用,而非替代后者。两种损失函数如下所示:
    这里写图片描述
    这里写图片描述

  • 在结合使用这两种损失函数时,可以认为softmax交叉熵负责增加inter-class距离,center-loss负责减小intra-class距离,这样学习到的特征判别度会更高。

实验

  • 作者在LFW和YTF上做了对比试验,结果如下表:
    这里写图片描述

  • 从表中可以看出,在这两个数据集上,论文提出的方法取得了最高的acc。

结论

  • 虽然新提出的方法取得了良好的结果,但是也有一些不足之处,最麻烦的地方在于如何选择训练样本对。在论文中,作者也提到了,选取合适的样本对对于模型的性能至关重要,论文中采用的方法是每次选择比较难以分类的样本对重新训练,类似于hard-mining。同时,合适的训练样本还可以加快收敛速度。

引用

  1. A Discriminative Feature Learning Approach for Deep Face Recognition
  2. Linear classifier
  3. Closed set

这篇关于Center-Loss的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067254

相关文章

[linux命令] 随笔集 center OS 7 蛋疼的改动 一个菜鸟的奋斗shit~~~

2018年7月24日17:22:30 虚拟机查看ip地址  center OS 7  最小化安装. 查看ip地址:使用ifconfig已经不适用了 , 需要使用 ip addr 可以看到 关闭防火墙命令也不是 stop iptables.service 命令了,  看下百度经验吧7 关闭防火墙系列命令 关闭防火墙: systemctl stop firewalld.service

IOS并发编程——Grand Center Dispatch

并发编程往往能够提高程序的效率,在其他平台中进行并发编程往往就是多线程的编程,在IOS中同样可以进行多线程编程,但是Apple的官方文档却告诉我们,尽量不要使用原生线程,而是使用其他替代技术。为什么呢?有如下几点理由: 1、原生线程编程往往需要涉及同步,线程资源获取释放等操作,相对复杂。 2、原生多线程编程线程切换运行由人为控制,不如直接交给操作系统来管理线程效率高(操作系统会根据系统实时状况

Face Recognition简记1-A Performance Comparison of Loss Functions for Deep Face Recognition

创新点 1.各种loss的比较 总结 很久没见到这么专业的比较了,好高兴。 好像印证了一句话,没有免费的午餐。。。。 ArcFace 和 Angular Margin Softmax是性能比较突出的

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 10数据中心中的BGP

本章解答以下问题: ASN,团体(community),属性(attribute),最佳路径这些BGP术语是什么疑似?在数据中心中应该使用eBGP还是iBGP?在数据中心使用BGP时,应采用什么ASN编号方案?在数据中心使用BGP时,应如何修改BGP的计时器? BGP 基本概念 BGP协议概述 BGP 是一种路径矢量路由协议。“矢量”是一个数组或列表。因此,路径矢量路由协议是一种构建并分发

【读论文】MUTUAL-CHANNEL LOSS

论文题目:《The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification》 链接:https://arxiv.org/abs/2002.04264 来源:IEEE TIP2020 细粒度分类的主要思想是找出各个子类间的可区分特征,因此文章指出要尽早在通道上进行钻研,而不是从合并

[论文笔记]Circle Loss: A Unified Perspective of Pair Similarity Optimization

引言 为了理解CoSENT的loss,今天来读一下Circle Loss: A Unified Perspective of Pair Similarity Optimization。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 这篇论文从对深度特征学习的成对相似度优化角度出发,旨在最大化同类之间的相似度 s p s_p s

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF

本章的目的是帮助网络工程师确定网络的理想 OSPF 配置。本章将回答以下问题 应何时在数据中使用OSPF ?配置 OSPF 的关键设计原则是什么?OSPFv2 和 OSPFv3 之间有什么区别,应如何使用?如何在路由协议栈中配置 OSPF ?如何在服务器上配置 OSPF,例如为容器提供路由环境?如何使用 OSPF 来协助升级路由器软件? OSPF是最流行的IGP 目前针对IPv4协议使用

Focal Loss实现

一、序言         Focal Loss是分类常用到的损失函数,面试中也经常容易考,所以这里记录一下。 二、公式和代码         公式:         Focal Loss = -alpha*(1-pt)**gamma*log(pt)         其中alpha用来调节类别间的平衡,gamma用来平衡难例和简单例的平衡。         代码: import tor

pytorch Loss Functions

1. pytorch中loss函数使用方法示例 import torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch.autograd import Variable# 定义网络时需要继承nn.Module并实现它的forward方法,将网络中具有可学习参数的层放在构造函数__init__中# 不具有可学习参

PyTorch训练中 Loss为负数,且不断减小

在To.Tensor()中会将图像归一化,但是对于一些数据不会归一化,看看标签和数据是否在一个范围内 Pytorch1.01中ToTensor解释 Convert a PIL Image or numpy.ndarray to tensor. Converts a PIL Image or numpy.ndarray (H x W x C) in the range [0, 255] to a