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进行测试的结果