一、语义分割
我们⼀直使⽤⽅形边界框来标注和预测图像中的⽬标。本节将探讨语义分割(semantic segmentation)问题,它重点关注于如何将图像分割成属于不同语义类别的区域。
与⽬标检测不同,语义分割可以识别并理解图像中每⼀个像素的内容:其语义区域的标注和预测是像素级的。
计算机视觉领域还有2个与语义分割相似的重要问题,即图像分割(imagesegmentation)和实例分割(instancesegmentation)。我们在这⾥将它们同语义分割简单区分⼀下。
• 图像分割将图像划分为若⼲组成区域,这类问题的⽅法通常利⽤图像中像素之间的相关性。它在训练时不需要有关图像像素的标签信息,在预测时也⽆法保证分割出的区域具有我们希望得到的语义。以图13.9.1中的图像作为输⼊,图像分割可能会将狗分为两个区域:⼀个覆盖以⿊⾊为主的嘴和眼睛,另⼀个覆盖以⻩⾊为主的其余部分⾝体。
• 实例分割也叫同时检测并分割(simultaneous detection and segmentation),它研究如何识别图像中各个⽬标实例的像素级区域。与语义分割不同,实例分割不仅需要区分语义,还要区分不同的⽬标实例。例如,如果图像中有两条狗,则实例分割需要区分像素属于的两条狗中的哪⼀条。
语义分割:找到同一画面中的不同类型区域。
我们通过继承⾼级API提供的Dataset类,⾃定义了⼀个语义分割数据集类VOCSegDataset。通过实现__getitem__函数,我们可以任意访问数据集中索引为idx的输⼊图像及其每个像素的类别索引。由于数据集中有些图像的尺⼨可能⼩于随机裁剪所指定的输出尺⼨,这些样本可以通过⾃定义的filter函数移除掉。此外,我们还定义了normalize_image函数,从⽽对输⼊图像的RGB三个通道的值分别做标准化。
• 语义分割通过将图像划分为属于不同语义类别的区域,来识别并理解图像中像素级别的内容。
• 语义分割的⼀个重要的数据集叫做Pascal VOC2012。
• 由于语义分割的输⼊图像和标签在像素上⼀⼀对应,输⼊图像会被随机裁剪为固定尺⼨⽽不是缩放。
二、反卷积与反池化
到⽬前为⽌,我们所⻅到的卷积神经⽹络层,例如卷积层和汇聚层,通常会减少下采样输
⼊图像的空间维度(⾼和宽)。然⽽如果输⼊和输出图像的空间维度相同,在以像素级分类的语义分割中将会很⽅便。例如,输出像素所处的通道维可以保有输⼊像素在同⼀位置上的分类结果。
为了实现这⼀点,尤其是在空间维度被卷积神经⽹络层缩⼩后,我们可以使⽤另⼀种类型的卷积神经⽹络层,它可以增加上采样中间层特征图的空间维度。本节将介绍 转置卷积(transposed convolution)(Dumoulinand Visin, 2016),⽤于逆转下采样导致的空间尺⼨减⼩
让我们暂时忽略通道,从基本的转置卷积开始,设步幅为1且没有填充。假设我们有⼀个n h × n w 的输⼊张量和⼀个k h ×k w 的卷积核。以步幅为1滑动卷积核窗⼝,每⾏n w 次,每列n h 次,共产⽣n h n w 个中间结果。每个中间结果都是⼀个(n h + k h − 1) × (n w + k w − 1)的张量,初始化为0。为了计算每个中间张量,输⼊张量中的每个元素都要乘以卷积核,从⽽使所得的k h ×k w 张量替换中间张量的⼀部分。请注意,每个中间张量被替换部分的位置与输⼊张量中元素的位置相对应。最后,所有中间结果相加以获得最终结果。
三、FCN