论文阅读笔记《GAMnet: Robust Feature Matching via Graph Adversarial-Matching Network》
核心思想
本文提出一种基于图对抗神经网络的图匹配算法(GAMnet),使用图神经网络作为生成器分别生成源图和目标图的节点的特征,并用一个多层感知机作为辨别器来区分两个特征是否来自同一个图,通过对抗训练的办法提高生成器特征提取的质量。然后采用可学习的方式获取节点关联矩阵和边关联矩阵。最后,设计了一个稀疏的图匹配求解器,相对于连续空间内的求解方法,该方法引入了图匹配中节点一一匹配的稀疏约束。并且这个操作是可微的,因此整个网络可以端到端的训练。

实现过程
首先,给出图的定义形式,本文采用的是节点-边指示矩阵的表示方法G={X,Z,G,H}G=\{\mathbf{X,Z,G,H}\}G={X,Z,G,H},其中X\mathbf{X}X表示节点特征,Z\mathbf{Z}Z表示边特征,G,H\mathbf{G,H}G,H表示节点-边指示矩阵,用于描述节点之间的连接关系。对于源图GsG_sGs和目标图GtG_tGt分别包含nsn_sns和ntn_tnt个节点,节点和边的关联矩阵分别为Sv\mathbf{S_v}Sv和Se\mathbf{S_e}Se,图匹配的目标就是寻找最优的节点对应关系(匹配)矩阵P∈{0,1}ns×nt\mathbf{P}\in\{0, 1\}^{n_s\times n_t}P∈{0,1}ns×nt,目标函数与约束条件如下

其中Q=(HsTPHt⊙GsTPGt)\mathbf{Q=(H_s^TPH_t\odot G_s^TPG_t)}Q=(HsTPHt⊙GsTPGt),Q\mathbf{Q}Q中的每个元素描述了两幅图边和边之间的匹配关系。
给定源图GsG_sGs和目标图GtG_tGt,利用图神经网络作为生成器G\mathcal{G}G用于提取对应的特征X~s\widetilde{\mathbf{X}}_sXs和X~t\widetilde{\mathbf{X}}_tXt

Θ\ThetaΘ表示网络参数,本文选用SplineCNN作为生成器。经过特征提取得到源图和目标图中每个节点的特征向量x~h∈X~h\widetilde{x}_h\in\widetilde{\mathbf{X}}_hxh∈Xh和x~k∈X~k\widetilde{x}_k\in\widetilde{\mathbf{X}}_kxk∈Xk,其中h,k∈{s,t}h,k\in\{s,t\}h,k∈{s,t},这表示x~h\widetilde{x}_hxh和x~k\widetilde{x}_kxk既有可能来自与源图也有可能来自于目标图,作者将二者组合成一个节点对ϕhk=(x~h,x~k)\phi_{hk}=(\widetilde{x}_h,\widetilde{x}_k)ϕhk=(xh,xk),如果h=kh=kh=k则两者来自同一个图,如果h≠kh\neq kh=k则两者来自不同的图。根据两者是否来自同一个图,可以将所有的节点对分成正节点对Sp\mathcal{S}_pSp和负节点对Sn\mathcal{S}_nSn两类

通过特征向量逐元素相加的x~h+x~k\widetilde{x}_h+\widetilde{x}_kxh+xk方式得到节点对ϕhk\phi_{hk}ϕhk的特征向量,并利用一个由多层感知机构成的辨别器来区分当前输入的节点对是否来自同一个图,辨别器输出一个类别指示向量

D(p)(ϕhk)\mathcal{D}^{(p)}(\phi_{hk})D(p)(ϕhk)表示该节点对为正节点对的概率,D(n)(ϕhk)\mathcal{D}^{(n)}(\phi_{hk})D(n)(ϕhk)表示该节点对为负节点对的概率。在生成器和辨别器对抗训练的过程中,生成器要不断提高源图和目标图匹配节点特征的相似性,以混淆辨别器。辨别器也要不断提高区分能力,以分辨两个节点特征是否来自同一个图。图对抗神经网络的损失函数为

得到节点的特征向量x~s,x~t\widetilde{x}_s,\widetilde{x}_txs,xt后,边特征向量z~s,z~t\widetilde{z}_s,\widetilde{z}_tzs,zt是对应两个节点的特征向量之差。然后可以构建节点关联矩阵Sv\mathbf{S_v}Sv和边关联矩阵Se\mathbf{S_e}Se


w,w′\mathbf{w,w'}w,w′分别表示节点关联矩阵和边关联矩阵中的可学习权重参数。
最后,作者提出一个稀疏的图匹配求解器用于计算最优匹配关系矩阵P\mathbf{P}P,由于原目标函数求解是NP-hard的,因此必须要对约束条件进行一定的松弛,本文采用的是单位正交非负松弛条件,即

并采用一种高效的乘法更新算法(effective multiplicative update algorithm)求解上述目标函数。具体而言,给定一个初始化的解P(0)\mathbf{P}^{(0)}P(0),按照下述迭代过程不断更新直至收敛

其中

上述迭代过程最终会收敛到一个最优的稀疏解,这也就引入了离散的节点一一匹配的约束。此外,上述更新过程是连续且可微的,因此可以采用端到端的训练方法。为了保证得到的最有对应关系矩阵P\mathbf{P}P与真实的匹配矩阵H\mathbf{H}H保持尺度一致性,作者进一步采用了Sinkhorn算法作为一种规范化处理操作,这并不会改变矩阵P\mathbf{P}P的稀疏性。最后作者用交叉熵损失函数对整个网络进行训练

P~ij\widetilde{\mathbf{P}}_{ij}Pij表示对P\mathbf{P}P进行Sinkhorn规范化操作。
创新点
- 采用图对抗神经网络用于特征提取
- 提出了一种稀疏的图匹配求解器,引入了节点一一匹配的约束
算法总结
本文是我看到的首次将图对抗神经网络应用到图匹配领域中的,利用对抗训练的方式增加匹配点之间的特征相似度,而增大非匹配点之间的差异性,提高匹配的效果。但本文是减少了不同图之间特征的差异性,来试图混淆辨别且。这会不会导致,两个来自不同的图的非匹配点之间的差异性也变小呢?这一点我还没有搞清楚。
相关文章:
论文阅读笔记《GAMnet: Robust Feature Matching via Graph Adversarial-Matching Network》
核心思想 本文提出一种基于图对抗神经网络的图匹配算法(GAMnet),使用图神经网络作为生成器分别生成源图和目标图的节点的特征,并用一个多层感知机作为辨别器来区分两个特征是否来自同一个图,通过对抗训练的办法提高生成器特征提取…...
数据安全—数据完整性校验
1、数据安全保障三要素即 保密性 完整性、可用性机密性:要求数据不被他人轻易获取,需要进行数据加密。完整性:要求数据不被他人随意修改,需要进行签名技术可用性:要求服务不被他人恶意攻击,需要进行数据校验…...
Java 最小路径和
最小路径和中等给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid [[1,3,1],[1,5,1],[4,2,1]]输出&…...
Flask+VUE前后端分离的登入注册系统实现
首先Pycharm创建一个Flask项目: Flask连接数据库需要下载的包: pip install -U flask-cors pip install flask-sqlalchemy Flask 连接和操作Mysql数据库 - 王滚滚啊 - 博客园 (cnblogs.com) sqlAlchemy基本使用 - 简书 (jianshu.com) FlaskVue前后端分…...
【Go】用Go在命令行输出好看的表格
用Go在命令行输出好看的表格前言正文生成Table表头设置插入行表格标题自动标号单元格合并列合并行合并样式设置居中设置数字自动高亮标红完整Demo代码结语前言 最近在写一些运维小工具,比如批量进行ping包的工具,实现不困难,反正就是ping&am…...
怎么处理消息重发的问题?
消息队列在消息传递的过程中,如果出现传递失败的情况,发送方会重试,在重试的过程中,可能会产生重复的消息。 消息重复的情况必然存在 关于传递消息时能够提供的服务质量标准,MQTT协议给出了三种不同的标准࿱…...
JVM 运行时数据区(数据区组成表述,程序计数器,java虚拟机栈,本地方法栈)
JVM 运行时数据区JVM 运行时数据区3.1运行时的数据区组成概述3.1.1程度计数器3.1.2java虚拟机栈3.1.3本地方法栈3.1.4java堆3.1.5方法区3.2程序计数器3.3java虚拟机栈3.4本地方法栈JVM 运行时数据区 堆,方法区(元空间) 主要用来存放数据 是线程共享的. 程序计数器,本地方法栈…...
Oracle ASM磁盘组配置、日常运维、故障处理等操作资料汇总
ASM(自动存储管理)在数据库中是非常重要的组成部分,它可以为磁盘提供统一的存储管理、提高磁盘访问的性能和可用性、简化管理复杂度,从而为数据库的运行提供更好的支持。这里就为大家整理了墨天轮数据社区上一些ASM相关基础知识、…...
java对象的创建与内存分配机制
文章目录对象的创建与内存分配机制对象的创建类加载检查分配内存初始化零值设置对象头指向init方法其他:指针压缩对象内存分配对象在栈上分配对象在Eden区中分配大对象直接分配到老年代长期存活的对象进入老年代对象动态年龄判断老年代空间分配担保机制对象的内存回…...
本地存储localStorage、sessionStorage
目录 一、localStorage 二、sessionStorage 三、本地存储处理复杂数据 一、localStorage 介绍 (1)数据存储在用户浏览器中 (2)设置、读取方便、甚至页面刷新不会丢失数据 (3)容量较大,se…...
JavaSE: 网络编程
1.1 概述java程序员面对统一的网络编程环境B/S 架构 和 C/S架构1.2 网络通信的两个要素通信双方的地址:ip 端口号网络通信协议:TCP/IP协议(事实上的国际规则)、OSI模型(理想化)1.3 Inet Address本地回环地…...
计算机图形学09:二维观察之点的裁剪
作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、二维观察基本…...
2023Java 并发编程面试题
Java 并发编程 1、在 java 中守护线程和本地线程区别? java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(boolon…...
CAD如何绘制A0/A1/A2/A3/A4图框?
在CAD制图时,设计师一般会使用企业的定制图框模板或者个人的特色图框模板,让设计方案更加标准化、规范化。对于新人设计师而言,完成CAD制图已经非常头疼了,图框的绘制更是手忙脚乱。那么是否有更加高效的方式来完成A0、A1、A2、A3…...
R 安装 “umap-learn“ python 包
首先需要在R中下载并读取reticulate包,该包提供了一系列R-Python的交互式命令由于之前在电脑中通过三个方式安装了Python:直接安装 Python 3.10安装Anaconda,携带3.9安装 Miniconda,又是另外一个版本的Python版本各不相同…...
测试同学如何快速开发测试平台?
转眼已经好几个月没有发表什么文章了,因为疫情原因,大家工作都不怎么顺利,没有什么心情。再者,最近一直在搞移动端精准测试的项目,有太多技术难点需要攻克。从各个网站上都找不到解决方案,只能不断地尝试&a…...
【程序员接口百宝箱】免费常用API接口
一、短信发送 短信的应用可以说是非常的广泛了,短信API也是当下非常热门的API~ 短信验证码:可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商,3秒可达,99.99%到达率,支持大容量高并发。…...
使数组和能被P整除[同余定理+同余定理变形]
同余定理同余定理变形前言一、使数组和能被P整除二、同余定理变形总结参考资料前言 同余定理非常经典,采用前缀和 map,当两个余数前缀和为一个值时,则中间一段子数组刚好对P整除。但是能否找到前面是否有一段子数组和可以对P整除呐…...
25k的Java开发常问的Synchronized问题有哪些?
前言:面试高频的Synchronized问题大多集中在应用场景、底层实现原理、锁的升级过程。 文章目录 Synchronized定义应用场景对象加锁实现原理JDK6以前JDK6版本及以后对象从无锁到偏向锁转化的过程(大概讲五分钟)轻量级锁升级的过程(大概讲五分钟)自旋锁策略(大概讲五分钟)…...
ES增量同步方案
1 基于业务代码嵌入式的增量同步方式在Java业务代码要修改业务数据的地方,增加调用写入ES数据的方法优点:1、实现方式简单,可控粒度高;2、不依赖第三方数据同步框架;3、数据库不用做特殊配置和部署;缺点&am…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
