SAM
SAM(Segment Anything)把一次点击的点或框变成物体掩码。LibreYOLO 通过一个专门的 LibreSAM 工厂函数加载它,与 LibreYOLO() 检测器工厂函数分开,因为一个可提示的模型需要不同的调用形式。
- 任务
- instance segmentation
- 尺寸
- base, large, huge at 1024 px
- 安装
pip install libreyolo- 支持层级
- 兄弟层级,自 v 起。一个独立的产品面,有自己的工厂和契约。
- 许可
- 代码采用 MIT,权重采用 Apache-2.0。商用
安装
SAM 需要 sam 这个 extra,它会一并装上 transformers 和 timm。
pip install "libreyolo[sam]"预测
LibreSAM(...) 是和 LibreYOLO(...) 分开的入口:它返回的是一个可提示
(promptable)分割器,而不是检测器,因为在这里没有空间提示的一次前向传播毫无
意义。这个家族没有 libreyolo predict CLI 命令;请用 Python API。
from libreyolo import LibreSAM, SAMPLE_IMAGE # "base" 会在首次使用时自动下载 facebook/sam-vit-base# 其他尺寸:"large"、"huge"(也可以写 "b"/"l"/"h")model = LibreSAM("base") # 点提示:[x, y] 为像素坐标,label 1 = 前景result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy) # 每个掩码一个多边形print(result.boxes.xyxy) # 由掩码推出的紧致检测框 # 用框提示代替点提示result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # 完全不给提示则分割整张图(一个简化版的自动掩码生成器,# 而不是详尽的参考实现)result = model.predict(SAMPLE_IMAGE)from libreyolo import LibreSAM, SAMPLE_IMAGE model = LibreSAM("base") # 图像编码器是最耗时的部分,set_image() 只跑一次;# 之后每次 predict() 调用都复用缓存的嵌入向量model.set_image(SAMPLE_IMAGE)a = model.predict(points=[640, 420], labels=[1])b = model.predict(bboxes=[300, 200, 900, 700])model.reset_image()点提示接受 [x, y] 表示单个物体,[[x, y], ...] 表示多个,也接受 numpy 数组;
labels 把每个点标为 1(前景)或 0(背景),默认全部为前景。框提示接受
[x1, y1, x2, y2] 或一组框,每个框对应一个掩码。两种提示都不给时,它会用一个稠密
网格去提示,并保留其中置信度高、互不重叠的掩码,以此分割整张图;这种「分割一切」
模式相对参考实现的自动掩码生成器做了简化,在拥挤场景里可能欠分割,所以真正给一个
点提示或框提示才是精确的那条路。conf 按预测出的掩码质量(IoU)过滤,而不是检测
置信度:传 0.0 就保留每一个候选。multimask=True 会为每个提示返回 SAM 那三个
整体与部分的歧义掩码,而不是只返回最好的那一个。device= 会移动模型,如果有正在
进行的 set_image() 会话,也会一并移动它缓存的嵌入向量。每个掩码的类别 id 都是
0,名字是 "object",因为可提示的掩码没有固定的类别集合。对这个家族来说,
train()、val()、export() 和 track() 都会抛出 NotImplementedError:
SAM 在 LibreYOLO 里只支持预测,视频跟踪不在范围内。输入源类型见预测。
变体
三种 ViT 图像编码器尺寸:base、large 和 huge,输入都固定在 1024 px。这个家族目前 还没有发布精度或延迟的基准测试,所以选尺寸就是在编码器的重量和掩码质量之间直接 权衡:base 编码最快,huge 最重。
许可
请检查你所下载的具体权重在 Hugging Face 仓库中的许可。LibreYOLO 组织里的每个检查点都附有许可,同一家族内也不一定相同。该仓库是权威来源;以下摘要说明本页上次验证时适用的情况。
这里只说明涉及的许可证,不构成法律意见。如果答案对商用很重要,请自行阅读许可证并咨询法律顾问。
- 原始工作
- SAM (Segment Anything), Meta AI Research (FAIR)
- 上游许可
- Apache-2.0
- LibreYOLO 代码
- MIT
- 权重
- 采用 Apache-2.0 许可,由作者分发。LibreYOLO 不托管或镜像这些权重。
- 解读
- Apache-2.0 is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks you to keep the license text and attribution notices with any copy you redistribute, and it grants a patent license. LibreYOLO does not mirror SAM-1 weights on its own Hugging Face org: LibreSAM downloads the base, large and huge checkpoints directly from Meta's own facebook/sam-vit-base, facebook/sam-vit-large and facebook/sam-vit-huge repositories, each tagged Apache-2.0 there as well.
LibreYOLO 不会自己托管一份 SAM-1 权重的副本。LibreSAM("base")、"large" 和
"huge" 直接从 Meta 自己在 Hugging Face 上的 facebook/sam-vit-base、
facebook/sam-vit-large 和 facebook/sam-vit-huge 仓库下载,这几个仓库各自
独立于 LibreYOLO 标注为 Apache-2.0。
引用
@article{kirillov2023segany,
title={Segment Anything},
author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{\'a}r, Piotr and Girshick, Ross},
journal={arXiv:2304.02643},
year={2023}
}复制自作者在 github.com/facebookresearch/segment-anything#citing-segment-anything 上提供的引用块。