1 Segment Anything Mode
1.1模型介绍
论文:https://arxiv.org/pdf/2304.02643.pdf
官网:https://segment-anything.com/
代码:https://github.com/facebookresearch/segment-anything
Segment Anything模型 (简称SAM) 由Meta公司开发的一种分割模型,可根据输入提示(如点、框、mask 、text)生成高质量的对象掩码,它可用于为图像中的所有对象生成掩码。 模型最高参数量6.36亿,在 1100 万张图像和 11 亿个掩码的数据集上进行了训练,并且在各种分割任务上具有很强的“零样本”性能。算法原理如下图所示。
与传统图像分割方法相比,Segment Anything模型的优势和不同之处主要有以下几点:
(1)不需要大量标注数据:传统的图像分割方法需要大量标注数据才能训练模型,而Segment Anything模型可以在不需要大量标注数据的情况下训练模型。
(2)可以对任何物体进行分割:传统的图像分割方法通常只能对特定类型的物体进行分割,而Segment Anything模型可以对图像中的任何物体进行分割。
(3)更准确:与传统的图像分割方法相比,Segment Anything模型可以更准确地对图像中的物体进行分割。
(4)更快速:由于Segment Anything模型不需要大量标注数据,因此可以更快地训练模型。
官方提供测试图及结果如下:
1.2模型推理
1.2.1推理代码
官方推荐使用点、框、mask 、text 等提示进行交互式推理,另外也可直接输入待测图像做全局的分割。根据官方提供的SamAutomaticMaskGenerator类定义分割掩膜生成器,主要涉及超参数包括:
(1)采样密度参数points_per_side,如crop_n_layers为0时,沿图像高/宽一侧采样点数;
(2)mask质量阈值pred_iou_thresh,只保留高于阈值的mask;
(3)裁剪层数crop_n_layers,n=0时,只对原图进行采样和提取掩膜,n>0时,进行n+1次提取,每次将图像裁剪为2^(n_i+1)个子图进行提取子图掩膜,最后将所有层的掩膜做融合。
具体应用时,可根据具体具体场景反复试验调整超参数到较好的范围。
输入图片尺寸高宽不限,只需考虑受显存。(注:图像尺寸较大时,采样点也需设较大值)
具体代码略。
1.2.2分割示例
以北京1号0.8m分辨率影像为测试图,执行推理代码后,返回的结果为一个python列表,元素类型为字典,每个字典对应一个分割对象,字典keys包括:
“segmentation”:numpy数组,元素为bool类型,相当于单个分割对象的mask矩阵,shape=[H,W],与输入图像宽高维度一致
“area”:segment面积,408763 “bbox”: 外界矩形框起始点坐标,[0, 1078, 635, 1213]
“predicted_iou”: 0.9281611442565918 “point_coords”: [[58.40625,
1382.625]] “stability_score”: 0.927369236946106 “crop_box”: [0, 757, 1869, 1540]
逐个遍历所有分割对象,可视化如下:
1.3栅格图像解译
由于遥感场景一般为大尺寸影像,以栅格影像为例,Segment Anything模型应用于栅格图像,首先需解决几个问题:
(1)转矢量
(2)需滑窗裁剪进行逐一推理,最后再合并结果
(3)输出结果没有类别信息
1.3.1转矢量
遍历输出结果的列表,对每个分割对象对应的mask,提取轮廓,将像素坐标转为地理坐标,写入shp矢量文件即可。
1.3.2滑窗裁剪与合并结果
滑窗裁剪:从左上角开始按步长step、尺寸crop_size开始遍历,每次滑窗的结果按起始点坐标还原到原图,再转为地理坐标,遍历完整幅影像,再所有分割结果写入shp矢量,直接合并可视化结果为:
直接合并的结果中存在较多重叠轮廓和沿裁剪方向的直线。经分析,重叠与滑窗时设有重叠比有关;沿裁剪方向的直线为子图四周边缘合并后形成,可通过设定条件滤除与子图四周相邻的大面积掩膜等方法缓解。
设置滤除条件:
条件1:设置面积阈值+bbox顶点坐标是否与子图坐标重合;
条件2:设置边界条件过滤(结合步长,只保留关键区域box和分割体,直接滤除重叠区域重复)
(注:条件2对大面积目标不友好)
经过调整参数优化掩膜质量、设置条件等方法,优化栅格影像的解译结果,如下图所示。
总结:经过优化,SAM大模型在改测试图中的分割性能较好,零样本迁移能力较强。但还存在以下问题:“大框包小框”的重叠问题,直接通过NMS去除,会滤除部分有效结果(如同时存在大框、小框时,大框得分低被滤除,保留的小框不够,就会存在空白区);分割结果没有类别信息,无法支持项目落地。
1.4 SAM大模型应用案例——地块分割
如上所述,SAM模型结果不包含类别信息,无法直接应用于具体地物的分割。在耕地地块提取项目中,由于已训练的语义分割模型提取结果只提取了成片耕地的外轮廓,而实例分割模型地块提取结果存在一些较乱的轮廓,且泛化性一般。因此,可改变技术方案:将耕地轮廓提取与地块细化两个任务分开,利用SAM模型的强大细粒度分割能力与语义分割算法在具体地物提取任务的高精准度,融合两种模型的结果,来滤除SAM模型的非耕地背景,对语义分割模型的耕地外轮廓进行细化,弥补单一模型的局限。
1.4.1取交集
由使用语义分割模型提取的耕地结果与SAM分割结果取交集,如下:
从结果看,通过训练好的语义分割模型与SAM模型的融合,可以获得相对精细化的耕地分割结果,但SAM模型存在一些未分割的部分,导致地块中间有明显漏提。
1.4.2融合
为解决直接取交集的漏提取问题,再将语义分割模型提取的外轮廓与以上结果做并集,得到结果如下图所示:
1.4.3与实例分割网络对比
(1)分割效果对比
先将实例分割网络结果叠加在SAM与语义分割模型交集结果上,如下图:
将SAM与语义分割模型交集结果叠加在实例分割结果上,如下图:
上图中粉色为SAM网络多检部分,下图中蓝色为实例分割网络多检,上图中多检部分更多
可得出结论:SAM网络分割更精细、准确。
(2)泛化性对比
在未参与实例分割模型训练的影像作为测试图,分别使用实例分割模型Cascade Mask RCNN、SAM大模型进行地块提取,结果对比如下:
![]() |
![]() |
![]() |
![]() |
分析结果:Cascade Mask RCNN实例分割网络分割效果较差,存在部分错乱分割体,泛化性一般;SAM性能稳定,除了有部分漏检,整体分割效果较好,泛化性更强。
1.5总结与展望
1.5.1总结
综上,SAM模型有以下优势:
(1)分割结果精细、准确;
(2)泛化性强,具备零样本分割能力。
1.5.2展望
SAM大模型在自然图像上有很优异的性能表现,经实验论证,SAM大模型同样适用于部分遥感场景,但无法端到端解决实际问题。
(1)SAM大模型暂时没有类别信息,可以结合掩膜完成具体类别地物的细粒度分割,弥补传统语义分割模型的不足。
(2)在数据量有限的遥感地物提取任务中,可利用SAM模型的强大分割能力,将其作为预训练模型,搭建网络进行训练。