当前位置:   article > 正文

Segment Anything项目整理汇总

segment anything model 遥感影像 提取导出

作者 | yeyan  编辑 | CV技术指南

原文链接:https://zhuanlan.zhihu.com/p/630529550

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【大模型】技术交流群

本文只做学术分享,如有侵权,联系删文

前言 自从sam模型发布以来,基于sam的二次应用及衍生项目越来越多,将其应用于各种任务,比如图像修复( image inpainting)、图像编辑( image editing)、目标检测(objects detection)、图像标注(Image Caption)、视频跟踪(object tracking)、3d检测等等。本文就对相关项目进行整理和总结,

可以参考以下SAM的Awesome开源库。

[0] dk-liang/Awesome-Segment-Anything

[1] liliu-avril/Awesome-Segment-Anything

[2] VainF/Awesome-Anything

[3] Hedlen/awesome-segment-anything

[4] Vision-Intelligence-and-Robots-Group/Awesome-Segment-Anything

[5] JerryX1110/awesome-segment-anything-extensions

1. 图像分割

1.1 集成文本模型,辅助检测

1.1.1 Grounded Segment Anything

集成sam,可以通过文本提示做检测/分割等任务。

  • GroundingDINO:通过文本进行检测,如下图所示:

b4ee339f85182b7d413e0915c08a40bf.png

Grounded-Dino

  • Grounded-SAM:通过文本提示,检测和分割一切,先通过文本得到检测box,然后将检测的box输入到sam,得到mask。

66063723d59967f0cdada244863ab2cc.png

Grouned-SAM

  • Grounded-SAM图像编辑,将检测到的mask替换成其他。

2d2d462d2817fba4847ace306600bf4a.png

1.1.2 segment-anything-u-specify

  • 集成sam和clip,实际测试官方提供的数据效果不错,自己的数据效果不理想。发现需要调参,具体看代码config里边的PRED_IOU_THRESH,STABILITY_SCORE_THRESH,CLS_SCORE_THRESH等参数。

c6490f7b05ede68e0dff7351aea3f973.png

clip模型结构

9aa418d39ea163a9951e8ee84d3aefca.png

b5530eb189cafcc871dea676fd2cc9b2.png

输入提示语,如horse,得到horse的mask

1.1.3 segment-anything-with-clip

主要流程:sam生成mask,然后裁切所有object,得到crop后的image feature和clip的query feature,计算2这的score,进行匹配。

个人测试,同样的数据,该方法效果好一些,发现和上边一篇流程一样,主要区别在于参数。

测试地址

da1cd91e68a068fec13ad6db37407b69.png

1.2 分割结果增加标签

Semantic-Segment-Anything,其架构如下图所示,通过一个分割的分支得到边界粗糙但类别准确的mask,然后另一个分支通过sam预测无标签的mask,通过语义投票模块(裁剪出mask对应区域得到类别,取top-1的类别作为mask的类别),合并2个分支的mask和标签,得到有标签的mask 。

a70429a4ea185cd9efd91a5d1b7a9d34.png

ssa流程

1.3 辅助instance segmentation

Prompt-Segment-Anything:集成检测模型,先用检测模型得到label和box,然后用box作为prompt,得到instance的mask。

032ade70575d14b83f12b9b4ebd21d57.png

1.4 医学影像

由于sam在医学影像上表现不是特别好,在该类型数据集上就需要再训练。

  • MedSAM:提供了在医学数据集上的微调流程,具体可以参考medsam视频教程。

  • SAM-Adapter-PyTorch:采用adapter机制,主要加在image encoder模块,效果还是不错的。该方法不仅适用于医学数据,也同样在隐蔽物等其他数据集上达到了不错的效果。具体可以参考SAM-Adaptor项目链接。

7d0b7216b2309be78bdd0f37271b215d.png

结果对比

4dd39d974b5492ac2676d95933c75349.png

模型结构图

  • Medical-SAM-Adapter:同上,也是采用了adapter机制。只不过插入adapter的模块稍有不同。

cfc6f6690e51059968de3bf87db2ec18.png

msa结构

1.5 遥感影像

segment-anything-eo:提取要素边界,对于大图做滑窗处理。在遥感应用还应该更多拓展。

ed448aaba3960bf068bc609c0aa41bf7.png

samrs:利用sam在现有遥感数据集上生成了一个更到的遥感数据集。目前代码暂时还未更新。

009595a7715a90e21e0aa694b096bc9b.png

  • RSPrompter: 遥感图像实例分割利器,基于SAM实现自动分割。基于 SAM 基础模型设计一种自动化实例分割方法,该方法也加入了类别信息,用于遥感图像。受提示学习启发,本文通过学习生成合适的提示来作为 SAM 的输入。这使得 SAM 能够为遥感图像生成语义可辨别的分割结果,该方法称之为 RSPrompter。

433f69819cffdd6fb163e2195ab219d4.png

1.6 one-shot提取特定目标

  • Personalize-SAM:仅给定一张带有参考mask的图像,PerSAM 无需任何训练即可在其他图像或视频中分割特定的目标,例如您的宠物狗。也提供了微调,但是只训练了2个参数。

  • 6a6b54cc581eee08585ad60f52a33ddd.png

  • matcher:通过参考图像,生成可靠的prompt,控制mask的生成。

5c30fbc8523ef8e7c2c7e981d67e2cb9.png

2. 目标检测

如1.1介绍,可以结构clip和sam进行目标检测,此处不再重复。

2.1 目标检测instance

sam-with-mmdet

利用预训练的rtmdet,和sam融合得到box内的instance mask。

eb126b5118dbee83a3907985b76a8b8f.png

2.2 旋转目标检测

sam-mmrotate

利用sam,生成旋转box。先用正常检测器生成hbox,然后将box作为sam的box prompt,然后生成mask,利用mask的最小外接矩形得到rbox。

3f891d474cc3dbfe098bf13af27398e6.png

流程

6b02efad1414bc33ca528966f57c017f.png

结果对比

可以看出,sam效果不错,但对相邻比较近的可能会生成一个box,细化还不够。

2.3 视频目标检测

segment-anything-video:提供了视频应用库,同时也集成yolov5/8,mmdet,detectron2等模型。

f6be5f1b624916d97081bbd207cf26fd.png

2.4 异常检测

SAA-plus:结合GroundDino,发现语言模型在检测“异常”或“缺陷”时存在歧义,通过引入专业知识和图像上下文信息,进行交叉prompt,提高检测性能。

粗看了下论文,主要提供了4个prompt:异常表达式Pl(描述异常信息,如black hole),属性描述Pp(描述位置和面积信息),视觉特征Ps(计算像素与其最邻近的N个元素平均距离的特征图,表示不同区域的差异性),置信度Pc(由于异常是有限的,取K个高置信度的候选项,取其平均值作为用于检测)。

52e4e0513dad551311d1da2b41735ac7.png

实验效果如下,效果还是不错地。

e38f84c282d1d5d60493973642ba0573.png

3. 3D应用

sam不仅可以应用在2d图像上,在3d方面也有不错的效果。

3.1 nerf应用(Anything-3D)

提供了丰富的3d应用。

3.1.1 Anything-3D-Objects

结合3dfuse,利用sam生成的mask,对该目标进行3d重建,生成三维场景。

c11e4449d4e5fa08a01fde14189daaa5.png

3.1.2 Anything-3DNovel-View(合成新视角)

给定源图像 (Source Image) 及源姿态 (Source Pose),以及目标姿态 (Target Pose),渲染生成目标姿态对应的的图片 (Target Image)。

结合zero 1-to-3项目(将一张图像生成3d目标),如下图所示。

232bab2c07c5db623d8c7c556d0d6424.png

3.1.3 Anything-NeRF

结合nerf技术,具体nerf原理可以参考NeRF详解,合成同一场景不同视角下的图像。

e803bd3f6d4bb2a7f7c556f7b64e219f.png

3.1.4 Any-3DFace

结合HRN人脸重建算法,生成3D人脸。or-nerf

a44d7296147fa4affc423d14eefc41e3.png

3.1.5 OR-NeRF

通过point或text promt移除3d场景的目标。

a60757a9cada276485b447c78022ee67.png

3.2 点云

  • SegmentAnything3D:在ScanNet数据集上测试了sam的能力。

ScanNet是rgb-d数据集,一共1513个采集场景数据,包含点云/图像/深度图。

由于1个场景的点云对应了多帧的2d图片,先对图片利用sam提取mask,然后根据外参和深度图将图像反投影到3d空间,生成3d点云,并给点id,合并不同帧反投影的点云,最终得到点云的mask。

在以前point-based/voxel-based等点云分割算法还未提出时,很多3d点云分割算法也是先将点云从不同角度投影到2d图像,然后利用2d图像检测,最后再反投影到3d点云中融合,思路是类似的。

4bb8cd017a7e2f426d279b127ba01bc8.png

  • seal: 利用视觉知识分割点云,支持sam,seem等模型。支持SemanticKITTI、nuScenes、Waymo Open等自动驾驶数据集,在自动驾驶方向挺有意义的。

975ff7c2817366d035dcb85502196c9c.png

  • 点云标定:idea很好,利用sam做点云和相机标定,流程是对图像进行提取前景mask,然后将点云特征利用外参(待标定参数初值)投影到提取的mask,再用一致性loss回归收敛标定参数。

f3db8dea4a0eef7c2144ab7279063ead.png

4. 视频跟踪

  • segment-any-moving: 移动目标跟踪。

e7f0c489986cf32dbd451dc6b5574a67.png

  • Segment-and-Track-Anything:支持文本输入识别目标并跟踪。

fcb950d209373565349a75c2e96983d1.png

  • track-anything:支持视频目标跟踪、视频编辑。

667ac0f1828902a64d37a3f930812b6d.png

video track

34407d61f844d3ce31fb455c9e7fb93b.png

video inpainting

  • sam-pt:利用系数点追踪器(如 PIPS)预测稀疏点轨迹,然后用于sam进行推理,追踪目标。

fcfe2c304dd4019382594b20adbce97e.png

5. 图像生成

EditAnything:集成了ControlNet,Blip2,Stable Diffusion,sam模型,编辑和生成新图像。

bfc4ea3100bbe51b7bbc37a4ae10ca8c.png

sd-webui-segment-anything:集成到stable diffusion中,实现image inpainting相关应用。参考章节3 image inpainting。

6. 模型微调

由于sam数据集在某些场景检测效果不够理想,需要对sam进行微调,一般数据只需要调prompt encoder和mask decoder;对于特定场景的数据,也有采用adapter方法,插入几个adapter层训练,调整具体可参考另一篇文章,里边有详细介绍。

SAM finetune(sam模型微调)133 赞同 · 44 评论文章

  • lightning-sam:代码简单

  • SAM-Adapter-PyTorch:增加adapter机制,结构如下图

50f5ea7d5ddf7ce688c35ab822f0365b.png

sam adaptor结构,主要加在image encoder

  • Medical-SAM-Adapter:在医学影像上微调sam,也是采用了adapter机制。

53c19a707f2fe52dd3cfe7727dd06555.png

msa结构

  • finetune-anything:主要增加了head,支持detection、semantic_seg、instance_seg三个任务,代码结构也比较清晰。对sam重新封装,用户可自定义其中的结构进行调整训练。

1161ecbc1bb611fbac2a922f58cd40a3.png

FA结构

  • sam-hq:提高sam分割效果,通过增加token,微调mask生成。

db32a6211de48a07cbf86135b3e7372b.png

模型结构

a3b0f9e7cbda63058fa69fec74684658.png

HQ-SAM优化效果

  • SonarSam:支持声呐影像的微调,模型支持sam,mobilesam,支持lora微调。

  • SAMed:利用Lora机制对医学影像微调。

9519bfc4fa11870cc96e8f6d7f7bf550.png

  • Semantic-SAM:参考sam的方法,基于detectron2框架,使用mask_dino模型,提供了更细粒度的分割方法,原生的sam一个point prompt输出3个mask,该模型输出6个mask,在sa1b完整数据上训练,性能超越sam。代码已经开源。

6a978fdb2db56769dd86fbb9b71beeb0.png

7. 图像修复( image inpainting)

Inpaint-Anything:包含移除目标,填充目标,替换目标等。

38816bd3dc9e7ee0370925db174575cf.png

移除目标

78dfceed0cec394d6eb555b427531d54.png

填充目标

64beeed00dbc2c78e79982845217e114.png

替换背景

SegAnythingPro:只用一句话,一键帮你剔除视频内的物体,利用了grounddino,sam,laMa等方案。

4ecf6d02e61065a25e880a036275015c.png


8.应用

8.1 标注工具

sam能明显提高标注效率。目前有很多图像和视频标注工具都集成了sam。

  • anylabeling

288b4843ca09421f384c6c3e718b389a.png

  • Label Studio:功能十分强大,支持图像/视频/文本等标注。

62d449bd4265d1d7fc61a04e9b0a1022.png

  • SegDrawer:轻量级的web标注工具,类似sam demo。

  • caption-anything:结合sam,为图像中的object生成文本描述。

1f069ecdcd53f1e8b4a3d329e0008033.png

  • samjs:基于sam的demo,实现js端交互和推理。

8.2 部署应用

  • samexporter:实现了转换onnx,onnx推理

  • full_onnx_model_example.ipynb:里边有转好的onnx,由于vit_h导出onnx过大,单个onnx最大是2G,所以需要量化,不过目前一般是动态quantization的,onnx推理时间反而慢了80%。

  • Expedit-SAM:模型加速,个人测试好像没有明显提升。但可以参考,论文结果最多可以提速1.5倍。主要思路是用2个不需要参数的操作:token clustering layer和token reconstruction layer。token clustering layer通过聚类将高分辨率特征转到低分辨率,推理时用低分辨率的进行卷积等操作,这样可以加速推理时间;token reconstruction layer是将低分辨率特征重新转回高分辨率。

07f7b99bec597aa8e55e6796ffc4b473.png

expedit sam加速对比

  • fastsam:模型用yolov8-seg训练,只用了SA-1B 2%的数据训练,达到了sam的性能,速度却是sam的50倍。看了下论文,大概步骤第一步用yolov8做instance,第二步用prompt提取感兴趣的目标,不过细节描述的不是特别详细,细节可以看代码,模型大致结构如下:

90b5aad44c16b428fb5f5ec749193a72.png

  • mobilesam:主要研究利用知识蒸馏的技术,将sam的大模型迁移到一个小模型上,可以应用到移动设备上,模型大小相比原生sam小了60倍。

48f8f5a5cc07c5beeb2a9f7ac5334517.png

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码学习)

a00bee2ea5f745bbe02e16f3adf207a0.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

5afc63b168784e613982cd85a2d708e3.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

79adee059e9119a80d45fbf4fff5aa82.jpeg

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/482687
推荐阅读
相关标签
  

闽ICP备14008679号