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

本文概述了ThinkMatch工程中关键的损失函数,如OffsetLoss、PermutationLoss、PermutationLossHung、HammingLoss等,介绍了它们在GraphMatching中的应用,包括OffsetLoss的计算原理、PermutationLoss的改进及其交叉熵核心、以及HammingLoss对离散矩阵优化的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍以下损失函数:
①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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值