加载中...
不想等待可以点我关掉

SAM3

SAM 3 is a unified foundation model for promptable segmentation in images and videos. It can detect, segment, and track objects using text or visual prompts such as points, boxes, and masks. Compared to its predecessor SAM 2, SAM 3 introduces the ability to exhaustively segment all instances of an open-vocabulary concept specified by a short text phrase or exemplars. Unlike prior work, SAM 3 can handle a vastly larger set of open-vocabulary prompts. It achieves 75-80% of human performance on our new SA-CO benchmark which contains 270K unique concepts, over 50 times more than existing benchmarks.

摘自官方仓库

简单来说,它是一个具备多模态理解能力的“通用分割模型”,能够理解用户的话并分割出指定内容

前几个月我用来对数据进行预处理及标注,虽然说大部分都标注不出来吧,但是能标出来的的标注框边界还是挺准的

后来在剪宣传片的时候需要动态打码就整了个小工具

效果

源视频:

追踪 face

追踪 person

追踪 “arm”:

追踪 woman

追踪 man

追踪 a green shirt

密集人群效果:

多目标:
追踪 a white bottle,screen

使用

配置环境

推荐Linux加N卡,Windows下缺依赖,A卡没试过

具体操作参考:StableLearn官方仓库

注:

  1. 50系显卡如果遇到问题可以参考Scarfy-sysu/rtx5060-pytorch-cuda129
  2. 模型需要申请访问权限,建议填海外的大学,中国的秒拒

使用

放置该程序到仓库根目录:sam3_blur.py

运行:

1
python3 sam3_blur.py {视频文件路径或图片文件夹} --prompt "{提示词}" --batch_size {单次处理帧数量} [--overlap]

注:

  1. 提示词用英文,多目标用,分隔
  2. --overlap为可选参数,附带该参数时每批次会重叠上一批次16帧(可能有改善效果吧)

可选

  1. 降精度以节省显存占用:
sam3/model/io_utils.py:304
1
2
-   frames_np = np.stack(frames, axis=0).astype(np.float32)  # (T, H, W, C)
+   frames_np = np.stack(frames, axis=0).astype(np.float16)  # (T, H, W, C)
  1. 设置合理的batch_size:现在的实现方法是计算了指定数量的帧时重置记忆,会破坏帧间关系,导致模型识别可能跑偏,在显存足够的前提下越大越好

缺点

当生产力还是不太够,我觉得至少有以下问题:

  1. 输入提示词麻烦:有时候特征没办法简单地描述,或者是描述出来模型无法理解,需要给他输入视觉提示词(正向标记)会方便很多。但那样就要搞个UI来可视化输入,让用户自己开个“画图”找坐标点太麻烦了。小工具嘛能用就行
  2. 识别不正确:偶尔会跑偏,需要用负向标记,同样需要UI。或者设置个阈值过滤下置信度低的结果
  3. 多类型分割:原生不支持。目前是多次处理后合并到一起
  4. 性能要求高:即便目前实现了“预测部分就清空记忆”来缓解显存压力,在计算效果里的原视频(1080P)时达到了17g+的显存占用(因批次大小,分辨率,检测对象数量等差异,实际情况不好说),普通人用不起(还是可以优化下的,不过学校服务器,力大砖飞
  5. 声音:没有拷贝音频,要需要的话用ffmpeg合成

更多

现在YOLO26也有“开放词汇实例分割”能力,有相似需求可以试试