论文首次将深度学习同图匹配(Graph matching)结合,设计了end-to-end网络去学习图匹配过程。网络
是两个图(Graph)之间的类似度矩阵。函数
拿其中的 imageNet 的鸟举例以下图,使用的是另外一篇论文使用的数据集。数据特色:①鸟的姿态几乎一致②每一个鸟选取15个关键点。这样就默认不一样二图中相对应的点(以下图不一样颜色的点)是 一 一 匹配的,即看成ground-truth。具体如何将image输入获得graph,下文讲。学习
由1.2节咱们知道了ground-truth,因此loss的设计:由于咱们已经知道二图目标点的相互匹配结果,因此对于网络训练获得的匹配结果,咱们使用网络输出的结果和真实匹配点之间的物理位移做为考量因素。具体见下文。spa
按顺序大概介绍每层功能:设计
第一层(预处理):将上文提到的数据集(好比鸟:①姿态一致②两图15个关键点)经过vgg16提取特征。一阶特征表明点的特征信息,二阶特征表明边的特征信息,分别使用浅层的relu4_2激活信息和relu5_1的激活信息,分别记做F和U,下图的U,F的上标表示两个图。输入二图,输出F,U对象
第二层:经过输入的F,U构建二图的类似度矩阵。输入上一层的F,U,输出类似度矩阵Mblog
第三层:输入M,输出v*。主要求解类似度矩阵的最大特征向量,看成近似的图匹配的解get
第四层:输入v*,输出排列阵S。主要将排列阵按行、列 归一化,归一化成双随机矩阵深度学习
第五层:对排列阵S,按几率选择每个点对应的匹配结果数学
第六层:求loss,并反向传播
使用VGG16提取点、边的特征信息,输入到下一层。分别记做F、U,上标表示二图
介绍下论文使用的类似度矩阵,使用分解形式以下:
二图的边和点结点分别为:n点p边。m点q边。[..]是将向量变成diagonal矩阵。vec()是将矩阵按列(有些论文是按行)
第一项[vec(Mp)]是正则项。
看下图,H1,G1分别表明图一的点和边结点的表示,H二、G2相似。
Me表示边结点类似度,X、Y的构成不包含运算,我的认为是输入的F、U的拼接。其中 是要训练的对象
其中 “:”表示矩阵的内积(对应元素相乘)。(4)式表示函数的偏导数
该层的后向传播分析:由于上一层传入的变量是FU,参数存储在 “半三角形”这个符号中,因此须要求出对FU的偏导,更具上一节,即等于求出X Y的偏导。
中间的为推导须要使用的公式。
由于图匹配数学模型为,其中M为上文的类似度矩阵,为了使上式最大化,可以使用M的最大特征向量来近似,因此这层先使用幂迭代方法,求出M的最大特征向量。(经过闭式解方法)
该层反向传播:
推导中红线第一个等式:
因此结果:
为了进一步下降计算复杂度:
最终结果:
这层就是将上一层输入的vk向量变成双随机矩阵。分别进行行、列的归一化。
那么进一步推导反向传播:
输入时上一层的s双随机矩阵,因此只要选出几率最大的点就表明这两个点互相匹配,这里的loss函数就是计算匹配的点和真实点的物理位置。
设计基本按照softmax而来。可是我有疑问,就是为何要减去Pi,感受不用减,在(23)式中不是在减了嘛?
其中P式m*2维数,因此应该是第二张图的个点的物理位置。
有作图匹配的同窗欢迎交流!!