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進行測試的結果
?
?
?
?