Segment Anything
Segment Anything(SAM) 是一个可以根据点
或框
等输入提示生成高质量的图像分割的机器视觉模型
,可用于为图像中的所有对象生成对应蒙版。该模型在包含 1100 万张图像和 11 亿个掩模的数据集上进行训练,在各种分割任务上具有强大的零样本性能。
GitHub源码:https://github.com/facebookresearch/segment-anything
测试网站:https://segment-anything.com/demo
论文地址:https://arxiv.org/pdf/2304.02643
- 论文主要讲解:主要讲的是可以非常高效的来获取我们想要的一些标注数据(个人认为这是最核心的)。数据可以自己训练自己,不需要人工进行标注,例如刚开始是人工标注500w数据,通过这些人工标注的500w数据,训练得到1000w数据,再拿训练后的1000w数据去训练得到1个亿的标注数据,相比原来不需要人工去标注1个亿的数据。相比原来我们的数据如果减少,那训练出来的模型效果会大幅度降低,但是事实上在这篇论文里面讲到,并不会效果不会大幅度降低,反而会趋于一种比较好的效果。今天的Ai和以前的Ai可能会有一个区别了。以前我们保证什么输出就是不变的,今天我们不能说这句话了,输出可能不是固定的,输出可能会变,而且不知道会变成什么。这可能会导致今天的Ai趋向了一个不可预估的发展路程,我们并不能控制它们的输出(个人理解)。
- 论文说:
我们的任务目标是干什么?我们的任务目标是根据这个提示返回一个有效的分割区域
,要返回一些有效的区域。比如给我很多提示,不止一个的提示,你画这个框可以咱们画很多个,你点儿这个点可以有很多个,它说我们在这个模型当中,可能会遇到一些有歧义的东西,什么叫有歧义的东西呢?比如现在我点了一个点。这个点它是在一个衣服上啊,没准儿你想要把这个人的衣服给它分割出来。但是这个衣服又被人穿上,那你点这个点在衣服上,你到底是要这个衣服还是要这个人呢?这个模型它有给你两个输出,既给你输出人,也给你输出衣服,这就是它的一个基本模型能达到效果,即便你这个点儿。它是有歧义的,它也可以来把你这个歧义给它解决掉(这个也是我觉得大模型可能达到的一个特点吧)。- 论文说:有一个模型叫SAM,把整个SAM模型分成一个I magee coder图像编码器,啥意思?你输入的是一张图像,图像在我计算机眼中,它是个向量,它是个特征。图像编码器里第一个模型算法叫VIT视觉编码器,用Transformer去做的。因为一旦你的数据量大了起来。你卷积比较能达到一个上限吧,但是transformer目前科学家可能觉得transformer上限可能比较高。第二个,一个快速的啊,我们叫做一个提示的编码器。
- 论文里面说到一个提示编码器,意思就是说能将坐标转成向量的都能去做,
不管是文本还是其他基本上能转成向量的都能够提取特征。
- 论文说到mask decoder表示的是我们现在要得到输出结果。跟DETR和mask former类似,DETR是做检测的,基于transformer做的,mask former也是也是做分割的,也是基于transformer做的。这篇论文当中mask decoder其实跟mask former八九不离十的很像。所以会发现它的模型,它的网络结构,没有看到创新。
- 论文里说到数据引擎分为三个阶段,第一阶段(assisted-manual):手动辅助,帮我们分担一些经典的一些公开数据当中所呈现出来的一些数据,公开数据集较少的情况下,需要人为辅助去标数据集;第二阶段(semi-automatic):半自动化的,标注好的检测好的已经不需要再标了,没有检测到的人为进行标注;第三阶段(fully automatic):全自动的,模型自己训练,自己标,标完之后自己又训练,再自己又标注一部分,模型自己做。
模型其实在学的什么呢?在学的不是固定的一种思维啊,在学的不是固定的一个任务。而是具备真正的一个学习能力,能理解你给我输入的一切的东西,这就是他要去做的,怎么样去做分割,去理解我们这个提示。
- 论文说:无论你是输入什么东西,无论是图像数据,还是我们的提示,首先呢,都需要给你转换成一个向量。clip里边训练了一个文本以及图像,训练了文本编码器,也训练了图像编码器,在clip里边儿可以直接把文本转成向量啊。预训练就是将这些训练好的模型拿过来直接用,例如VIT这种模型。