[博客翻译]使用Segment Anything 2(SAM2)进行视频分割


原文地址:https://blog.roboflow.com/sam-2-video-segmentation/


想象一下,你手中有一个神奇的工具——Segment Anything Model 2(SAM 2),它是一个强大的统一视频和图像分割模型。这个模型在处理视频时,不仅能识别物体,还能跟踪它们的运动,即使在光照变化、遮挡或物体变形的情况下也能保持高精度。相比之前的版本,SAM 2的性能提升了3倍,对于图像分割更准确,速度比最初的Segment Anything Model(SAM)快了6倍。

要开始使用SAM 2进行视频分割,首先需要下载并安装模型。在GitHub上克隆https://github.com/facebookresearch/segment-anything-2.git,然后按照指示安装依赖。注意,安装后可能需要运行python setup.py build_ext --inplace来解决代码库中的一个小问题。

2.png

接下来,我们用到Supervision包来辅助可视化结果和数据预处理。不同大小的SAM 2模型(如sam2_hiera_tinysam2_hiera_large)有不同的参数量和处理速度。在这个示例中,我们将使用最大的模型进行演示,但你可以根据需要选择其他模型。

加载模型时,我们需要指定下载的权重文件路径和配置文件名。模型会记住视频中的对象信息,以便在后续帧中进行更正。在开始分割前,你需要将视频帧保存到磁盘,并确保使用JPEG格式,因为这是目前支持的格式。

进行交互式视频分割时,我们需要初始化一个推理状态。通过逐帧加载JPEG帧并存储像素,模型可以跟踪物体并生成相应的掩码。你可以通过添加点和标签来指导模型,每个对象互动时都要提供帧索引和唯一ID。

为了细化预测,你可以向模型输入负点,帮助定义感兴趣物体的精确边界。随着标注视频帧数量的增加,模型的视频任务准确性也会提升。记得在不同的帧上使用正确的帧索引。

最后,我们可以使用propagate_in_video函数将点提示应用到整个视频中,读取每一帧,应用掩码,然后保存为标注后的视频。这样,无论视频中包含多少个对象,SAM 2都能同时进行有效的分割和跟踪。

尽管SAM 2在大部分情况下表现优秀,但它也存在局限性,比如在镜头切换、密集场景中物体识别困难,或者在长视频和快速移动的细小物体追踪上。不过,作为计算机视觉领域的强大工具,SAM 2已经在多个领域展现出广泛的应用潜力。

随着SAM 2的发布,我们期待更多基于此模型的研究成果,这将推动计算机视觉技术的进一步发展。如果你对这篇文章有任何疑问,可以在Roboflow论坛上讨论。