专栏算法工具链Transformer模型部署之Lightglue优化实战

Transformer模型部署之Lightglue优化实战

DR_KAN2025-10-30
80
0

前言

本文作为Transformer模型部署的下篇,会以典型的Lightglue算法为例,介绍优化的完整流程。

 

 

Lightglue性能优化实战

LightGlue 是一种高效且鲁棒的 图像特征点匹配算法,其核心目标是在两张输入图像之间自动找到语义一致的关键点对应关系,从而为 SLAM三维重建图像配准视觉定位 等任务提供精确的几何约束信息。传统的匹配方法(如 SIFT、SuperGlue)往往依赖于手工特征或计算复杂的全连接匹配,而 LightGlue 则通过引入 Transformer 架构 的注意力机制,在保持精度的同时显著提升了匹配的速度和适应性。
在 LightGlue 中,输入的两张图像首先经过局部特征提取网络(通常是 SuperPoint 或类似的检测器)生成关键点坐标与特征描述子。接下来,LightGlue 使用一系列 Transformer 层 对这些特征进行交互建模:
  • Self-Attention(自注意力) 模块用于捕捉同一张图像内部关键点之间的全局关系,使得网络能够理解点与点之间的上下文语义结构,从而增强特征的判别性;
  • Cross-Attention(交叉注意力) 模块则让一张图的关键点能够“看到”另一张图的所有关键点,实现跨图像的特征交互与匹配可能性评估。这种机制使得模型可以在全局范围内考虑潜在的匹配对,而不仅仅依赖于局部相似性。

通过多层堆叠的注意力模块,LightGlue 能够逐步细化匹配预测,在特征空间中聚合语义信息并抑制错误匹配。最终,模型输出一组置信度加权的匹配对,通常经过简单的后处理(例如阈值筛选或几何一致性检查)即可获得稳定的结果。

与传统 Transformer 类似,LightGlue 的注意力模块同样基于 Query-Key-Value(QKV) 机制进行计算,但它在设计上针对特征点匹配任务进行了轻量化优化,例如:减少通道数、采用稀疏注意力、动态早停机制等,从而在移动设备或嵌入式平台上依然能够高效运行。这也是 “LightGlue” 名称中 “Light” 的含义所在——在保持高匹配精度的前提下显著降低计算开销。

总体而言,LightGlue 将 Transformer 的强大上下文建模能力引入特征点匹配领域,实现了从“点对点的相似性比较”向“全局语义关系推理”的转变。它不仅继承了 Transformer 的灵活结构和可扩展性,还通过结构优化实现了端到端的高效匹配,是传统几何方法与深度视觉算法之间的重要桥梁。

 

本节我们重点分析Lightglue的Transformer结构,通过html静态性能分析报告了解部署性能瓶颈,并使用上一节介绍的优化策略提升性能,同时保持模型的输出一致性不变。最终Lightglue算法的BPU耗时预估从16.37ms下降到14.9ms,优化幅度达到9%,效果显著。

 

html分析报告解读

可以使用PTQ的fast-perf方法编译ONNX模型,得到html静态性能分析报告,此时报告中显示的latency为16.37ms。

通过算子耗时预估发现,在每个CrossAttention结构的开头,有两个Matmul算子各跟随一个Reshape,这两个Reshape的最后一维度会从16 Padding到128,导致需要耗费共485us,占模型总耗时的2.8%,该模型一共有5个CrossAttention结构,这10个Reshape一共耗时2.4ms,约占总耗时的14%,需要优化。

 

 

该模型并无其他耗时明显较高的算子,由此我们可以从Reshape入手优化模型结构,提升部署性能。

需要特别注意的是,html的算子耗时预估只体现单个算子的执行时间,实际BPU在推理模型时,会并行执行多个算子的计算指令,因此html中所有算子的累计耗时并不会等于模型的总耗时。

 

性能优化流程

CrossAttention结构的Pytorch源码如下所示,主要关注Attention和CrossBlock类的forward函数。为方便对比模型的Shape变化情况,forward代码的大部分变量均替换为固定数值,并使用注释标明每次计算后的Shape情况。

 

这段代码实现了一个典型的 跨注意力(Cross-Attention)模块,结构上与 Transformer 的注意力层类似,但设计上是为 两张图像或两组特征之间的信息交互 服务的。它可以看作是 LightGlue 或其他特征匹配网络中的一个核心组件。 在 LightGlue 这样的特征匹配模型中,这个模块能让两幅图像的关键点特征互相交流,从而找到对应点对(matches)。 

 

通过对比代码和html信息,可以定位到CrossAttention中耗时最高的两个Reshape算子对应qk0 = qk0.reshape(1, 256, 4, 16).permute(0, 2, 1, 3)和qk1 = qk1.reshape(1, 256, 4, 16).permute(0, 2, 1, 3)这两句代码中的Reshape操作。

结合算法原理,可以发现这里的结构是将qk0/qk1做数据搬运后分别与v1/v0做Attention计算,在Attention中qk1/qk0又会做一次数据搬运。其中较高的耗时发生在数据搬运第一步的Reshape,Reshape的最后一维从16 Padding到256,带来了较高的BPU硬件对齐耗时。既然这样,我们可以考虑先做Transpose,将Tensor本身就有的256维移动到最后,再对前几维做Reshape。如此一来Tensor的最后一维就会直接符合BPU对齐规则,避免硬件对齐浪费计算资源。

 

上方左图为原始版本的CrossAttention结构示意图,右图为重新整理数据排布后的示意图。这种调整不会影响计算精度,也不需要重训模型,原本训练好的权重可以直接加载到该模型中,并保证修改前后模型输出的一致性。

修改后的Pytorch代码如下,全部修改点为:

  1. 把CrossBlock模块中qk0和qk1扩展成四维,并将原本的先Reshape再Permute修改为先Permute再Reshape

  2. 去除Attention模块Matmul前对第二个张量做的Permute,改为对第一个张量做Permute

 

使用fast-perf编译优化后的模型,得到html静态性能分析报告,查看CrossAttention中的算子预估耗时,发现原本200us以上的Reshape操作已经消失,且所有数据搬运类算子均没有额外的BPU硬件对齐。现在的Reshape和Transpose算子均只有很轻微的耗时。

 

 

 

优化前后性能对比

通过统计html中,发现模型优化后,Reshape算子的累计耗时明显下降。

 

优化后模型的html静态性能分析报告显示完整模型的latency为14.9ms,显著低于原版的16.37ms,性能提升约9%,收益明显。

 

由此,可以认为已经较为理想地完成了对Lightglue模型中数据搬运算子的耗时优化。

 

 

算法工具链
社区征文征程6前沿技术技术深度解析
评论0
0/1000