SuperGlue是Magic Leap在CVPR 2020上展示的研究项目,它是一个图神经网络(Graph Neural Network)和最优匹配层(Optimal Matching layer)的结合,训练用于对两组稀疏图像特征进行匹配。这个项目提供了PyTorch代码和预训练的权重,可以在SuperPoint关键点和描述子的基础上运行SuperGlue匹配网络。给定一对图像,你可以使用这个项目来提取图像对之间的匹配特征。
SuperGlue作为一个“中端”操作,执行上下文聚合、匹配和过滤等功能,是一个端到端的架构。
要在Ubuntu系统上配置并运行SuperGluePretrainedNetwork而不使用CUDA(即不使用GPU),你可以按照以下步骤进行。这些步骤基于SuperGlue的官方GitHub仓库的指导,但已修改为适应仅使用CPU的情况。
1. 克隆仓库
首先,打开一个终端,并使用以下命令克隆SuperGlue的GitHub仓库:
git clone https://github.com/magicleap/SuperGluePretrainedNetwork.git
cd SuperGluePretrainedNetwork
2. 创建Python虚拟环境
创建一个新的Python虚拟环境以避免依赖项与系统的其他项目冲突。这一步需要你已经安装了Python3和pip。

sudo apt-get install python3-venv
python3 -m venv superglue-env
source superglue-env/bin/activate
3. 安装依赖
在虚拟环境中安装所有必要的Python依赖。由于不使用CUDA,可以忽略与CUDA相关的依赖。
pip install -r requirements.txt

有可能提醒你安装wheel
pip install wheel

4. 强制使用CPU
要确保代码在没有CUDA的情况下运行,在执行脚本时添加--force_cpu标志。例如,如果要运行demo_superglue.py脚本:
demo_superglue.py脚本接受的参数有:
--input: 输入图像或图像文件夹的路径。--output_dir: 输出目录的路径。--image_glob: 用于匹配输入目录中图像文件的glob模式。--skip: 在处理连续帧时跳过的帧数。--max_length: 处理的最大帧数。--resize: 调整图像大小的参数,接受一个或两个值(宽度和高度)。--superglue: 使用的SuperGlue模型的类型(outdoor或indoor)。--max_keypoints: 每个图像提取的最大关键点数。--keypoint_threshold: 关键点检测的置信度阈值。--nms_radius: 非最大抑制(NMS)的半径。--sinkhorn_iterations: Sinkhorn算法的迭代次数。--match_threshold: 匹配阈值。--show_keypoints: 是否显示关键点。--no_display: 不显示图像结果。--force_cpu: 使用CPU而不是GPU。
python demo_superglue.py --input assets/scannet_sample_images/ --output_dir output/ --resize -1 -1 --force_cpu
这里,我假设--resize -1 -1意味着你不想调整图像大小。你需要根据实际的demo_superglue.py脚本接受的参数来调整这个命令。如果你需要针对特定图像对运行匹配过程,你可能需要查看脚本内部的实现,看是否支持直接指定图像对,或者你可能需要手动调整脚本来适应你的需求。

5. 使用KITTI 00进行测试的结果



