当前位置: 首页 > news >正文

SAM 三个检查点怎么选:ViT-H / ViT-L / ViT-B 性能对比与选型完整指南

SAM 三个检查点怎么选:ViT-H / ViT-L / ViT-B 性能对比与选型完整指南

【免费下载链接】segment-anythingThe repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/GitHub_Trending/se/segment-anything

显存只有 12GB,业务方又拍着桌子要求 20FPS——给 Segment Anything(SAM)挑哪个模型检查点?答案很直接:ViT-B。默认注册的vit_h在 V100 上单帧编码要 125ms(约 8FPS),根本挤不进 20FPS 的预算,而vit_b只要 45ms(约 22FPS),还能在 2GB 显存内跑完单图推理。

SAM 的官方推理代码只提供了三个检查点:ViT-H、ViT-L、ViT-B。它们共用同一套架构,唯一区别是 image encoder(ViT 骨干)的尺寸——prompt encoder 和 mask decoder 三个版本完全相同。选型本质是一道成本题:多买 1~2 个点 mIoU,要付多少延迟和显存?下面把三个检查点放进同一份数据档案里算清楚。

⏱️ 30 秒速查表:你的情况直接选

你的处境直接选理由(后文展开)
12GB 显存 + 交互延迟要 ≤ 50ms/帧vit_b45ms 编码,22FPS,显存占用最低(~2.1GB)
云端 API,精度留白但别把延迟拖垮vit_l78ms 编码,mIoU 76.8%,精度/成本拐点
离线批处理、数据集构建、论文实验vit_hmIoU 78.2% 封顶,延迟不受限
8GB 以下显卡 / 纯 CPU / 手机浏览器vit_b+ ONNX 导出轻量 mask decoder 可导出 ONNX 在端侧运行
还在观望,想先跑通再调优vit_l起步最不容易踩坑

速查表基于 V100 单卡、1024×1024 输入、batch=1 的参考基准;换硬件后先比相对差距,绝对值以你自己实测为准。

📦 技术档案:三个检查点到底差在哪

三个检查点在代码里就是 segment_anything/build_sam.py 里的三个 builder 函数,经sam_model_registry注册:

from segment_anything import sam_model_registry sam = sam_model_registry"vit_b"
参数vit_bvit_lvit_h
嵌入维度encoder_embed_dim76810241280
层深encoder_depth122432
注意力头encoder_num_heads121616
全局注意力层global_attn_indexes[2,5,8,11][5,11,17,23][7,15,23,31]
编码器参数量~91M~308M~636M
检查点文件~375MB~1.25GB~2.56GB
注册别名default/vit_h

几个值得注意的共性配置:patch size 固定 16、输入统一 resize 到 1024×1024、窗口注意力 window_size=14、三个版本都恰好安排4 层全局注意力(分布在不同的层索引上)。而 prompt encoder、mask decoder、TwoWayTransformer 的维度参数三者完全一致——也就是说,"ViT-B 与 ViT-L 的区别"可以精确表述为:只有 image encoder 的宽度、深度和头数不同,其余 100% 共享。你切换检查点,API 一行都不用改。

用一条链把"从小到大"的关系压平来看:

💰 性能账本:每 1 个点 mIoU 的定价

把速度、精度、显存都当成"钱"。以下基准为 V100 单卡、1024×1024 输入、batch=1 的参考值,用来校准相对差距

指标vit_bvit_lvit_h
image encoder 单图耗时45ms78ms125ms
等效吞吐(1 图/次)~22 FPS~12.8 FPS~8 FPS
零样本 mIoU74.3%76.8%78.2%
mAP@0.578.2%80.9%82.5%
mAP@0.7571.6%74.5%76.8%
单图推理峰值显存(fp32)~2.1GB~3.8GB~6.2GB

升一档要付的账:

升档mIoU 增益延迟代价显存代价
vit_bvit_l+2.5 点45→78ms,×1.74+1.7GB
vit_lvit_h+1.4 点78→125ms,×1.60+2.4GB

这张表才是选型的内核:B→L 花 1.7 倍延迟买 2.5 个点,很划算;L→H 花 1.6 倍延迟只多买 1.4 个点,还多花 2.4GB 显存,明显贵了。如果你的业务指标"够用线"在 76~77 之间,ViT-L 就是精度成本曲线的拐点;再往上追,钱花得不值。

显存预算怎么选检查点

你的显存能装下什么备注
8GBvit_b富余;vit_l可留批处理余量vit_h建议配 fp16
12GBvit_l轻松;vit_hfp32 单图也够多实例部署时按上表 ×实例数
24GB+vit_h+ 批量任务离线场景才值得

🎯 场景对位:四种业务分别落到哪个检查点

实时交互:标注工具、直播抠像 → ViT-B

点选交互要求用户"点下去、马上看到 mask",50ms 的延迟预算只有 ViT-B 能过:45ms 编码 + mask decoder 毫秒级出三个候选 mask。

from segment_anything import SamPredictor, sam_model_registry import numpy as np sam = sam_model_registry"vit_b" predictor = SamPredictor(sam) predictor.set_image(frame) # 图像编码一次,后续每次点击都复用 embedding masks, scores, _ = predictor.predict( point_coords=np.array([[x, y]]), point_labels=np.array([1]) )

生产均衡:云端 API、工业质检 → ViT-L

对外服务最怕"某个刁钻 case 切崩了",需要精度留白。ViT-L 的 mAP@0.75 是 74.5%(ViT-B 71.6%),对边界更严格的 mask 优势更明显;78ms 的延迟放进一个 200ms 的 API 网关绰绰有余,3.8GB 显存也让单卡多实例部署成为可能。

离线科研:数据集构建、批处理 → ViT-H

零样本批量 mask 生成是 SAM 的另一条主力链路,入口在 segment_anything/automatic_mask_generator.py,命令行版是scripts/amg.py。这类任务一夜跑几万次,没有延迟约束,ViT-H 的 78.2% mIoU 就是免费午餐。

资源受限:纯 CPU、手机、浏览器 → ViT-B + ONNX 拆分

SAM 的 mask decoder 很轻,官方脚本 scripts/export_onnx_model.py 可以把它单独导出成 ONNX,在浏览器、手机端跑(仓库 demo/ 里就是一个 React 网页 demo 的例子):backbone 留在服务端 GPU,decoder 下沉到端侧,是显存紧张或无 GPU 环境的拆分方案。

🛠️ 落地配方:五个省显存、压延迟的动作

1. 启动时按显存自动选检查点,避免"一加载就 OOM":

import torch from segment_anything import sam_model_registry free, _ = torch.cuda.mem_get_info() free_gb = free / 1024**3 if free_gb >= 8: choice = "vit_l" # 12.8 FPS,精度留白 elif free_gb >= 3: choice = "vit_b" # 22 FPS,显存友好 else: choice = "vit_b" device = "cpu" sam = sam_model_registrychoice.to(device)

2. 预热:冷启动的首帧包含 CUDA kernel 编译与显存分配,会把交互延迟顶上去几十毫秒。上线前用 dummy 图过 10 次:

dummy = np.random.randint(0, 255, (1024, 1024, 3), dtype=np.uint8) for _ in range(10): predictor.set_image(dummy)

3. fp16 减半 encoder 显存(ViT-H 单图从 ~6.2GB 压到 ~3.5GB 量级):

with torch.autocast("cuda", dtype=torch.float16): embedding = sam.image_encoder(x)

4. ONNX 导出 mask decoder,端侧部署的标配动作:

python scripts/export_onnx_model.py --checkpoint sam_vit_b_01ec64.pth \ --model-type vit_b --output sam_decoder.onnx

5. 量化之后能快多少?对 SAM 做动态权重量化,encoder 里线性层的权重的计算从 fp32 降到 int8,通常可再省 25%~40% 推理时间、文件体积缩到 1/4 左右(375MB 的 ViT-B 约到 95MB);精度损失一般在 1 个点 mIoU 以内,上线前务必用自有测试集回测。量化部署的注意点:窗口注意力路径含插值与 LayerNorm,量化覆盖范围建议只圈住nn.Linear,先测再放。

提示:predictor.set_image()只对图像编码一次,同一张图换多个 prompt 时不要重复调set_image,否则白白重付 encoder 那 45~125ms。

✅ 决策清单:三问 + 三条提醒

选型时依次问自己三个问题,答案唯一确定检查点:

#问题判据指向
1硬件预算:可用显存?<8GB / 8~12GB / ≥16GBvit_b/vit_l/vit_h(配 fp16)
2延迟预算:单图编码上限?≤50ms / ≤80ms / 无约束vit_b/vit_l/vit_h
3精度预算:自有测试集达标了吗?vit_b的 74.3% 已达标停在最小模型,不付多余成本

三条实践提醒:

  • 基准数据要自己重测。本文数字锚定 V100;RTX 4090、A100、L40S 的绝对耗时差异不小,相对排序(B < L < H)不会变。
  • embedding 复用是免费午餐。set_image一次、prompt 多次,交互场景能砍掉 70% 以上的重复计算。
  • ONNX 导出只覆盖 mask decoder,不是整模型。端侧部署前想清楚 backbone 放在哪一层执行,再写拆分逻辑。
  • 跑通示例可直接看 notebooks/predictor_example.ipynb(提示驱动)与 notebooks/automatic_mask_generator_example.ipynb(整图 mask 生成),仓库本地安装:git clone https://gitcode.com/GitHub_Trending/se/segment-anything && cd segment-anything && pip install -e .

【免费下载链接】segment-anythingThe repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/GitHub_Trending/se/segment-anything

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4304636.html

相关文章:

  • 编程停滞:LLM辅助开发下的能力退化与破解之道
  • 线上问医系统设计与实现:Spring Boot + MySQL全栈实战解析
  • Win11Debloat:Windows 11一键系统优化,10分钟告别预装软件与隐私追踪
  • PowerStep01 SPI写不进寄存器?步进驱动初始化失败排查全指南
  • whisper.cpp 模型怎么选:从 tiny 到 large-v3-turbo 的速度与准确率权衡
  • 老软件拯救:在Windows 11上运行1998年CD-ROM世界地图集
  • 3条命令在Docker容器里跑起Windows:dockur/windows完整指南 [特殊字符]
  • dockur/windows:在 Docker 容器中运行完整 Windows 系统的实操指南
  • Penpot 开源设计工具:基于开放标准的设计协作平台
  • 遍历性游戏Python模拟:期望正收益为何长期亏损?
  • Spring AI 2.0实战:从多模型到Agent的一周学习路线
  • 单片机电源管理:12V转5V转3.3V两级降压方案设计与调试
  • 分布式服务的自动巡检设计
  • 爱奇艺iOS校招笔试全复盘:核心考点、解题思路与备战策略
  • you-get -I 批量下载:一个文本文件搞定100条URL
  • 前端两年经验跳槽面经:从简历准备到高频面试题拆解
  • Magisk Root 完全掌握:从原理到定制的完整指南
  • Pandas入门指南:2小时掌握DataFrame数据清洗与分组聚合
  • 科学计算日常巡检的有效方法
  • 从老源码到现代API:接口设计、安全与实战全解析
  • Typst 快速上手:5 分钟从零编译出第一份 PDF 文档
  • VS2019+OSG+osgEarth+GDAL+Qt全链路编译指南:三维GIS开发环境搭建
  • 快速上手 whisper.cpp:把语音转文字搬回自己设备的完整指南
  • Starship 提示符提速:3 档方案把 500ms 压进 50ms
  • MRIcroGL完全上手:从DICOM转换到出版级脑图渲染
  • 用 Remotion 一个下午做出三语视频:React 视频国际化的完整实战
  • AI音乐应用落地避坑指南:从提示词到音频交付的完整链路实践
  • 旧设备新生:reMarkable 2 的固件升级、SSH与自动化维护
  • whisper.cpp 配置 CUDA 加速,长音频语音转写跑到实时以上
  • 60G高清纹理Mod详解:黑暗之魂2画质升级与龙祭坛跑图指南