RAM-Grounded-SAM:在Windows 11上绕过CUDA依赖的CPU部署实战

张开发
2026/4/3 18:20:43 15 分钟阅读
RAM-Grounded-SAM:在Windows 11上绕过CUDA依赖的CPU部署实战
1. 为什么选择CPU部署RAM-Grounded-SAM最近在帮实验室搭建图像分析工具时发现很多同学都被GPU显存问题卡住了。我们尝试在Ubuntu服务器上用12GB显存的RTX 3060跑RAM-Grounded-SAM结果直接爆显存。后来转战Windows 11笔记本的纯CPU环境反而顺利跑通了整个流程。这让我意识到对于没有高端显卡的研究者来说CPU方案可能才是更实际的选择。RAM-Grounded-SAM这个项目确实很有意思它把三个重量级模型RAM、GroundingDINO和SAM打包在一起能自动完成图像识别、打标签和分割的全流程。但官方文档主要面向GPU环境很多配置参数对CPU用户不太友好。经过两周的折腾我总结出这套在Windows 11上纯CPU运行的完整方案特别适合以下场景使用轻薄本或核显笔记本的研究者实验室共享服务器排队时间太长的情况想快速验证模型效果再决定是否投资硬件实测在i7-12700H处理器上处理一张1080P图片约需3-5分钟。虽然比GPU慢不少但对于不追求实时性的学术研究完全够用。下面我就把踩过的坑和优化技巧全部分享出来。2. 环境配置避坑指南2.1 Conda环境搭建很多教程会推荐用Docker但在Windows下反而会增加复杂度。我的建议是直接上Conda用这个命令创建环境conda create -n gsam python3.11 -y这里有个关键细节一定要用Python 3.11。我试过3.8和3.10都会遇到奇怪的依赖冲突。激活环境后安装CPU版的PyTorchpip install torch2.0.1 torchvision0.15.2 --index-url https://download.pytorch.org/whl/cpu注意版本号不能随便改有次我偷懒装了最新的2.2.0结果报错提示需要启用CUDA。后来发现2.0.1的CPU版本最稳定这也是官方issue里推荐的版本。2.2 依赖安装技巧接下来这三个包的安装顺序很重要pip install -e segment_anything pip install --no-build-isolation -e GroundingDINO pip install --upgrade diffusers[torch]特别是GroundingDINO那个--no-build-isolation参数不加的话会卡在编译环节半小时。其他必备依赖可以一次性安装pip install opencv-python pycocotools matplotlib onnxruntime onnx ipykernel遇到最头疼的问题是RAM模块的CLIP依赖。直接运行pip install -r requirements.txt会卡在git clone环节。我的解决方案是先手动下载CLIP源码注释掉requirements.txt最后一行进入CLIP目录单独安装3. 模型下载与配置魔改3.1 模型文件准备CPU部署需要下载三个核心模型文件GroundingDINOswint_ogc版本1.2GBSAMvit_h版本2.4GBRAMswin_large_14m版本1.1GB建议用IDM等多线程工具下载否则SAM模型可能要下半天。下载完成后文件目录建议这样组织Grounded-Segment-Anything/ ├── ram_swin_large_14m.pth ├── sam_vit_h_4b8939.pth └── GroundingDINO/ └── groundingdino_swint_ogc.pth3.2 关键配置修改最关键的魔改在tokenizer部分。找到GroundingDINO/groundingdino/util/get_tokenlizer.py在文件开头添加local_path D:/path/to/bert-base-uncased # 换成你的实际路径然后修改两个函数get_tokenlizer()中的AutoTokenizer.from_pretrained()参数get_tokenlizer_bert()中的BertModel.from_pretrained()参数RAM模块的修改更麻烦些。除了要改recognize-anything/ram/models/utils.py里的tokenizer路径还要处理transformers的版本冲突。遇到apply_chunking_to_forward报错时需要降低transformers版本到4.26.1或者按照CSDN上那个方案修改bert.py文件4. 运行脚本调试心得4.1 主脚本修改要点automatic_label_ram_demo.py需要重点修改四处SAM导入方式把build_sam改成sam_model_registry移除OpenAI依赖注释掉所有与litellm相关的代码设备指定确保所有.to(device)都指向cpu模型路径使用相对路径更不容易出错这是我的配置模板config_file GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py ram_checkpoint ram_swin_large_14m.pth grounded_checkpoint groundingdino_swint_ogc.pth sam_version vit_h sam_checkpoint sam_vit_h_4b8939.pth device cpu # 核心配置4.2 性能优化技巧虽然CPU注定慢但这几个参数可以提速20%以上在predictor.set_image()前添加import os os.environ[OMP_NUM_THREADS] str(os.cpu_count())修改OpenCV的线程数cv2.setNumThreads(0)关闭matplotlib的交互模式matplotlib.use(Agg)运行时如果看到大量警告别紧张只要不是Error都能继续。我遇到过最烦人的是ONNX的警告后来发现不影响最终结果就直接无视了。5. 实际效果与使用建议跑通整个流程后你会发现在outputs目录下生成两个文件_mask.png透明背景的分割结果_annotated.jpg带标签和框的标注图对于学术用途我有几个实用建议批量处理时可以用Pool加速但别开太多进程反而更慢简单图片可以把box_threshold调到0.15捕捉更多对象复杂场景建议先用RAM生成标签再手动筛选关键词输入DINO记得第一次成功运行时看着普通的笔记本CPU也能产出专业级的分割结果那种成就感比用服务器跑出来还要强烈。虽然等待时间长了点但这个方案确实让没有高端硬件的研究者也能用上最前沿的视觉模型。

更多文章