动手学深度学习——语义分割

张开发
2026/4/21 2:25:08 15 分钟阅读

分享文章

动手学深度学习——语义分割
1. 前言在前面的内容中我们学习了物体检测相关知识比如边界框锚框多尺度锚框SSD物体检测的目标是找出图像中的目标并用边界框把它们圈出来。但是边界框只能给出一个大致的位置范围它并不能精确到目标的每一个像素。例如一张图中有一只狗。物体检测可以告诉我们这是一只狗它大概在这个矩形框里但它并不能精确区分哪些像素属于狗哪些像素属于背景哪些像素其实是框中的其他物体于是就引出了一个更细粒度的视觉任务语义分割Semantic Segmentation2. 什么是语义分割语义分割的核心目标是为图像中的每一个像素分配一个类别标签。也就是说不再是给整张图一个类别也不是给目标画一个矩形框而是要逐像素地判断这个像素属于人这个像素属于汽车这个像素属于道路这个像素属于天空这个像素属于背景所以语义分割本质上是一个像素级分类问题3. 语义分割和图像分类、物体检测的区别这是这一节最基础也最重要的对比。3.1 图像分类图像分类回答的是这张图主要是什么输出通常是一个类别标签例如“猫”或“狗”。它不关心目标具体在哪里。3.2 物体检测物体检测回答的是图中有什么目标它们大概在哪里输出通常是类别边界框坐标它能定位目标但定位方式是矩形框仍然比较粗糙。3.3 语义分割语义分割回答的是图中每个像素分别属于哪一类也就是说它不是框出一个大概区域而是精确到每个像素。所以从粒度上看图像分类 物体检测 语义分割任务粒度越来越细难度也越来越大。4. 为什么需要语义分割很多场景中仅仅知道目标的边界框是不够的。4.1 自动驾驶自动驾驶系统不仅要知道前方有车、有行人还要知道哪些区域是道路哪些区域是人行道哪些区域是可通行区域哪些区域是障碍物这时候语义分割就非常重要。4.2 医学图像分析在医学影像中医生往往更关心病灶到底占据哪些区域肿瘤边缘在哪里哪些组织属于异常区域这要求模型给出精确的像素级分割结果而不仅仅是一个矩形框。4.3 遥感图像分析在遥感图像中常常需要识别建筑区域河流区域森林区域道路区域这类任务本质上也更适合用语义分割完成。5. 语义分割中的“语义”是什么意思这里的“语义”两个字很容易让初学者疑惑。所谓“语义分割”强调的是同一类别的所有像素都被赋予相同的语义标签。比如所有“汽车”像素都标成汽车所有“人”像素都标成人所有“天空”像素都标成天空注意一点语义分割不区分同类目标的不同实例。也就是说如果图中有三辆车语义分割只会把它们都标成“车”但不会区分“这是第1辆车那是第2辆车”。这一点和后面的**实例分割Instance Segmentation**不同。6. 语义分割的输出是什么样的语义分割的输出通常可以理解为一张与原图大小对应的标签图假设输入图像大小是H × W那么输出通常也是一个H × W的结果图。只不过这个结果图中的每个位置不再是 RGB 像素值而是一个类别编号例如0背景1狗2猫3道路4天空也就是说输出图中的每个像素位置都表示这个位置属于哪个类别。7. 语义分割任务怎么理解可以把语义分割理解成这样一个过程输入一张普通图片。输出给这张图的每个像素打标签。例如对于一张街景图道路部分 → 标成“道路”汽车部分 → 标成“汽车”行人部分 → 标成“行人”天空部分 → 标成“天空”其他区域 → 标成“背景”这样模型最终得到的就不是几个框而是一张逐像素标注图。8. 语义分割为什么比检测更细致边界框只能给出一个矩形区域。但现实中的目标往往不是规则矩形。比如一只猫蜷缩在地上一个矩形框只能把它大致包住可这个框里面往往还会包含地板阴影背景其他物体的一部分所以边界框本质上是粗定位。而语义分割则更进一步它希望回答到底哪些像素真正属于这个目标因此语义分割能提供更精确的空间信息。9. 语义分割中的标签表示语义分割的数据标签通常不是一个单独的类别数字而是一张“标注图”。这张标注图与原图大小对应每个像素位置上都有一个类别标记。例如原图大小为320 × 480那么对应的分割标签图通常也是320 × 480只不过标签图里的像素值不是颜色本身而是类别信息。有时为了方便可视化不同类别会映射成不同颜色例如背景 → 黑色人 → 红色汽车 → 蓝色道路 → 灰色草地 → 绿色这样看起来就像一张彩色分区图。10. 语义分割和实例分割的区别虽然这一节主要讲语义分割但这里顺带提一下很有必要。10.1 语义分割语义分割只关心这个像素属于什么类别不关心同类目标之间的区别。例如图中有三个人语义分割只会把三个人都标成“人”。10.2 实例分割实例分割不仅要知道像素类别还要区分这是第一个人这是第二个人这是第三个人所以实例分割比语义分割更进一步。你可以简单理解为语义分割关注“类别”实例分割关注“类别 个体”。11. 语义分割的难点语义分割虽然很直观但并不容易。11.1 需要像素级标注相比分类和检测语义分割的数据标注成本更高。因为不是标一个框就行而是要细致标出每个像素所属类别。11.2 既要分类又要保留空间信息深度网络越往后特征图分辨率通常越低。这虽然有利于提取高级语义信息但会损失空间细节。而语义分割恰恰要求语义信息强位置细节也要保留所以这类任务对网络结构要求更高。11.3 目标边缘处理困难在目标边界处像素类别常常变化很快。比如人和背景交界处、道路和草地区域交界处都很容易分错。12. 语义分割和卷积神经网络的关系卷积神经网络本来就非常适合处理图像数据。但标准 CNN 多用于分类最终通常会把空间维度压缩掉只输出一个类别。而语义分割要求输出整张像素级预测图因此模型必须做到输入是图像输出仍然是二维空间结构这就意味着语义分割模型通常需要把下采样后的特征图再恢复到原图大小附近这也正是在后面会学到转置卷积FCN全卷积网络这些内容的原因。13. 李沐这一节的重点是什么李沐这里讲“语义分割”重点不是立刻上特别复杂的模型而是先帮你建立以下认识第一语义分割是像素级分类任务不是整图分类也不是框级检测。第二语义分割任务输出的是一张标签图输出大小通常和输入图像空间结构对应。第三它和检测不同检测是框分割是像素。第四为后面的分割数据集、转置卷积、FCN 铺路这节更像是整个分割模块的总引子。14. 一个直观例子假设一张图中有天空草地一只狗如果是图像分类输出可能只是“狗”如果是物体检测输出可能是“狗” 一个边界框如果是语义分割输出则会是天空区域的每个像素都标为“天空”草地区域的每个像素都标为“草地”狗区域的每个像素都标为“狗”所以三者的输出粒度完全不同。15. 本节总结这一节我们初步认识了语义分割核心内容可以总结为以下几点。15.1 语义分割是像素级分类任务它要为图像中的每一个像素分配类别标签。15.2 语义分割比物体检测更细粒度检测只给边界框分割要精确到像素。15.3 输出通常是一张标签图标签图与原图空间结构对应每个像素位置表示一个类别。15.4 语义分割不区分同类实例它只关心类别不区分同类目标之间的不同个体。15.5 这一节是在为后面的 FCN 等模型铺路后续会进一步学习语义分割数据集转置卷积FCN16. 学习感悟如果说图像分类是在回答“这张图是什么”物体检测是在回答“图中有什么它们在哪里”那么语义分割回答的则是“图中的每一个像素分别属于什么”这说明计算机视觉任务正在变得越来越精细。而这种“从整图到目标再到像素”的递进关系其实也是理解视觉任务体系的一个很好线索。

更多文章