Deep metric learning 深度度量学习 总结

article/2025/11/10 21:36:04

最近的工作用是深度度量学习的改进,这里将DML进行一个总结。

根据个人的理解,开篇用一句话介绍一下度量学习:

“不同于分类学习,度量学习是通过学习数据之间的相似性程度来获得一个更有意义或者说更具可分性的特征空间。”

Traditional metric learning

核心目的:

1 通过一个optimal的距离度量来判断样本之间的相似性

2 减小相似样本之间的距离,增加不相似样本之间的距离

限制条件:往往利用的的是线性映射,导致很难解决实际问题中的non-linear问题。(当然大部分传统方法都会遇到这个问题,最常见的方法就是核方法,譬如SVM原本只能解决线性分类,但是加入高斯核或多项式核就可以解决非线性分类,还有PCA-KPCA这些)

Deep metric learning(DML)

通过深层结构,学习到高抽象化的非线性特征以及数据之间的相似性关系。

DML三大关键点: 采样策略、合适的距离度量函数以及模型结构,因此当前DML模型往往基于指定任务在这些方面进行改进。[1]

距离度量

度量学习希望学习到一种distance metric,使得在该distance metric下,相似数据(不相似数据)能够在空间中有更好的分布。最经典的就是利用马氏距离(Mahalanobis distance),如下式,其中 x i ∈ R m x_i \in R^m xiRm
D ( x i , x j ) = ( x i − x j ) T M ( x j − x j ) D(x_i, x_j) = \sqrt{(x_i-x_j)^TM(x_j-x_j)} D(xi,xj)=(xixj)TM(xjxj)
作为一个距离函数,那么一定要包含几个性质:非负、对称以及三角不等,如果想在度量上进行创新一定要注意这些。马氏距离中的 M M M具有半正定和对称性,那么根据矩阵理论相关知识, M M M的特征值要全部非负,且存在n阶实矩阵 W W W使得 M = W T W M = W^TW M=WTW ,则上述式子可以转化为:
D ( x i , x j ) = ( x i − x j ) T W T W ( x j − x j ) = [ ( x i − x j ) T W T ] [ W ( x j − x j ) ] = ( W x i − W x j ) T ( W x j − W x j ) = ∥ W x i − W x j ∥ D(x_i, x_j) = \sqrt{(x_i-x_j)^TW^TW(x_j-x_j)} \\ = \sqrt{[(x_i-x_j)^TW^T][W(x_j-x_j)]} \\ =\sqrt{(Wx_i-Wx_j)^T(Wx_j-Wx_j)} \\ =\left \| Wx_i - Wx_j \right \| D(xi,xj)=(xixj)TWTW(xjxj) =[(xixj)TWT][W(xjxj)] =(WxiWxj)T(WxjWxj) =WxiWxj
OK,那从上面这个式子可以看到,原始空间的马氏距离就对应经过一个线性映射 W W W之后新空间中的欧氏距离,也就是说基于马氏距离的度量学习其实就是学习一个 W W W,经过这个矩阵的映射之后的数据点具有相似数据更近,不相似数据更远的特性。同时,学习的矩阵是一个线性映射,也就意味着仅用这种方式是无法解决非线性问题的,因此就要学习$ f(x)$, DML就是利用强大的特征学习能力,学习到这样一个映射。

采样

采样策略在DML中扮演着一个非常重要的角色,一个好的采样策略可以大大提升模型的效果以及计算速度。采样策略的发展如下:在这里插入图片描述
关于DML中采样策略发展历史中几个比较关键的节点

1 2006年 大神Lecun提出的孪生网络,其中采样是先随机选一个样本,然后0.5的概率从同类样本中随机采样,0.5的概率从不同类样本采样[2]

2 后来发现,很多简单的样本对学习模型并没有作用,因此提出了hard sample mining[3]

3 另一个经典DML模型三元组网络,同时选择anchor, positive sample和negative sample作为输入,同时考虑同类与异类的距离关系[4]

4 将三元组与hard sample mining结合。[5]

提到的hard negative sample是什么呢?
在这里插入图片描述

如上图所示,黑色点代表anchor 和 positive sample , 橙色点 1 2 3 分别是negative sample,在采样的时候 如果我们选择3作为负例,其实对模型的学习是没有意义的,因为此时负例与anchor之间的距离已经大于正例与anchor之间的距离加上一个期望的margin(这就是随机采样,不考虑hard negative sample)。因此其实只有采样1 和 2才是真正有意义的,但还有一个问题是如果我们选择1,也就是 hard negative,出现的问题就是 后续的loss会很大,对应的梯度也会很大,模型会很难收敛。那么最好的采样就是2, 距离大于正例与anchor的距离,同时不超过一个期望的margin,那么模型学习起来就会轻松。

Loss function

这一节会介绍一些经典的DML中用到的loss function,排序按照提出的先后顺序。所用到的距离函数如下,其中G代表网络映射函数。
D ( X 1 , X 2 ) = ∥ G ( X 1 ) − G ( X 2 ) ∥ D(X_1,X_2) = \left \| G(X_1) - G(X_2) \right \| D(X1,X2)=G(X1)G(X2)
1 Contrastive loss [2]

对比损失是Lecun 孪生网络论文中提到的损失函数,如前面提到的,采样是正负样本随机采样,如果是正采样则参数Y = 0 ,否则参数Y = 1. 损失函数如下:
L o s s = ( 1 − Y ) 1 2 ( D ( X 1 , X 2 ) ) 2 + Y 1 2 m a x ( 0 , m a r g i n − D ( X 1 , X 2 ) ) 2 Loss = (1 - Y)\frac{1}{2}(D(X_1,X_2))^2 + Y\frac{1}{2}{max(0, margin -D(X_1,X_2))}^2 Loss=(1Y)21(D(X1,X2))2+Y21max(0,marginD(X1,X2))2
该函数的目的是,当两个样本同类时,希望D减小,当两个样本异类时,希望D增加,同时如果D超过设定的margin,则不再进行模型更新。

2 Triplet loss [4]

三元损失如前面介绍的,同时选择anchor,positive 和 negative。损失函数如下:
L o s s = m a x ( 0 , D ( X , X p ) − D ( X , X n ) + a ) Loss = max(0, D(X,X_p) - D(X,X_n) + a) Loss=max(0,D(X,Xp)D(X,Xn)+a)
该损失函数同时考虑anchor 与 positive sample和 negative sample的距离关系,并且考虑的是相对距离关系,如果 D ( X , X n ) > D ( X , X P ) + a D(X,X_n) > D(X,X_P) + a D(X,Xn)>D(X,XP)+a, 参数就不会更新.

3 Angular loss [6]

角损失不同于前面两个损失,而是通过角度约束负例样本。
L o s s = m a x ( 0 , D ( X , X p ) − 4 t a n 2 α D ( X n , X c ) ) Loss = max(0, D(X,X_p) - 4tan^2\alpha D(X_n,X^c)) Loss=max(0,D(X,Xp)4tan2αD(Xn,Xc))
损失函数中 X c X^c Xc是正例样本的clustering center ,也就是说通过一种角度度量来限制负例样本和正例样本聚类中心的距离。

其他一些loss包括Quadruplet loss[7]通过再增加一个跟anchor接近的样本,实现四元组; Stuctured loss[8]利用了训练过程中的结构化信息(距离向量转化为距离矩阵); N-pair Loss[9]利用多类别数据解决收敛慢和局部最优的问题…

参考文献

[1]Kaya, Bilge. Deep Metric Learning: A Survey. Symmetry. 2019;11(9):1066. doi:10.3390/sym11091066

[2]Hadsell, R.; Chopra, S.; LeCun, Y. Dimensionality Reduction by Learning an Invariant Mapping.
In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), New York, NY,
USA, 17–22 June 2006; pp. 1735–1742.

[3]Simo-Serra, E.; Trulls, E.; Ferraz, L.; Kokkinos, I.; Fua, P.; Moreno-Noguer, F. Discriminative learning of deep
convolutional feature point descriptors. In Proceedings of the IEEE International Conference on Computer
Vision (ICCV), Santiago, Chile, 11–18 December 2015; pp. 118–126.

[4]Hoffer, E.; Ailon, N. Deep Metric Learning Using Triplet Network. In Progress in Pattern Recognition, Image
Analysis, Computer Vision, and Applications; Springer: Berlin/Heidelberg, Germany, 2015; Volume 9370,
pp. 84–92.

[5]Lin, Y.; Cui, Y.; Zhou, F.; Belongie, S. Fine-Grained Categorization and Dataset Bootstrapping Using Deep
Metric Learning with Humans in the Loop. In Proceedings of the IEEE International Conference on Computer
Vision (ICCV), Venice, Italy, 22–29 October 2017; pp. 1153–1162

[6]Wang, J.; Zhou, F.; Wen, S.; Liu, X.; Lin, Y. Deep Metric Learning with Angular Loss. In Proceedings of the
IEEE International Conference on Computer Vision (ICCV), Venice, Italy, 22–29 October 2017; pp. 2593–2601.

[7]Ni, J.; Liu, J.; Zhang, C.; Ye, D.; Ma, Z. Fine-grained Patient Similarity Measuring using Deep Metric Learning.
In Proceedings of the 2017 ACM on Conference on Information and Knowledge Management, Singapore,
6–10 November 2017; pp. 1189–1198.

[8]Song, H.O.; Savarese, S.; Xiang, Y.; Jegelka, S. Deep Metric Learning via Lifted Structured Feature Embedding.
In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Las Vegas, NV,
USA, 27–30 June 2016; pp. 4004–4012

[9]Sohn, K. Improved deep metric learning with multi-class n-pair loss objective. In Proceedings of the Advances
in Neural Information Processing Systems (NIPS), Barcelona, Spain, 5–10 December 2016; pp. 1857–1865


http://chatgpt.dhexx.cn/article/ugBAPhxV.shtml

相关文章

度量学习方法总结

目录 一.距离度量 闵可夫斯基距离 欧式距离(Euclidean Distance): 标准化欧氏距离 (Standardized Euclidean distance ) 曼哈顿距离(ManhattanDistance) 切比雪夫距离(Chebyshevdistance) 马氏距离 马氏距离代…

度量学习

度量学习(Metric Learning) 度量(Metric)的定义 在数学中,一个度量(或距离函数)是一个定义集合中元素之间距离的函数。一个具有度量的集合被称为度量空间。 度量学习(Metric Learni…

度量学习(Metric learning、损失函数、triplet、三元组损失、fastreid)

定义 Metric learning 是学习一个度量相似度的距离函数:相似的目标离得近,不相似的离得远. 一般来说,DML包含三个部分, 如下图.。 1)特征提取网络:map embedding 2)采样策略:将一个mini-batch里的样本组合成很多个sub…

度量学习Metric Learning

度量学习 (Metric Learning) 距离度量学习 (Distance Metric Learning,DML) 相似度学习 度量学习 是指 距离度量学习,Distance Metric Learning,简称为 DML,是人脸识别中常用传统机器学习方法,由Eric Xing在NIPS 2…

度量学习(Metric Learning)基础概念

一、什么是度量学习? 度量学习 (Metric Learning) 距离度量学习 (Distance Metric Learning,DML) 相似度学习。 在数学中,一个度量(或距离函数)是一个定义集合中元素之间距离的函数。一个具有度量的集合被称为度量空…

度量学习——总结

传统方法 User guide: contents — metric-learn 0.6.2 documentation 深度学习 基于深度学习的度量学习方法大都由两个部分组成:特征提取模块和距离度量模块。距离度量模块的任务是使同一类样本间的距离更靠近,而不同类样本间的距离更远离。这一模块…

ffmpeg命令分析-r

本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 之前的文章分析 FFMpeg 工程的 do_video_out() 函数的时候,建议不关注 delta0,delta,nb0_frames,nb_frames 等变…

使用FFmpeg命令处理音视频

文章目录 前言一、ffprobe相关命令1.使用ffprobe查看音频文件的信息2.使用ffprobe查看视频文件的信息 二、ffplay相关命令1.基本的ffplay命令2.音视频同步命令 三、ffmpeg相关命令1.ffmpeg通用参数2.ffmpeg视频参数3.ffmpeg音频参数4.ffmpeg示例 总结 前言 FFmpeg是一套可以用…

ffmpeg-命令行详解

前言 ffmpeg是一个多媒体开发库,提供了关于音频和视频的工具。这个项目的官网是这里。 下载地址 ffmpeg提供了方便地控制台命令,可以在下载页面下载。三个平台(windows,linux,macos)都有打包好的可执行文…

ffmpeg命令分析-b:v

本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的。a.mp4下载链接:百度网盘,提取码:nl0s 。 命令如下:…

FFmpeg命令详解

命令格式 功能 FFmpeg命令是在ffmpeg.exe可执行文件环境下执行,ffmpeg.exe用于音视频的转码,加水印,去水印,视频剪切,提取音频,提取视频,码率控制等等功能。 最简单的命令 ffmpeg -i input.a…

FFmpeg命令行转码

本文主要了解FFmpeg进行音视频编码转换。主要学习如下几个知识点: FFmpeg使用libx264进行H,264(AVC)软编码,使用libx265进行H.265(HEVC)软编码使用FFmpeg在MacOS环境下硬编码了解音频编码,MP3,AAC的参数设置编码 FFmpeg软编码H.…

ffmpeg命令行使用

查看视频信息 ffmpeg -i 视频名字视频名字这里输入前几个字符按 tab 键可以自动补全 返回结果: 红框之内的内容没什么用 编码器 :encoder : Lavf57.25.100 持续时间:Duration: 00:14:20.58, start: 0.000000, bitrate: 381 kb/s Duratio…

ffmpeg录屏命令

1.gdigrab抓屏 ffmpeg -f gdigrab -i desktop -q:v 0.01 -vcodec mpeg4 -f mp4 out.mp4-i 输入设备 -vcodec 视频编码格式 -f 视频封装格式 缺点只能录制视频,不能录制音频 2.dshow 下载安装screen capture recorder https://sourceforge.net/projects/screencap…

FFMPEG常用命令行

目录 命令格式: 1.获取视频信息 2.转视频/音频格式 视频格式转换 音频格式转换 3.音视频分离 4.图像处理 5.视频旋转 6.视频倒放&视频加速&视频减速 7.视频合并(两个10秒的视频合并为20秒): 8.视频拼接&…

FFmpeg命令介绍

FFmpeg 简介轶闻常用命令视频相关音频相关录制命令 简介 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。使用C语言进行开发,采用LGPL或GPL许可证,可前往Github下载其源码。它提供了录制、转换以及流化音…

ffmpeg命令大全

ffmpeg命令大全 FFMPEG 目录及作用FFMPEG基本概念FFMPEG 命令基本信息查询命令主要参数视频参数音频参数录制录屏 分解与复用滤镜简单滤镜复杂滤镜 直播相关 前言 FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它…

音视频ffmpeg——ffmpeg 命令大全

ffmpeg 命令参数 ffmpeg信息查询命令 ffmpeg 控制命令 主要参数: ◼ -i 设定输入流 ◼ -f 设定输出格式(format) ◼ -ss 开始时间 ◼ -t 时间长度 音频参数: ◼ -aframes 设置要输出的音频帧数 ◼ -b:a 音频码率 ◼ -ar 设定采样率 ◼ -ac 设定…

常见FFmpeg命令行全面分析

FFmpeg多媒体库支持的命令行调用分为三个模块:ffmpeg、ffprobe、ffplay。其中ffmpeg命令行常用于音视频剪切、转码、滤镜、拼接、混音、截图等;ffprobe用于检测多媒体流格式;ffplay用于播放视频。详情可查阅FFmpeg官方文档:ffmpeg…

ffmpeg 常用命令汇总

​​​​​​经常用到ffmpeg做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下。 1、ffmpeg使用语法 命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格…