从Superpoint到SuperGlue再到其它基于深度学习的图像匹配算法,几乎都用到了Sinkhorn,到底什么是Sinkhorn,参考了一篇外文,写的很清晰,翻译了一部分,供大家参考。

(注意,本文不分析Sinkhorn到底如何用于图/图像匹配,但如果看懂本文,我想这一问题就不在话下了)

Sinkhorn解决的是最优传输问题,简单讲就是把一个概率分布以最小代价转换成另外一个分布(此非人话,不理解也无妨,我也很讨厌这种过于学术的表述,不利于知识传播,但是确实没想出来到底怎么表述更合理更易于理解)

用例子解释一下问题

现有5种小吃,merveilleux, eclair, chocolate mousse, bavarois, carrot cake,每种小吃数量如下图所示,

实验室开party,要将这些小吃分享给8位同事,Bernard, Jan, Willem, Hilde, Steffie, Marlies, Tim, Wouter, 每个人对小吃的需求量如下图所示。

每个人对各小吃的喜爱程度如下表所示,其中-2分表示非常不喜欢,2分表示非常喜欢。

我们的任务(问题)是将这些小吃分发给这8个同事,同时使得大家满意度最高。

问题数学表述

  • 令r记录每个人所获得的小吃的数量,,这里r的维度为8,为使得后续分析更具普遍性,此处记为n.
  • 令c记录每种小吃有多少份,,这里c的维度为5,记为m.

一般地,r,c 表示边缘分布(就是从一个概率分布转为另一个概率分布的两个分布),因此rc中元素之和需为1,这个在后续程序里会处理一下.

  • 定义

包含所有可能的小吃分配方案。注意,这里每份小吃是可以随意切割进行分配的.

  • 每个用户对各小吃的喜爱程度存储在矩阵中(矩阵在其它资料中也被成为代价矩阵,本例中将矩阵中的元素取负即可得到其对应的代价矩阵)

最终问题可表示为,

其中又被称为 Wasserstein 距离.

此外,上述问题还可添加正则项,使得问题的描述更加合理,即,

又被成为Sinkhorn距离。在本例中,这样做一方面可以尽可能给每个人分配他们最喜欢的食物,但同时又尽量满足均匀分布…(不清楚具体含义,原文为trying to give every person only their favorites or encouraging equal distributions.)

解决方法:Sinkhorn

上述问题最优解可表示为,

其中为要求解的常数,具体的,Sinkhorn伪代码为

具体实现(python)

def compute_optimal_transport(M, r, c, lam, epsilon=1e-8):"""Computes the optimal transport matrix and Slinkhorn distance using theSinkhorn-Knopp algorithmInputs:- M : cost matrix (n x m)- r : vector of marginals (n, )- c : vector of marginals (m, )- lam : strength of the entropic regularization- epsilon : convergence parameterOutputs:- P : optimal transport matrix (n x m)- dist : Sinkhorn distance"""n, m = M.shapeP = np.exp(- lam * M)P /= P.sum()u = np.zeros(n)# normalize this matrixwhile np.max(np.abs(u - P.sum(1))) > epsilon:u = P.sum(1)P *= (r / u).reshape((-1, 1))#行归r化,注意python中*号含义P *= (c / P.sum(0)).reshape((1, -1))#列归c化return P, np.sum(P * M)

假设输入为:

M(这里没有照搬上述例子中的代价矩阵,而是随机生成的,懒得一个一个输入啊~~~):

[[6.74620535e-01 6.51487856e-01 7.63909999e-01 1.22160802e-02  9.84285854e-01][5.21836427e-02 6.98448351e-01 4.21872002e-04 5.77616315e-01  9.98398433e-01][4.81595322e-01 8.59043865e-01 8.91100944e-01 1.27449590e-01  7.85357602e-01][1.40637778e-01 5.98949422e-02 5.23676192e-02 1.44150411e-02  4.74618963e-01][7.16849610e-01 2.82412228e-01 8.81465978e-01 2.55082618e-01  5.39586731e-01][4.49385127e-01 7.78590147e-01 1.31048710e-03 8.68770877e-02  6.10843349e-01][1.78421067e-02 7.53684632e-01 4.42902867e-01 7.38736941e-01  9.92555963e-01][8.16664868e-01 3.12881863e-01 5.54218820e-01 6.13135979e-01  8.86964971e-01]]

c:

[0.2 0.1 0.3 0.2 0.2]#[4,2,6,4,4]/sum([4,2,6,4,4])

r:

[0.15 0.15 0.15 0.2  0.1  0.1  0.1  0.05]#[3,3,3,4,2,2,2,1]/sum([3,3,3,4,2,2,2,1])

lam:5

则经运算输出为:

P:

[[0.01079512 0.01032116 0.01212201 0.09937232 0.01738938][0.04414505 0.00148527 0.10035015 0.00107044 0.0029491 ][0.03008735 0.0038818  0.00681382 0.05929886 0.04991816][0.02832576 0.03612279 0.07728489 0.0178614  0.04040515][0.00322536 0.02411107 0.00248517 0.01088774 0.05929066][0.00433108 0.00071122 0.07141918 0.00890056 0.01463795][0.07703699 0.00165618 0.01614092 0.00070298 0.00446294][0.00205329 0.02171051 0.01338386 0.00190569 0.01094666]]

P col sum:

[0.2 0.1 0.3 0.2 0.2]

P row sum:

[0.14999999 0.15000001 0.15       0.2        0.1        0.1     0.1        0.05      ]

distance:

0.24870527608715712

--------------------------------------------------------------------------

翻译自:https://michielstock.github.io/OptimalTransport/     原作者:Michiel Stock

Sinkhorn算法相关推荐

  1. Sinkhorn算法,正矩阵与双随机矩阵之间的关系

    Sinkhorn算法 Sinkhorn 算法描述了任意一个正矩阵(元素均为正)与双随机矩阵之间的关系. 简略描述 Relations between arbitrary positive matric ...

  2. 基于haar特征的adaboost算法_SuperGlue一种基于图卷积神经网络的特征匹配算法

    ETHZ ASL与Magicleap联名之作,CVPR 2020 Oral(论文见文末),一作是来自ETHZ的实习生,二作是当年CVPR2018 SuperPoint 的作者Daniel DeTone ...

  3. CVPR 2021| 基于深度图匹配的鲁棒点云配准框架

    Robust Point Cloud Registration Framework Based on Deep Graph Matching 代码地址:在公众号「3D视觉工坊」,后台回复「鲁棒点云」, ...

  4. 知物由学 | AI与黑产的攻守之道,详解攻击类文字图像的检测

    导读:随着 OCR 系统识别能力的提升,专业对抗 OCR 的黑产也越来越多,这个过程中 AI 如何抵御黑产攻击类的文字图像?本文通过分享相似性特征训练的常见算法,并选择了其中一些有代表性的工作进行介绍 ...

  5. 【论文笔记】匹配关系未知情况下点云配准Solving the Blind Perspective-n-Point ProblemEnd-To-End With Robust Differentiabl

    澳大利亚国立大学,澳大利亚机器人视觉中心 本文解决的问题:BLind Perspective-n-Point(BPnP) 与Perspective-n-Point(PnP) 问题的区别在于PnP是已知 ...

  6. 最优运输(Optimal Transfort):从理论到填补的应用

    舞动的心 博客园首页新随笔联系管理随笔 - 517 文章 - 0 评论 - 161 阅读 - 95万 最优运输(Optimal Transfort):从理论到填补的应用 目录 引言 1 背景 2 什么 ...

  7. 【CVPR 2021】基于Wasserstein Distance对比表示蒸馏方法:Wasserstein Contrastive Representation Distillation

    [CVPR 2021]基于Wasserstein Distance对比表示蒸馏方法:Wasserstein Contrastive Representation Distillation 论文地址: ...

  8. 【预训练视觉-语言模型文献阅读文献阅读】最新BERT模型——UNITER: UNiversal Image-TExt Representation Learning

    [预训练视觉-语言模型文献阅读文献阅读]最新BERT模型--UNITER: UNiversal Image-TExt Representation Learning 文章目录 [预训练视觉-语言模型文 ...

  9. ACL2021最佳论文VOLT:通过最优转移进行词表学习

    作者 | 太子长琴 整理 | NewBeeNLP 今天一起来看看热议的ACL2021 best paper,一句话概述:借鉴边际效用通过最优转移学习词表. 论文:Vocabulary Learning ...

  10. Vocabulary Learning via Optimal Transport for Neural Machine Translation论文解读

    abstract token vocabulary的选择对机器翻译结果的影响比较大 本文研究什么样才是好的词表,并且能不能不通过训练直接找到最优的词表 首先提供一种从信息理论的角度来分析词表的作用 通 ...

最新文章

  1. Mac下chrome的webapp hostadmin 快速切换host
  2. 独家 | 是什么让数据科学家从优秀变得伟大?
  3. IT专案管理中的风险控制。
  4. Eclipse新建Maven项目没有web.xml
  5. P1850-换教室【数学期望,dp,Floyd】
  6. redisb并发访问慢出现的问题
  7. linux从前往后读取文件夹图片名称,Linux目录和文件中的常用命令(三)
  8. mysql数据库详细设计实例_MYSQL数据库设计和数据库设计实例(二)
  9. python平均分及格率优秀率_跪求:请问怎样统计均分、优秀率、及格率、低分率的问题...
  10. stc89c52 单片机模块
  11. 九校联考-长沙市一中NOIP模拟Day1T2 跳房子(jump)
  12. 苞米豆mybatis-plus generator代码生成器3.5.1版本 Freemarker引擎
  13. 帆软通过js删除数据库表中的数据
  14. 大数据Clouder专项技能认证课程:Quick BI企业报表制作
  15. vue 竖向纵向仿表格 动态渲染表头表格 根据id填充单元格
  16. 开发者不可错过的 10 个人工智能开源项目
  17. 北大韦神答辩PPT,最后一页文字被挑剔!
  18. 基于离散余弦变换(DCT)傅里叶变换(DFT)小波变换(DWT)的彩色图像数字水印的嵌入、提取简介及MATLAB实现
  19. 大数据之路 阿里巴巴大数据实践 读书笔记
  20. 面向服务架构SOA相关概念

热门文章

  1. 46相关度评分TFIDF算法
  2. python下雨动画特效_pygame实现烟雨蒙蒙下彩虹雨
  3. 【WSL2 Win10】解决子系统中nividia-smi出现的Failed to initialize NVML GPU access blocked by the operating systeM
  4. 对团队中“这是某某某的问题”引起的思考
  5. PSP实机用虚拟机wifi网卡联机
  6. 锂电池放空后充不进电_锂电池放置太久无法充电 血的教训!
  7. swb-2润湿平衡测试仪_自动化测试
  8. linux命令大全 load,linux命令TOP参数load average详解[转]
  9. 示波器的带宽和采样率
  10. 在centOS系统上python导入baidu-aip