语义分割基础知识

1. 常见的分割任务

  1. 语义分割 (Semantic Segmentation) → FCN
  2. 实例分割 (Instance Segmentation) → Mask R-CNN
  3. 全景分割 (Panoramic Segmentation) → Panoptic FPN

在这里插入图片描述

在这里插入图片描述

语义分割和实例分割的区别

语义分割和实例分割是计算机视觉领域中两种常见的图像分割技术,它们的主要区别在于分割的对象级别和目标识别的粒度不同。

  1. 语义分割(Semantic Segmentation):
    语义分割是将图像中的每个像素标记为属于不同语义类别的过程。它的目标是将图像分割成多个语义区域,每个区域表示一个特定的物体类别或场景元素。换句话说,语义分割将图像中的每个像素分配到一个预定义的语义类别,如人、汽车、树等。不同的类别在结果中用不同的颜色或标签表示。

  2. 实例分割(Instance Segmentation):
    实例分割是在像素级别上识别和分割图像中的每个独立实例或个体。它不仅区分不同的语义类别,而且对于同一类别的不同个体也进行了区分,即对图像中的每个物体实例进行单独的分割。因此,实例分割不仅在像素级别上标记不同类别,还为每个对象的每个像素分配独特的标签,使得每个对象都有自己唯一的标识。

总结区别

  • 语义分割:将图像的每个像素分配给预定义的语义类别,即图像级别的分割。
  • 实例分割:对图像中的每个物体实例进行单独的分割,每个像素都属于特定的实例,即对象级别的分割。

举个例子来说,假设有一张图像中包含了三辆汽车和两棵树。语义分割会将所有汽车像素标记为“汽车类”,所有树木像素标记为“树类”,而实例分割会将每辆汽车和每棵树的像素都进行独立标记,使得每个汽车和树木都有自己的标签。


全景分割:全景分割(Panoptic Segmentation)是语义分割和实例分割的结合,旨在提供更全面的图像分割信息。全景分割同时考虑图像中的每个像素,并将其分为两种类型:语义类别和实例对象。

具体来说,全景分割的输出包含两个主要部分:

  1. 语义分割部分:类似于传统的语义分割,将图像中的每个像素分配到预定义的语义类别,例如人、车、树等。这一部分提供了图像级别的分割结果,不考虑实例级别的区分。

  2. 实例分割部分:与传统的实例分割类似,对图像中每个独立的实例或对象进行分割,为每个对象分配独特的标签。

通过这种结合,全景分割提供了更全面的信息,能够同时标记出不同类别的语义区域,并对每个对象进行个体级别的分割。全景分割的结果对图像中的每个像素都进行了处理,使得语义和实例信息得到了有机的整合。

全景分割在许多计算机视觉任务中都有广泛应用,如自动驾驶、智能监控、机器人导航等。这项技术的发展使得计算机能够更好地理解和解释图像,为各种应用场景提供更准确和丰富的图像分割结果。


例子说明:我们可以假设一张包含多个汽车和树木的图像。

  1. 语义分割:
    在语义分割中,图像中的每个像素被标记为预定义的语义类别,例如"汽车类"和"树类"。在这个例子中,所有属于汽车的像素都会被标记为"汽车类",所有属于树木的像素都会被标记为"树类"。语义分割提供了图像级别的分割结果,但不对不同汽车或树木进行区分,只关注它们属于哪个类别。

  2. 实例分割:
    在实例分割中,图像中的每个独立实例或个体(每辆汽车和每棵树)都会被单独分割,并为其分配独特的标签。这意味着每个汽车和每棵树的像素都被标记为独特的标签,使得它们都有自己的身份和边界。

  3. 全景分割:
    全景分割结合了语义分割和实例分割的特点。在全景分割中,图像中的每个像素不仅被标记为语义类别(如"汽车类"和"树类"),还会对每个实例(每辆汽车和每棵树)进行独立的分割,并分配独特的标签。因此,全景分割提供了图像级别的分割结果,同时也对每个对象进行了个体级别的分割。

总结:

  • 语义分割:将图像中的每个像素标记为预定义的语义类别,如"汽车类"和"树类",提供图像级别的分割结果。
  • 实例分割:对图像中每个独立的实例(每辆汽车和每棵树)进行单独的分割,为每个对象分配独特的标签。
  • 全景分割:同时进行语义分割和实例分割,将图像中的每个像素标记为语义类别,并对每个实例进行个体级别的分割,提供更全面的图像分割结果。

2. 暂定的学习规划

ModelmIoUGlobal Pixel AccInference on CPU (sec)Params (M)
LR-ASPP MobileNetV3-Large57.991.20.32783.22
DeepLabV3 MobileNetV3-Large60.391.20.586911.03
FCN MobileNetV3-Large (not released)57.890.90.37025.05
DeepLabV3 ResNet5066.492.46.353139.64
FCN ResNet5060.591.45.014632.96

3. 语义分割任务常见数据格式

3.1 PASCAL VOC

在这里插入图片描述

PASCAL VOC中提供了分割数据集,数据集中的图片对应标签存储格式为PNG (如右图所示),标签图片中记录了每一个像素所属的类别信息。需要注意的是,右图所展示的图片是使用调色板实现的彩色,它本质上是一个单通道的黑白图片。

那么这样是怎么实现的呢?我们知道,黑白图片每个像素的范围为 0 ~ 255,那么不同值的像素就对应不同的颜色。比如:

  • 像素0对应的是 (0, 0, 0) → 黑色
  • 像素1对应的是 (127, 0, 0) → 深红色
  • 像素255对应的是 (224, 224, 129) → 灰色(特殊颜色)

这样, 不同值的像素就可以对应不同的颜色, 那么一张单通道黑白图就可以显示出彩色。

在使用Python的PIL读取灰度图时, 默认使用调色板, 即P模式。

除了上述需要明白的, 还有一些需要注意的点:

  1. 目标的边缘会用特殊的颜色进行区分
  2. 图片中的特殊区域也会用该颜色进行填充

特殊颜色标注位置对应像素的值是255, 在网络训练时, Loss的计算会忽略像素值为255的地方, 这么做的原因是:

  1. 对于目标边缘到底属于那个部分, 并不好区分.
  2. 对于一些不好分割的目标, 使用该颜色进行填充, 以降低难度

3.2 MS COCO

MS COCO数据集针对图像中的每一个目标都记录了多边形坐标 (polygons)

在这里插入图片描述

可以看到, COCO中所有目标的轮廓都用多边形坐标展示出来了, 在使用MS COCO数据集时, 我们需要将多边形信息解码为PNG图片 (所期望的P模式PNG图片).

因为COCO划分的过于详细, 所以数据集不光可以做语义分割, 还可以做实例分割.

4. 语义分割得到结果的具体形式

在这里插入图片描述

用调色板是方便看, 不然真的用灰度图的话, 0 ~ 255, 人眼很难区分的.

5. 常见语义分割评价指标

5.1 像素准确率(Pixel Accuracy)

像素准确率是预测正确的像素数量与总像素数量之间的比例,用于衡量像素级别的分类准确率。

P i x e l   A c c u r a c y ( G l o b a l   A c c ) = ∑ i n i i ∑ i t i {\rm Pixel \ Accuracy (Global \ Acc)} = \frac{\sum_i n_{ii}}{\sum_i t_i} Pixel Accuracy(Global Acc)=itiinii

其中:

  • P i x e l   A c c u r a c y {\rm Pixel \ Accuracy} Pixel Accuracy:像素准确率(Pixel Accuracy),也称为全局准确率(Global Accuracy)。它是预测正确的像素数量与总像素数量之间的比例,用于衡量像素级别的分类准确率。

  • n i i n_{ii} nii:表示在预测结果中,属于类别 i i i且正确分类的像素数量。即对于类别 i i i,被正确预测的像素数。

  • t i t_i ti:表示标注数据中类别 i i i的像素总数量。即标注数据中类别 i i i的像素总数。

举例说明
假设我们有一张图像,其中总共有1000个像素。在语义分割任务中,我们要对图像中的两个类别进行分类:类别A和类别B。

现在我们进行了预测,并且预测结果如下:

  • 对于类别A,正确预测了200个像素。
  • 对于类别B,正确预测了300个像素。
  • 其他像素被错误地预测成了A或B。

那么,根据公式中的含义,我们可以计算像素准确率(Pixel Accuracy):
P i x e l   A c c u r a c y = 200 + 300 1000 = 0.5 {\rm Pixel \ Accuracy} = \frac{200 + 300}{1000} = 0.5 Pixel Accuracy=1000200+300=0.5

所以,这个预测模型的像素准确率为0.5,表示有50%的像素被正确分类。

5.2 均衡准确率(Mean Accuracy)

均衡准确率(Mean Accuracy)是用于评估语义分割模型的指标之一,它是每个类别准确率的平均值,用于消除类别不平衡的影响。均衡准确率考虑了每个类别在图像中出现的频率,并计算每个类别的预测准确率,然后对所有类别的准确率取平均。

m e a n   A c c u r a c y = 1 n c l s ⋅ ∑ i n i i t i {\rm mean \ Accuracy} = \frac{1}{n_{cls}} \cdot \sum_i \frac{n_{ii}}{t_i} mean Accuracy=ncls1itinii

其中:

  • m e a n   A c c u r a c y {\rm mean \ Accuracy} mean Accuracy:均衡准确率(Mean Accuracy)。它是每个类别的准确率的平均值,用于消除类别不平衡的影响。

  • n c l s n_{cls} ncls:表示类别的总数,也就是图像中包含的语义类别的数量。

  • n i i n_{ii} nii:表示在预测结果中,属于类别 i i i且正确分类的像素数量。即对于类别 i i i,被正确预测的像素数。

  • t i t_i ti:表示标注数据中类别 i i i的像素总数量。即标注数据中类别 i i i的像素总数。

举例说明
假设我们有一张图像,其中总共有1000个像素。在语义分割任务中,我们要对图像中的三个类别进行分类:类别A、类别B和类别C。

现在我们进行了预测,并且预测结果如下:

  • 对于类别A,正确预测了200个像素,但还有100个像素被错误地预测成了A。
  • 对于类别B,正确预测了300个像素,但还有50个像素被错误地预测成了B。
  • 对于类别C,正确预测了400个像素,但还有150个像素被错误地预测成了C。

那么,根据公式中的含义,我们可以计算均衡准确率(Mean Accuracy):
m e a n   A c c u r a c y = 1 3 ⋅ ( 200 200 + 100 + 300 300 + 50 + 400 400 + 150 ) = 1 3 ⋅ ( 200 300 + 300 350 + 400 550 ) ≈ 0.682 \begin{aligned} {\rm mean \ Accuracy} & = \frac{1}{3} \cdot \left( \frac{200}{200+100} + \frac{300}{300+50} + \frac{400}{400+150} \right)\\ & = \frac{1}{3} \cdot \left( \frac{200}{300} + \frac{300}{350} + \frac{400}{550} \right)\\ & \approx 0.682 \end{aligned} mean Accuracy=31(200+100200+300+50300+400+150400)=31(300200+350300+550400)0.682

所以,这个预测模型的均衡准确率为约0.682,用于衡量不同类别的分类准确性。

5.3 均衡误差(Mean IoU,也称为均值交并比)

对于语义分割任务,均衡误差(Mean IoU,也称为均值交并比)是一种广泛使用的评价指标,用于衡量模型在像素级别的分割准确度。

m e a n   I o U = 1 n c l s ⋅ ∑ i n i i t i + ∑ j n j i − n i i {\rm mean \ IoU} = \frac{1}{n_{cls}} \cdot \sum_i \frac{n_{ii}}{t_i + \sum_j n_{ji} - n_{ii}} mean IoU=ncls1iti+jnjiniinii

其中:

  • m e a n   I o U {\rm mean \ IoU} mean IoU:均衡误差(Mean IoU),也称为均值交并比。均衡误差是每个类别交并比的平均值,用于衡量像素级别的分割精度。

  • n c l s n_{cls} ncls:表示类别的总数,也就是图像中包含的语义类别的数量。

  • n i i n_{ii} nii:表示在预测结果中,属于类别 i i i 且正确分类的像素数量。即对于类别 i i i,被正确预测的像素数。

  • t i t_i ti:表示标注数据中类别 i i i 的像素总数量。即标注数据中类别 i i i 的像素总数。

  • j j j:表示其他类别的索引。

举例说明
假设我们有一张图像,其中总共有1000个像素。在语义分割任务中,我们要对图像中的三个类别进行分类:类别A、类别B和类别C。

现在我们进行了预测,并且预测结果如下:

  • 对于类别A,正确预测了200个像素,但还有100个像素被错误地预测成了A。
  • 对于类别B,正确预测了300个像素,但还有50个像素被错误地预测成了B。
  • 对于类别C,正确预测了400个像素,但还有150个像素被错误地预测成了C。

那么,根据公式中的含义,我们可以计算均衡误差(Mean IoU):

  1. 对于类别A:
    I o U A = n i i t A + ∑ j n j i − n i i = 200 400 + 100 + 100 − 200 = 200 400 = 1 2 IoU_A = \frac{n_{ii}}{t_A + \sum_j n_{ji} - n_{ii}} = \frac{200}{400 + 100 + 100 - 200} = \frac{200}{400} = \frac{1}{2} IoUA=tA+jnjiniinii=400+100+100200200=400200=21

  2. 对于类别B:
    I o U B = n i i t B + ∑ j n j i − n i i = 300 500 + 50 + 150 − 300 = 300 400 = 3 4 IoU_B = \frac{n_{ii}}{t_B + \sum_j n_{ji} - n_{ii}} = \frac{300}{500 + 50 + 150 - 300} = \frac{300}{400} = \frac{3}{4} IoUB=tB+jnjiniinii=500+50+150300300=400300=43

  3. 对于类别C:
    I o U C = n i i t C + ∑ j n j i − n i i = 400 550 + 0 + 150 − 400 = 400 300 = 4 3 IoU_C = \frac{n_{ii}}{t_C + \sum_j n_{ji} - n_{ii}} = \frac{400}{550 + 0 + 150 - 400} = \frac{400}{300} = \frac{4}{3} IoUC=tC+jnjiniinii=550+0+150400400=300400=34

  4. 计算均衡误差(Mean IoU):
    M e a n   I o U = 1 3 ⋅ ( 1 2 + 3 4 + 4 3 ) = 1 3 ⋅ 17 12 ≈ 0.472 {\rm Mean \ IoU} = \frac{1}{3} \cdot \left( \frac{1}{2} + \frac{3}{4} + \frac{4}{3} \right) = \frac{1}{3} \cdot \frac{17}{12} \approx 0.472 Mean IoU=31(21+43+34)=3112170.472

所以,通过计算每个类别的交并比(IoU)并取平均,得到的均衡误差为约0.472。这个值用于衡量像素级别的分割精度,并考虑了不同类别的重要性。


mean IoU和目标检测中的IoU其实原理是一样的,都是先计算每个类别的IoU再求平均。我们以一张图为例进行讲解:

在这里插入图片描述

那我们就可以知道:

  • n i i n_{ii} nii 就是绿色和蓝色重复的部分(预测正确的部分);
  • t i t_i ti 就是目标类别 i i i 的总像素个数(真实标签),即绿色圆的面积;
  • ∑ j n j i \sum_{j}n_{ji} jnji 就是预测的总像素,即蓝色的圆;

因为中间重复的部分我们计算了两次,所以我们需要减掉中间预测正确的部分 n i i n_{ii} nii

以上就可以求出类别 i i i 的 IoU,之后我们计算所有的类别后除以总的类别数,就可以知道平均的IoU。

在论文中见到最多的指标是 mean IoU。

5.4 举例讲解公式

其实上面的指标都是可以通过 TP、FP、TN、FN进行计算的,所以我们可以构建混淆矩阵来帮助我们计算,如下图所示。

在这里插入图片描述

因为忽略了边缘, 所以没有255的情况

对于类别 0 而言,为了方便理解,将所有真实标签中为 0 的位置都画成了白色;非零的位置都设置为了灰色。同样的,将预测结果中所有预测为类别0(预测正确)的都画成了绿色;预测错位的用红色表示,如下图所示。

在这里插入图片描述

对于类别0而言,预测正确的值即为图中绿色的数量,即16。我们发现还有两个红色的方块,说明网络预测错误了,它们的真实标签是3,所以我们在应该在混淆矩阵对应的位置填入16和3,如下图所示。

在这里插入图片描述

依次类推,我们就可以逐步得到我们的混淆矩阵,如下图所示。

在这里插入图片描述

5.4.1 Pixel Accuracy

可以根据每一个类别算出不同类别的Accuracy:

A c c c l s 0   = 16 20 A c c c l s 1   = 3 4 A c c c l s 2   = 16 16 A c c c l s 3   = 12 16 A c c c l s 4   = 8 8 \begin{aligned} & {\rm Acc_{cls_0} \ } = \frac{16}{20} \\ & {\rm Acc_{cls_1} \ } = \frac{3}{4} \\ & {\rm Acc_{cls_2} \ } = \frac{16}{16} \\ & {\rm Acc_{cls_3} \ } = \frac{12}{16} \\ & {\rm Acc_{cls_4} \ } = \frac{8}{8} \\ \end{aligned} Acccls0 =2016Acccls1 =43Acccls2 =1616Acccls3 =1612Acccls4 =88

5.4.2 mean Accuracy

5.4.2.1 方法一

根据混淆矩阵就可以得到Global Accuracy (Pixel Accuracy):

P i x e l   A c c u r a c y ( G l o b a l   A c c ) = 对角线像素个数 所有像素个数 = 16 + 3 + 16 + 12 + 8 64 ≈ 0.859 \begin{aligned} {\rm Pixel \ Accuracy (Global \ Acc)} & = \frac{对角线像素个数}{所有像素个数}\\ & = \frac{16 + 3 + 16 + 12 + 8}{64}\\ & \approx 0.859 \end{aligned} Pixel Accuracy(Global Acc)=所有像素个数对角线像素个数=6416+3+16+12+80.859

也就是混淆矩阵对角线上的值分别除以它们各自的数量 (标签中该类别的数量)

5.4.2.2 方法二

刚我们求出了不同类别的Pixel Accuracy,我们可以对其求和再除以类别数量得到mean Accuracy:

m e a n   A c c u r a c y = 1 n c l s ⋅ ∑ i n i i t i 16 20 + 3 4 + 16 16 + 12 16 + 8 8 5 = 0.86 \begin{aligned} {\rm mean \ Accuracy} & = \frac{1}{n_{cls}} \cdot \sum_i \frac{n_{ii}}{t_i} \\ & \frac{\frac{16}{20} + \frac{3}{4} + \frac{16}{16} + \frac{12}{16} + \frac{8}{8}}{5} \\ & = 0.86 \end{aligned} mean Accuracy=ncls1itinii52016+43+1616+1612+88=0.86

5.4.3 mean IoU

m e a n   I o U = 1 n c l s ⋅ ∑ i n i i t i + ∑ j n j i − n i i = 1 n c l s ⋅ ∑ i 某类别预测正确像素个数 绿色 + 蓝色 − 交集 = 1 n c l s ⋅ ∑ i 某类别预测正确像素个数 某类别真实标签像素个数 + 某类别预测像素个数 − 某类别预测对的像素个数 ( 交集 ) \begin{aligned} {\rm mean \ IoU} & = \frac{1}{n_{cls}} \cdot \sum_i \frac{n_{ii}}{t_i + \sum_j n_{ji} - n_{ii}}\\ & = \frac{1}{n_{cls}} \cdot \sum_i \frac{某类别预测正确像素个数}{绿色+蓝色-交集}\\ & = \frac{1}{n_{cls}} \cdot \sum_i \frac{某类别预测正确像素个数}{某类别真实标签像素个数 + 某类别预测像素个数 - 某类别预测对的像素个数(交集)} \end{aligned} mean IoU=ncls1iti+jnjiniinii=ncls1i绿色+蓝色交集某类别预测正确像素个数=ncls1i某类别真实标签像素个数+某类别预测像素个数某类别预测对的像素个数(交集)某类别预测正确像素个数

在这里插入图片描述

对应上述混淆矩阵即为:

  • 绿色:列
  • 蓝色:行
  • 交集:行列的交集(在对角线上)

因此,我们就可以计算出mean IoU:

m e a n   I o U c l s 0 ≈ 0.727 m e a n   I o U c l s 1 = 0.6 m e a n   I o U c l s 2 ≈ 0.889 m e a n   I o U c l s 3 = 0.75 m e a n   I o U c l s 4 ≈ 0.667 \begin{aligned} & {\rm mean \ IoU}_{\rm cls_0} \approx 0.727 \\ & {\rm mean \ IoU}_{\rm cls_1} = 0.6 \\ & {\rm mean \ IoU}_{\rm cls_2} \approx 0.889 \\ & {\rm mean \ IoU}_{\rm cls_3} = 0.75 \\ & {\rm mean \ IoU}_{\rm cls_4} \approx 0.667 \\ \end{aligned} mean IoUcls00.727mean IoUcls1=0.6mean IoUcls20.889mean IoUcls3=0.75mean IoUcls40.667

6. 语义分割标注工具

6.1 Labelme → 纯手工

代码地址https://github.com/wkentaro/labelme

在这里插入图片描述

6.2 EISeg → 半自动

代码地址https://github.com/PaddlePaddle/PaddleSeg

在这里插入图片描述

该标注软件是一个半自动的标注工具,里面内置了一些预训练模型,可以使用AI帮助我们标注。

百度的标注工具对于日常中常见的目标来说,是极为高效的,如果自定义数据集中的目标相对罕见,那么EISeg和Labelme其实是差不多的。

参考

  1. https://www.bilibili.com/video/BV1ev411P7dR
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值