了解FastSam:一个通用分割模型(草记)(1):https://developer.aliyun.com/article/1407235?spm=a2c6h.13148508.setting.17.79f64f0ecKMDuK
2 Sam相关项目
阅读:Segment Anything(sam)项目整理汇总
新鲜名词:点云分割,
有趣的项目:
Grounded-Segment-Anything:包含图像编辑,此外还有其它不少东西。
Personalize-SAM:仅给定一张带有参考mask的图像,PerSAM 无需任何训练即可在其他图像或视频中分割特定的目标,例如您的宠物狗。也提供了微调,但是只训练了2个参数。
Inpaint-Anything:图像编辑,包含移除目标,填充目标,替换目标等。
EditAnything:重新生成图像中的一部分。
小结:文章各种项目挺多的,不过好些都有些相似。包括对SAM模型的微调与场景移植,与视频处理结合,与文字提示结合(如CLIP),3d,以及一些相关的部署优化项目。此外还有辅助标注工具。
3 Sam论文解读
阅读:【论文解读】MetaAi SAM(Segment Anything) 分割一切
Sam模型的输出是无标记的纯掩码。
名词:prompt engineering,embedding,tokken,nms
摘句:
在网络数据集上预训练的大语言模型具有强大的zero-shot(零样本)和few-shot(少样本)的泛化能力,这些"基础模型"可以推广到超出训练过程中的任务和数据分布,这种能力通过“prompt engineering”实现
比如CLIP和ALIGN利用对比学习,将文本和图像编码进行了对齐,通过提示语生成image encoder,就可以扩展到下游任务
论文的目的是建立一个图像分割的基础模型,开发一个具有提示能力的模型。
先标注数据进行训练模型,然后用模型辅助标注数据,如此建立一个数据循环。
训练时模拟交互分割的过程,从目标mask中随机选取前景点或者box,点是从gt mask选取,box增加长边10%的噪声,最大20像素。
在第一次prompt预测mask之后,后续是从预测mask和gt mask有差异的区域采样点,
mask 用focal loss和dice loss进行线性组合,系数(20:1),iou 用mse loss。
小结:感觉好像看了很多东西,但如果让我回忆一下,我脑子里面好像又没有什么东西。文中陌生的东西太多了,很多我都没什么概念,可能也就无法将它们联系起来而在我脑海里面生成一个整体的图景。
4 FastSam & Sam & MobileSam
阅读:(1)【Paper日记】FastSAM vs. MobileSAM vs. SAM
(2)【SAM】SAM & Fast SAM & Mobile SAM
名词:ViT-H,freeze解码器,知识蒸馏,对象提议,object-level
摘句:
FS虽然里面有SAM,但其实本质上并不是在SAM上进行优化架构,而是选择了一条完全不同的道路——采用带有实例分割分支的CNN网络。
一方面,按原始SAM的训练方法来训练一个新的SAM模型极不划算;另一方,由于图像编码器和分割掩码解码器之间的耦合优化,很难复现甚至改进FAIR他们的成果。
MS指出FS的工作achieved superior performance,而MS比FS的模型小7倍,速度快4倍,且mIoU远高于FS。
FastSAM经常无法预测一些对象;此外,有时很难解释掩模提议;其次,FastSAM经常生成具有非平滑边界的掩模。
虽然说FastSAM中带SAM,但其实已经和SAM的工作没有太大关系了,个人感觉是聚焦于Segment Anythin Task,用传统CNN的架构去解决大模型在实际应用中遇到的问题。而MobileSAM是基于SAM的架构提出了轻量化版本
sam模型是 promptable,包括 point, bbox, masks, text
(sam)训练过程中不使用任何数据增强
(fastsam的text-prompt效果差)个人分析原因为,CLIP 训练是 4 亿图文对特征对齐的训练,而并不是 object-level 与文本的对齐,使用分割数据训练好的 YOLOv8-seg 的图像特征直接与 CLIP 对应的文本特征进行强对齐(没经过训练),由于分割数据和训练 CLIP 的图像数据没有半毛钱关系,所以 mask 的特征与文本特征很难对齐,从而 text prompt 的方式效果很差是可以想通的。其实这一点是我一直想吐槽的,一直感觉将 CLIP 作为打通图文多模态的一个桥梁,多少是有点牵强的。
摘图:
Sam:
FastSam:
小结:脑子里还是比较模糊,fastsam和sam的区别。
文(2)中有些东西说得更加细致、丰富一些,但用的英文词比较多,比如object-level。
5 YOLACT
阅读:(1)【实例分割】YOLACT: Real-time Instance Segmentation
FastSam对于 all-instance segmentation阶段,网络结构基于YOLOv8-seg(YOLOv8 + YOLACT)
YOLACT:You Only Look At CoefficienTs.
(2)【经典论文解读】YOLACT 实例分割(YOLOv5、YOLOv8实例分割的基础)
这篇文章解释得要更清楚、细致些。
名词:FCN,anchor,NMS(又看见它),protonet,FPN特征金字塔,
摘句:
mask 模板产生的分支(protonet)针对每幅图像预测 k 个模板mask,用FCN的方式来实现protonet,FCN最后一层有 k 个channel,每个channel对应一个模板。
小结:文中说模型分为两个并行的过程(1)产生一系列模板mask,该mask是不基于任何一个实例的,而是基于整张输入图片的;(2)预测对于每个实例mask的系数。之后将模板mask和实例mask系数进行线性组合来获得实例的mask。
可是看了后面的解释,我还是没有懂文中的**”预测mask的系数“和”线性组合“**,具体是在干嘛。
将实例分割任务,划分为两个并行任务;(目标检测Detect、实例分割mask 是并行计算的,这样设计的网络是单阶段的,适合YOLO系列,速度快)
比如在一张街道场景的图片,图中有行人、车辆、建筑物、树木等,当检测分支框中的是行人,那么行人相关的mask原型图置信度高(头、身体、手、脚、随身物品等的位置、轮廓、编码位置敏感的方向等原型图),其它的类别mask原型图置信度低,这样组合形成实例分割的结果。
在 prototype 空间,某些 prototypes 对图片空间分块,某些 prototypes 定位实例······ (不懂这些分工与组合是怎样产生的)