作者 | 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:通过文本进行检测,如下图所示:
Grounded-Dino
Grounded-SAM:通过文本提示,检测和分割一切,先通过文本得到检测box,然后将检测的box输入到sam,得到mask。
Grouned-SAM
Grounded-SAM图像编辑,将检测到的mask替换成其他。
1.1.2 segment-anything-u-specify
集成sam和clip,实际测试官方提供的数据效果不错,自己的数据效果不理想。发现需要调参,具体看代码config里边的PRED_IOU_THRESH,STABILITY_SCORE_THRESH,CLS_SCORE_THRESH等参数。
clip模型结构
输入提示语,如horse,得到horse的mask
1.1.3 segment-anything-with-clip
主要流程:sam生成mask,然后裁切所有object,得到crop后的image feature和clip的query feature,计算2这的score,进行匹配。
个人测试,同样的数据,该方法效果好一些,发现和上边一篇流程一样,主要区别在于参数。
测试地址
1.2 分割结果增加标签
Semantic-Segment-Anything,其架构如下图所示,通过一个分割的分支得到边界粗糙但类别准确的mask,然后另一个分支通过sam预测无标签的mask,通过语义投票模块(裁剪出mask对应区域得到类别,取top-1的类别作为mask的类别),合并2个分支的mask和标签,得到有标签的mask 。
ssa流程
1.3 辅助instance segmentation
Prompt-Segment-Anything:集成检测模型,先用检测模型得到label和box,然后用box作为prompt,得到instance的mask。
1.4 医学影像
由于sam在医学影像上表现不是特别好,在该类型数据集上就需要再训练。
MedSAM:提供了在医学数据集上的微调流程,具体可以参考medsam视频教程。
SAM-Adapter-PyTorch:采用adapter机制,主要加在image encoder模块,效果还是不错的。该方法不仅适用于医学数据,也同样在隐蔽物等其他数据集上达到了不错的效果。具体可以参考SAM-Adaptor项目链接。
结果对比
模型结构图
Medical-SAM-Adapter:同上,也是采用了adapter机制。只不过插入adapter的模块稍有不同。
msa结构
1.5 遥感影像
segment-anything-eo:提取要素边界,对于大图做滑窗处理。在遥感应用还应该更多拓展。
samrs:利用sam在现有遥感数据集上生成了一个更到的遥感数据集。目前代码暂时还未更新。
RSPrompter: 遥感图像实例分割利器,基于SAM实现自动分割。基于 SAM 基础模型设计一种自动化实例分割方法,该方法也加入了类别信息,用于遥感图像。受提示学习启发,本文通过学习生成合适的提示来作为 SAM 的输入。这使得 SAM 能够为遥感图像生成语义可辨别的分割结果,该方法称之为 RSPrompter。
1.6 one-shot提取特定目标
Personalize-SAM:仅给定一张带有参考mask的图像,PerSAM 无需任何训练即可在其他图像或视频中分割特定的目标,例如您的宠物狗。也提供了微调,但是只训练了2个参数。
matcher:通过参考图像,生成可靠的prompt,控制mask的生成。
2. 目标检测
如1.1介绍,可以结构clip和sam进行目标检测,此处不再重复。
2.1 目标检测instance
sam-with-mmdet
利用预训练的rtmdet,和sam融合得到box内的instance mask。
2.2 旋转目标检测
sam-mmrotate
利用sam,生成旋转box。先用正常检测器生成hbox,然后将box作为sam的box prompt,然后生成mask,利用mask的最小外接矩形得到rbox。
流程
结果对比
可以看出,sam效果不错,但对相邻比较近的可能会生成一个box,细化还不够。
2.3 视频目标检测
segment-anything-video:提供了视频应用库,同时也集成yolov5/8,mmdet,detectron2等模型。
2.4 异常检测
SAA-plus:结合GroundDino,发现语言模型在检测“异常”或“缺陷”时存在歧义,通过引入专业知识和图像上下文信息,进行交叉prompt,提高检测性能。
粗看了下论文,主要提供了4个prompt:异常表达式Pl(描述异常信息,如black hole),属性描述Pp(描述位置和面积信息),视觉特征Ps(计算像素与其最邻近的N个元素平均距离的特征图,表示不同区域的差异性),置信度Pc(由于异常是有限的,取K个高置信度的候选项,取其平均值作为用于检测)。
实验效果如下,效果还是不错地。
3. 3D应用
sam不仅可以应用在2d图像上,在3d方面也有不错的效果。
3.1 nerf应用(Anything-3D)
提供了丰富的3d应用。
3.1.1 Anything-3D-Objects
结合3dfuse,利用sam生成的mask,对该目标进行3d重建,生成三维场景。
3.1.2 Anything-3DNovel-View(合成新视角)
给定源图像 (Source Image) 及源姿态 (Source Pose),以及目标姿态 (Target Pose),渲染生成目标姿态对应的的图片 (Target Image)。
结合zero 1-to-3项目(将一张图像生成3d目标),如下图所示。
3.1.3 Anything-NeRF
结合nerf技术,具体nerf原理可以参考NeRF详解,合成同一场景不同视角下的图像。
3.1.4 Any-3DFace
结合HRN人脸重建算法,生成3D人脸。or-nerf
3.1.5 OR-NeRF
通过point或text promt移除3d场景的目标。
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点云中融合,思路是类似的。
seal: 利用视觉知识分割点云,支持sam,seem等模型。支持SemanticKITTI、nuScenes、Waymo Open等自动驾驶数据集,在自动驾驶方向挺有意义的。
点云标定:idea很好,利用sam做点云和相机标定,流程是对图像进行提取前景mask,然后将点云特征利用外参(待标定参数初值)投影到提取的mask,再用一致性loss回归收敛标定参数。
4. 视频跟踪
segment-any-moving: 移动目标跟踪。
Segment-and-Track-Anything:支持文本输入识别目标并跟踪。
track-anything:支持视频目标跟踪、视频编辑。
video track
video inpainting
sam-pt:利用系数点追踪器(如 PIPS)预测稀疏点轨迹,然后用于sam进行推理,追踪目标。
5. 图像生成
EditAnything:集成了ControlNet,Blip2,Stable Diffusion,sam模型,编辑和生成新图像。
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机制,结构如下图
sam adaptor结构,主要加在image encoder
Medical-SAM-Adapter:在医学影像上微调sam,也是采用了adapter机制。
msa结构
finetune-anything:主要增加了head,支持detection、semantic_seg、instance_seg三个任务,代码结构也比较清晰。对sam重新封装,用户可自定义其中的结构进行调整训练。
FA结构
sam-hq:提高sam分割效果,通过增加token,微调mask生成。
模型结构
HQ-SAM优化效果
SonarSam:支持声呐影像的微调,模型支持sam,mobilesam,支持lora微调。
SAMed:利用Lora机制对医学影像微调。
Semantic-SAM:参考sam的方法,基于detectron2框架,使用mask_dino模型,提供了更细粒度的分割方法,原生的sam一个point prompt输出3个mask,该模型输出6个mask,在sa1b完整数据上训练,性能超越sam。代码已经开源。
7. 图像修复( image inpainting)
Inpaint-Anything:包含移除目标,填充目标,替换目标等。
移除目标
填充目标
替换背景
SegAnythingPro:只用一句话,一键帮你剔除视频内的物体,利用了grounddino,sam,laMa等方案。
8.应用
8.1 标注工具
sam能明显提高标注效率。目前有很多图像和视频标注工具都集成了sam。
anylabeling
Label Studio:功能十分强大,支持图像/视频/文本等标注。
SegDrawer:轻量级的web标注工具,类似sam demo。
caption-anything:结合sam,为图像中的object生成文本描述。
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是将低分辨率特征重新转回高分辨率。
expedit sam加速对比
fastsam:模型用yolov8-seg训练,只用了SA-1B 2%的数据训练,达到了sam的性能,速度却是sam的50倍。看了下论文,大概步骤第一步用yolov8做instance,第二步用prompt提取感兴趣的目标,不过细节描述的不是特别详细,细节可以看代码,模型大致结构如下:
mobilesam:主要研究利用知识蒸馏的技术,将sam的大模型迁移到一个小模型上,可以应用到移动设备上,模型大小相比原生sam小了60倍。
① 全网独家视频课程
BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码学习)
![a00bee2ea5f745bbe02e16f3adf207a0.png](https://i-blog.csdnimg.cn/blog_migrate/47b941d5b10f90d12295bfde5b4e811b.png)
② 国内首个自动驾驶学习社区
近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
![5afc63b168784e613982cd85a2d708e3.png](https://i-blog.csdnimg.cn/blog_migrate/7c1e3dc99e61ddd2902a921d22a512b0.png)
③【自动驾驶之心】技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)