EfficientViT-SAM技术解析:高效分割一切模型的设计与实现
2025-07-10 04:44:52作者:彭桢灵Jeremy
概述
EfficientViT-SAM是MIT-HAN-Lab团队推出的一系列加速版Segment Anything模型。该系列模型在保持原始SAM模型轻量级提示编码器和掩码解码器的同时,将原本沉重的图像编码器替换为高效的EfficientViT架构。通过知识蒸馏和端到端训练策略,EfficientViT-SAM在A100 GPU上实现了48.9倍的TensorRT加速,同时保持了与原始SAM-ViT-H相当的性能表现。
核心创新点
- 架构优化:采用EfficientViT作为图像编码器,显著提升了计算效率
- 训练策略:两阶段训练方法(知识蒸馏+端到端训练)确保模型性能
- 高效推理:针对不同硬件平台(如Jetson Orin和A100)进行优化
模型系列与性能
EfficientViT-SAM提供多个预训练模型变体,满足不同场景需求:
模型名称 | 分辨率 | COCO mAP | LVIS mAP | 参数量 | MACs | Jetson Orin延迟 | A100吞吐量 |
---|---|---|---|---|---|---|---|
L0 | 512x512 | 45.7 | 41.8 | 34.8M | 35G | 8.2ms | 762 img/s |
L1 | 512x512 | 46.2 | 42.1 | 47.7M | 49G | 10.2ms | 638 img/s |
L2 | 512x512 | 46.6 | 42.7 | 61.3M | 69G | 12.9ms | 538 img/s |
XL0 | 1024x1024 | 47.5 | 43.9 | 117.0M | 185G | 22.5ms | 278 img/s |
XL1 | 1024x1024 | 47.8 | 44.4 | 203.3M | 322G | 37.2ms | 182 img/s |
快速使用指南
基础使用
from efficientvit.sam_model_zoo import create_efficientvit_sam_model
# 加载预训练模型
model = create_efficientvit_sam_model(name="efficientvit-sam-xl1", pretrained=True)
model = model.cuda().eval()
预测器使用
from efficientvit.models.efficientvit.sam import EfficientViTSamPredictor
predictor = EfficientViTSamPredictor(model)
自动掩码生成
from efficientvit.models.efficientvit.sam import EfficientViTSamAutomaticMaskGenerator
mask_generator = EfficientViTSamAutomaticMaskGenerator(model)
评估方法
基于边界框提示的实例分割
# COCO数据集评估
torchrun --nproc_per_node=8 applications/efficientvit_sam/eval_efficientvit_sam_model.py \
--dataset coco \
--image_root ~/dataset/coco/val2017 \
--annotation_json_file ~/dataset/coco/annotations/instances_val2017.json \
--model efficientvit-sam-xl1 \
--prompt_type box
基于点提示的实例分割
# LVIS数据集评估
torchrun --nproc_per_node=8 applications/efficientvit_sam/eval_efficientvit_sam_model.py \
--dataset lvis \
--image_root ~/dataset/coco \
--annotation_json_file ~/dataset/coco/annotations/lvis_v1_val.json \
--model efficientvit-sam-xl1 \
--prompt_type point \
--num_click 1
可视化演示
EfficientViT-SAM提供了多种交互式可视化方式:
# 全图分割
python applications/efficientvit_sam/demo_efficientvit_sam_model.py --model efficientvit-sam-xl1 --mode all
# 点提示分割
python applications/efficientvit_sam/demo_efficientvit_sam_model.py --model efficientvit-sam-xl1 --mode point
# 框提示分割
python applications/efficientvit_sam/demo_efficientvit_sam_model.py --model efficientvit-sam-xl1 --mode box --box "[150,70,640,400]"
部署方案
ONNX导出与推理
# 导出编码器
python applications/efficientvit_sam/deployment/onnx/export_encoder.py \
--model efficientvit-sam-xl1 \
--output assets/export_models/efficientvit_sam/onnx/efficientvit_sam_xl1_encoder.onnx
# ONNX推理
python applications/efficientvit_sam/run_efficientvit_sam_onnx.py \
--model efficientvit-sam-xl1 \
--encoder_model assets/export_models/efficientvit_sam/onnx/efficientvit_sam_xl1_encoder.onnx \
--decoder_model assets/export_models/efficientvit_sam/onnx/efficientvit_sam_xl1_decoder.onnx \
--mode point
TensorRT优化
# 编码器引擎生成
trtexec --onnx=assets/export_models/efficientvit_sam/onnx/efficientvit_sam_xl1_encoder.onnx \
--minShapes=input_image:1x3x1024x1024 \
--optShapes=input_image:4x3x1024x1024 \
--maxShapes=input_image:4x3x1024x1024 \
--saveEngine=assets/export_models/efficientvit_sam/tensorrt/efficientvit_sam_xl1_encoder.engine
训练流程
- 准备蒸馏模型检查点
- 配置训练参数文件
- 启动分布式训练
torchrun --nproc_per_node=8 applications/efficientvit_sam/train_efficientvit_sam_model.py \
applications/efficientvit_sam/configs/efficientvit_sam_xl1.yaml \
--data_provider.root ~/dataset/sam/ \
--path .exp/efficientvit_sam/efficientvit_sam_xl1 \
--resume
技术优势
- 高效推理:相比原始SAM模型,在保持精度的同时显著提升推理速度
- 硬件友好:针对不同硬件平台提供优化方案
- 灵活部署:支持ONNX和TensorRT等多种部署方式
- 多场景适用:提供不同规模的模型变体,适应不同计算资源限制
EfficientViT-SAM为实时图像分割任务提供了高效的解决方案,特别适合需要快速响应的应用场景,如自动驾驶、医疗影像分析等。