EfficientSAM高效图像分割实战指南
EfficientSAM是一个基于掩码图像预训练的高效分割模型,能够在保持高性能的同时显著降低计算成本。本指南将详细介绍如何使用该项目进行图像分割任务。
项目结构概览
EfficientSAM项目采用清晰的分层结构,便于理解和使用:
EfficientSAM/
├── README.md - 项目说明文档
├── setup.py - 项目安装配置
├── EfficientSAM_example.py - 核心示例脚本
├── EfficientSAM_onnx_example.py - ONNX版本示例
├── efficient_sam/ - 核心模型代码
│ ├── efficient_sam.py - 主模型类
│ ├── build_efficient_sam.py - 模型构建工具
│ ├── efficient_sam_encoder.py - 图像编码器
│ ├── efficient_sam_decoder.py - 掩码解码器
│ └── two_way_transformer.py - 双向变换器
├── weights/ - 模型权重文件
│ ├── efficient_sam_vitt.pt - EfficientSAM-Ti权重
│ └── efficient_sam_vits.pt.zip - EfficientSAM-S权重
├── notebooks/ - 交互式学习笔记
│ ├── EfficientSAM_example.ipynb
│ └── EfficientSAM_segment_everything_example.ipynb
├── figs/examples/ - 示例图像和结果
└── torchscripted_model/ - TorchScript模型文件
快速开始
环境准备
首先安装项目依赖:
pip install torch torchvision pillow matplotlib
克隆项目
git clone https://gitcode.com/gh_mirrors/ef/EfficientSAM
cd EfficientSAM
核心功能演示
基础图像分割
项目提供了完整的示例脚本EfficientSAM_example.py,展示了如何使用EfficientSAM进行图像分割:
from efficient_sam.build_efficient_sam import build_efficient_sam_vitt, build_efficient_sam_vits
from PIL import Image
from torchvision import transforms
import torch
import numpy as np
import zipfile
# 构建EfficientSAM-Ti模型
models = {}
models['efficientsam_ti'] = build_efficient_sam_vitt()
# 加载并处理图像
sample_image_np = np.array(Image.open("figs/examples/dogs.jpg"))
sample_image_tensor = transforms.ToTensor()(sample_image_np)
# 定义输入点(用户交互点)
input_points = torch.tensor([[[[580, 350], [650, 350]]]])
input_labels = torch.tensor([[[1, 1]]])
# 运行推理
predicted_logits, predicted_iou = model(
sample_image_tensor[None, ...],
input_points,
input_labels,
)
模型架构解析
EfficientSAM采用编码器-解码器架构:
- 图像编码器:基于Vision Transformer,将输入图像转换为特征嵌入
- 提示编码器:处理用户提供的点、框等提示信息
- 掩码解码器:结合图像嵌入和提示嵌入,预测分割掩码
EfficientSAM整体架构设计,展示编码器-解码器的工作流程
模型类型与性能
EfficientSAM提供两种不同规模的模型:
| 模型类型 | 参数量 | 适用场景 |
|---|---|---|
| EfficientSAM-S | 较大 | 高精度分割任务 |
| EfficientSAM-Ti | 较小 | 实时应用和移动设备 |
实用功能展示
点提示分割
用户可以通过点击图像中的特定点来指导模型进行分割:
框提示分割
使用边界框作为输入提示,快速分割框内对象:
全图分割
EfficientSAM支持全自动的图像分割,无需用户交互:
显著区域检测
模型能够自动检测图像中的显著区域:
进阶使用
Jupyter Notebook交互
项目提供了交互式Notebook,便于学习和实验:
notebooks/EfficientSAM_example.ipynb- 基础使用示例notebooks/EfficientSAM_segment_everything_example.ipynb- 全分割功能演示
ONNX部署
对于生产环境部署,可以使用ONNX格式:
# 使用ONNX模型进行推理
from onnx_models import EfficientSAMOnnxModel
项目特色
- 高效性能:相比传统SAM模型,EfficientSAM在保持精度的同时显著提升了推理速度
- 灵活交互:支持点、框等多种交互方式
- 易于部署:提供PyTorch、ONNX、TorchScript多种格式
实际应用案例
以下是通过EfficientSAM处理的实际图像分割结果:
使用EfficientSAM-Ti模型对狗图像进行分割的实际效果
EfficientSAM为计算机视觉领域的研究者和开发者提供了一个强大而高效的工具,无论是学术研究还是工业应用,都能从中受益。通过本指南的学习,您已经掌握了使用EfficientSAM进行图像分割的核心技能,可以开始在实际项目中应用这一先进技术。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考







