chaos-moon / paper_daily

One paper a day, keep laziness away.
MIT License
6 stars 3 forks source link

Segment Anything #1

Open zc12345 opened 1 year ago

zc12345 commented 1 year ago

SegmentAnything

Author

Meta AI Research, FAIR

Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alex Berg, Wan-Yen Lo, Piotr Dollar, Ross Girshick

Contribution

模型 SAM

image

数据集 SA-1B

三步走:

展望

思考

yaoyz96 commented 1 year ago

感觉是个简单粗暴的模型,没有魔改痕迹,就是大数据+大模型。 有了SAM之后,对个体研究者来说,很多问题会不会已经不再是问题了?😅

zc12345 commented 1 year ago

感觉是个简单粗暴的模型,没有魔改痕迹,就是大数据+大模型。 有了SAM之后,对个体研究者来说,很多问题会不会已经不再是问题了?😅

我觉得其实最大的contribution是把click/bbox/mask/prompt统一到一个框架下,everything is prompt。实际上本身的模型可以并不大,如果用ViT-b的话只有几百M大小(当然效果相对也要差一些)

yaoyz96 commented 1 year ago

prompt必须基于Transformer?CNN网络有没有借鉴prompt的工作。

感觉是个简单粗暴的模型,没有魔改痕迹,就是大数据+大模型。 有了SAM之后,对个体研究者来说,很多问题会不会已经不再是问题了?😅

我觉得其实最大的contribution是把click/bbox/mask/prompt统一到一个框架下,everything is prompt。实际上本身的模型可以并不大,如果用ViT-b的话只有几百M大小(当然效果相对也要差一些)

zc12345 commented 1 year ago

prompt必须基于Transformer?CNN网络有没有借鉴prompt的工作。

感觉是个简单粗暴的模型,没有魔改痕迹,就是大数据+大模型。 有了SAM之后,对个体研究者来说,很多问题会不会已经不再是问题了?😅

我觉得其实最大的contribution是把click/bbox/mask/prompt统一到一个框架下,everything is prompt。实际上本身的模型可以并不大,如果用ViT-b的话只有几百M大小(当然效果相对也要差一些)

可能可以?这个事情的逻辑链是这样的: transformer结构在text和image都能work(ViT) -> text和image能在embedding feature层面对齐(CLIP) -> 空间位置信息可以用position embedding统一到transformer网络中去(这本身是ViT的缺点: 缺少空间信息,导致只能用position embedding硬编码) -> text/mask/bbox/click 都可以用prompt(其实这里更多是embedding,Meta就硬蹭prompt learning的热度)表示

按理说CNN可以,而且这本身就是把bbox区域显著性分割/click clue分割/text分割(这个好像也有做的,就是给一个cat的text,分割图片中的所有cat)缝合到一个框架的东西。非要说的话每个部分都有人做,但是放到一起的还没有,除了text分割之外CNN都能做并且可能做得更好,但是CNN没有CLIP这些良好的text-image对齐模型。 感觉还是应该认识并且使用ViT,并且想办法把CLIP这些预训练模型用起来,并且在已有预训练模型的基础上展开研究,判断还有哪些地方应该改进,可以做文章

zc12345 commented 1 year ago

Code Update:

看了下segment anything的代码,实际上官方源码里面只给出了mask/point/box prompt的实现,而text prompt分割实际上是通过把全部seg出来的区域抽feature,然后和text过CLIP之后的feature求相似度。很合理,但是距离我预期的有一点点距离。详见 issueCLIP+SAM等代码实现。 所以CLIP牛逼!

yaoyz96 commented 1 year ago

小组会上又讲了SAM,一些问题待解决:

  1. SAM说的能实现Zero-shot segmentation,是带语义的还是不带语义的?我认为应该是不带语义的Zero-shot,属于模型能力大了以后,直接对new image的things和stuff进行分割,但模型并不知道分割的对象是什么。
  2. dense encoder在训练阶段是不是必须输入mask?如果只输入points/box/text,就无法对分割结果进行监督?
zc12345 commented 1 year ago

小组会上又讲了SAM,一些问题待解决:

  1. SAM说的能实现Zero-shot segmentation,是带语义的还是不带语义的?我认为应该是不带语义的Zero-shot,属于模型能力大了以后,直接对new image的things和stuff进行分割,但模型并不知道分割的对象是什么。
  2. dense encoder在训练阶段是不是必须输入mask?如果只输入points/box/text,就无法对分割结果进行监督?
  1. 首先语义本身是一个很抽象的概念,事实上现在的所谓semantic segmentation也并没有带语义,因为他也不知道分割的对象是什么。从Vision-Language Model(比如CLIP)的角度来看,传统的分类和语义分割其实也并没有实现open-set下的语义理解,只不过是强行拟合某种pattern。回归到SAM来说,实际上可以认为他是没有cls分支的实例分割,他分割出来了一些东西,但是他并不一定理解这些东西是什么;但是加上CLIP之后,就可以对任意分割区域进行image<->cls/text的转换,并不局限于close-set的语义分割(具体见论文7.5节),实现见上面的comment。简而言之,从SAM的角度来看,只要分割出来,带不带语义是没有意义的,因为图像到语义的这一步完全可以交给CLIP来做
  2. dense encoder (其实就是mask encoder)只是让输入模式多了一个mask,对应的场景是交互式分割中你对分割的区域不满意,你需要额外交互,这个时候会把原来生成的mask和新的交互(click/bbox/text)一起输入进去;你可以训练的时候不加dense encoder,他就只能应对(click/bbox/text)的输入。从想法上他只是想要实现把所有可能的交互输入都统一到一个模型中去,但是对于分割这个任务来说dense encoder并不是必须的。另外train的时候肯定还是需要mask label作为监督的,不然那就是弱监督方法了。