首页 > 其他分享 >『论文笔记』基于度量学习的行人重识别方法中损失函数总结!

『论文笔记』基于度量学习的行人重识别方法中损失函数总结!

时间:2022-12-20 22:03:27浏览次数:58  
标签:loss 识别方法 样本 笔记 三元组 损失 距离 图片 度量


基于度量学习的行人重识别方法中损失函数总结!

文章目录

  • ​​一、对比损失(Contrasive loss)​​
  • ​​二、三元组损失(Triplet loss)​​
  • ​​三、改进三元组损失(Improved triplet loss)​​
  • ​​四、难样本采样三元组损失(Triplet loss with batch hard mining, TriHard loss)​​
  • ​​五、四元组损失(Quadruplet loss)​​
  • ​​参考文献​​

一、对比损失(Contrasive loss)

  • 对比损失(​​Contrasive loss​​​)用于训练孪生网络(​​Siamese network​​​)『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数。孪生网络的输入为一对(两张)图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_02『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_03,这两张图片可以为同一行人,也可以为不同行人。 每一对训练图片都有一个标签 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_04, 其中 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_05 表示两张图片属于同一个行人(正样本对),反之 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_06 表示它们属于不同行人(负样本对)。之后, 对比损失函数写作:

『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_07

  • 其中:『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_08 是根据实际需求设置的训练阈值参数,『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_09


二、三元组损失(Triplet loss)

  • 三元组损失『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_10 是一种被广泛应用的度量学习损失,之后的大量度量学习方法也是基于三元组损失演变而来。顾名思义,三元组损失需要三张输入图片。和对比损失不同,一个输入的三元组(Triplet) 包括一对正样本对和一对负样本对。三张图片分别命名为固定图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_11,正样本图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_12 和负样本图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_13。 图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_14 和图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_15 为一对正样本对,图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_14 和图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_17


『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_18

『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_19

  • 其中:『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_20 是根据实际需求设置的训练阈值参数,『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_21
  • ​triplet loss​​​的目标是:①. 两个具有同样标签的样本,它们在新的编码空间里距离很近。②. 两个具有不同标签的样本,它们在新的编码空间里距离很远。进一步,我们希望两个​​positive examples​​​和一个​​negative example​​​中,​​negative example​​​与​​positive example​​​的距离,大于​​positive examples​​​之间的距离,或者大于某一个阈值:『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_22

『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_23

  • 优化的目的就是使 loss 在训练迭代中下降的越小越好,也就是要使得 ​​Anchor​​​ 与 ​​Positive​​​ 越接近越好,​​Anchor​​​ 与 ​​Negative​​​ 越远越好。基于上面这些,分析一下 ​​margin​​ 值的取值。
  • 首先:当​​margin​​​值越小时,​​loss​​​ 也就较容易的趋近于 0,于是​​Anchor​​​与​​Positive​​​都不需要拉的太近,​​Anchor​​​与​​Negative​​​不需要拉的太远,就能使得​​loss​​很快的趋近于0。这样训练得到的结果,不能够很好的区分相似的图像。
  • 其次:当​​margin​​​越大时,就需要使得网络参数要拼命地拉近​​Anchor、Positive​​​之间的距离,拉远​​Anchor、Negative​​​之间的距离。如果​​margin​​​值设置的太大,很可能最后​​loss​​保持一个较大的值,难以趋近于0 。
  • 因此,设置一个合理的margin值很关键,这是衡量相似度的重要指标。简而言之,​​margin​​​值设置的越小,​​loss​​​很容易趋近于0 ,但很难区分相似的图像。​​margin​​​值设置的越大,​​loss​​值较难趋近于0,甚至导致网络不收敛,但可以较有把握的区分较为相似的图像。

三、改进三元组损失(Improved triplet loss)

  • 文献 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_24 认为公式 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_25 只考虑正负样本对之间的相对距离,而并没有考虑正样本对之间的绝对距离(存在下图的情况,可能最后优化结束,正样本对的绝对距离仍然很大!),为此提出改进三元组损失(Improved triplet loss):


『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_26

『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_27

  • 其中:『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_28 是根据实际需求设置的训练阈值参数,『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_21 代表两个样本对应的特征的欧氏距离。公式 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_30 添加 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_31 项,保证网络不仅能够在特征空间把正负样本推开,也能保证正样本对之间的距离很近。

四、难样本采样三元组损失(Triplet loss with batch hard mining, TriHard loss)

  • 难样采样三元组损失(​​TriHard​​​损失)是三元组损失的改进版。传统的三元组随机从训练数据中抽样三张图片,这样的做法虽然比较简单,但是抽样出来的大部分都是简单易区分的样本对。如果大量训练的样本对都是简单的样本对,那么这是不利于网络学习到更好的表征。大量论文发现用更难的样本去训练网络能够提高网络的泛化能力,而采样难样本对的方法很多。有学者提出了一种基于训练批量​​(Batch​​)的在线难样本采样方法——TriHard Loss
  • 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_32:对于每一个训练​​batch​​​,随机挑选​​P​​​个ID的行人,每个行人随机挑选​​K​​​张不同的图片,即一个​​batch​​​含有 ​​P×K​​​ 张图片。之后对于batch中的每一张图片​​a​​ ,我们可以挑选一个最难的正样本和一个最难的负样本和​​a​​组成一个三元组。
  • 首先我们定义 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_14 和为相同ID的图片集为 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_34,剩下不同ID的图片图片集为 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_35,则​​​TriHard​​损失表示为:

『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_36

  • 其中:『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_08 是人为设定的阈值参数,TriHard损失会计算 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_38batch中的每一张图片在特征空间的欧式距离,然后选出与 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_38 距离最远(最不像)的正样本 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_40 和距离最近(最像)的负样本 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_41 来计算三元组损失。 通常TriHard损失效果比传统的三元组损失要好。

五、四元组损失(Quadruplet loss)

  • 四元组损失『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_42 是三元组损失的另一个改进版本。顾名思义,四元组(Quadruplet) 需要四张输入图片,和三元组不同的是多了一张负样本图片。即四张图片为固定图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_14, 正样本图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_15, 负样本图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_45 和负样本图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_46。其中 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_45『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_46

『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_49

  • 其中:『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_50 代表两个样本对应的特征的欧氏距离,『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_51 是手动设置的正常数,通常设置 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_三元组_08 小于 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_53,前一项称为强推动, 后一项称为弱推动。其中前一项和三元组损失一样,只考虑正负样本间的相对距离,共享了固定图片 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_54。因此在推开负样本对 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_54『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_损失函数_56 的同时,也会直接影响 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_54 的特征,造成正样本对 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_54『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_59 的距离不好控制。改进三元组损失通过直接约束 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_54『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_59 之间的距离来解决这个问题。而四元组通过引入第二项弱推动实现,添加的第二项中负样本对和正样本对不共享ID, 所以考虑的是正负样本间的绝对距离,在推开负样本对的同时不会太过直接影响 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_Deep Learning_38


『论文笔记』基于度量学习的行人重识别方法中损失函数总结!_度量学习_63

  • 以上度量学习方法样本示例如上图所示,这些方法在计算度量损失时,样本对都是从训练集中随机挑选。随机挑选样本对的方法可能经常挑选出一些容易识别的样本对组成训练批量(Batch),使得网络泛化能力受限。为此, 部分学者提出了难样本采样(Hard sample mining) 的方法,来挑选出难样本对训练网络。常用的思路是挑选出一个训练Batch 中特征向量距离比较大(非常不像) 的正样本对和特征向量距离比较小(非常像) 的负样本对来训练网络。难样本采样技术可以明显改进度量学习方法的性能,加快网络的收敛,并且可以很方便地在原有度量学习方法上进行扩展,是目前广泛采用的一种技术。

标签:loss,识别方法,样本,笔记,三元组,损失,距离,图片,度量
From: https://blog.51cto.com/u_15866474/5956847

相关文章

  • JS学习笔记9_JSON
    1.JSON概述JavaScriptObjectNatation,js对象表示法,(像XML一样)是一种数据格式,它与js有相同的语法形式P.S.一点小历史:JSON之父是道格拉斯,《JavaScript语言精粹》的作者,创造JSO......
  • .net core 5,6,7【多线程笔记】取消令牌(CancellationToken)
    介绍在使用C#异步的场景,多多少少会接触到CancellationTokenSource。它和取消异步任务相关的,CancellationToken就是它生产出来的。演示任务取消执行回调vartokenSource......
  • FreeSWITCH学习笔记:XML配置文件
    本文更新于2022-12-20,使用FreeSWITCH1.10.7。目录加载顺序autoload_configs/autoload_configs/acl.conf.xmlautoload_configs/callcenter.conf.xmlautoload_configs/cdr_......
  • Java学习笔记1
    1.注释​ 注释是对代码的解释和说明文字。Java中的注释分为三种:单行注释://这是单行注释文字多行注释:/*这是多行注释文字这是多行注释文字这是多行注释文字......
  • es6模块化随笔记
    默认导出与默认导入默认导出的语法:exportdefault默认导出的成员每个模块中只允许使用唯一的一次exportdefault默认导入的语法:import接收名称from‘模块标识符’......
  • 线段树复习笔记——综合应用(吉司机线段树)
    线段树的综合应用接下来,以洛谷P6242【模板】线段树3(超级毒瘤)为例,来看一下线段树的综合应用。先来看一下此题题意,很熟悉的题面:题目描述给出一个长度为\(n\)的数列......
  • HP笔记本无法休眠问题,或者黑屏后无法唤醒,在windows10(win10)系统下
    1可以找找其他的博文里面关于离开模式的设置修改注册表关闭HKEY_LOCAL_MacHINESYSTEMCurrentControlSetControlSessionManagerPowerAwayModeEnabled键值:0,关闭1,开......
  • UE4学习笔记26——【UI】UI动画和暂停游戏
    P68.UI动画和暂停游戏P68(需要包含第一人称射击模板) 新建一个文件夹(WJJ2119P68),在此文件夹中,右键“用户界面——控件蓝图”,重命名为“Pause”,然后打开此控件蓝图;左......
  • 【笔记】并行计算和MPI
    并行计算有三个层次。进程级并行:通过网络连接在不同计算节点之间传送数据,内存不共享。线程级并行:共享内存。线程内并行:向量化指令级并行。并行编程的基本方法就是分解和协......
  • agda学习笔记——一些基础的整理
    前言:又到了期末寄,开始匆忙整理下半学期学的agda,果然ddl就是第一生产力,这个交互式证明工具还是挺有意思的虽然有的时候很蠢Agda是基于Haskell的,所以很多语法和Haskell几乎......