本月初,Meta推出的一款可以【分割一切】的模型Segment Anything Model (SAM) 已经引起了广泛的关注。今天,我们很荣幸向大家介绍一款名为“Segment Any RGBD(SAD)”的机器学习模型。与以往所有使用SAM的工具的不同之处在于,SAD读入的图片可以是经过渲染之后的深度图,让SAM直接根据几何信息来分割图像。该项目是由Visual Intelligence Lab@HKUST, HUST, MMLab@NTU, Smiles Lab@XJTU和 NUS的同学完成的。如果大家觉得这个项目有意思的话,请大家多多star~

演示程序链接:

 https://huggingface.co/spaces/jcenaa/Semantic_Segment_AnyRGBD 

代码链接:https://github.com/Jun-CEN/SegmentAnyRGBD

SegmentAnyRGBD_人工智能

我们发现人类可以从深度图的可视化中自然地识别物体,所以我们首先通过颜色映射函数将深度图([H,W])映射到RGB空间([H,W,3]),然后将渲染的深度图像输入 SAM。与RGB图像相比,渲染后的深度图像忽略了纹理信息,而侧重于几何信息。以往基于 SAM 的项目里SAM 的输入图像都是 RGB 图像, 我们是第一个使用 SAM 直接利用渲染后的深度图提取几何信息的。下图显示了具有不同颜色图函数的深度图具有不同的 SAM 结果。

SegmentAnyRGBD_github_02

我们的模型流程图如下图所示。我们提供了两种选择,包括将 RGB 图像或渲染的深度图像输入到 SAM进行分割。在每种模式下,用户都可以获得Semantic Mask(一种颜色代表一个类别)和带有类别的 SAM  Mask。

SegmentAnyRGBD_映射函数_03

以输入为深度图为例子进行说明。我们首先通过颜色映射函数将深度图([H,W])映射到RGB空间([H,W,3]),然后将渲染后的深度图送入SAM进行分割。同时我们使用 OVSeg 对RGB图进行zero-shot语义分割,我们只需要输入一系列候选类别的名称即可完成类别识别。然后每一个SAM的mask的类别会根据当前mask里面的点的语义分割结果进行投票,选择点数最多的类别当成当前mask的类别。最终输出可视化有两种形式,一种是Semantic mask,即一种颜色对应一种类别;另一种是SAM mask with classes,即输出的mask仍然是SAM的mask,并且每一个mask都有类别。并且我们可以根据深度图将2D的结果投影到3D space进行可视化。

对比效果

我们将RGB送入SAM进行分割与将渲染后的深度图送入SAM进行分割进行了对比。 

◆ RGB图像主要表示纹理信息,而深度图像包含几何信息,因此RGB图像比渲染的深度图像色彩更丰富。在这种情况下,SAM 为 RGB 输入提供的掩码比深度输入多得多,如下图所示。 

◆ 渲染的深度图像减轻了 SAM 的过分割。例如,桌子在RGB图像上被分割成四个部分,其中一个在语义结果中被分类为椅子(下图中的黄色圆圈)。相比之下,桌子在深度图像上被视为一个整体对象并被正确分类。人的头部的一部分在RGB图像上被分类为墙壁(下图中的蓝色圆圈),但在深度图像上却被很好地分类。 

◆ 距离很近的两个物体在深度图上可能被分割为一个物体,比如红圈中的椅子。在这种情况下,RGB 图像中的纹理信息对于找出对象比较关键。

SegmentAnyRGBD_人工智能_04

Demo

这些demo其实都是动态图,大家可以进入我们的github仓库https://github.com/Jun-CEN/SegmentAnyRGBD 进行更完整的观看。

SegmentAnyRGBD_人工智能_05

SegmentAnyRGBD_人工智能_06

尝试Demo

大家可以在Huggingface上尝试我们的demo,也可以使用我们的github仓库https://github.com/Jun-CEN/SegmentAnyRGBD 进行本地demo的尝试。我们也会在Modelscope社区上搭建demo,请大家关注我们的github仓库多多期待。

SegmentAnyRGBD_映射函数_07

我们希望SAD模型能够为您带来更多的启发和创新,也期待着您的反馈和建议。让我们一起探索这个神奇的机器学习世界吧!

 最后感谢大佬l开源