SAM

SAM(Segment Anything)把一次点击的点或框变成物体掩码。LibreYOLO 通过一个专门的 LibreSAM 工厂函数加载它,与 LibreYOLO() 检测器工厂函数分开,因为一个可提示的模型需要不同的调用形式。

任务
instance segmentation
尺寸
base, large, huge at 1024 px
安装
pip install libreyolo
支持层级
兄弟层级,自 v 起。一个独立的产品面,有自己的工厂和契约。
上游
SAM (Segment Anything),由 Meta AI Research (FAIR) 发布,采用 Apache-2.0 许可。论文源码
许可
代码采用 MIT,权重采用 Apache-2.0。商用

安装

SAM 需要 sam 这个 extra,它会一并装上 transformerstimm

bash
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-basefacebook/sam-vit-largefacebook/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 上提供的引用块。

已针对 LibreYOLO v1.5.0 验证。本页的支持表、检查点和基准测试数据由已发布的库和权重生成,并非手工编写。