PyTorch 深度度量学习无敌 Buff:九大模块、随意调用

Metric Learning度量学习简介及应用(分享笔记) 阅读详情

内容导读

从度量学习到深度度量学习,本文介绍了一个 PyTorch 中的程序包,它可以极大简化使用深度度量学习的难度。

本文首发自微信公众号「PyTorch 开发者社区」

度量学习(Metric Learning)是机器学习过程中经常用到的一种方法,它可以借助一系列观测,构造出对应的度量函数,从而学习数据间的距离或差异,有效地描述样本之间的相似度。

CUB200 数据集样本示例,常被用作度量学习的 benchmark

这个度量函数对于相似度高的观测值,会返回一个小的距离值;对于差异巨大的观测值,则会返回一个大的距离值。

当样本量不大时,度量学习在处理分类任务的准确率和高效率上,展现出了显著优势。

DML:为多类别、小样本分类而生

然而,如果要处理的分类任务十分复杂,具有多类别、小样本等特征时,结合深度学习和度量学习的深度度量学习((Deep Metric Learning,简称 DML)),才是真正的王者。

深度度量学习又被称为距离度量学习(Distance Metric Learning)。相较于度量学习,深度度量学习可以对输入特征做非线性映射。

通过训练一个基于 CNN 的非线性特征提取模块或编码器,深度度量学习可以将提取的图像特征(Embedding)嵌入到近邻位置,同时借助欧氏距离、cosine 等距离度量方法,将不同的图像特征区分开来。

接下来,深度度量学习再结合 k 最近邻、支持向量机等分类算法,就可以在不考虑类别数量的基础上,利用提取的图像特征,来完成目标识别任务了。

import numpy as np


# 随机定义A, B 两个向量
A = np.random.randn(10)
B = np.random.randn(10)


# 欧几里得距离(Euclidean distance)
dist = np.square(np.sum(A - B)**2)


# 曼哈顿距离(Manhattan distance)
dist = np.sum(np.abs(A - B))


# 切比雪夫距离(Chebyshev distance)
dist = np.max(np.abs(A - B))


# cosine距离
similarity = (np.sum(A * B))/(np.linalg.norm(A)) / (np.linalg.norm(A))

深度度量学习中的常用距离函数

深度度量学习在 CV 领域的一些极端分类任务(类别众多、样本量不足)中表现优异,应用遍及人脸识别、行人重识别、图像检索、目标跟踪、特征匹配等场景。

以往要在程序中使用深度度量学习,主要依赖工程师从零到一写代码,不光耗时久还容易出 bug。**现在则可以依赖一个封装了多个常用模块的开源库,**直接进行调用,省时省力。

PML:让深度度量学习易如反掌

pytorch-metric-learning(PML)是一个开源库,可以让各种繁琐复杂的深度度量学习算法,变得更加简单友好。

pytorch-metric-learning 具有两大特点

1、易于使用

只需添加 2 行代码,就可以在程序中使用度量学习;调用单个函数,就可以挖掘 pairs 和 triplets。

2、高度灵活

融合了 loss、miner、trainer 等多个模块,可以在已有代码中实现各种算法组合。

PML 包括 9 个模块,每个模块既可以单独使用,也可以组合成一个完整的训练/测试 workflow

pytorch-metric-learning 中的 9 大模块

1、Loss: 可以应用的各种损失函数

from pytorch_metric_learning.distances import CosineSimilarity
from pytorch_metric_learning.reducers import ThresholdReducer
from pytorch_metric_learning.regularizers import LpRegularizer
from pytorch_metric_learning import losses
loss_func = losses.TripletMarginLoss(distance = CosineSimilarity(), 
             reducer = ThresholdReducer(high=0.3), 
              embedding_regularizer = LpRegularizer())

自定义损失函数 TripletMarginLoss 代码示例

2、Distance: 包括计算 pairwise distance 或输入 embedding 之间相似性的各种类别

3、Reducer: 从几个损失值变为单个损失值

4、Regularizer: 对权重和嵌入向量进行正则化

5、Miner: PML 提供两种类型的挖掘函数:子集批处理 miner 及 tuple miner

from pytorch_metric_learning import miners, losses
miner = miners.MultiSimilarityMiner()
loss_func = losses.TripletMarginLoss()


# your training loop
for i, (data, labels) in enumerate(dataloader):
  optimizer.zero_grad()
  embeddings = model(data)
  hard_pairs = miner(embeddings, labels)
  loss = loss_func(embeddings, labels, hard_pairs)
  loss.backward()
  optimizer.step()

用 Tripletmurginloss 损失函数添加挖掘功能

6、Sampler:torch.utils.data.Sampler 类的扩展,决定样本的 batch 的组成形态

7、Trainer: 提供对度量学习算法的访问,如数据增强、附加网络等

8、Tester: 输入模型和数据集,找到基于最近邻的准确度指标(使用该模块需要安装 faiss 安装包)

9、Util:

  • AccuracyCalculator:给定一个 query 和推理嵌入向量(reference embedding),计算数个准确度指标
  • Inference model:utils.inference 包含用于在 batch 或一组 pair 中,找到匹配对(matching pairs )的类
  • Logging Preset:提供日志数据 hook,模型训练、验证和存储期间的提前停止日志。

损失函数可以自定义使用 Distance、Reducer 及 Regularizer 三个模块

PML 上手实践

PyTorch 版本要求

pytorch-metric-learning v0.9.90 版本及以上:torch ≥ 1.6

pytorch-metric-learning v0.9.90 版本以下:没有版本要求,但是测试版本 torch ≥ 1.2

Pip

pip install pytorch-metric-learning

获得最新版本

pip install pytorch-metric-learning --pre

在 Windows 上安装

pip install torch===1.6.0 torchvision===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
pip install pytorch-metric-learning

增加评估和日志功能,需要安装 faiss-gpu 的非官方 pypi 版本

pip install pytorch-metric-learning[with-hooks]

或 faiss-CPU

pip install pytorch-metric-learning[with-hooks-cpu]

Conda

conda install pytorch-metric-learning -c metric-learning -c pytorch

GitHub 地址:

https://github.com/KevinMusgrave/pytorch-metric-learning

Google Colab:

https://github.com/KevinMusgrave/pytorch-metric-learning/blob/master/examples/README.md

相关论文:

https://arxiv.org/pdf/2008.09164.pdf

参考:

http://html.rhhz.net/tis/html/201906045.htm

https://analyticsindiamag.com/guide-to-pytorch-metric-learning-a-library-for-implementing-metric-learning-algorithms/

在这里插入图片描述

如何理解深度学习中的 metric learning(度量学习)? Metric learning(度量学习)是机器学习和深度学习中的一个领域,其目标是通过学习一个映射函数,将数据点映射到一个新的空间中,使得在该空间中,相似的数据点距离较近,而不相似的数据点距离较远。度量学习广泛应用于图像检索、人脸识别、语音识别等任务。 阅读详情

相关推荐

pytorch-metric-learning:在应用程序中使用深度度量学习的最简单方法。 模块化,灵活和可扩展。 用PyTorch写

新闻 1月12日:v0.9.96大大提高了和的灵活性。 查看 12月10日:v0.9.95包括一个新的元组采矿器 。 查看 11月6日:v0.9.94中有一些小错误修复和改进。 文献资料 Google Colab示例 请参阅 以获取可以在Google Colab上下载或运行的笔记本的 。 PyTorch公制学习概述 该库包含9个模块,每个模块都可以在您现有的代码库中独立使用,或组合在一起以形成完整的培训/测试工作流程。 损失函数如何工作 在训练循环中使用损失和矿工 让我们初始化一个简单的 : from pytorch_metric_learning import losses loss_func = losses . TripletMarginLoss () 要在训练循环中计算损失,请传递模型计算的嵌入以及相应的标签。 嵌入的大小应为(N,embedding_size),标签的大小应为(N),其中N为批处理大小。 # your training loop for i , ( data , labels ) in enumerate ( dataloader ): optimiz

度量学习和pytorch-metric-learning的使用

度量学习作为一个大领域,网上有不少介绍的文章,pytorch-metric-learning库的官方文档也有比较详细的说明和demo,所以本文不打算再对它们做细致严谨的入门级介绍,而是记录我在学习过程中的一些思考和观点,以及代码的便捷使用,欢迎讨论。

Brikie的博客 8691

pytorch_metric_learning 一个灵活且可扩展的度量学习库,用PyTorch编写-python

pytorch_metric_learning 一个灵活且可扩展的度量学习库,用PyTorch编写 PyTorch Metric Learning News 6 月 20 日:v0.9.87 带来了一些可能导致您现有代码中断的重大更改。 有关详细信息,请参阅发行说明。 文档 在此处查看文档 Google Colab 示例 请参阅笔记本的示例文件夹,其中显示了带有日志记录和模型保存的整个训练/测试工作流程。 该库的优点 易于使用 在您的训练循环中只需 2 行代码即可将度量学习添加到您的应用程序中。 使用单个函数调用挖掘对和三元组。 灵活性以其他图书馆不允许的方式混合和匹配损失、矿工和培训师。 安装 Pip pip install pytorch-metric-learning 要获得最新的开发版本: pip install pytorch-metric-learning==0.9.88 在 Windows 上安装: pip install torch===1.4.0 torchvision===0.5.0 - f https://download.pytorch.org/wh

如何使用Pytorch-Metric-Learning?

PyTorch-Metric-Learning 是一个基于 PyTorch 的开源库,专门用于度量学习(Metric Learning)的实现和研究。度量学习是一类机器学习任务,旨在学习一个距离函数,使得相似的样本在特征空间中靠得更近,而不相似的样本更远。该库包含9个模块(可用模块概览,点击查看),每个模块都可在现有的代码库中独立使用,或者组合起来完成完整的训练和测试工作流。1.Pytorch-Metric-Learning库9个模块的功能2.如何使用PyTorch Metric Learning库中的Lo

自己在学习过程中的总结 1964

UVM环境复位--stop_sequences()

在UVM验证环境中, stop_sequences是一个用于强制终止所有正在运行的 Sequence 的方法,通常用于动态控制激励生成流程。1.通过uvm_config_db传递事件和严格的同步机制,此方案符适用于复杂复位场景和动态测试控制。组件耦合:Driver 和 Sequence 不再直接依赖env,通过标准接口通信。竞争条件:确保 Driver 完成清理后再终止 Sequence。代码健壮性:使用非阻塞操作和事件监听,避免死锁。

qq_42779035的博客 3014

Camunda流程引擎 Modeler (二)

Camunda Modeler是Camunda官方提供的建模器: 独立安装的建模器([windows、linux、mac]

1312

[pytorch] PyTorch Metric Learning库代码学习二 Inference

PyTorch Metric Learning库代码学习三 InferenceInstall the packagesImport the packagesCreate helper functionsCreate the dataset and load the trained model 度量学习作为一个大领域,网上有不少介绍的文章,pytorch-metric-learning库的官方文档也有比较详细的说明和demo. 简介度量学习和pytorch-metric-learning的使用 官方 API

qq_38736504的博客 3411

MacOS蓝牙连接疑难杂症:从基础排查到高级修复全攻略

本文提供了一份全面的MacOS蓝牙故障排查与修复指南。从基础的菜单栏检查、终端命令诊断,到软/硬重启蓝牙服务、删除配置文件,再到使用blueutil工具、重置NVRAM等高级方法,系统性地解决了蓝牙无法连接、连接不稳定等常见问题。最后还分享了环境干扰排查、预防措施及硬件故障自检方法,帮助用户彻底解决Mac蓝牙连接难题。

weixin_29271263的博客 450

[pytorch] Kaggle图片分类比赛 ArcFace + Metric Learning 代码学习

ArcFace代码学习代码链接基础知识[理论] 度量学习 Metric Learning[python] logging模块代码详解依赖安装 比赛中的数据包含来自 28 个不同研究机构的 30 个不同物种(鲸鱼和海豚)的 15,000 多只独特个体海洋哺乳动物的图像。比赛要求是对测试集个体id的分类。 kaggle 比赛数据详情及数据集下载:Happywhale - Whale and Dolphin Identification 代码链接 arcface是本次比赛中表现最好的方法之一。代码: Pytor

qq_38736504的博客 5277

帕德伯恩大学轴承数据集(PU)介绍

PU数据集介绍一、帕德伯恩大学轴承数据集故障类别说明二、关于损伤描述2.1 损伤组合:2.2 重复和多重损伤的安排:2.3 几何尺寸2.4 损伤程度2.5损伤特征数据集损伤类别三、人为损坏轴承3.1 最常用的人为损伤制造方法是:3.2 本数据集使用的人工损坏是由三种不同方法引起的四、通过加速寿命试验产生真正的轴承损坏样本 一、帕德伯恩大学轴承数据集 数据集下载地址 从帕德伯恩大学获得的PU数据集是一个6203轴承数据集,包括人为诱发的和真实的损害。采用压电加速度计采集轴承座的振动信号,采样频率为64 kHz

m0_47180208的博客 3万+

招标信息爬取工具

一个能帮你节省大量时间的实用小工具,我自己用了挺久,分享出来给有需要的朋友

qq_56877290的博客 836

pytorch-metric-learning度量学习工具官方文档翻译

损失函数可以使用距离、规约方法和正则化方法来进行定制化。在下面的图表中,miner在批量中找到难训练的样本对的索引,这些索引被索引到距离矩阵。

胖胖大海的博客 2544

别再折腾CUDA了!Win11上VSCode一键配置PyTorch GPU环境(附Anaconda虚拟环境避坑指南)

本文提供Win11系统下使用VSCode和Anaconda一键配置PyTorch GPU环境的详细指南,解决CUDA版本冲突等常见问题。通过conda的原子化依赖解决方案,安装时间从2小时缩短至15分钟,适合深度学习初学者快速搭建开发环境。

weixin_33101399的博客 247

PyTorch-Metric-Learning完整指南:轻松掌握深度学习度量学习

PyTorch-Metric-Learning(PML)是深度学习领域中度量学习的最佳实践工具库。这个开源项目提供了模块化、灵活且可扩展的度量学习解决方案,让你能够轻松地在各种应用中实现高效的相似性学习和特征嵌入优化。 [![PyTorch Metric Learning Logo](https://raw.gitcode.com/gh_mirrors/py/pytorch-metric-lea

gitblog_00051的博客 613

【脑电分析系列】第7篇:频域分析基石 — 功率谱密度(PSD)的计算与常见方法对比

本文探讨了脑电图(EEG)频域分析的核心方法——功率谱密度(PSD)。通过对比基于快速傅里叶变换的周期图法和更稳健的Welch's方法,指出后者通过分段、加窗和平均处理,能有效降低估计方差,更适合分析非稳态的脑电信号。文章详细解析了关键参数设置对频率分辨率和统计稳定性的影响,并提供了Python计算实现。PSD分析将复杂的脑电信号转换为直观的频域特征,为研究认知功能和神经疾病提供重要依据。

qq_32516809的博客 1805

【YOLOv8科研级优化】集成YOLOv10的SCDown采样模块,让你的模型下采样更高效更精准

打开确保模型解析器能识别SCDown模块。通过将YOLOv10的SCDown模块集成到YOLOv8中,我们实现了一个“细节保留+高效下采样”的目标检测模型。这个改进不仅在工程上能提升小目标、细粒度场景的检测效果,更在科研上提供了“分阶段下采样”的创新思路——这种思路可以延伸到其他卷积网络(如ResNet、MobileNet)的下采样层改进中,帮你在论文中打造独特的研究点。

m0_71589036的博客 137

pytorch度量学习新功能

PyTorch Metric Learning has seen a lot of changes in the past few months. Here are the highlights.在过去几个月中, PyTorch Metric Learning发生了很多变化。 这里是重点。 距离,减速器和调节器 (Distances, Reducers, and Regularizers) Lo...

weixin_26729375的博客 1387

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Metric Learning——度量学习

一个具有度量的集合被称为。

weixin_47656442的博客 1362

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

9大核心模块全面掌握:PyTorch Metric Learning终极入门指南

PyTorch Metric Learning是一个模块化、灵活且可扩展的深度学习度量学习库,让开发者能够轻松地在应用中实现深度度量学习。本文将深入剖析其9大核心组件,帮助新手快速掌握这个强大工具的使用方法。 ## 一、整体架构概览 PyTorch Metric Learning的核心优势在于其模块化设计,各个组件既可以独立使用,也能灵活组合。下图展示了库的高层模块结构,清晰呈现了数据在各组件

gitblog_00081的博客 754

PyTorch Metric Learning 安装与使用教程

在 `KevinMusgrave/pytorch-metric-learning` 开源项目中,目录结构大致如下: - **distances**: 包含不同的距离计算方法。 - **losses**: 提供各种度量学习损失函数。 - **miners**: 实现不同类型的采样策略。 - **reducers**: 处理损失归一化的方法。 - **regularizers**: 提供正则化功能。...

gitblog_00662的博客 465

度量学习---综述

度量函数 metric learning 摘自:《Multi-Attention Multi-Class Constraint for Fine-grained Image Recognition》 Apart from the techniques above, deep metric learning aims at the learning of appropriate similarity...

xys430381_1的专栏 2万+

度量学习(Metric learning)—— 基于分类损失函数(softmax、交叉熵、cosface、arcface)

概述 首先,我们把loss归为两类:一类是本篇讲述的基于softmax的,一类是基于pair对的(如对比损失、三元损失等)。 基于pair对的,参考我的另一篇博客:https://blog.youkuaiyun.com/u012863603/article/details/119246720 基于softmax的改进主要有如下(有的loss拥有不同的名字):softmax、center loss、range loss、Modified softmax、NormFace、large m...

TigerZ*的博客 6039

深度度量学习(DML)中pair-based方法中的loss

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入

weixin_43480312的博客 2054

度量学习Metirc Learning和基于负例的对比学习Contrastive Learning的异同点思考

如果对于两张都是狗的图片(但是是不同的图片),为何他们在对比学习中,projector之后的表示空间是相邻的呢?情况二:假如在一个Batch中同时存在两张狗的图片,按照自监督的预设前提,自己只和自己像,和其他都不像,那么这两张狗的图片互为负样本,模型训练时在特征空间上确实会将这两张图片的表征距离拉远,所以此时需要用到损失函数里面的温度系数,温度系数设置的越小,会把“负例”推的越远,但此时的负例可能是假负例,所以作者也讲了,温度系数设置的太小容易出现误判的负例。以下仅是个人的一些观点,谨慎参考。

胖胖大海的博客 1726

PyTorch Metric Learning 使用教程

PyTorch Metric Learning 是一个用于深度度量学习的开源库,旨在简化在 PyTorch 中实现各种度量学习算法的复杂性。该库提供了多种损失函数、采样器、训练器和评估工具,帮助开发者快速构建和测试度量学习模型。 ## 项目快速启动 ### 安装 首先,确保你已经安装了 PyTorch。然后,通过以下命令安装 PyTorch Metric Learning: ```bash...

gitblog_00339的博客 764

度量学习 度量函数 metric learning deep metric learning 深度度量学习

曼哈顿距离(CityBlockSimilarity) 同欧式距离相似,都是用于多维数据空间距离的测度。 欧式距离(Euclidean Distance) 用于衡量多维空间中各个点之间的绝对距离。使用时各个维度量级最好能够在同一个尺度上。 马氏距离(Mahalanobis distance) 一种有效的计算两个未知样本集的相似度的方法。与欧氏距离将所有维度同等看待不同,其考虑到各种...

心之所向 2万+
上一篇: 计算力就是生产力
下一篇: Super SloMo:用神经网络脑补超级慢动作
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值