语义分割

语义分割

深度学习时代下的语义分割综述

目标是预测图像中每个像素的类标签


如何构建语义分割网络?

初级的方式: 单纯堆叠数个卷积层(利用相同padding保证维度不变)再输出一个最终的分割图。通过一系列特征映射的变换直接学习得到一个从输入图像到输出分割结果的映射

整个网络都在全分辨率下计算所带来的计算量是非常巨大的。

什么是padding?

在深度学习中的卷积层中,"padding"(填充)是一种在输入数据周围添加额外值的技术,用于在进行卷积操作时保持输入和输出的尺寸一致或进行尺寸调整。填充通常通过在输入数据的边界周围添加零值(零填充)或复制边界值(边界填充)来实现。

填充在卷积神经网络中具有以下几个作用:

  1. 保持尺寸一致:在进行卷积操作时,输入图像的尺寸会缩小。通过在输入的边界周围进行填充,可以使输出的尺寸与输入保持一致。这对于保留输入图像的边缘信息以及避免信息丢失是有益的。
  2. 避免边缘信息丢失:在没有填充的情况下,卷积操作会逐渐减小特征图的尺寸,导致在较深的层级上丢失边缘信息。填充可以在边界周围添加额外的像素,确保边缘信息得到更充分的考虑。
  3. 影响感受野:填充还可以扩大卷积操作的感受野(receptive field),即每个输出像素在输入上映射的区域。通过填充,在卷积层中的每个像素都可以接触到更多的输入像素,从而增加了对输入细节的感知能力。

填充的数量通常由两个因素决定:填充的大小(以像素为单位)和卷积核的大小。填充的大小可以根据任务需求进行选择,通常选择奇数值的填充大小以便在卷积操作中心对齐。填充大小的选择还会影响输出特征图的尺寸。

填充是在卷积层的输入上应用的,而不是在卷积核上应用的。填充通常与步幅(stride)和卷积核大小一起确定了卷积层的输出尺寸和感受野。


深卷积网络模型中,前面的层学习得到low-level概念,后面的层则学到high-level(专门的)特征映射。为了保证表现,在加深网络的同时,通常需要增加特征图(通道数)的个数。

什么是特征图/通道数

特征图(feature map)指的是CNN中卷积层的输出。每个卷积层都会生成一组特征图,每个特征图对应一个特定的特征。

特征图可以看作是对输入数据在卷积过程中提取的不同特征的表示。在每个特征图中,每个元素表示对应输入数据的一个特定位置的特征响应。这些特征可以包括边缘、纹理、颜色、形状等。

特征图的通道数(channel number)指的是特征图中包含的特征数量。在卷积层的输出中,每个特征图都由多个通道组成,每个通道对应一个特定的特征。通道数决定了特征图的深度或厚度。

以图像处理为例,假设输入图像为RGB图像,包含3个通道(红、绿、蓝)。经过卷积层的处理,可以得到多个特征图,每个特征图表示不同的特征。例如,可以得到包含边缘特征的特征图、包含纹理特征的特征图、包含颜色特征的特征图等。每个特征图在深度方向上具有相应的通道数。

特征图和通道数的选择是根据具体任务和网络结构来确定的。较大的通道数可以提供更丰富的特征表示能力,但也会增加计算和内存消耗。合理选择特征图的通道数是深度学习模型设计中的重要考虑因素之一,需要在特征表达能力和计算效率之间做出权衡。

也就是说通道数可以是边缘、纹理、颜色、形状这些东西


与图像分类单纯地需要目标类别不同,图像分割需要每个像素的位置信息,因此不能像分类任务中那样放心地使用pooling或大步长卷积来降低计算量,图像分割需要一个全分辨率的语义估计。

这句话的意思是,在图像分割任务中,与图像分类任务不同,我们需要获取每个像素点的位置信息,并进行语义估计。因此,在图像分割任务中,无法像在图像分类任务中那样放心地使用池化(pooling)操作或较大步长的卷积操作来降低计算量。

在图像分类任务中,我们通常使用池化操作或大步长卷积来减小特征图的尺寸,以便降低计算量并提取出更高层次的特征。但是,在图像分割任务中,我们需要对每个像素进行分类或分割,因此需要保留图像的全分辨率信息,以便进行准确的语义估计。

具体来说,图像分割任务的目标是将图像中的每个像素分配到相应的语义类别,例如分割出图像中的不同物体或区域。为了实现这一目标,需要在特征提取过程中保留每个像素的位置信息,并进行高分辨率的特征图生成。

相比之下,池化操作和较大步长的卷积操作会降低特征图的分辨率,丢失了位置信息,并可能导致像素级别的细节丢失。因此,在图像分割任务中,我们通常需要使用跳跃连接(skip connections)或转置卷积(transpose convolution)等技术,以保持特征图的全分辨率,并充分利用低级别和高级别的特征来进行语义估计。

总而言之,这句话强调了图像分割任务需要保留全分辨率的信息,以便在像素级别进行语义估计,而不能像图像分类任务中那样简单地使用池化或大步长卷积来降低计算量。


一种比较流行的图像分割模型是Encoder-Decoder结构。Encoder部分通过下采样降低输入的空间分辨率,从而生成一个低分辨率的特征映射(计算高效且能够有效区分不同类别);Decoder则对这些特征描述进行上采样,将其恢复成全分辨率的分割图。


Fully convolutional networks(FCN)

FCN采用全卷积网络,没有图像分类网络中的全连接层。网络结构利用image classification networks(如AlexNet)作为编码器,利用反卷积层实现上采样恢复分辨率作为解码器,实现端到端训练的全卷积网络。

什么是全连接层和全卷积层

  • 全连接层是深度神经网络中最常见的层之一。在全连接层中,每个神经元都与前一层中的所有神经元相连接,形成完全连接的网络结构。每个输入特征都与权重进行线性组合,并通过激活函数进行非线性变换。全连接层的输出可以看作是输入特征的线性组合和非线性变换结果。全连接层通常用于最后的分类层,将高级特征映射到具体的类别概率分布上。
  • 全卷积层是一种特殊的卷积层结构,用于处理输入数据的空间维度信息。与全连接层不同,全卷积层保留输入数据的空间结构,并通过卷积操作进行特征提取。全卷积层通常用于处理图像、语音、视频等具有空间结构的数据。它在卷积操作中使用局部感受野,并通过卷积核的参数共享来减少参数量。全卷积层的输出也是特征图,其中每个像素位置都与输入数据中对应位置的局部感受野相关联。

全卷积层常用于语义分割任务,其中需要对输入图像的每个像素进行分类或分割。通过堆叠多个全卷积层,可以逐渐增加感受野大小并提取更高级别的特征。此外,全卷积层还常常与转置卷积层(transpose convolutional layer)或上采样操作结合使用,以恢复输出特征图的分辨率,使其与输入图像具有相同的大小,以便进行像素级别的分割。

总结起来,全连接层在深度学习中用于最终分类层,而全卷积层主要用于处理具有空间结构的数据,特别是在图像分割等任务中,以保留空间位置信息并进行像素级别的分割。

暂时看不下去了,好tm难啊


语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet

在一般的卷积神经网络中,一般结构都是前几层是卷积层加池化,最后跟2-3层的全连接层,输出分类结果

这个结构就是AlexNet的结构,用来进行ImageNet中的图片分类,最后一层是一个输出为1000*1向量的全连接层,因为一共有1000个类,向量中的每一维都代表了当前类的概率,其中tabby cat的概率是最大的.

而在全卷积神经网络中,没有了全连接层,取而代之的是卷积层

最后一层输出的是1000个二维数组,其中每一个数组可以可视化成为一张图像,图中的每一个像素点的灰度值都是代表当前像素点属于该类的概率,比如在这1000张图像中,取出其中代表tabby cat的概率图,颜色从蓝到红,代表当前点属于该类的概率就越大.

可以看出FCN与CNN之间的区别就是把最后几层的全连接层换成了卷积层,这样做的好处就是能够进行dense prediction.

从而可是实现FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

这个文章写的细节多了


谈一谈深度学习之semantic Segmentation

这需要过一段时间再回来看看


池化和卷积的区别

  • 卷积是一种通过在输入数据上应用卷积核(也称为滤波器)来提取特征的操作。卷积操作通过在输入数据的局部感受野上进行滑动窗口的方式,将输入数据与卷积核进行逐元素乘积并求和,得到特征图。卷积操作可以捕捉到输入数据的局部模式和特征,并且参数共享的特性使得卷积层具有较少的参数量。卷积在深度学习中广泛应用于图像处理、自然语言处理等任务中的特征提取过程。

  • 池化是一种用于减小特征图尺寸的操作,通过对局部区域的特征进行聚合来减少特征图的空间大小。常见的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)。在最大池化中,选择局部区域中的最大值作为聚合结果;而在平均池化中,计算局部区域中特征的平均值。池化操作有助于提取输入数据的主要特征,并且减少了特征图的尺寸,从而降低了计算复杂度,并使网络具有平移不变性和部分位置不变性的特性。

总结起来,卷积操作主要用于特征提取,通过在局部感受野上应用卷积核来捕捉局部模式和特征;而池化操作主要用于减小特征图的尺寸,并对局部特征进行聚合。这两种操作在深度学习中经常结合使用,以构建卷积神经网络,并实现有效的特征提取和空间尺度的调整。~


【AI白身境】深度学习必备图像基础

color-sample color-histogram

灰度直方图包含两个很明显的分布,在彩色直方图的红色通道也包含两个很明显的分布,分别对应的就是“前景”和“背景”。图中的“柿子”,这就是前景,它的灰度比较高,对应的就是直方图中的较高峰。

横轴是灰度值,0-255; 纵轴是具有相同像素灰度值的像素点的数量或者占比。具体来说,纵轴可以表示像素点数、像素点 所占比例或者像素点的频率等

视觉机制和马赫达效应都表明人眼对不连续的东西是最敏感的,而图像中不连续的东西,表现出来就是图像边缘。

边缘包含上升阶跃型、下降阶跃型、屋脊型、脉冲型等类型,

边缘检测在计算机视觉与图像处理中基础且应用广泛。通过提取目标的轮廓,用于识别不同的物体,或作为图像的特征表示。边缘检测的基本方法有很多,它们的绝大部分可以划分为两类:基于一阶导数和二阶导数的方法。

edge


计算机视觉(Computer Vision)入门一----卷积分类器

CNN由两部分组成:convolutional base 和dense head

图中的Base部分用于从图像中提取特征。它主要由执行卷积操作的层组成,可以是一层,也可以多层,但通常也包括其他类型的层(后续我们会讲到)。

图中的head部分用于确定图像的类别。它主要由密集层(dense layer)组成,但可能包括其他层,如 dropout。

训练分类器的过程中,神经网络的目标是学习两件事:

从图像中提取哪些特征 哪个类与哪些特征搭配 如今,很少从头开始训练卷积网络。更常见的是,我们重用预训练模型的base部分。然后,我们将一个未经训练的head连接到预训练的base结构上。换句话说,我们重用网络中已经学会做的部分 1. 提取特征,并附加一些新的层来学习 2. 分类。

head结构通常只包含几个密集层(dense layer),所以可以从相对较少的数据中创建非常准确的分类器。