查看全课大纲(第 66 / 93 节)
  1. 1.计算机视觉概述
  2. 2.计算机视觉应用场景
  3. 3.困难与挑战
  4. 4.开源库介绍
  5. 5.图像显示与存储
  6. 6.CLAHE
  7. 7.腐蚀膨胀与开闭运算
  8. 8.滤波与边缘填充
  9. 9.各种滤波
  10. 10.图像金字塔
  11. 11.傅里叶变换
  12. 12.短时傅里叶变换与小波变换
  13. 13.颜色特征与颜色直方图
  14. 14.几何特征_边缘
  15. 15.几何特征-角点与斑点
  16. 16.局部特征-SIFT特征描述子
  17. 17.局部特征-SURF特征描述子
  18. 18.局部特征-ORB特征描述子
  19. 19.其他特征描述子
  20. 20.传统图像分割技术
  21. 21.GraphCut
  22. 22.GrabCut
  23. 23.人脸检测的传统方法
  24. 24.行人检测的传统方法HOG+SVM
  25. 25.行人检测DPM
  26. 26.人工神经网络的架构
  27. 27.目标函数与梯度下降
  28. 28.误差反向传播
  29. 29.可手算的神经网络
  30. 30.改进目标函数与克服梯度消散
  31. 31.神经网络之传统神经网络与深度网络的差异
  32. 32.各种梯度下降算法
  33. 33.如何选择合适的梯度下降算法
  34. 34.避免过适应
  35. 35.CNN的架构
  36. 36.CNN的误差反向传播_卷积层
  37. 37.CNN的误差反向传播_池化层
  38. 38.分类所用的数据集
  39. 39.Alexnet详解
  40. 40.VGG详解
  41. 41.GoogLeNet_v1
  42. 42.BatchNormalization
  43. 43.GoogLeNet_v3v4
  44. 44.ResNet
  45. 45.ResNeXt
  46. 46.CNN设计准则
  47. 47.图像检索与推土机距离
  48. 48.基于颜色相似性
  49. 49.基于形状相似性
  50. 50.基于纹理相似性
  51. 51.基于局部特征相似性
  52. 52.DL的二值哈希编码
  53. 53.高维空间中检索KDTree
  54. 54.高维空间中检索LSH
  55. 55.目标识别任务综述
  56. 56.RCNN
  57. 57.SPP-Net
  58. 58.Fast R-CNN
  59. 59.Faster R-CNN
  60. 60.R-CNN系列模型回顾
  61. 61.R-FCN的设计思路
  62. 62.R-FCN的实现
  63. 63.YOLOv1
  64. 64.YOLOv2_9000
  65. 65.YOLOv3
  66. 66.图像分割应用场景与数据集
  67. 67.上采样的实现方式
  68. 68.FCN网络架构的由来
  69. 69.FCN构建细节
  70. 70.DeepLabv1
  71. 71.CRF
  72. 72.DeepLabv2
  73. 73.DeepLabv3
  74. 74.特定的医学影像分割任务
  75. 75.U-Net
  76. 76.3D U-Net
  77. 77.V-Net
  78. 78.DenseNet
  79. 79.病理切片分析任务及数据集
  80. 80.病理切片分析
  81. 81.图说任务及其传统处理方法
  82. 82.深度语言模型与RNN
  83. 83.LSTM及其变种
  84. 84.NIC模型
  85. 85.SAT模型
  86. 86.图说的性能指标
  87. 87.判别模型与生成模型
  88. 88.KL散度与JS散度
  89. 89.VAE
  90. 90.GAN的基本原理
  91. 91.DCGAN与CGAN
  92. 92.Wasserstein GAN
  93. 93.SRGAN

图像分割应用场景与数据集

小象实战讲义 · 基于深度学习的计算机视觉

从本节开始,我们将正式进入计算机视觉领域一个极具挑战且应用广泛的方向——基于深度学习的图像语义分割。在此之前,我们学习过如何识别图像中的物体(分类),如何定位并框出它们(检测)。现在,我们要更进一步,在像素级别上理解图像:图像中的每一个像素点,到底属于哪个语义类别?是天空、道路、行人,还是建筑物?这种精细的理解能力,是自动驾驶汽车识别可行驶区域、医疗影像分析病灶边界、以及机器人理解复杂环境的基础。本节作为语义分割篇章的开篇,将首先厘清基本概念,并介绍支撑这一领域发展的关键数据集。

💡 核心导读

  • 传统分割 vs. 语义分割:理解从基于颜色/纹理的“区域划分”到基于语义理解的“像素分类”的本质区别。
  • 语义分割的定义与目标:明确其输入是原始图像,输出是同尺寸的像素级类别标签图。
  • 核心应用场景:认识语义分割在自动驾驶、医疗影像分析和机器人视觉等领域的核心价值。
  • 三大经典数据集:熟悉Pascal VOC、MS COCO和Cityscapes这三个推动语义分割研究的关键数据集及其特点。

从图像分割到语义分割

在深入学习基于深度学习的语义分割之前,我们有必要回顾一下“图像分割”这个概念本身。在课程更早的传统方法部分,我们介绍过诸如分水岭、Grab Cut、Graph Cut等算法——它们都属于深度学习兴起之前、依赖手工设计特征的做法。

所谓图像分割,指的是根据灰度、颜色、纹理和形状等初级视觉特征,把图像划分成若干互不交叠的区域。其核心特点是:同一区域内的这些特征会呈现出某种相似性,而不同区域之间则呈现出明显的差异性。

例如,基于颜色相似性,我们可以把一幅风景照中的蓝色天空区域分割出来。然而,这种分割结果只告诉我们“这是一块颜色相近的区域”,并没有告诉我们“这块区域是天空”。计算机并不理解区域的语义。

这正是语义分割(Semantic Segmentation) 要解决的问题。语义分割的目标是让计算机像人一样,真正理解图像的内容。它不再是简单地根据颜色或纹理聚类像素,而是要从像素水平(pixel-level) 上识别出每个像素所属的语义类别。

让我们通过两个例子来感受这种区别:

  1. 街景理解:在一幅街景图中,传统方法可能根据颜色将紫色的路面、绿色的树木、深灰色的建筑物分割成不同区域。语义分割则更进一步,它会为每个像素打上标签:紫色区域是“道路”,绿色区域是“植被”,红色小块是“行人”,深灰色区域是“建筑”。即便同是“道路”的像素在颜色、亮度上有所差异(如树荫下的路面明显更暗),语义分割模型也应将其归为同一类。
  2. 医疗影像:在一张牙齿的X光灰度图中,不同组织(牙釉质、牙本质、牙髓腔)的灰度差异可能非常细微。传统分割方法难以准确区分。语义分割模型则能学习这些细微差异背后的语义信息,精确分割出不同组织,帮助医生判断例如某处灰度异常是否意味着病变。

因此,我们可以为语义分割下一个更精确的定义:

  • 目标:从像素水平上理解、识别图像的内容,并根据语义信息进行分割。
  • 输入:原始图像(如RGB三通道图片)。
  • 输出:一张与输入图像尺寸相同的分割标记图。这张图的每个像素位置不再存储颜色值,而是存储一个代表类别的整数(或one-hot向量),明确指出“这个像素属于哪一类”。

语义分割是许多高级视觉任务的基础,其应用场景主要包括:

  • 自动驾驶:车辆需要精确理解道路、车道线、行人、车辆、交通标志等,以规划安全路径。
  • 医疗影像分析:自动分割肿瘤、器官、血管等,辅助诊断和手术规划。
  • 机器人视觉与场景理解:让机器人识别可操作物体、可通行区域及障碍物。

语义分割经典数据集

深度学习的进步离不开大规模高质量的数据集。在语义分割领域,有几个数据集起到了奠基和推动的关键作用。

Pascal VOC数据集

Pascal VOC(Visual Object Classes)是视觉识别领域的鼻祖级竞赛数据集,挑战赛于 2005–2012 年举办。它涵盖了图像分类、目标检测和图像分割等多个核心任务。后续许多数据集(如ImageNet)的任务设置都深受其影响。

对于语义分割任务,Pascal VOC 2012版本是最常用的基准。它包含20个常见的物体类别(分割标注再加上1个背景类,共21类):

  • 人物:person
  • 动物:bird, cat, cow, dog, horse, sheep
  • 交通工具:aeroplane, bicycle, boat, bus, car, motorbike, train
  • 室内物品:bottle, chair, dining table, potted plant, sofa, tv/monitor

数据集提供了像素级的精细标注:VOC2012 的分割子集共 2,913 张带标注图像(1,464 张训练 + 1,449 张验证),另有 1,456 张测试图像,其标注由官方服务器保管,需在线提交结果才能评测。Pascal VOC数据集规模适中,类别定义清晰,长期以来都是衡量语义分割模型性能的“试金石”。

MS COCO数据集

MS COCO(Microsoft Common Objects in Context)于 2014 年发布,是一个规模更大、场景更复杂的数据集。它主要包含80个物体类别,涵盖了更丰富的日常场景。

除了基本的80个物体类别外,COCO还提供了一个名为 COCO-stuff 的扩展集。这个扩展集增加了91个“stuff”类别(如天空、草地、墙壁等背景或材质类别),与原有的80个“thing”类别合计 171 个类别(80 + 91)。此外还有 1 个“unlabeled”标签,它不计入评测类别,因此主流实现(如 mmsegmentation、Mask2Former)的 num_classes 均为 171。“stuff”类别的引入,使得模型需要理解更广泛的场景内容。

MS COCO数据集不仅用于语义分割,还广泛用于实例分割(Instance-level Segmentation)(区分同一类别的不同个体)和图像描述(Image Captioning) 任务。其标注质量高、场景复杂,对模型的泛化能力提出了更高要求。

Cityscapes数据集

Cityscapes 于 2016 年发布,是一个专注于城市街道场景的语义分割数据集,主要服务于自动驾驶领域。它的视频采集自 50 座城市(德国及周边欧洲国家)的街道,拍摄时段为白天,天气为良好或中等,覆盖春、夏、秋三个季节,非常贴近真实的驾驶环境。

该数据集的标注体系共划分 30 个语义类别,但并非全部参与评测:文献和公开排行榜上通用的精度指标,是在其中 19 个评测类别上计算的 mIoU,其余类别(如 parking 停车场、rail track 铁轨、guard rail 护栏、bridge 桥、tunnel 隧道)虽然也有标注,却不计入该指标,此外还有 unlabeled、ego vehicle(自车)等忽略标签。这 19 个评测类别按属性可归纳为:

  • 平坦表面:road(道路)、sidewalk(人行道)
  • 建筑与交通设施:building(建筑)、wall(墙)、fence(栅栏)、pole(杆)、traffic light(交通灯)、traffic sign(交通标志)
  • 自然物体:vegetation(植被)、terrain(地形)、sky(天空)
  • 动态物体:person(人)、rider(骑行者)、car(汽车)、truck(卡车)、bus(巴士)、train(列车)、motorcycle(摩托车)、bicycle(自行车)

Cityscapes提供了两种精度的标注:

  1. 精细标注(Fine Annotation):5,000 张图像(2,975 张训练、500 张验证、1,525 张测试),提供逐像素的精确标注。
  2. 粗糙标注(Coarse Annotation):20,000 张图像,只给出多边形的粗粒度类别标注,边界并不精确,常用于预训练。

Cityscapes 的官方样例通常这样排布:从左到右依次是原始街景图像、人工标注的像素级语义图(不同颜色代表不同类别),以及两种分割算法的输出结果,用来直观对比算法效果的好坏。

[原始街景] -> [人工语义标注] -> [算法A输出] -> [算法B输出]
(真实城市街景照片) -> (彩色分割图:道路紫、天空蓝、建筑灰…) -> (分割结果) -> (分割结果)

通过在这些数据集上的训练和评估,研究者们不断推动着语义分割模型在精度、速度和泛化性上的进步。从后续几节开始,我们会先补上“上采样”这一关键实现,再深入探讨实现像素级理解的核心模型——全卷积网络(FCN)。

📝 动手练一练

  1. 概念辨析:假设你用传统的分水岭算法对一张有多只猫的图片进行分割,得到了一些区域。随后,你用语义分割模型对同一张图片进行处理。请描述这两种方法输出结果的根本区别。
  2. 数据集理解:如果你要开发一个用于室内服务机器人的视觉系统,需要它能识别椅子、桌子、人、盆栽等物体,并理解地板、墙壁等背景。在Pascal VOC、MS COCO和Cityscapes三个数据集中,哪个或哪几个最适合用于训练你的模型?为什么?
👉 点击查看参考答案
  1. 根本区别:

    • 分水岭算法:输出是若干个“区域”。每个区域由一系列颜色、纹理等特征相似的像素组成,但算法本身并不赋予这些区域任何语义标签。它无法告诉你某个区域是“猫”、“背景”还是“阴影”,只能告诉你这些像素彼此相似。
    • 语义分割模型:输出是一张“像素级类别标签图”。每个像素都被分配了一个明确的语义类别标签(如“猫”、“背景”)。因此,模型不仅能区分出不同的物体和背景,还能知道它们“是什么”。对于多只猫,语义分割可能会将所有猫的像素都标记为“猫”这一类(但不区分个体),而分水岭则可能因为颜色差异将一只猫分割成多个不相关的区域。
  2. 数据集选择:

    • Pascal VOC:部分适合。它包含 chair, dining table, person, potted plant 这几个需要的类别,但缺少对 floor、wall 这类“stuff”背景类别的标注。对于识别室内特定物体是一个不错的起点。
    • MS COCO (及 COCO-stuff):非常合适。其80个物体类别包含了 person, chair, dining table, potted plant。更重要的是,其 COCO-stuff扩展集 明确提供了 wall、floor 等大量的背景和材质类别,完美契合室内场景理解的需求。
    • Cityscapes:不太适合。这是一个专注于户外城市街道场景的数据集,其类别(如 road, car, traffic light)与室内机器人所需识别的物体和背景差异很大,直接使用会导致严重的领域适配问题。 结论:MS COCO(特别是带有stuff标注的版本)是最佳选择,因为它同时提供了所需的物体类别和丰富的背景类别。Pascal VOC可作为补充或初步实验的数据集。

本章小结

本节作为语义分割篇章的引言,我们明确了学习的目标和起点。我们首先区分了传统图像分割与语义分割的本质不同:前者是基于低级特征的区域划分,后者是基于高级语义的像素分类。语义分割要求模型在像素级别上理解图像内容,输出每个像素的类别标签,这在自动驾驶、医疗影像等领域具有不可替代的价值。接着,我们介绍了支撑该领域发展的三大基石数据集:奠定基准的Pascal VOC(挑战赛 2005–2012 年)、规模与场景更复杂的MS COCO(2014 年)以及专注于自动驾驶城市场景的Cityscapes(2016 年)。理解这些数据集的特点,是后续选择模型、进行训练和评估的基础。

需要说明的是,本节回顾的分水岭、GrabCut 等传统方法,以及这三大数据集,都属于 2019 年之前形成的技术与评测体系:它们奠定了今天语义分割的术语、类别体系和评测口径(例如 Pascal VOC 的 20 类物体、Cityscapes 的 19 类 mIoU),至今仍是公开论文最常用的对比基准;但现代研究已在更大规模、更多类别的数据集上训练与评测,并普遍借助大规模预训练模型,本节先把这套“共同语言”建立起来,具体模型留到后续小节展开。

📋 行动清单

  • 在脑海中构建“语义分割”的清晰定义:输入是什么?输出是什么?核心目标是什么?
  • 访问Pascal VOC、MS COCO、Cityscapes的官方网站,浏览其数据样例和标注格式,建立直观感受。
  • 思考一个你感兴趣的、可能用到语义分割技术的应用场景(如智能农业中的作物分割、视频会议中的虚拟背景分割),并尝试分析它需要识别哪些语义类别。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第11章《通用场景下的图像分割技术》配套课件(PDF)
    PDF · 3.4MB · 原课教辅
    下载
  • 第11章《通用场景下的图像分割技术》配套代码包
    ZIP · 2911.0MB · 原课教辅
    下载