语义分割和实例分割的区别:以航空影像为例
发布于 更新于

语义分割和实例分割的区别在于:语义分割给影像的每个像素标注一个类别(这个像素是建筑物,那个是道路,下一个是树),而实例分割更进一步,把同一类别中的各个对象彼此分开(这个像素属于 12 号建筑物,那个属于 13 号建筑物)。
一句话看懂区别
语义分割回答“有多少”,实例分割回答“有几个,分别是哪一个”。第三个概念全景分割,则在同一张地图上同时回答这两个问题。
下面是同一幅图像的两种标注方式。语义分割把所有建筑物涂成同一种颜色,实例分割则为每栋建筑物给出独立的轮廓和编号。

| 语义分割 | 实例分割 | 全景分割 | |
|---|---|---|---|
| 输出 | 每个像素一个类别 | 每个对象一个掩膜 | 每个像素一个类别,可数对象另有对象 ID |
| 两栋相连的房屋 | 一个掩膜 | 两个对象 | 两个对象 |
| 什么算对象 | 没有对象:类别就是一片表面 | 每个屋顶、树冠、游泳池或汽车 | 每个可数对象;表面类仍是表面 |
| 能否计数 | 不能 | 能 | 可数类别能 |
| 典型 GIS 用途 | 土地覆盖、树冠覆盖率、不透水面、变化检测 | 建筑物、树木、游泳池和光伏板清查 | 完整场景制图、农作物地块 |
| 典型模型 | U-Net、DeepLab | Mask R-CNN、Segment Anything 系列 | 双分支模型,或用全景标签训练的单一模型 |
| 在 QGIS 中转矢量 | 先栅格矢量化,再清理 | 每个对象已经是一个多边形 | 对类别做栅格矢量化,保留对象 ID |

两者在地图上分别给您什么
语义分割模型给您可以测量的表面,实例分割模型给您可以计数的对象。
语义分割得到的是一张边缘清晰的土地覆盖图:建筑物掩膜、道路掩膜、植被掩膜。适合做面积统计、不透水面、树冠覆盖率和两个日期之间的变化检测,不适合任何需要计数的场合。
实例分割得到的是一份清单。每个屋顶、树冠或游泳池都是一个独立的多边形,在属性表中占一行。您可以计数,可以逐个测量,也可以给每个对象连接一个高度。代价是模型必须自己判断一个对象在哪里结束,这在联排房屋上很难,失败的样子也很典型:两栋房屋被合并,一个树冠被拆成三块。
这两个词从哪里来。 它们都是计算机视觉术语。2014 年,Long、Shelhamer 和 Darrell 证明,一个“端到端、像素到像素”训练的网络可以完成语义分割。2017 年,Mask R-CNN 在目标检测器上增加了“预测对象掩膜的分支”,这就是实例分割。2023 年,Segment Anything 在“1,100 万张获得授权且尊重隐私的图像上的 10 亿多个掩膜”上完成训练,目前 QGIS 中的实例分割工具运行的正是这一系列模型。
第三个概念:全景分割
全景分割像语义分割一样给每个像素标注类别,同时又像实例分割一样给每个可数对象一个独立的 ID。Kirillov 等人在 2018 年提出了这项任务,并把它定义为“统一了通常相互独立的两项任务:语义分割(给每个像素分配类别标签)和实例分割(检测并分割每个对象实例)”。
该论文把类别分为两种。**可数类(things)**可以计数:建筑物、汽车、树木。**不可数类(stuff)**没有固定形状:草地、水体、路面。全景图计数可数类,测量不可数类,所有结果在同一个图层里,没有空隙,也没有重叠。同一篇论文还提出了适用于两类的统一评分,即全景质量(PQ),用于“所有类别(不可数类和可数类)”。
GIS 中的应用。 农田是最清楚的例子。法国基准数据集 PASTIS 包含 2,433 条 Sentinel-2 时间序列中的 124,422 个农业地块,像素大小 10 m,覆盖法国约 4,000 km²。每个像素同时带有作物类型和地块索引。语义分割模型只能告诉您“这里是小麦”,全景分割模型则能告诉您“小麦,57 号地块”,因此您可以统计地块数量,并逐块测量。该数据集的论文把像素级精确的地块全景分割称为具有“重大经济和环境意义”的任务。
实际工作中,GIS 团队很少需要全景分割模型。对可数对象运行一个实例分割工具,对表面类运行一个语义分割工具,然后在 QGIS 中把两个图层叠加起来,两步就能得到同样的地图。
语义掩膜能数出什么:三块法国样区实测
把语义分割的建筑物掩膜做栅格矢量化,您数出来的是图斑,不是建筑物:在朗斯市中心 1 km² 范围内,IGN 基于 20 cm 航空照片制作的 AI 土地覆盖图得到 269 个建筑物图斑,而国家建筑物登记册里有 3,006 栋建筑物。我们在 2026 年 9 月 23 日对三块 1 km² 的样区做了这项测量,每块都与 IGN 的 BD TOPO 建筑物数据对照。
| 每块 1 km² 样区 | 朗斯(Lens)市中心 | 列万(Liévin)矿区住宅 | 巴黎 11 区 |
|---|---|---|---|
| BD TOPO 中的建筑物(20 m² 及以上) | 3,006 | 952 | 1,759 |
| 20 cm AI 掩膜中的图斑(IGN CoSIA) | 269 | 558 | 95 |
| 与其他建筑物共用图斑的已找到建筑物 | 97.5% | 63% | 99.5% |
| 该图斑内建筑物数量的中位数 | 30 | 2 | 31 |
| 10 m 土地覆盖中的图斑(ESA WorldCover) | 1 | 29 | 1 |
| 面积:AI 掩膜 / 建筑物轮廓 / 10 m“建成区” | 40.5 / 36.3 / 87.2 ha | 14.4 / 12.3 / 46.3 ha | 58.4 / 54.7 / 96.3 ha |
更精细的掩膜并不能解决计数问题。掩膜在每块样区都找到了 96% 到 97% 的建筑物,但联排房屋或公寓楼共用墙体,没有任何背景像素把两栋房屋隔开,无论分辨率是 20 cm 还是 2 cm。在朗斯和巴黎,掩膜找到的建筑物按中位数计,处在一个约含 30 栋建筑物的图斑里。

列万显示了语义分割掩膜在哪些情况下可以计数。独立式住宅各自成为一个图斑,在那里找到的 926 栋建筑物中,有 344 栋独占一个图斑。双拼住宅和旧矿区住宅的联排房屋则每组成为一个图斑,所以建筑物所在图斑的中位数是 2 栋。

在面积方面,语义分割掩膜相当接近。AI 掩膜比建筑物轮廓总面积高出 7% 到 17%,这是预期之中的:掩膜看到的是屋顶,屋顶会伸出 BD TOPO 所描绘的墙体之外,还包括小型附属建筑。10 m 的“建成区”类别是建筑物轮廓面积的 1.8 到 3.8 倍,因为一个 10 m 像素里只要有屋顶、院子和人行道,就会被标为建成区。它衡量的是城市肌理,不是建筑物。
树木同样会粘连
在巴黎样区,该市登记的 1,583 棵树中有 1,296 棵落在 AI 掩膜的树冠范围内(距树干 2 m 以内),其中 89% 与另一棵登记树共用一个树冠图斑。理查德-勒努瓦大道(boulevard Richard-Lenoir)沿线的种植林荫道是一个包含 254 棵登记树的单一图斑。从树冠掩膜中数树冠,对孤立的树有效,在行道树上则行不通。
我们如何测量
样区是兰勃特 93(Lambert 93)下的 1 km 见方范围,分别以朗斯(北纬 50.432°,东经 2.832°)、列万的巴斯德城(北纬 50.433°,东经 2.762°)和理查德-勒努瓦大道(北纬 48.860°,东经 2.370°)为中心。图斑是由 20 m² 及以上相邻掩膜像素组成的一组像素,这就是 QGIS 栅格矢量化在默认设置下生成的结果;当一栋建筑物的轮廓有一半位于掩膜之下时,就算作已找到。CoSIA 只以带样式的地图形式发布,因此我们以约 0.4 m 的分辨率读取它,并把每种颜色映射回对应的类别。这样丢失的少量边缘像素会把图斑拆开,所以上面的占比如果有偏差,也只会偏低。CoSIA 所依据的照片早于我们用来对比的登记册。BD TOPO 有时会把一对双拼住宅画成一栋建筑物。巴黎的行道树清单不含私人树木。三块样区只代表三个地方,不是全国数字。
在 QGIS 中从掩膜到多边形
语义分割掩膜需要三到四个处理步骤才能变成可用的多边形,而实例分割工具直接给您多边形。下面分别说明两条路径以及对应的 QGIS 工具。
从语义分割掩膜开始
- 去除碎斑。 运行 栅格 > 分析 > 滤除碎斑(Raster > Analysis > Sieve)。按 QGIS 手册的说明,它会“移除小于给定阈值大小(以像素计)的栅格多边形”,并用最大邻接区域的值填充它们。默认阈值是 10 个像素。在 20 cm 分辨率下,10 个像素只有 0.4 m²,所以请把它调高,使其与您关心的最小对象相匹配。
- 栅格矢量化。 运行 栅格 > 转换 > 栅格矢量化 (栅格转矢量)(Raster > Conversion > Polygonize)。按手册的说明,它会“为栅格中所有像素值相同且相互连通的区域创建矢量多边形”,像素值默认写入名为
DN的字段。请不要勾选“使用 8 连通”(Use 8-connectedness)。勾选后,只在角点接触的两个像素也会连在一起,于是在一个角点相接的两栋建筑物会变成一个多边形。 - 保留目标类别。 背景像素也会形成多边形。选择
"DN" = 1(或您的类别值),把选择集另存为新图层。 - 确定一个要素代表什么。 对于类别表面,运行 矢量 > 地理处理工具 > 融合(Vector > Geoprocessing Tools > Dissolve),不指定字段:您会得到一个多部分要素和一个面积数字。对于图斑,勾选“保持不相交要素分离”(Keep disjoint features separate,需要 QGIS 3.32 或更高版本),或在工具箱中运行 多部分转单部分(Multipart to singleparts),每个图斑就会成为独立的一行。
- 清理边缘。 像素边缘会呈阶梯状。栅格转矢量指南介绍了简化、平滑和面积过滤。
完成第 4 步后得到的是每个图斑一个多边形,而不是每个对象一个多边形。上面朗斯的表格展示的正是这种差别:3,006 栋建筑物对应 269 个图斑。
大型建筑物轮廓数据集也是这样制作的。Microsoft 的全球建筑物轮廓分两个阶段构建:“语义分割”(Semantic Segmentation),用深度神经网络识别建筑物像素;然后是“多边形化”(Polygonization),把这些像素转换成多边形。当像素的概率高于 0.5 时,它就算建筑物。把像素分成一栋栋建筑物的工作发生在多边形化这一步,这是语义分割模型留给您的额外工作。
从实例分割工具开始
- 在一个区域上运行工具。 每个对象都以独立的多边形出现,在属性表中占一行。
- 检查多部分要素。 有些工具会把一个对象返回成几块。用 多部分转单部分 把它们拆开,计数之前先检查被拆开的那些。
- 逐个测量。 在字段计算器中用
$area添加一个字段,并过滤掉小于最小真实对象的碎片。 - 连接您已有的信息。 每个多边形都可以通过 按位置连接属性 获得高度、地址或登记册 ID,而类别表面做不到这一点。
使用 AI Segmentation,第 1 到 3 步合为一步:输入“building”或“swimming pool”,选好区域,找到的每个对象都会作为独立的多边形返回到新图层中。使用 AI Agent,上面的语义分割路径可以在 QGIS 内的对话面板里用一句话完成:您描述想要的图层,它就运行同样的 QGIS 工具(滤除碎斑、栅格矢量化和融合),并在回答之前检查地图。
QGIS 工具分别输出哪一种
QGIS 中大多数基于土地覆盖模型的插件属于语义分割,基于 Segment Anything 的工具则属于实例分割。
- 语义分割: Deepness 及其模型库中的大部分模型、Semi-Automatic Classification Plugin、Mapflow 的土地覆盖模型。
- 实例分割: Segment Anything 系列,即 Geo-SAM、samgeo 和 QGIS 的 SAM 插件。每次点击得到一个对象。
- **AI Segmentation**是我们 TerraLab 为 QGIS 开发的插件,属于实例分割工具。您给出对象的名称,比如建筑物、树木、游泳池,或者画出它的一个示例,它就在该区域内为找到的每个对象返回一个多边形。建筑物轮廓指南展示了它在密集街区上的效果。如果建筑物已经有地图数据,免费的建筑物轮廓下载工具无需运行任何东西,就能把这些实例多边形以 GeoJSON 格式提供给您。
常见问题
下面的简短回答涵盖了人们在搜索这两个术语时接着会问的问题。
语义分割、实例分割和全景分割有什么区别?
语义分割给每个像素一个类别。实例分割把同一类别中的每个对象分成独立的掩膜。全景分割两者兼顾:每个像素都有类别,每个可数对象(如建筑物或汽车)还有自己的 ID。
GIS 项目应该用哪一种?
当答案是面积或占比时用语义分割:树冠覆盖率、不透水面、被淹土地。当答案是数量或逐个对象的属性时用实例分割:建筑物、树木、游泳池、光伏板。如果两者都需要,各运行一次,再叠加图层。
目标检测和实例分割是一回事吗?
不是。目标检测返回每个对象周围的矩形框。实例分割逐像素返回对象的轮廓。制图时您几乎总是需要轮廓。
能把语义分割掩膜转成实例吗?
有时可以。先对掩膜做栅格矢量化,再在多边形收窄的地方把它们分开。这对相互分离的对象有效,像果园里的树冠这样。对联排房屋则行不通,因为那里没有可以切开的收窄处。
影像分辨率会改变答案吗?
会,但影响比人们预想的小。在 10 m 分辨率下,一栋房屋只有一两个像素,没有什么可分开的,所以卫星土地覆盖必然是语义分割。在 20 cm 分辨率下,一栋房屋有成千上万个像素,实例分割变得可行,但 20 cm 的语义分割掩膜仍然会把共用墙体的房屋合并在一起:在朗斯市中心,它找到的建筑物中有 97.5% 与其他建筑物共用图斑。
为什么我栅格矢量化后的掩膜把整个街区变成了一个多边形?
因为该街区的房屋共用墙体,掩膜中没有背景像素把它们隔开。栅格矢量化会把所有相互连通且值相同的像素合并成一个多边形。只有逐个绘制对象的实例分割模型才能把它们分开。
Segment Anything 是实例分割吗?
从输出来看是:它为您指向的每个对象返回一个掩膜,所以两个相连的屋顶会得到两个掩膜。不过原始模型不给出类别标签。它能分开对象,但不命名对象,基于它的 QGIS 工具从您的点击或提示词中获得类别。
语义分割和实例分割都属于更广泛的 GeoAI 范畴。GeoAI 是什么讲解了这两种方法所属的概念。树冠制图在树木上展示了两个方面:从掩膜得到树冠覆盖率,或为每个树冠得到一个多边形。QGIS AI 专题页汇总了 AI 在 QGIS 内能做什么和不能做什么。
开发的插件,属于实例分割工具。您给出对象的名称,比如建筑物、树木、游泳池,或者画出它的一个示例,它就在该区域内为找到的每个对象返回一个多边形。

