【机器视觉】Segment Anything模型(SAM) C# 推理

Facebook开源的Segment Anything是一个基于大型预训练模型的计算机视觉工具,它使用一种新的范式来处理图像分割任务。这个范式不依赖于传统的预训练加微调(pretrain+finetune)方法,而是通过提示(prompt)加上预训练的基础模型(foundation model)来实现。Segment Anything的目标是能够处理包括交互式分割、边缘检测、超级像素化、目标提议生成、前景分割、语义分割、实例分割、全景分割等多种计算机视觉领域的任务1。

Segment Anything模型(SAM)的架构主要包括三个部分:

  1. 图像编码器:使用标准的ViT(Vision Transformer)作为图像编码器,将原始图像编码成向量。

  2. 提示编码器:将支持的提示内容编码成向量。

  3. 掩码解码器:输出原图尺寸上的前后景概率以及IoU分数。

SAM模型通过构造合适的提示,可以实现对新样本的零样本(zero-shot)能力,这意味着它可以在没有额外训练数据的情况下处理新的图像类型。例如,通过提供一个点或边界框作为提示,SAM能够生成与之相关的图像分割掩码。这种方法的优势在于它可以灵活地应用于各种不同的分割任务,并且具有很强的泛化能力。

此外,Facebook还发布了与Segment Anything配套的数据集,这是一个非常大的图像注释数据集,包含超过11亿个分割掩码,这些掩码具有高质量和多样性。这个数据集被称为Segment Anything 1-Billion (SA-1B),它可以帮助研究人员训练图像分割的基础模型2。

总的来说,Segment Anything代表了计算机视觉领域的一个重要进展,它将NLP领域的提示范式引入到计算机视觉中,为图像分割任务提供了一种新的解决方案。这个工具的开源性质也意味着它可以被广泛地应用于学术和工业界的研究中。

16c8a4bc17a30212794e35d9688b6778.png

CSharp ONNX 推理

点Promot:展开Point栏,点击AddPoint后,鼠标点击左侧图像选择点。Add Mask表示正向点,Remove Mask表示负向点。

452c35dfc2414964d3b1501c965ea462.png

Box Promot: 展开Box栏,点击AddBox后,鼠标点击左侧图像选择起始点,易懂鼠标改变Box大小。

0901299ea81eaca8b9ae9fbf9196dcbc.png

AutoSeg:自动分割,展everythin栏,设置阈值,根据points_per_side值在图像上均匀选择候选点,每个点都作为promot,然后根据阈值对结果后处理。

6e20025364dc9b6cdbc3bd1c10118bcb.png

参考网址:

https://github.com/facebookresearch/segment-anything/

https://github.com/AIDajiangtang/Segment-Anything-CSharp 

https://github.com/AIDajiangtang/Segment-Anything-CSharp/releases/download/v1.0.1/ONNXModels.zip

### 如何在 Mac 上部署 Segment Anything 模型 #### 准备工作 为了成功部署 Segment Anything 模型(SAM),需要先安装必要的依赖库并下载预训练模型。可以从 Facebook Research 的官方 GitHub 仓库获取最新版本的代码[^3]。 #### 安装环境 建议使用 Python 虚拟环境来管理项目所需的包。可以利用 `venv` 或者 Anaconda 创建独立的工作空间。对于 macOS 用户来说,Homebrew 是一种方便的方式来安装 Python 和其他工具。 ```bash # 使用 Homebrew 安装 Python brew install python ``` 接着激活虚拟环境: ```bash python -m venv sam_env source sam_env/bin/activate ``` #### 下载源码与设置 克隆 Segment Anything 的 Git 仓库到本地计算机,并进入该项目目录下执行后续操作。 ```bash git clone https://github.com/facebookresearch/segment-anything.git cd segment-anything pip install -r requirements.txt ``` 这一步骤会自动拉取所有必需的Python 库以支持 SAM 运行。 #### 配置文件调整 如果打算自定义某些参数或路径,则需编辑 `ia_config.py` 文件中的相应条目。例如指定保存分割结果图片的目标文件夹以及日志记录的位置等[^4]。 #### 获取预训练权重 访问 GitHub 页面提供的链接下载经过训练后的模型检查点(checkpoints)。通常这些资源会被托管于云存储服务中以便公众访问。确保所选模型架构同硬件兼容(比如针对 Apple Silicon 特化优化过的版本)。 #### 加载模型并测试 完成上述准备工作之后就可以编写简单的脚本来加载已有的 checkpoint 并尝试一些基本功能了。下面给出了一段用于初始化和预测的小例子: ```python from segment_anything import SamAutomaticMaskGenerator, sam_model_registry import torch device = "cuda" if torch.cuda.is_available() else "cpu" sam_checkpoint = "./checkpoints/sam_vit_h_4b8939.pth" model_type = "vit_h" sam = sam_model_registry[model_type](checkpoint=sam_checkpoint).to(device=device) mask_generator = SamAutomaticMaskGenerator(sam) image_path = 'path_to_your_image.jpg' masks = mask_generator.generate(image_path) print(masks) ``` 这段代码展示了如何实例化一个基于 ViT-H 架构的 SAM 对象,并传入特定图像路径来进行推理得到掩膜列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值