【SAM3教程-2】使用正负样本提示框一键分割图片中的相似目标详细步骤与示例

《博主简介》

小伙伴们好,我是阿旭。
专注于计算机视觉领域,包括目标检测、图像分类、图像分割和目标跟踪等项目开发,提供模型对比实验、答疑辅导等。

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称 项目名称
1.【人脸识别与管理系统开发】 2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】 4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】 6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】 8.【基于深度学习的行人跌倒检测系统】
9.【基于深度学习的PCB板缺陷检测系统】 10.【基于深度学习的生活垃圾分类目标检测系统】
11.【基于深度学习的安全帽目标检测系统】 12.【基于深度学习的120种犬类检测与识别系统】
13.【基于深度学习的路面坑洞检测系统】 14.【基于深度学习的火焰烟雾检测系统】
15.【基于深度学习的钢材表面缺陷检测系统】 16.【基于深度学习的舰船目标分类检测系统】
17.【基于深度学习的西红柿成熟度检测系统】 18.【基于深度学习的血细胞检测与计数系统】
19.【基于深度学习的吸烟/抽烟行为检测系统】 20.【基于深度学习的水稻害虫检测与识别系统】
21.【基于深度学习的高精度车辆行人检测与计数系统】 22.【基于深度学习的路面标志线检测与识别系统】
23.【基于深度学习的智能小麦害虫检测识别系统】 24.【基于深度学习的智能玉米害虫检测识别系统】
25.【基于深度学习的200种鸟类智能检测与识别系统】 26.【基于深度学习的45种交通标志智能检测与识别系统】
27.【基于深度学习的人脸面部表情识别系统】 28.【基于深度学习的苹果叶片病害智能诊断系统】
29.【基于深度学习的智能肺炎诊断系统】 30.【基于深度学习的葡萄簇目标检测系统】
31.【基于深度学习的100种中草药智能识别系统】 32.【基于深度学习的102种花卉智能识别系统】
33.【基于深度学习的100种蝴蝶智能识别系统】 34.【基于深度学习的水稻叶片病害智能诊断系统】
35.【基于与ByteTrack的车辆行人多目标检测与追踪系统】 36.【基于深度学习的智能草莓病害检测与分割系统】
37.【基于深度学习的复杂场景下船舶目标检测系统】 38.【基于深度学习的农作物幼苗与杂草检测系统】
39.【基于深度学习的智能道路裂缝检测与分析系统】 40.【基于深度学习的葡萄病害智能诊断与防治系统】
41.【基于深度学习的遥感地理空间物体检测系统】 42.【基于深度学习的无人机视角地面物体检测系统】
43.【基于深度学习的木薯病害智能诊断与防治系统】 44.【基于深度学习的野外火焰烟雾检测系统】
45.【基于深度学习的脑肿瘤智能检测系统】 46.【基于深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于深度学习的橙子病害智能诊断与防治系统】 48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】 50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】 52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】 54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】 56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】 58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】 60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】 62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】 64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】 66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】 68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】 70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】 72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】 74.【基于深度学习的水面垃圾智能检测识别系统】
75.【基于深度学习的遥感视角船只智能检测系统】 76.【基于深度学习的胃肠道息肉智能检测分割与诊断系统】
77.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】 78.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】
79.【基于深度学习的果园苹果检测与计数系统】 80.【基于深度学习的半导体芯片缺陷检测系统】
81.【基于深度学习的糖尿病视网膜病变检测与诊断系统】 82.【基于深度学习的运动鞋品牌检测与识别系统】
83.【基于深度学习的苹果叶片病害检测识别系统】 84.【基于深度学习的医学X光骨折检测与语音提示系统】
85.【基于深度学习的遥感视角农田检测与分割系统】 86.【基于深度学习的运动品牌LOGO检测与识别系统】
87.【基于深度学习的电瓶车进电梯检测与语音提示系统】 88.【基于深度学习的遥感视角地面房屋建筑检测分割与分析系统】
89.【基于深度学习的医学CT图像肺结节智能检测与语音提示系统】 90.【基于深度学习的舌苔舌象检测识别与诊断系统】
91.【基于深度学习的蛀牙智能检测与语音提示系统】 92.【基于深度学习的皮肤癌智能检测与语音提示系统】
93.【基于深度学习的工业压力表智能检测与读数系统】 94.【基于深度学习的CT扫描图像肝脏肿瘤智能检测与分析系统】
95.【基于深度学习的CT扫描图像脑肿瘤智能检测与分析系统】 96.【基于深度学习的甲状腺结节智能检测分割与诊断系统】

二、机器学习实战专栏【链接】 ,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】,持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

引言

上一篇文章《【SAM3教程-1】SAM3 使用文本提示进行图像分割详细步骤与示例》详细介绍了如何使用SAM3通过文本进行图像中的目标一键分割,本文将介绍如何通过正/负样本提示框来获取图像中我们想要的相似目标。

基本步骤

使用SAM3进行正负样本提示框分割目标基本步骤如下:

  1. 环境准备:导入 torch、supervision 等依赖库,配置 GPU/CPU 运行环境;
  2. 模型加载:加载 SAM3 预训练模型与图像处理器,设置标注颜色调色板;
  3. 图像导入:上传待处理图像,完成预处理编码;
  4. 提示框标注:定义正负提示框坐标与标签(positive/negative);
  5. 一键分割:模型接收提示后自动推理,过滤低置信度结果,生成最终分割图。

1.导入需要的库

python 复制代码
import torch
from sam3.model_builder import build_sam3_image_model
from sam3.model.sam3_image_processor import Sam3Processor
import supervision as sv
import matplotlib
matplotlib.use('TkAgg')
from PIL import Image
from typing import Optional
import numpy as np

加载SAM3模型,并创建图像处理器

python 复制代码
# 定义用于标注的颜色调色板
COLOR = sv.ColorPalette.from_hex([
    "#ffff00", "#ff9b00", "#ff8080", "#ff66b2", "#ff66ff", "#b266ff",
    "#9999ff", "#3399ff", "#66ffff", "#33ff99", "#66ff66", "#99ff00"
])

# 设置运行设备:如果CUDA可用则使用GPU,否则使用CPU
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

# 初始化图像模型并加载预训练权重
checkpoint_path = "models/sam3.pt" # 模型文件路径
bpe_path = "assets/bpe_simple_vocab_16e6.txt.gz" # BPE文件路径
image_model = build_sam3_image_model(
    checkpoint_path=str(checkpoint_path),
    bpe_path=str(bpe_path),
    device=DEVICE
)
# 创建图像处理器实例
image_predictor = Sam3Processor(image_model, device=DEVICE)

加载待处理图像

python 复制代码
image_path = "assets/images/test_image.jpg"
image = Image.open(image_path).convert('RGB')
inference_state = image_predictor.set_image(image) # 对图片进行预处理编码
image_predictor.reset_all_prompts(inference_state) # 重置所有提示

1.示例一:单正样本提示框-批量分割相似目标

添加并显示提示框

x1,y1,x2,y2分别表示提示框的左上角与右下角;

label表示提示框是正样本还是负样本,positive表示正样本;negative表示负样本;

python 复制代码
# 添加的正样本提示框,label='positive'
boxes = [
    {'x1': 362, 'y1': 289, 'x2': 493, 'y2': 654, 'label': 'positive'},
]

在原图上显示提示框位置,这里框选最左边男孩作为提示框进行提示

python 复制代码
draw_boxes_on_image(image, boxes)

给模型添加提示框,并进行推理。

python 复制代码
# 获取归一化后的正样本边界框
xyxy_positive = get_normalized_boxes(boxes, "positive", image.size)
# 向模型中添加检测框提示,并进行推理
for box in xyxy_positive:
    inference_state = image_predictor.add_geometric_prompt(state=inference_state, box=box, label=True)

将SAM模型输出的结果转换为supervision库中的Detections对象,并过滤置信度底的对象;然后显示SAM3根据box提示的分割结果。

python 复制代码
# 将模型输出转换为Detections对象,并过滤低置信度预测
detections = from_sam(sam_result=inference_state)
detections = detections[detections.confidence > 0.5]
# 在原始图像上绘制最终的分割结果
annotated_image = annotate(image, detections, label="target")
annotated_image

可以发现SAM3,根据提示框分割出了图像中的所有person对象。从图中的置信度大小可以发现由于框选的是男孩,因此SAM3分割出的结果中,男孩的置信度都在0.8以上,是高于女孩的。说明SAM3也很好的捕捉到了男孩与女孩这个属性。
那如果我们将其中一个女孩设置为负样本,那SAM3分割的结果会怎么样呢?下面一起看下。

示例2:正负提示框组合 ------ 精准筛选目标

设置一个正样本和一个负样本,正样本为最左边的男孩,正样本为左边的第一个女孩。
【注:正负样本可以添加多个提示框,以boxes列表的形式给出即可】

python 复制代码
# 正负样本框
boxes = [
    {'x1': 362, 'y1': 289, 'x2': 493, 'y2': 654, 'label': 'positive'},
    {'x1': 498, 'y1': 307, 'x2': 589, 'y2': 635, 'label': 'negative'},
]

在原图上显示提示框位置,最左边男孩作为正样本,左侧第一个女孩作为负样本

python 复制代码
draw_boxes_on_image(image, boxes)

分别获取正负样本边界框,并归一化处理成SAM3需要的格式,然后将正负样本添加到模型中.

python 复制代码
# 获取归一化后的正负样本边界框
xyxy_positive = get_normalized_boxes(boxes, "positive", image.size)
xyxy_negatives = get_normalized_boxes(boxes, "negative", image.size)

# 向模型中添加几何提示(正样本与负样本)
for box in xyxy_positive:
    inference_state = image_predictor.add_geometric_prompt(state=inference_state, box=box, label=True)
for box in xyxy_negatives:
    inference_state = image_predictor.add_geometric_prompt(state=inference_state, box=box, label=False)

获取SAM3分割结果,并显示分割结果。

python 复制代码
# 将模型输出转换为Detections对象,并过滤低置信度预测
detections = from_sam(sam_result=inference_state)
detections = detections[detections.confidence > 0.5]
# 在原始图像上绘制最终的分割结果
annotated_image = annotate(image, detections, label="target")
annotated_image

通过上面分割结果我们可以发现,SAM3根据正负样本提示,很好的分割出了图片中的所有男孩,而过滤掉了所有女孩对象。

更多示例

示例3:正样本框

原图:

设置并显示正样本提示框

根据提示框,使用SAM3进行目标分割结果:

示例4:正负样本

使用正负样本检测分割出褐色的鸡蛋,不要白色的鸡蛋。

设置提示框,并显示出提示框位置.将一个褐色的鸡蛋设为正样本,一个白色的鸡蛋设为负样本。

根据提示框,使用SAM3进行目标分割结果:

示例5:单正样本与多正样本

原图:

添加单个正样本框,并显示:

根据提示框,使用SAM3进行目标分割结果:

可以发现远处的很多车辆,并没有识别出来,因为远处的车辆与我们添加的样本特征相差较远,因此我们再多添加一个正样本框试下。通过添加多个正向提示框,来提升分割精度。

添加2个提示框,显示如下:

根据提示框,使用SAM3进行目标分割结果如下:

可以发现,通过多添加一个提示框,能够检测出更多的目标,例如左侧和右侧较小的车辆比之前多分割出了一些。但是由于遮挡原因,还是有一些车辆并没有检测出来。

总结

SAM3 依托灵活的提示框交互模式,实现了精准、高效的图像分割,其核心提示框类型、作用及用途可归纳如下:

一、核心提示框类型及作用

  1. 正提示框(Label=positive)
    • 核心作用:指定需分割的目标区域,为模型提供 "待识别目标特征锚点"。模型会以正提示框内的目标特征为基准,自动在全图中匹配相似特征的对象,实现批量分割。
    • 关键特性:支持单 / 多正提示框组合,单个正提示框可触发 "相似目标批量识别",多个正提示框可覆盖目标不同形态 / 角度特征,进一步提升分割精度与覆盖范围(如多正提示框标注不同位置的车辆,让模型更全面识别全图车辆)。
  2. 负提示框(Label=negative)
    • 核心作用:标注需排除的干扰区域,为模型划定 "非目标特征边界"。模型会对比正、负提示框的特征差异,在分割时主动过滤与负提示框特征相似的对象,实现 "目标筛选 + 分割" 一体化。
    • 关键特性:可与正提示框搭配使用,解决 "目标与干扰物特征相似" 的分割难题(如用负提示框标注白色鸡蛋,辅助正提示框精准分割褐色鸡蛋)。

二、提示框组合的核心用途与场景

  1. 单正提示框:高效批量分割相似目标
    • 用途:无需逐一标注,只需框选 1 个目标,即可让模型自动识别全图中特征相似的同类对象,大幅降低操作成本。
    • 适用场景:从人群中分割所有人物、从动物群中分割所有同类动物、从商品图中分割所有同款物品等 "批量提取同类目标" 场景。
  2. 正负提示框组合:精准筛选特定目标
    • 用途:在 "目标与干扰物共存" 的复杂场景中,通过正提示框锁定目标、负提示框排除干扰,实现 "精准筛选 + 分割",避免误分割或漏分割。
    • 适用场景:从 "男孩 + 女孩" 混合人群中只分割男孩、从 "褐色鸡蛋 + 白色鸡蛋" 中只分割褐色鸡蛋、从 "合格产品 + 瑕疵产品" 中只分割合格产品等 "目标筛选" 场景。
  3. 多正提示框:优化复杂目标分割精度
    • 用途:当目标存在形态差异(如不同角度的车辆、不同姿态的人物)时,通过多个正提示框标注不同特征的目标,让模型学习更全面的目标特征,提升分割准确率与覆盖度。
    • 适用场景:从多角度车辆图中分割所有车辆、从动态人物图中分割所有姿态的人物等 "目标特征多样" 场景。

综上,SAM3 通过正、负提示框的灵活搭配,既解决了 "批量分割效率低" 的问题,又攻克了 "复杂场景下目标筛选难" 的痛点,可广泛应用于设计抠图、数据统计、工业检测、科研分析等多类图像分割需求,兼顾专业性与易用性。

​


好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

相关推荐
大胡子大叔15 天前
YOLO26(极速目标检测) + SAM3(精准掩码生成)附源码
目标检测·源码·流水线·分割·yolo26·sam3
CHPCWWHSU3 个月前
qgis-samgeo
ai·qgis·sam3
深度红薯5 个月前
SAM3:开放式分割,太强了(后面有SAM3权重下载方式)(单图测试、视频测试、实时跟踪)
图像处理·人工智能·python·深度学习·毕业设计·毕设·sam3
宇擎智脑科技6 个月前
SAM3 实战上手指南:从安装到图像/视频分割全流程
人工智能·sam3
挂科边缘6 个月前
sam3本地部署
sam3
阿_旭10 个月前
【SAM3教程-5】视频分割:文本与点提示一键分割与跟踪视频中指定目标【附源码】
sam3
昵称是6硬币10 个月前
SAM3论文精读(逐段解析)
图像分割·sam·实例分割·视觉大模型·sam3·开放词汇检测
阿_旭10 个月前
【SAM3教程-1】SAM3 使用文本提示进行图像分割详细步骤与示例【附源码】
sam3
阿_旭10 个月前
SAM3分割一切大模型中BPE文件bpe_simple_vocab_16e6.txt.gz是什么?有什么作用?
sam3