ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/8/30 9:41:10 拓冰建站 浏览量
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 AnythingSAM挑哪个模型检查点答案很直接ViT-B。默认注册的vit_h在 V100 上单帧编码要 125ms约 8FPS根本挤不进 20FPS 的预算而vit_b只要 45ms约 22FPS还能在 2GB 显存内跑完单图推理。SAM 的官方推理代码只提供了三个检查点ViT-H、ViT-L、ViT-B。它们共用同一套架构唯一区别是 image encoderViT 骨干的尺寸——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 输入、batch1 的参考基准换硬件后先比相对差距绝对值以你自己实测为准。 技术档案三个检查点到底差在哪三个检查点在代码里就是 segment_anything/build_sam.py 里的三个 builder 函数经sam_model_registry注册from segment_anything import sam_model_registry sam sam_model_registryvit_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_size14、三个版本都恰好安排4 层全局注意力分布在不同的层索引上。而 prompt encoder、mask decoder、TwoWayTransformer 的维度参数三者完全一致——也就是说ViT-B 与 ViT-L 的区别可以精确表述为只有 image encoder 的宽度、深度和头数不同其余 100% 共享。你切换检查点API 一行都不用改。用一条链把从小到大的关系压平来看 性能账本每 1 个点 mIoU 的定价把速度、精度、显存都当成钱。以下基准为 V100 单卡、1024×1024 输入、batch1 的参考值用来校准相对差距指标vit_bvit_lvit_himage encoder 单图耗时45ms78ms125ms等效吞吐1 图/次~22 FPS~12.8 FPS~8 FPS零样本 mIoU74.3%76.8%78.2%mAP0.578.2%80.9%82.5%mAP0.7571.6%74.5%76.8%单图推理峰值显存fp32~2.1GB~3.8GB~6.2GB升一档要付的账升档mIoU 增益延迟代价显存代价vit_b→vit_l2.5 点45→78ms×1.741.7GBvit_l→vit_h1.4 点78→125ms×1.602.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建议配 fp1612GBvit_l轻松vit_hfp32 单图也够多实例部署时按上表 ×实例数24GBvit_h 批量任务离线场景才值得 场景对位四种业务分别落到哪个检查点实时交互标注工具、直播抠像 → ViT-B点选交互要求用户点下去、马上看到 mask50ms 的延迟预算只有 ViT-B 能过45ms 编码 mask decoder 毫秒级出三个候选 mask。from segment_anything import SamPredictor, sam_model_registry import numpy as np sam sam_model_registryvit_b predictor SamPredictor(sam) predictor.set_image(frame) # 图像编码一次后续每次点击都复用 embedding masks, scores, _ predictor.predict( point_coordsnp.array([[x, y]]), point_labelsnp.array([1]) )生产均衡云端 API、工业质检 → ViT-L对外服务最怕某个刁钻 case 切崩了需要精度留白。ViT-L 的 mAP0.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 留在服务端 GPUdecoder 下沉到端侧是显存紧张或无 GPU 环境的拆分方案。️ 落地配方五个省显存、压延迟的动作1. 启动时按显存自动选检查点避免一加载就 OOMimport 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), dtypenp.uint8) for _ in range(10): predictor.set_image(dummy)3. fp16 减半 encoder 显存ViT-H 单图从 ~6.2GB 压到 ~3.5GB 量级with torch.autocast(cuda, dtypetorch.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.onnx5. 量化之后能快多少对 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配 fp162延迟预算单图编码上限≤50ms / ≤80ms / 无约束vit_b/vit_l/vit_h3精度预算自有测试集达标了吗vit_b的 74.3% 已达标停在最小模型不付多余成本三条实践提醒基准数据要自己重测。本文数字锚定 V100RTX 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),仅供参考