当前位置: 首页> 汽车> 时评 > 理解dual softmax

理解dual softmax

时间:2025/8/14 20:53:14来源:https://blog.csdn.net/qq_19859865/article/details/142105716 浏览次数: 0次

在lightglue中,通过dual softmax的使用,我们替换了superglue中的sinkhorn环节。

其具体操作如下:

基于来自图像A的[[1, n, 256])] 维度的特征描述子,以及来自图像B的[1, m, 256]的描述子,首先经过linear层的操作,将其转换为[1, n, 1] 和 [1, m, 1]的特征,对应下列函数中的z0和z1。然后,两张图片的特征向量经过einsum的操作     sim = torch.einsum("bmd,bnd->bmn", mdesc0, mdesc1), 得到了[1,n,m]的矩阵。   然后,基于在两个维度的softmax和转秩操作,我们实现了dual softmax。

之后,我们将z0,z1的数值与dual softmax的数值相结合,并将最后一行,和一列做特殊的填充,我们就实现了lightglue中稍微有点特殊的dual softmax的操作。

def sigmoid_log_double_softmax(sim: torch.Tensor, z0: torch.Tensor, z1: torch.Tensor
) -> torch.Tensor:"""create the log assignment matrix from logits and similarity"""b, m, n = sim.shapecertainties = F.logsigmoid(z0) + F.logsigmoid(z1).transpose(1, 2)scores0 = F.log_softmax(sim, 2)scores1 = F.log_softmax(sim.transpose(-1, -2).contiguous(), 2).transpose(-1, -2)scores = sim.new_full((b, m + 1, n + 1), 0)scores[:, :m, :n] = scores0 + scores1 + certaintiesscores[:, :-1, -1] = F.logsigmoid(-z0.squeeze(-1))scores[:, -1, :-1] = F.logsigmoid(-z1.squeeze(-1))return scores

关键字:理解dual softmax

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: