首页
/ EfficientViT-SAM技术解析:高效分割一切模型的设计与实现

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相当的性能表现。

核心创新点

  1. 架构优化:采用EfficientViT作为图像编码器,显著提升了计算效率
  2. 训练策略:两阶段训练方法(知识蒸馏+端到端训练)确保模型性能
  3. 高效推理:针对不同硬件平台(如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

训练流程

  1. 准备蒸馏模型检查点
  2. 配置训练参数文件
  3. 启动分布式训练
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

技术优势

  1. 高效推理:相比原始SAM模型,在保持精度的同时显著提升推理速度
  2. 硬件友好:针对不同硬件平台提供优化方案
  3. 灵活部署:支持ONNX和TensorRT等多种部署方式
  4. 多场景适用:提供不同规模的模型变体,适应不同计算资源限制

EfficientViT-SAM为实时图像分割任务提供了高效的解决方案,特别适合需要快速响应的应用场景,如自动驾驶、医疗影像分析等。