
写这篇博客的起因很简单我在复现视觉定位相关的实验时被 Hierarchical-Localization下称 hloc这套库的环境问题折腾了整整一个周末。看论文时感觉挺轻松的无非是“先检索、再匹配、最后做位姿估计”但真正动手pip install之后才发现坑全埋在依赖里。更离谱的是不少问题根本不是 hloc 自己的 bug而是 PyTorch 版本、CUDA 版本、COLMAP 的安装方式、模型权重文件的下载这些周边环节在互相“打架”。这篇文章我不打算复述 README而是把你可能遇到的 90% 的环境配置问题、依赖冲突问题、排查思路一次性讲清楚尤其是那些文档里没写、但实际跑起来一定会踩的坑。1. 先搞清楚 hloc 到底依赖了什么1.1 一套层次化视觉定位系统的基本构成hloc 来自 ETH Zurich 的 Computer Vision and Geometry Group它解决的问题是给定一张查询照片在一组预先构建的三维场景模型中估计出这张照片的相机位姿。所谓“分层”体现在它的两步走策略上先用图像检索算法如 NetVLAD、AP-Gem快速筛出与查询图最相似的候选帧缩小匹配范围再用局部特征提取与匹配算法如 SuperPoint SuperGlue、LoFTR、D2-Net在候选帧之间做精细的像素级匹配最后把匹配结果交给几何优化模块计算出相机的绝对位姿。从这个层面去理解依赖关系就清晰多了hloc 不是一个“单一算法库”而是一个“算法编排框架”。它把多个上游算法特征提取器、特征匹配器、检索模型、SfM 工具通过统一的接口串联起来。这意味着你不仅要装 hloc 本身还必须装齐它能够调用的所有后端。很多人以为pip install hloc就算装完了结果运行时却提示找不到模型文件、找不到 colmap 可执行程序根本原因就在于此。1.2 依赖的三个层面Python 库、深度学习框架、外部工具我把 hloc 的依赖拆成了三个层面排查问题时按层去定位会高效很多Python 科学计算基础栈numpy、scipy、opencv-python、h5py、pyyaml、tqdm等。这一层相对温和直接pip install基本不会出大问题但需要注意opencv-python和opencv-contrib-python之间的冲突。深度学习框架层torch和torchvision。这是整个依赖体系中最敏感、最容易出错的一层。PyTorch 版本与 CUDA 版本之间有着严格的对应关系一旦错位轻则警告重则直接无法调用 GPU。外部二进制工具层COLMAP以及在新版本中越来越重要的pycolmap绑定。hloc 的三角化、位姿估计、模型读写等核心功能都依赖 COLMAP 提供的几何计算能力。这一层无法用 pip 直接安装虽然现在有 pycolmap 的 wheel但 COLMAP 本体对系统库的依赖依旧复杂所以也是“卡人”的重灾区。理解了这三层之后很多报错其实就能自己推断了。比如ModuleNotFoundError: No module named pycolmap属于第三层没装好RuntimeError: CUDA error: no kernel image is available属于第二层版本错位ImportError: numpy.core.multiarray failed to import属于第一层基础栈的内部冲突。有了这个分类框架下面的选型和排查就顺理成章了。2. 环境版本选型PyTorch、CUDA、Python 的兼容三角2.1 版本矩阵与选型逻辑先看一个我整理过的经验版本组合这套组合在我的多台机器上都跑通过涵盖 Ubuntu 20.04、Ubuntu 22.04 以及 Windows 11 WSL2 环境组件推荐版本备选版本备注Python3.8 / 3.93.103.11 及以上可能有部分旧依赖无轮子PyTorch1.13.1 或 2.0.11.12.12.x 对模型加载更严格CUDA Toolkit11.7 / 11.812.1取决于本机 GPU 驱动cuDNN与 CUDA 配套-一般 conda 会自动处理COLMAP3.8 / 3.9 及以上3.7建议 3.9pycolmap 适配更好pycolmap0.4.0 或 0.5.00.3.0必须与 COLMAP 主版本一致选 Python 3.9 几乎是“最优解”它兼容 PyTorch 1.x 和 2.x 的所有稳定版本同时也兼容绝大多数 COLMAP 预编译包和 conda-forge 上的依赖。Python 3.11 在某些老版本 hloc 上会遇到numba、llvmlite这类库没有对应轮子的问题如果非要用高版本 Python建议先查清楚所有依赖是否有对应构建。PyTorch 版本的选择逻辑要讲清楚早期 hloc 代码2020 到 2021 年多基于 PyTorch 1.x 编写部分模型的权重文件在加载时会检查state_dict的 key 名称PyTorch 2.x 对torch.load的默认weights_only参数有变化可能会导致兼容性警告甚至加载失败。不过官方近期已经做过适配所以直接上 2.0.1 问题不大。需要注意的是torchvision的版本必须与torch严格匹配例如torch 2.0.1对应torchvision 0.15.2装错版本会在 import 阶段直接报错。2.2 如何判断本机该装哪个 CUDA 版本CUDA 版本的选择不能凭感觉先执行下面两条命令确认硬件和驱动支持的上限nvidia-smi nvcc --versionnvidia-smi输出的右上角会显示CUDA Version: 12.4之类的信息这个数值代表的是当前 GPU 驱动所支持的最高 CUDA 版本并不代表你系统里已经装了 CUDA Toolkit。nvcc --version显示的才是当前激活的 CUDA Toolkit 版本。如果nvcc命令不存在说明你的 CUDA Toolkit 还没装或没配置环境变量但没关系——在 conda 环境中我们通常会安装“cudatoolkit”这个 conda 包来规避系统级 CUDA 安装的复杂性。我的建议是在 conda 环境内用cudatoolkit而不是在系统层面安装庞大的 CUDA Toolkit。PyTorch 官方提供的 conda 安装命令通常会同时处理 cudatoolkit、cudnn 和 PyTorch 三者的版本匹配。比如conda create -n hloc python3.9 conda activate hloc conda install pytorch2.0.1 torchvision0.15.2 cudatoolkit11.8 -c pytorch这里cudatoolkit11.8要和你的驱动支持版本匹配。如果驱动只支持到 CUDA 11.4你就需要换成cudatoolkit11.3或11.1。一个简单的经验驱动版本越新向下兼容性越好老驱动跑不了新 CUDA但新驱动几乎能跑所有旧 CUDA。2.3 一个容易忽略的环境变量问题很多人建完虚拟环境、装完 PyTorch 之后用python -c import torch; print(torch.cuda.is_available())测试 GPU 可用性返回True就以为万事大吉了。但实际上训练和推理时是否真正使用 GPU还取决于环境变量CUDA_VISIBLE_DEVICES是否被正确设置。某些服务器上即使torch.cuda.is_available()为True默认使用 GPU:0 时仍可能遇到“设备不存在”的运行时错误。建议在运行 hloc 脚本前显式设置export CUDA_VISIBLE_DEVICES0另外如果你的机器上装了多个 Python 环境还要留意PYTHONPATH是否被污染。有时候明明在 conda 环境里pip list看到 hloc 相关依赖已经装了但运行时 import 的却是系统 Python 里的同名包这类“幽灵引用”问题很难察觉建议在项目根目录下先跑一句python -c import hloc; print(hloc.__file__)确认实际加载路径。3. COLMAP 的安装整个配置里最阴间的环节3.1 为什么 hloc 离不开 COLMAPhloc 官方文档明确建议安装 COLMAP。原因很简单hloc 本身不实现稀疏重建、三角化和位姿估计这些底层几何操作它把这些工作交给了成熟的开源 SfM/SLAM 工具 COLMAP。构建场景模型时需要将多视角图像做特征建图和三角化查询阶段计算位姿时需要用 PnP 求解器——这些环节都通过调用colmap命令或pycolmap接口完成。这里的“依赖”有两个维度一是 COLMAP 可执行文件必须出现在系统PATH中以便 hloc 通过subprocess调用二是如果你使用较新的 hloc 分支如 master 分支配合 pycolmap还需要安装pycolmapPython 绑定。两个维度对应不同的安装策略很容易混淆。3.2 各平台安装方式对比根据你的操作系统COLMAP 的安装难度差异巨大我这里直接给出一份实测对比安装方式适用平台难度说明apt install colmapUbuntu 20.04/22.04低但 apt 源里的版本通常较老3.6/3.7功能受限conda install -c conda-forge colmapLinux / macOS低会同时拉取一堆系统库依赖版本相对较新官方预编译二进制Windows中下载 GUI 包后需要手动加入 PATH源码编译所有平台高需要 Boost、Ceres、CGAL 等依赖编译容易出错pip install pycolmapLinux / Windows低但需要独立的 COLMAP 主程序或动态库支持实测下来Ubuntu 系统上我最推荐的是conda安装方式因为它能保证 COLMAP 与 hloc 的 Python 依赖在同一个环境中避免系统apt包管理者与 conda 环境之间的权限和版本冲突。具体命令conda activate hloc conda install -c conda-forge colmap装完之后不要急着验证先看它装的具体版本colmap -h3.3 验证 COLMAP 是否能被 hloc 正常调用光能运行colmap -h还不够还要确认 hloc 真正调用的是同一个 COLMAP。检查方法分两步# 第一步检查命令行工具 which colmap # 第二步检查 Python 绑定 python -c import pycolmap; print(pycolmap.__version__)如果pycolmap版本和 COLMAP 版本相差过大例如 pycolmap 0.5.0 配 COLMAP 3.7运行时可能出现 API 不匹配的报错。我遇到过AttributeError: module pycolmap has no attribute RANSACOptions这类问题基本就是版本不配套导致的。建议直接用 conda 安装conda 会自动处理好两者版本关系。如果你在 Windows 上安装官方提供的 COLMAP GUI 安装包虽然自带一堆依赖 DLL但默认没有写入 PATH。你需要手动将安装目录如C:\Program Files\COLMAP-3.8-windows-cuda添加到系统环境变量的Path中。此外COLMAP 在某些 Windows 版本上运行 CUDA 加速时还依赖 Visual C Redistributable如果运行时提示“缺少 dll”先去微软官网装最新版运行库很多崩溃问题都能解决。4. hloc 本体与模型权重的正确落地方式4.1 源码安装还是 pip 安装hloc 可以通过pip install hloc安装官方也维护了 PyPI 包但我的经验是如果想要调试、改代码、跟踪日志源码安装体验远好于 pip 安装。原因在于视觉定位实验往往需要频繁尝试不同的特征提取器、不同的匹配策略这些参数散落在代码源码中用 pip 安装的依赖是只读的改起来很别扭。源码安装方式git clone --recursive https://github.com/cvg/Hierarchical-Localization.git cd Hierarchical-Localization pip install -e .--recursive参数很重要因为 hloc 项目可能引用一些子模块虽然目前主要依赖都以外部包形式提供但保持习惯不会错。pip install -e .是“可编辑安装”Python 会创建一个链接指向源码目录之后你对源码的任何修改都会即时生效。安装完成后建议先跑一遍官方最简单的 demopython -m hloc.pipelines.NeuralLocator.pipeline --help如果能正常输出帮助信息说明 hloc 主体已经可以 import 了。4.2 模型权重文件的准备下载、校验与存放hloc 支持的特征模型SuperPoint、SuperGlue、LoFTR、D2-Net、NetVLAD 等都需要独立的权重文件。这些权重文件通常由各算法的作者公开发布hloc 项目本身不托管这些文件。这意味着即使你环境完美、依赖齐全没有权重文件hloc 也无法工作。权重文件默认下载位置是hloc/weights/目录源码安装的话或者你可以通过参数--weights指定路径。常用的权重文件对应关系如下模型权重文件名适用场景SuperPointsuperpoint_v1.pth通用局部特征SuperGluesuperglue_outdoor.pth/superglue_indoor.pth室外/室内匹配LoFTRoutdoor_ds.ckpt/indoor_ds_new.ckpt无特征匹配NetVLADpittsburgh30k.mat转换后的.pth图像检索D2-Netd2_tf.pth/d2_tf_no_phototourism.pth描述子提取下载时最容易遇到的问题就是超时或文件损坏。由于这些权重文件体积通常在 50MB 到 500MB 之间从境外服务器下载经常中断。我处理过几次“模型加载后结果全错”的情况最后发现是权重文件下载不全但 HTTP 没报错。所以建议下载完成后校验文件大小并和官方 GitHub README 中标明的字节数比对不能只看能加载成功就放心。条件允许的话可以用多线程下载工具如aria2c来避免断点续传问题。4.3 权重文件加载不匹配时的判断与处理这里补充一个高频报错加载权重时出现Missing key(s) in state_dict或Unexpected key(s)。原因通常是模型结构定义和权重文件来源不一致。例如你在 hloc 中使用 SuperPoint权重文件却下成了 TensorFlow 版本或者下成了其他仓库的 SuperPoint虽然同名但网络结构里的层命名不同。此时不要强行load_state_dict(..., strictFalse)了事——虽然这能让脚本跑通但模型输出会完全错误且毫无提示。正确做法是先确认权重文件来自官方链接。SuperPoint 和 SuperGlue 的官方权重在 Magic Leap 的 GitHub 仓库中LoFTR 的权重在作者的个人页面或官方项目 release 中。如果你在 hloc 仓库的hloc/utils/下看到下载脚本或 README尽量用脚本自带的链接而不要自己搜索下载。4.4 辅助工具链kapture 和数据集格式的坑hloc 官方还用到了kapture格式管理定位数据集尤其在大规模 benchmark如 Aachen、InLoc上。kapture本身也是一个依赖库但很多教程没提。如果你使用官方脚本hloc/pipelines/Aachen/pipeline.py运行时可能会报ModuleNotFoundError: kapture。解决办法pip install kapture-localization同时需要注意kapture的版本迭代很快部分 API 在较新版本中已被删除。如果遇到cannot import name X from kapture先检查 kapture 版本是否为最新再搜索对应 API 的新位置。不要盲目重装整个环境这个小坑容易造成大的时间浪费。5. 依赖管理的实操方案用 conda 搭一个可复现环境5.1 完整的环境创建链路依赖管理最核心的目标是“可复现”。尤其是做研究或工程交付时你不可能让每个使用你代码的人去重复经历一遍“猜版本”的过程。我推荐下面的链路能保证 95% 以上的环境一致性# 1. 创建独立虚拟环境避免污染系统 Python conda create -n hloc python3.9 # 2. 激活环境 conda activate hloc # 3. 安装 PyTorch 全家桶根据驱动选择 cuda 版本 conda install pytorch2.0.1 torchvision0.15.2 cudatoolkit11.8 -c pytorch # 4. 安装 hloc 的核心依赖可用 requirements.txt pip install h5py pyyaml numpy scipy opencv-python tqdm # 5. 安装 COLMAPconda-forge 版本 conda install -c conda-forge colmap # 6. 源码安装 hloc git clone --recursive https://github.com/cvg/Hierarchical-Localization.git cd Hierarchical-Localization pip install -e . # 7. 安装 pycolmap如果 hloc 版本需要 pip install pycolmap整个过程装完后用我前面提到的方法验证一圈torch.cuda.is_available()、colmap -h、python -c import hloc; print(hloc.__file__)。三项全部通过环境基本就稳了。5.2 环境导出与复现避免 conda 导出的天坑很多人用conda env export environment.yml来保存环境这个做法在单机上是没问题的但只要换一台机器尤其换操作系统或换 CUDA 驱动这个文件就极容易失效。因为conda env export会把所有包的精确版本号、构建号、下载渠道都冻结下来其中很多信息是平台相关的。我的习惯是同时维护两个文件environment.yml记录手工指定的主要依赖版本面向代码使用者requirements.txt记录 Python 包级别的依赖面向 pip 安装场景手工维护的environment.yml大致长这样name: hloc channels: - pytorch - conda-forge - defaults dependencies: - python3.9 - pytorch2.0.1 - torchvision0.15.2 - cudatoolkit11.8 - colmap - pip - pip: - h5py - pyyaml - scipy - opencv-python - tqdm - hloc - pycolmap使用这份文件复现环境时执行conda env create -f environment.yml这种“混合安装”方式的好处是conda 负责处理系统级依赖CUDA、COLMAP 的底层库pip 负责处理纯 Python 包各司其职出问题概率最低。5.3 多个项目共享同机时的隔离策略如果一台机器上不止跑 hloc 一个项目强烈建议每个项目一套 conda 环境不要共用一个环境“凑合”。我见过不少同事图省事把所有深度学习项目装在 base 环境里最后项目 A 升级 PyTorch项目 B 突然跑不了排查环境差异就花掉半天。conda 环境切换的成本极低收益却极高conda activate hloc # 跑 hloc conda activate netvlad # 跑其他检索项目另外pip安装时尽量在虚拟环境中使用如果出现“Python 环境被破坏”的情况最快的方法就是删掉环境重建而不是试图修复。依赖管理的第一原则是与其修补不如重建。重建一个环境所需时间通常不超过 15 分钟远比手动解决版本冲突靠谱。6. 高频报错与完整排查思路6.1 CUDA 相关报错“no kernel image is available”这个报错可以说是深度学习环境里最经典的问题。常见场景是导入 torch 后使用 CUDA 张量或执行模型前向传播时抛出RuntimeError: CUDA error: no kernel image is available for execution on the device原因PyTorch 编译时使用的 CUDA 版本和你本机驱动支持的 CUDA 版本不匹配。严格来说GPU 驱动是向下兼容的但如果驱动版本太老、而 PyTorch 是为更高版本 CUDA 编译的就会出现“驱动不认识新 PTX 指令”的问题。排查链路查看本机驱动的最大 CUDA 版本nvidia-smi右上角。检查当前环境 PyTorch 的 CUDA 编译版本python -c import torch; print(torch.version.cuda)。如果 torch.version.cuda 明显高于驱动最大版本说明装错 PyTorch 变体了。解决方案选择与驱动匹配的低版本cudatoolkit重新安装 PyTorch。例如驱动最大支持 11.4就装cudatoolkit11.3若驱动最大支持 12.x则可以安装cudatoolkit12.1或11.8。这个报错还有另一个少见原因GPU 是安培架构如 RTX 3090但 PyTorch 版本过老未包含对应架构的 kernel。此时解决办法是升级 PyTorch 到 1.8 以上。6.2 “colmap command not found”虽然 hloc 可以通过 pycolmap 调用 COLMAP 的功能但许多内部脚本仍然使用命令行方式调用因此如果出现FileNotFoundError: [Errno 2] No such file or directory: colmap说明 COLMAP 可执行文件不在当前 shell 的PATH中。排查链路确认是否安装conda list colmap或which colmap。如果没装回到第 3 节按对应平台的安装方式补装。如果装了但which colmap仍找不到检查 conda 环境是否激活echo $PATH看环境路径是否在最前。如果是 Windows 下安装了 GUI 版 COLMAP需要手动将安装目录加入系统PATH且添加后要新开终端才能生效。这里有个隐蔽细节在某些情况下colmap可执行文件存在但它依赖的动态库损坏或缺失执行时会直接“闪退”或报error while loading shared libraries。此问题在源码编译安装 COLMAP 时最常出现。排查方式执行ldd $(which colmap)查看依赖是否完整。缺少libboost_*或libceres.so这类库时多半是编译时历史遗留问题建议不要再试图修复直接用 conda-forge 版本覆盖安装。6.3 模型权重加载失败大小对不上 / 下载中途断线模型权重文件下载不完整时PyTorch 的torch.load可能不会立刻报错而是到后续推理步骤才出现数值异常或 NaN。我遇到过最迷惑的一次是SuperPoint 提取的特征全为同一坐标查了半天最后发现下载的.pth文件比官方小了 30KB。建议的排查与预防链路手动下载时用curl -O或下载工具完成同时记录服务器返回的文件大小。下载完成后与官方 README 中注明的文件大小对比也可以在本地计算 MD5如果官方提供了md5sum superpoint_v1.pth如果确认文件损坏删除后重新下载不要“覆盖下载”有时旧文件残留会影响校验。如果官方没有给出 MD5有一个间接验证方法加载权重并跑一次单张图片的特征提取输出特征点数量应在一个合理区间例如 SuperPoint 对普通室内图片通常会检测到 1000 到 5000 个特征点。如果只有 0 或 1 个特征点大概率权重损坏。6.4 数据集准备阶段的路径和环境变量问题hloc 官方脚本经常使用相对路径和固定的数据集目录结构例如 Aachen 数据集要求按images/、3D-models/、queries/等目录组织。我在第一次跑通 Aachen pipeline 时花了很多时间最后发现只是目录名大小写不对、路径斜杠方向不一致造成文件找不到。建议在运行任何 pipeline 脚本前先ls确认每个路径都真实存在。同时某些脚本尤其是hloc/pipelines/Aachen/下的脚本会读取环境变量或--paths参数如果你用的是全局默认路径确保当前用户对这些目录有读写权限避免莫名其妙的 “Permission denied”。一个小技巧在脚本入口处临时打印os.path.abspath(.)可以快速定位当前工作目录是否符合预期。继续补充两个更高阶的排查维度这两个维度在文档里几乎没人写但实际中报错概率很高。6.5 特征提取与匹配阶段的内存溢出或线程崩溃hloc 在处理大场景数据集时特征提取和匹配的中间结果全部保存在内存中尤其是匹配阶段SuperGlue 的全局注意力机制参数量不小批量处理多张图像时显存消耗会迅速上升。如果你用的是较小的显卡如 6GB 或 8GB经常会在匹配阶段直接 “Killed” 或被系统前 OOM。这不是代码 bug而是配置问题。解决办法有两条路一是调低默认的 batch sizehloc 的特征提取器有一个batch_size参数很多人在运行时没注意它默认值是 32二是将匹配阶段的上采样图片尺寸调低比如将max_image_size从默认的 1600 降到 1024这样显存占用能降低 40% 以上。这个问题的麻烦之处在于报错信息往往特别长但真正起作用的就是最后一句 “CUDA out of memory”。如果你在 Docker 容器里跑 hloc还要注意容器对显存的控制nvidia-docker run --shm-size8g这类参数因为共享内存太小也会导致 DataLoader 的 worker 崩溃报错表现则是 “Broken pipe” 或 “DataLoader worker exited unexpectedly”。这类问题很难联想到内存配置上算是一个很隐蔽的坑。6.6 Docker 场景下的依赖管理扩展如果你需要在多台机器或不同操作系统间迁移项目可以考虑把 hloc 直接做成 Docker 镜像。官方其实提供了一个基础 Dockerfile但它是基于 nvidia/cuda 镜像构建的CC 环境需要手动安装。有一个我自己验证过的最简方案使用continuumio/miniconda3作为基础镜像把 conda 环境整个打包进镜像再安装 COLMAP 的系统依赖。这种方式的优点是可复现性极强缺点也很明显——镜像体积轻松超过 6GB所以只有跨平台交付或者部署到服务器时才推荐。平时在本机调试完全不需要 Docker 化conda 环境就够用了。7. 从配置到跑通一个最小可运行的验证流程前面讲了这么多最后给你一个“一键自检”的验证流程确保环境配置没有白费。7.1 最小验证跑通一张图的特征提取拿到一个全新配置好的环境不要急着跑完整的数据集 pipeline先做一个单图测试。假设你有两张测试图片a.jpg和b.jpg可以用一段简单的 Python 脚本做 SuperPoint 特征提取import torch from pathlib import Path from hloc.extract_features import main as extract_features conf { output: outputs/demo, images: Path(images), feature: { name: superpoint, model: { name: superpoint, nms_radius: 4, max_keypoints: 2048, }, preprocessing: { resize_max: 1600, }, batch_size: 1, }, } extract_features(conf)如果这段能顺利跑完并且在outputs/demo目录下生成.h5文件说明 hloc 的核心链路已经打通。如果这一步都失败先不要继续往下排查——返回前面章节逐层检查依赖。7.2 基准测试跑一遍以 Aachen 为例的流程概览如果单图测试通过就可以尝试跑完整的数据集基准测试。Aachen 数据集是 hloc 最常用的 benchmark但完整跑一遍耗时较长下载数据 特征提取 匹配 重建不适合作为“环境验证”的首选。更推荐的验证数据集是datasets/SouthMap或者自己用手机拍的一组带位姿的多视角图片用 COLMAP 先重建一个小场景再用 hloc 做查询定位。这种“自建小场景”的方式环境问题暴露得最快而且不用等几个小时的 benchmark。8. 最后再分享一些我在实际使用中的体会环境配置这件事本质上是“版本管理”与“系统管理”双线并行的问题。前几年我每次配置深度学习环境都习惯性“硬刚”系统遇到问题就查一堆博客、堆一堆补丁最后往往把环境搞得更乱。现在的经验是配置环境一定要有“快速失败”的心理预期10 分钟跑不通先停下来审视版本组合而不是继续一条路走到黑。hloc 是我见过的视觉定位相关库中工程化成熟度较高的一个但正因为它高度依赖外部工具和模型权重才导致“环境配置”成为第一道门槛。这篇文章从依赖结构分析、版本选型、COLMAP 安装、权重管理到依赖导出与高级排查基本上覆盖了我能想到的所有常见问题。如果你严格按照第 5 节的链路操作大概率能一次通过如果中途遇到本文没覆盖的新问题也建议把报错信息、环境版本信息完整记录下来再逐一排查。环境配置是复现工作的基石只有基石稳了后续做算法实验时才能真正聚焦在算法本身。