简介:面向计算机视觉方向毕业设计的论文插图需求,一套可直接修改的Superglue与Superpoint算法框架图以docx格式封装,共1个文件、约390KB,便于在Word中调整节点、连线与标注。内容覆盖Superpoint自监督特征检测与描述符学习流程、单应性自适应图像变换机制,以及Superglue基于图神经网络和注意力机制的匹配全过程,包括关键点编码、得分矩阵计算、最优传输与特征分配等关键模块。图示中保留了原始论文的结构逻辑,同时将“垃圾桶”得分、自注意力/交叉注意力等机制以框图形式清晰呈现,便于二次绘制和讲解。已有588人学习下载,可作为毕业论文、课程设计或技术博客中的配图素材,帮助读者更直观地理解图像配准与特征匹配算法的内在结构。
1. SuperGlue论文内算法框架图(可修改)docx版本:到底改的是什么
不少人拿到SuperGlue论文里的算法框架图,第一个反应是截个图放进Word。结果放大后边缘发虚,想改一个术语只能重新截图,想挪动某个模块的位置更是无处下手。“superglue论文内算法框架图(可修改)docx版本”这个需求,本质上不是要一张图,而是要一套能持续维护的图元集合。这篇笔记会带你从读懂论文图的结构开始,用绘图工具把图重绘成模块可拆、文字可改的版本,再用脚本把图精确插入docx,整个过程不依赖任何现成模板,也不需要你手工在Word里画几百个形状。适合正在写技术文档、论文配图或内部评审材料的工程师和研究者。
2. 拆解论文框架图:把四层结构与数据流变成可编辑图元
2.1 论文里那张图到底画了什么
SuperGlue的流程不是一条简单直线,而是两条输入图像并行处理、在中间层互相“通信”,最后输出匹配结果。论文里的算法框架图通常会表达这样几层意思。
第一层是输入侧,两幅图像分别进入特征提取网络,得到关键点和描述子。常见画法是一左一右两个图像框,各自引出一条箭头指向特征提取模块。
第二层是描述子编码层,特征提取网络输出的特征向量会在这里被整理成图结构的节点属性,对应到框架图里就是一个宽矩形,里面写着类似“Keypoint CNN / Descriptor”的文字。
第三层是注意力图神经网络,这是整个SuperGlue最核心的部分。特征点被当成图的节点,网络在节点之间做self-attention和cross-attention,反复迭代多次。论文图里常把它画成一个大的圆角矩形,内部并排两个子列,每个子列里堆叠好几层注意力块,旁边标注迭代次数或特征维度。
第四层是输出侧,经过注意力更新后的特征被送入最优传输层,通过Sinkhorn算法迭代求解匹配矩阵,最后输出带置信度的匹配点对。框架图里通常会画一个矩形表示Sinkhorn层,再画一条粗箭头指向两幅图之间的匹配连线。
如果你要画的图只截取了其中一部分,比如只画GNN内部结构,那整个层级关系会变,但核心数据流不变。我的经验是:动手画之前先确定这张图想说明哪件事,是整体流程,还是GNN内部机制。画整体流程时,模块可以画得粗一点;画内部机制时,每一个子模块都要单独成块。
2.2 从论文结构到绘图组件:模块、连线和文字标注怎么分配
把上面的分析落到绘图工具里,需要先做一次“翻译”。
| 论文结构 | 框架图里的表现形式 | 绘图建议 |
|---|---|---|
| 输入图像 | 两个矩形或图片占位,内部写“Image Left / Right” | 矩形即可,不需要贴实际照片,否则文件会变大 |
| 关键点检测 | 图像框下方的小圆点或小矩形 | 用椭圆形状,统一直径,表达“关键点集合” |
| 特征提取与描述子 | 一个宽矩形,标注“Keypoint CNN / Descriptor” | 用普通矩形,文字水平居中,宽度比高度大 |
| 注意力图神经网络 | 大圆角矩形包裹两个并列子列 | 子列内部用更小的圆角矩形,明确“self”和“cross”交替 |
| 最优传输层 | 一个矩形或带斜切角的形状,标注“Sinkhorn / OT” | 用菱形视觉上更有区分度,但矩形更省空间 |
| 匹配输出 | 连接两幅图像末端的粗箭头或线段组 | 使用带箭头的连线,线段数量少而清晰 |
连线的规划同样重要。论文里的连线方向代表着数据从输入流向输出,所以画图时一定要统一方向,常见的布局是自上而下或者从左到右。我一般把输入图像放在左上和左下(或左上和右上),然后向右侧汇入特征提取模块,再流向右下角的输出区域。这样阅读顺序和论文图文排列一致,别人看你的图画时不用花时间找方向。
文字标注是另一个容易被忽略的点。框架图里的文字分为三类:模块名、变量名、说明性注释。模块名用最大字号,变量名用次一级字号,注释用更小字号。很多人直接在drawio里复制论文里的公式变量名,结果中文字体和英文字体混在一起,导出后间距参差不齐。我更习惯把文字统一成“中文变量名(英文缩写)”这种格式,例如“注意力图神经网络(Attentional GNN)”,既便于答辩,也便于后期修改。
2.3 公式到底要不要画进图里:一个实用性取舍
论文里的框架图经常夹杂着数学符号,比如描述子维度、注意力头数、Sinkhorn迭代次数。很多人照抄时想把公式也画进docx图里,结果发现文字的公式格式一旦嵌进图形,后期非常难改。
我的建议是区分“变量名”和“公式推导”。变量名可以放进框架图,比如“d=128”表示描述子维度,或者“N=3”表示GNN迭代层数;但完整的公式推导,比如匹配得分矩阵的计算式,不要放进框架图。原因有两个:一是Word里对公式的原生支持是独立的公式编辑器,图形里的文字框无法使用公式域,粘进去也会变成图片;二是框架图的读者通常只需要理解数据流,具体公式在正文里读就好。
如果确实需要体现公式,一个常见做法是先用Word的公式编辑器写好公式,再在框架图相应模块处放一个空的文字占位符,比如“详见式(3)”。这样图保持干净,公式又没有被丢掉。这个取舍会直接影响你后面能不能保持“可修改”,值得在画图前就定下来。
3. 用draw.io重绘SuperGlue框架图:从画布设置到模块连线
3.1 画布与样式参数:决定导出清晰度和后续修改体验
draw.io 是画这种算法框图最顺手的工具,免费,支持导出多种格式,且导出时不会像某些格式那样把文字压平。新建绘图时选“空白框图”,接着在页面设置里把画布改成自定义大小。
我一般把画布设为宽1600像素、高900像素,这个比例接近16:9,复制到PPT或插入Word都不需要强行裁剪。如果模块数量特别多,宽度可以加到2000像素,但高度不要超过1200像素,否则插入Word后一行放不下,被拉到下一页。
样式参数直接关系统一性。矩形、圆角矩形、连线在draw.io里都有自己的样式字符串,我不会每次随手改颜色,而是先定好一组模板,再复制着用。下面是我常用的一组:
html=1;fontSize=13;fillColor=#FFFFFF;strokeColor=#000000;strokeWidth=1;whiteSpace=wrap;rounded=1;arcSize=10;html=1;fontSize=13;fillColor=#FAFAFA;strokeColor=#000000;strokeWidth=1;whiteSpace=wrap;edgeStyle=orthogonalEdgeStyle;rounded=0;strokeColor=#444444;endArrow=block;fontSize=12;第一段样式用于普通矩形模块,第二段用于注意力图神经网络这类圆角模块,第三段用于数据流向连线。
参数说明:html=1让文字支持自动换行,这是防止文字被截断的关键;whiteSpace=wrap配合前者使用,等于告诉draw.io“文字超过宽度就换行,而不是拉宽图形”;arcSize=10控制圆角程度,值越大圆角越明显;endArrow=block表示线末端画实心箭头。strokeWidth建议统一为1,因为太粗的边框在Word里会显得很“重”。
提示:画布大小最好一次定好,后面再改会导致整个图形布局比例变化,所有模块的相对间距都会被拉伸。先花一分钟设好画布,比画完再调整省力得多。
3.2 按数据流向绘制四个大模块
打开画布后,我习惯从左上角开始,给每个模块先放一个占位矩形,不急着连线,先把所有模块都摆好再连,顺序是:输入图像、特征提取、注意力图神经网络、最优传输与输出。
第一步画输入图像。左侧放两个矩形,一个标注“Image Left”,另一个标注“Image Right”,尺寸建议设为128×80像素。两个矩形之间稍微留一点空隙,然后用椭圆在图像下方各放三个小圆点,代表检测到的关键点。圆点直径统一设为8像素,用黑色填充,不描边。
第二步画特征提取。在两个图像框的右侧放一个大矩形,宽度280像素,高度100像素,内部文字写“Keypoint CNN / Descriptor”,下方加一行小字“d=128”。这个矩形代表SuperPoint或类似检测器输出的特征描述子,是整个图的“公共入口”。两个图像框各引一条箭头指向这个矩形。
第三步画注意力图神经网络。这是最容易画乱的模块。我的做法是:先放一个大的圆角矩形作为容器,内部再放两个并排的子矩形,左侧子矩形写“Self-Attention ×L”,右侧写“Cross-Attention ×L”,文字下方用一个小圆角矩形表示“特征更新”。两个子矩形之间画一条双箭头表示互相交换信息。容器外面在右下角角落加一行小字“Attentional GNN”,用来告诉读者这个容器内部的整体功能。这里不要画太细的每一层结构,图上只需要表达“反复迭代”的意思。
第四步画最优传输与输出。在GNN容器右侧放一个矩形,宽160像素,高80像素,标注“Sinkhorn / OT”,旁边写“迭代N次”。从这个矩形引一条粗箭头指向两幅图像之间,箭头上方放一个小文本框写“Matches / Confidence”。到这一步,四个模块已经全部就位。
这四个步骤里,最容易翻车的是第二步到第三步的连接。特征提取矩形的输出线和两个子矩形都有关系,正确的画法是先合并成一条线再分叉进入GNN容器。不要直接从特征提取矩形拉两根线分别进入self和cross,这样图会显得杂乱,也模糊了“数据先进入GNN整体”的语义。
3.3 对齐、分组与连线的三个习惯
模块画完不连线之前,先做对齐。draw.io选中多个图形后,顶部会出现对齐辅助线。我把所有矩形左边缘对齐、垂直居中对齐,再把纵向间距设为统一值,比如40像素。这一步纯粹是给眼睛看的,但对齐好的图插进Word后会显得专业很多,后期改图也不容易因为间距不一反复调整。
然后做分组。把图像框和它对应的关键点圆点框选,按Ctrl+Shift+G打成一个组;把注意力图神经网络容器里的所有元素打成一个组;最后把整张图所有元素再打一个总组。分组的价值在于:后期拖动某个模块时,组内的相对位置不会散架;取消分组也只是几秒钟的事,不牺牲可编辑性。
最后是连线。draw.io默认连线是直线或折线。框架图里我全部用正交连线,也就是横平竖直的折线,配合前面写的edgeStyle=orthogonalEdgeStyle样式。正交线在Word里看最接近论文图风格,而且不容易让人觉得乱。每条连线的文字标签放在线段的中间位置,字号比模块文字小一号。
在这个阶段不要急着导出。把线条宽度、箭头样式、文字大小整体检查一遍,如果图形在画布上撑得不满,可以用导航栏的“适应画布”功能一键缩放。注意,“适应画布”会改变画布尺寸,但不会破坏模块之间的相对比例,这是安全的操作。
4. 用python-docx把框架图装进docx:插入脚本与图片参数
4.1 环境准备与最小脚本
画好的图可以先导出PNG或SVG。从可修改的角度看,draw.io源文件才是真正能改的东西,Word里插入的是渲染结果。所以这一步我先用python-docx把PNG插入docx,并把draw.io源文件名写进图注,保证文档和源文件能对应上。
python-docx是一个处理docx文件的Python库,可以用一行命令安装:
pip install python-docx安装完成后,写一个最简脚本,建立一个空白docx、插入一张图、保存文件。下面这个脚本就是全套流程的最小可用版本,适合先验证你的图片路径和宽度是否合适。
from docx import Document from docx.shared import Cm from docx.enum.text import WD_ALIGN_PARAGRAPH doc = Document() # 新建空白文档 doc.add_heading("SuperGlue 算法框架图", level=1) # 加一个一级标题 # 新建一个段落用于放图片,并把段落设为居中 pic_para = doc.add_paragraph() pic_para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 在段落里插入图片,width参数控制图片在文档中的宽度 pic_para.add_run().add_picture("superglue_framework.png", width=Cm(14)) # 图片下方加图注,同样居中 cap = doc.add_paragraph("图1 SuperGlue 算法框架(可编辑源文件:superglue_framework.drawio)") cap.alignment = WD_ALIGN_PARAGRAPH.CENTER doc.save("superglue_framework.docx") # 保存到当前目录逻辑说明:add_picture可以单独用,也可以像上面这样放在一个段落的run里,放在run里的好处是图片能跟随段落的对齐方式,方便实现居中效果。width=Cm(14)指定插入宽度为14厘米,高度会自动按图片原始宽高比缩放,不需要你手动算。add_heading(level=1)生成的标题会带Word的“标题1”样式,之后可以在目录里被索引到。
参数说明:14厘米是一个相对稳的值,能放进Word默认页面版心,左右留白适中。如果你的页面边距设置得比较窄,可以改成15厘米;如果图片内容特别宽,建议不要超过16厘米,否则会顶到页边距。图注里的源文件名不要省略,这是整个“可修改”工作流里最关键的提醒标记。
4.2 图片清晰度与Word缩放:为什么PNG导出要调大尺寸
很多人用draw.io默认设置导出PNG,结果插入Word后文字发虚,仔细看边缘还有锯齿。这不是python-docx的问题,而是导出分辨率不够。
draw.io导出PNG时会按画布的像素尺寸输出。如果你的画布是1600×900,导出的PNG默认就是1600×900像素,插入到14厘米宽的Word位置时,大约每英寸只有200多像素,放大或打印时会明显变软。解决办法是在导出窗口里把缩放比例设置到200%,也就是输出3200×1800像素的PNG。这样同样的插入宽度下,每英寸像素翻倍,肉眼基本看不出锯齿。
如果你把图存成了SVG格式,python-docx没办法直接插入SVG,你需要先转换成PNG或直接插入EMF。EMF在Word里可以做到无限放大不失真,但兼容性在不同Windows版本上表现不稳定,而且一旦图元太复杂,Word绘制起来会卡。我的建议是:日常用200%缩放的PNG就足够,打印A4或PPT答辩完全够用;如果一定要矢量效果,在draw.io里导出EMF再手工插入Word,不要用python-docx处理EMF。
4.3 一次修改要跑完的完整流程
现在你的工作流应该是这样:在draw.io里修改源文件 → 导出PNG覆盖旧图 → 重新运行python-docx脚本生成新的docx。这样每次修改都是可控的,不会出现“改了图忘了更新Word”的情况。
如果你想保留多个历史版本,把docx文件名加上日期,比如superglue_framework_20250618.docx,同时把对应的drawio源文件也加上相同日期。这样后续评审时如果有人问“上一版是什么样的”,你能快速找到对应文件。这个习惯看起来很简单,但能救你很多次。
注意:不要在Word里手动右键替换图片后,又把drawio源文件删了。Word里的图只是渲染快照,源文件才是真正能编辑的那一层。丢失源文件意味着下一次修改要从头重画。
5. 框架图docx化避坑:清晰度、可编辑性与版本管理的三个坑
5.1 图片放大后发糊,打印出来边缘有锯齿
现象:插进Word的图在屏幕上看着还行,一放大或者打印预览就发虚,文字边缘有锯齿。
原因:多半是draw.io导出时没调缩放比例,导出的PNG像素等于画布像素。插入Word后图片被拉伸到14厘米宽,像素密度不够,自然就糊。
解决:重新从draw.io导出,在导出窗口把缩放比例改到200%,得到2倍像素的PNG后再插入。如果还是不够清晰,把缩放调到300%,但文件体积会变大,插入和保存速度会变慢,通常200%足够。
5.2 双击Word里的图只能设置格式,不能编辑模块
现象:做好docx后,双击图片发现不是进入绘图编辑,而是弹出“设置图片格式”。
原因:Word识别到这是一个整体图片对象,不是原生形状。你在draw.io里画的模块、文字、连线都被“烤”成了一张图,Word不可能辨识出里面的结构。
解决:认清可修改层的边界。真正可编辑的是draw.io源文件,不是docx里的图片。把源文件保存在和docx同一目录下,并在图注里写明源文件名。如果你需要让Word里也能逐个点选修改,那就需要在Word里用“插入-形状”重新画一遍,但这等于重做一次绘图工作量,不值得。对绝大多数场景来说,回draw.io改、重新导出、重新插入,已经足够高效。
5.3 改了一版图,结果旧图还留在docx里
现象:重新运行脚本生成了新docx,打开后发现有的地方还是旧图,或者surrounding图注和图片对不上。
原因:最常见的是脚本里图片路径没变,但draw.io导出的新图文件名换成了带版本号的名字,导致脚本仍指向旧文件;另一种情况是你在Word里手动替换过部分图片,而脚本重新生成时只覆盖了其中一张。
解决:给导出图片起一个固定名字,比如superglue_framework.png,每次导出都覆盖这个名字;脚本里的路径始终不变。如果做过多图版本,就把每张图放进单独的目录,脚本里用绝对路径或相对路径检查好。这个问题的本质是文件命名不规范,统一命名规则就能避免。
6. 让框架图真正能改:分组、源文件命名与二次改图验证
到这里,你已经能画出一份结构完整的SuperGlue框架图,并把它干净地放进docx。但“能改”这件事还需要一个验证步骤。我一般会在交付前做一次完整的二次修改演练:打开draw.io源文件,把GNN容器里的“Self-Attention ×L”改成“Self-Attention ×2”,把“Sinkhorn / OT”的文字改成“Sinkhorn / OT(迭代15次)”,然后重新导出PNG、重新跑python-docx脚本、打开新docx确认两处文字都变了,且图注里的源文件版本号同步更新。这一套流程走通,说明你手上是一份真正可维护的文档,而不是一次性图片。
我推荐把drawio源文件命名带上日期和用途,例如superglue_framework_20250618_v2.drawio。这个习惯来自我吃过的一次亏:当时只导出了PNG没留源文件,后来要改一个术语,对着位图重画了两个小时。从那以后,我只要往docx里插框架图,就强制在同目录放一份对应的drawio源文件,并在图注里写一句“可编辑源文件:xxx.drawio”。这个代价很小,但能在三个月后救你一次。
如果团队协作,建议把源文件放进版本管理目录,每次修改提交一次变更记录。论文配图或评审材料经常需要回溯“哪一版是哪一天改的”,有源文件和日期对照表,这个问题就变得非常简单。团队里其他人如果想改,也不需要找到你再远程传图,直接拉最新源文件改完重新导出即可。
最后再说一个操作上容易被忽视的细节:draw.io里的分组在导出PNG后不会保留,但会让你的源文件更整洁。源文件里每一个模块都命名清楚,比如“input_left”“gnn_container”“sinkhorn_block”,修改时可以直接从左侧图层列表点选定位,比用鼠标满画布找图快得多。这个习惯我会一直保留。
希望这篇笔记能帮你少走一些弯路,让你做出来的SuperGlue框架图既符合论文逻辑,又能随时改、随时用。
本文还有配套的精品资源,点击获取