
1. 为什么要在QGIS里折腾Geo-SAM这个组合如果你平时用QGIS处理遥感影像大概率经历过这样的场景拿到一张高分辨率卫星图或者无人机正射影像需要把建筑物、水体、道路这些地物提取出来。传统做法无非是手动描边、阈值分割、或者跑一个训练好的语义分割模型。手动描边费时费力阈值分割遇到光照不均和复杂纹理就歇菜而自己训练模型又需要大量标注数据。Geo-SAM的出现本质上是把Segment Anything ModelSAM这个在计算机视觉领域已经验证过的通用分割大模型搬进了GIS的工作流里。SAM的核心能力是零样本分割——你给它一个提示点、一个框、或者一段粗略的掩膜它就能把目标物体的精确边界抠出来。Geo-SAM则是把这个能力封装成了QGIS插件让你在QGIS的界面里直接对栅格图层做交互式分割输出矢量结果。对于做遥感解译、地物提取、变化检测的人来说这等于多了一个半自动描边的强力工具。但问题在于SAM的推理对算力有要求。纯CPU跑不是不能跑只是速度慢到让人怀疑人生。所以如果你手头有一块NVIDIA显卡比如RTX 3060把它用起来是明智的选择。而要用上GPU加速就得把CUDA、PyTorch、Geo-SAM这三者的版本关系理顺。这篇文章就是把我自己在Windows 11 QGIS 3.34.4 RTX 3060 CUDA 12.0这个组合下踩过的坑和最终跑通的流程完整记录下来适合有一定QGIS基础、想在本地部署AI辅助分割工具的同行参考。提示Geo-SAM的安装涉及Python环境、PyTorch、CUDA等多个组件的版本匹配任何一个环节版本对不上都可能导致插件加载失败或推理报错。建议先通读全文再动手。2. 动手之前先把环境底子摸清楚2.1 QGIS 3.34.4的Python环境到底藏在哪很多人第一次装QGIS插件时以为系统里装个Python就行其实QGIS自带了一套独立的Python运行时。在Windows 11下QGIS 3.34.4的Python通常位于C:\Program Files\QGIS 3.34.4\apps\Python39注意这里的Python版本是3.9。这个信息非常关键因为后面安装PyTorch和Geo-SAM的依赖时必须用这个Python解释器而不是你系统里可能装着的Anaconda或者其他版本。你可以打开QGIS的Python控制台在菜单栏插件→Python控制台输入import sys print(sys.executable) print(sys.version)输出的路径应该指向QGIS安装目录下的python.exe。记住这个路径后面所有pip操作都要用它的完整路径来执行。2.2 RTX 3060和CUDA 12.0的版本对应关系RTX 3060属于Ampere架构计算能力8.6支持CUDA 11.x和12.x。CUDA 12.0对应的PyTorch版本根据PyTorch官方的发布记录从PyTorch 2.0开始就提供了CUDA 12.1的预编译包而CUDA 12.0的官方wheel相对少一些。实际测试下来PyTorch 2.0.1 CUDA 12.1的组合在RTX 3060上运行稳定而且CUDA 12.1对12.0有良好的向下兼容性。如果你已经装了CUDA 12.0的驱动不需要降级直接装CUDA 12.1版本的PyTorch即可。这里有一个容易混淆的点显卡驱动版本和CUDA Toolkit版本是两回事。驱动版本决定了你最高能支持到哪个CUDA版本而PyTorch自带的CUDA运行时是打包在wheel里的不需要你单独安装完整的CUDA Toolkit。你只需要确保显卡驱动足够新能支持CUDA 12.x即可。用nvidia-smi命令查看驱动版本如果显示CUDA Version: 12.0或更高就没问题。2.3 确认显卡驱动和显存状态在命令行里执行nvidia-smi你会看到类似这样的输出----------------------------------------------------------------------------- | NVIDIA-SMI 527.xx Driver Version: 527.xx CUDA Version: 12.0 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | || | 0 NVIDIA GeForce RTX 3060 WDDM | 00000000:01:00.0 On | | | 0% 45C P8 15W / 170W | 512MiB / 12288MiB | 0% Default | ---------------------------------------------------------------------------RTX 3060有12GB显存跑SAM的ViT-B模型约375MB参数绰绰有余即使用ViT-H约2.4GB参数也能勉强跑起来但推理速度会慢一些。Geo-SAM默认用的是ViT-B对显存要求不高6GB显存的卡也能跑。3. 给QGIS的Python装PyTorch和Geo-SAM依赖3.1 用QGIS自带的pip安装PyTorch打开Windows的命令提示符CMD或者PowerShell用管理员权限运行。然后cd到QGIS的Python目录cd C:\Program Files\QGIS 3.34.4\apps\Python39接着用这个Python的pip来安装PyTorch。注意要指定CUDA 12.1的index-urlpython -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121这一步会下载大约2GB多的文件取决于网速可能需要等一段时间。安装完成后验证一下import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果输出显示True和NVIDIA GeForce RTX 3060说明GPU加速已经就绪。如果显示False检查一下是不是装成了CPU版本或者驱动版本不够。注意有些教程会让你先装CUDA Toolkit再装PyTorch其实没必要。PyTorch的wheel里已经包含了运行所需的CUDA库只要驱动支持就行。单独装CUDA Toolkit反而可能引入版本冲突。3.2 Geo-SAM插件的安装方式选择Geo-SAM在QGIS插件仓库里可以直接搜到但仓库里的版本可能不是最新的而且依赖不会自动装全。我建议用从ZIP安装的方式先去Geo-SAM的发布页面下载最新的zip包然后在QGIS里通过插件→管理并安装插件→从ZIP安装来加载。安装完成后插件会出现在栅格菜单或者工具栏里。但这时候点开大概率会报错因为Geo-SAM还依赖一些Python包比如segment-anything、opencv-python、rasterio等。这些需要手动装。3.3 补齐segment-anything和其他依赖回到命令行继续用QGIS的Python来装python -m pip install segment-anything opencv-python rasterio shapelysegment-anything是Meta官方发布的SAM推理库Geo-SAM底层调用的就是它。opencv-python用于图像预处理rasterio用于读写栅格数据shapely用于矢量几何操作。这几个包装完之后Geo-SAM的基本运行环境就齐了。但还有一个隐藏依赖Geo-SAM在加载模型权重时需要下载SAM的预训练权重文件sam_vit_b_01ec64.pth约375MB。这个文件不会自动下载你需要手动去Meta的SAM仓库页面下载然后放到Geo-SAM指定的目录下。通常是在用户目录下的.geo_sam或者插件目录的models文件夹里。具体路径可以在Geo-SAM的设置界面里看到。4. 把SAM权重文件和Geo-SAM对接起来4.1 权重文件放哪里才能被识别Geo-SAM安装后在QGIS的Python控制台里执行以下代码可以查看它默认的模型搜索路径from geo_sam.utils import get_model_path print(get_model_path())如果报错说模块找不到说明插件没装好需要重新检查安装步骤。正常情况下它会返回一个路径比如C:\Users\你的用户名\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\geo_sam\models把下载好的sam_vit_b_01ec64.pth复制到这个目录下。如果目录不存在手动创建。4.2 在QGIS里加载模型并做第一次推理打开QGIS加载一张栅格影像可以是GeoTIFF、PNG等格式。然后在Geo-SAM的面板里选择模型类型为vit_b点击Load Model。如果一切正常你会看到控制台输出模型加载成功的提示并且显存占用会上升。接下来在影像上点几个点作为提示Geo-SAM会生成分割掩膜。第一次推理会稍微慢一点因为要初始化CUDA上下文之后就会快很多。在RTX 3060上ViT-B模型单次推理大约0.5到1秒交互体验还算流畅。4.3 常见报错和排查思路报错信息可能原因解决方式ModuleNotFoundError: No module named segment_anything依赖没装到QGIS的Python里用QGIS的python.exe重新pip installRuntimeError: CUDA out of memory显存不足换用vit_b模型或降低输入图像分辨率torch.cuda.is_available() returns FalsePyTorch装成了CPU版卸载后重新用cu121的index-url安装模型加载卡住不动权重文件路径不对或文件损坏检查文件大小是否为375MB左右重新下载分割结果全是噪点提示点位置不准确在目标物体内部多点几个正样本点5. 让Geo-SAM跑得更顺的几个实操技巧5.1 图像预裁剪能显著提升交互速度SAM的推理时间与输入图像尺寸正相关。如果你直接对一整张10000×10000像素的正射影像做分割即使有GPU也会因为图像被缩放到1024×1024而丢失细节导致分割边缘不准。我的做法是先用QGIS的裁剪栅格工具把感兴趣区域裁成2000×2000左右的小块再交给Geo-SAM处理。这样既保证了分割精度又控制了推理时间。5.2 批量处理时注意显存释放Geo-SAM默认不会在每次推理后释放显存。如果你要连续处理多张影像建议在两次推理之间手动执行import torch torch.cuda.empty_cache()或者在Geo-SAM的设置里勾选每次推理后释放缓存。否则跑十几张图之后显存就会被占满然后报OOM错误。5.3 把分割结果导出为Shapefile的注意事项Geo-SAM生成的分割掩膜是栅格形式的需要矢量化后才能变成多边形。在导出时注意设置合适的简化容差。容差太小会导致多边形节点过多文件巨大容差太大又会让边界变得粗糙。对于1米分辨率的影像我一般用0.5到1个像素的容差。另外导出坐标系要和原影像一致否则后续叠加分析会错位。5.4 什么时候该换用更大的模型ViT-B是速度和精度的折中。如果你处理的是边界非常复杂的地物比如树冠、不规则建筑可以试试ViT-H。但ViT-H的权重文件有2.4GB推理速度大约是ViT-B的3到4倍慢RTX 3060的12GB显存跑单张1024×1024图像大概占用8GB左右勉强够用。如果显存不够可以考虑ViT-L作为中间选择。6. 关于CUDA版本和PyTorch匹配的补充说明6.1 CUDA 12.0和12.1在实际使用中有区别吗从PyTorch的角度看cu121的wheel在CUDA 12.0的驱动上运行是完全兼容的因为CUDA的minor version之间保持向后兼容。你不需要为了匹配12.0而去装一个老版本的PyTorch。反过来如果你装的是cu118的PyTorch在CUDA 12.0驱动上也能跑只是用不到12.x的新特性。实际测试中cu121和cu118在RTX 3060上的推理速度差异不到5%所以不用纠结。6.2 如果系统里已经有其他Python环境怎么办这是最容易出问题的地方。很多人系统里装了AnacondaPATH里的python指向的是Anaconda的Python。如果你直接用pip install torch装到了Anaconda里QGIS根本用不到。所以一定要用QGIS自带的python.exe的完整路径来执行pip或者在QGIS的Python控制台里用subprocess调用pip。我习惯在CMD里这样写C:\Program Files\QGIS 3.34.4\apps\Python39\python.exe -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121这样就不会搞混。6.3 验证GPU是否真正被Geo-SAM调用在QGIS的Python控制台里跑一段分割任务同时用nvidia-smi -l 1监控显存变化。如果显存占用明显上升比如从500MB涨到2GB以上说明GPU确实在工作。如果显存没变化但CPU占用很高那说明PyTorch回退到了CPU模式需要检查CUDA是否可用。7. 我踩过的几个典型坑和最终解决方案第一个坑是QGIS版本和Python版本的对应关系。QGIS 3.34.4用的是Python 3.9而有些教程里写的Python 3.10或3.11照着做会找不到正确的解释器。第二个坑是PyTorch安装时没指定index-url默认装了CPU版本结果torch.cuda.is_available()一直返回False排查了半天才发现是装错了包。第三个坑是Geo-SAM的权重文件下载不完整文件大小只有几十MB加载时报unexpected EOF重新下载后才正常。还有一个比较隐蔽的问题Windows 11的路径里有空格和中文时某些Python包在读取文件时会出错。建议把QGIS安装在默认路径下用户名也尽量用英文。如果已经装了中文路径可以在Geo-SAM的设置里手动指定模型路径绕过自动搜索。最后分享一个提速的小技巧在Geo-SAM的配置文件里把torch.backends.cudnn.benchmark设为True。这个选项会让cuDNN在第一次推理时自动寻找最优的卷积算法虽然第一次会慢一点但后续每次推理都能快10%到20%。对于需要反复交互分割的场景这个提升还是很明显的。