基于深度学习的Graph Matching中损失函数的理解

2023-05-16

本文介绍以下损失函数:
①PermutationLoss
②CrossEntropyLoss
③PermutationLossHung
④OffsetLoss
⑤FocalLoss
⑥InnerProductLoss
⑦HammingLoss
(顺序依照ThinkMatch工程中 src/loss_func.py 的顺序)

OffsetLoss

18年的Deep Learning of Graph Matching将深度学习与Graph Matching进行首次结合,论文中对以往一些方法进行了组合,并着重对Graph Matching训练过程中的反向传播进行了严密的推导,其中采用的损失函数为 OffsetLoss

在这里插入图片描述
其中φ函数形式如下,即对两位移向量(displacement vector)di、di^gt 之差进行度量,得到一标量。
根号下后一项为一极小数,避免X^TX为0,影响训练的稳定性
在这里插入图片描述
di、di^gt 由论文中所提出的 Voting layer进行转换,这一layer,在工程中被称作 displacement_layer,也在src目录下。

displacement vector的计算公式:
在这里插入图片描述
对应的代码理解:
在这里插入图片描述①对s进行输出,得到8个10*10的矩阵,8表示batch size的大小,矩阵的大小由source image和target image中节点数决定。(表示两张图 各自节点之间的匹配关系)
在这里插入图片描述②对P_src 和 P_tgt进行输出,都得到了(8,10,2)维度的矩阵。

其内容为坐标值?
是的

target值和source值是否存在数据集中?
是,后面的9行暂时不知道是啥
在这里插入图片描述

source得到的point set是否会随着VGG的训练而不断改变?
不会,那VGG是对Pointset中每个点周围的特征进行提取吗?

在这里插入图片描述在这里插入图片描述
③对ns-gt进行输出,得到每一组2GM(Graph Matching)的配对数。
在这里插入图片描述④displacement_layer的代码如下:

if ns_gt is None:  # 如果整个Batch 8组图片(2*8张图片)中存在配对
    max_n = s.shape[1]
    P_src = P_src[:, 0:max_n, :]
    grad_mask = None
else:
    grad_mask = torch.zeros_like(P_src)
    for b, n in enumerate(ns_gt):
        grad_mask[b, 0:n] = 1

d = torch.matmul(s, P_tgt) - P_src
return d, grad_mask

(grad_mask 暂时不知道是啥)

torch.matmul(s, P_tgt)的输出:
维度:(8,10,2)

s的维度 (8,10,10), P_tgt 的维度(8,10,2)

物理意义:利用匹配关系,调整矩阵内坐标的顺序,使其与src的匹配关系对齐。
在这里插入图片描述
最终得到正确匹配关系时的位移向量。
在训练时,还会得到一个预测时的位移向量,OffetLoss就是希望匹配得足够正确,使得两者的位移向量差距最小,是强距离考虑的。因此会出现下面这个问题

在这里插入图片描述马的耳朵都匹配错了,OffetLoss却还很小,因此后续研究者提出了PermutationLoss。在这里插入图片描述

CrossEntropyLoss、PermutationLoss

基于Offset存在的问题,19年相关研究者提出了PermutationLoss,在论文中的全称为:Permutation Cross-Entropy Loss,论文中也提到’Cross entropy loss is adopted to train our model end-to-end’。因此PermutationLoss的核心其实就是一个交叉熵,而计算交叉熵的对象是上一节提到的s矩阵,即配对矩阵(Permutation矩阵),公式表达如下:

在这里插入图片描述
但两者在工程代码实现中还是有细微区别,从而导致采用这两个loss分别产生的损失量值不同。
在这里插入图片描述
在这里插入图片描述

我们利用两者各自的LATAX公式代码生成他们的公式如下:

在这里插入图片描述

在这里插入图片描述
怀疑CE的工程实现有一些问题,后面再探讨。

PermutationLossHung(Focal Loss)

20年,针对PermutationLoss 存在的 可能的负样本淹没问题(猜的),PermutationLossHung被提出。

在这里插入图片描述

与PermutationLoss唯一的区别在于Z矩阵的引入,什么是这里的Z矩阵呢?

论文中Z矩阵的计算公式如下:
在这里插入图片描述这里的Atten 函数,就是一个取并集的操作,即论文中提到的 an element-wise 'logic OR’function 。

而这里是那两个集合取并集呢?从论文的图三我们可以得到答案。
在这里插入图片描述将预测的Permutation矩阵(右上)和真实的Permutation矩阵(左下)作并集操作,得到attention activation矩阵(下中)。

这样做的物理意义是?
只对充满歧义的匹配进行关注,有点像FocalLoss。

并且论文中提到:‘once the match-ing score is calculated in an element-wise fashion’,进一步得在FocalLoss 和 ‘a specifically designed margin loss’上进行了实验。

为什么可以在FocalLoss等上也进行实验?后面再探讨。

HammingLoss

20年,HammingLoss被提出,旨在解决 perm中对离散矩阵反向传播时梯度截断的 问题,放弃原有的交叉熵的形式(理由?)。

损失形式:
在这里插入图片描述
在这里插入图片描述
和perm进行对比发现:

InnerProductLoss

该损失用于自监督问题,暂时不探讨。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于深度学习的Graph Matching中损失函数的理解 的相关文章

  • QQ空间迁移_【Proxmox_使用国内源安装ceph】

    Proxmox 使用国内源安装ceph 2020 12 13 20 21 35 使用web 页面安装ceph 会自动更新ceph list 源为国外的官网文件 xff0c 那速度太慢了 通过后台查看运行的命令 apt get no inst
  • PROXMOX 防火墙的奇怪问题

    第一次遇到这个问题是这样的 xff0c 一旦开启PROXMOX 的群集防火墙 xff0c prokvm云管平台的认证机制就失效 最奇怪的是一定要删除 etc pve firewall目录下的cluster fw文件并重启物理服务器 xff0
  • 为内网服务器建立私有pip仓库源

    项目场景 xff1a 在高校和企业中 xff0c 处于安全的考虑 xff0c 公司和实验室的重要服务器会隔绝外网的访问 xff0c 只能内网访问 在这些服务器上运行代码 xff0c 就会很难从网上下载数据 xff0c 安装或更新python
  • Week6限时模拟-掌握魔法の东东 II

    week6限时模拟 掌握魔法 东东 II 思路 xff1a 考虑使用结构体表示牌 xff0c 使用数组表示所有牌 xff0c 之后问题转化为从A B张牌中选出三张牌 xff0c 并且三张牌不是初始的两张牌 xff0c 对于5张牌进行判断类型
  • fdisk命令找不到的解决方法

    fdisk xff1a command not found 原因 xff1a 命令fdisk 不在你的命令搜索路径中 解决办法 xff1a 将fdisk添加到你的命令搜索路径中 方法如下 xff1a 先进入root用户 再查看你当前的命令搜
  • python利用pytesseract识别图片验证码

    1 pytesseract是什么 pytesseract是python的一个光学字符识别模块 可用来做图片文字识别 2 什么是光学字符识别 光学字符识别即Optical Character Recognition xff0c 简称OCR x
  • 机器学习(深度学习)中的反向传播算法与梯度下降

    这是自己在CSDN的第一篇博客 xff0c 目的是为了给自己学习过的知识做一个总结 xff0c 方便后续温习 xff0c 避免每次都重复搜索相关文章 一 反向传播算法 定义 xff1a 反向传播 Backpropagation xff0c
  • win10网络配置从公用网络修改专用网络

    windows10 网络配置选择公用网络以后在网络和共享中心配置中无法通过进行修改网络模式 xff0c 需要修改成专用网络可以按以下方式修改 1 点击右下角网络图标 xff0c 选择网络设置 2 选择管理已知网络 3 选择需要修改的网络连接
  • 【转载】while(~scanf("%d", &n))的~的含义

    是按位取反 scanf的返回值是输入值得个数 如果没有输入值则返回 1 对于 1按位求反得到0 所以如果没有输入则退出循环 转载自 https github com liuchuo
  • 【转载】为何程序员喜欢将INF设置为0x3f3f3f3f?

    在算法竞赛中 xff0c 我们常常需要用到一个 无穷大 的值 xff0c 对于我来说 xff0c 大多数时间我会根据具体问题取一个99999999之类的数 xff08 显得很不专业啊 xff01 xff09 在网上看别人代码的时候 xff0
  • n&(1<<i)的含义

    1 lt lt i 是将1左移i位 xff0c 即第i位为1 xff0c 其余位为0 xff1b 例如1 lt lt 2 则0001 gt 0100 n amp 1 lt lt i 是将左移i位的1与n进行按位与 xff0c 即为保留n的第
  • IntelliJ强制更新Maven Dependencies

    Intellj 自动载入Mave依赖的功能很好用 xff0c 但有时候会碰到问题 xff0c 导致pom文件修改却没有触发自动重新载入的动作 xff0c 此时需要手动强制更新依赖 如下 xff1a 手动删除Project Settings里
  • 【区块链专场】区块链技术的回顾与展望-2017CCTC大会-专题视频课程

    区块链专场 区块链技术的回顾与展望 1423人已学习 课程介绍 当今 xff0c 企业 上云 节奏正在加速 xff0c 特别是在以人工智能技术为代表的新一波技术浪潮推动下 xff0c 企业一方面通过云技术增强了自身的数据存储连接 计算以及智
  • 【区块链专场】区块链原理及保险业应用思考-2017CCTC大会-专题视频课程

    区块链专场 区块链原理及保险业应用思考 1079人已学习 课程介绍 当今 xff0c 企业 上云 节奏正在加速 xff0c 特别是在以人工智能技术为代表的新一波技术浪潮推动下 xff0c 企业一方面通过云技术增强了自身的数据存储连接 计算以
  • 【区块链专场】区块链智能资产开发实践-2017CCTC大会-专题视频课程

    区块链专场 区块链智能资产开发实践 1161人已学习 课程介绍 当今 xff0c 企业 上云 节奏正在加速 xff0c 特别是在以人工智能技术为代表的新一波技术浪潮推动下 xff0c 企业一方面通过云技术增强了自身的数据存储连接 计算以及智
  • 【区块链专场】企业级区块链开发平台-2017CCTC大会-专题视频课程

    区块链专场 企业级区块链开发平台 1245人已学习 课程介绍 当今 xff0c 企业 上云 节奏正在加速 xff0c 特别是在以人工智能技术为代表的新一波技术浪潮推动下 xff0c 企业一方面通过云技术增强了自身的数据存储连接 计算以及智能
  • 【区块链专场】深入理解跨链技术-2017CCTC大会-专题视频课程

    区块链专场 深入理解跨链技术 1123人已学习 课程介绍 当今 xff0c 企业 上云 节奏正在加速 xff0c 特别是在以人工智能技术为代表的新一波技术浪潮推动下 xff0c 企业一方面通过云技术增强了自身的数据存储连接 计算以及智能应用
  • Ubuntu下显卡超频方式

    按照网上很多blog所推荐的指南操作 xff0c 报错太多 xff0c 后面换了下面这种方式 xff0c 成功对GPU 核心频率进行调整 查看nvidia smi的命令手册 span class token function sudo sp
  • Hyperledger技术实践与案例分享-2017CCTC大会-专题视频课程

    Hyperledger技术实践与案例分享 1706人已学习 课程介绍 当今 xff0c 企业 上云 节奏正在加速 xff0c 特别是在以人工智能技术为代表的新一波技术浪潮推动下 xff0c 企业一方面通过云技术增强了自身的数据存储连接 计算
  • 【区块链专场】共识简史-2017CCTC大会-专题视频课程

    区块链专场 共识简史 1058人已学习 课程介绍 当今 xff0c 企业 上云 节奏正在加速 xff0c 特别是在以人工智能技术为代表的新一波技术浪潮推动下 xff0c 企业一方面通过云技术增强了自身的数据存储连接 计算以及智能应用能力 x

随机推荐