语义分割学习

一、FCN

FCN(Fully Convolutional Networks for Semantic Segmentation),语义分割的全卷积网络,网络中的全连接层被卷积层作为替代,输出的是热力图而非类别。
图像语义分割是图像处理和是机器视觉技术中关于图像理解的重要一环,对图像中每一个像素点进行分类,确定每个点的类别,从而进行区域划分,实现了从图像级别的分类进一步延伸到像素级别的分类。

1、网络结构

FCN网络结构主要分为两个部分:全卷积部分和转置卷积部分。全卷积部分为一些经典的CNN网络(如VGG,ResNet等),用于提取特征;转置卷积部分则是通过上采样得到原尺寸的语义分割图像。FCN可以接受任意尺寸的输入图像,采用转置卷积层对最后一个卷积层的特征图(feature map)进行上采样(双线性插值法),使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后在上采样的特征图进行像素的分类。
语义分割学习_第1张图片

语义分割学习_第2张图片

以VGG16为例,可以看到这是正常的网络结构,最后蓝色的是的全连接层,这里需要把77512的特征图的值全部展平,与神经元进行全连接,得到4096个输出。
语义分割学习_第3张图片
这里需要的参数可以计算得到:7 x 7 x 512 x 4096=102760448

如果进行卷积操作的话,如下图,这里的意思是,将7 x 7 x 512 的特征图,进行1 x 1 x 512的卷积,且卷积核个数为4096个,这样得到的就是1 x 1 x 4096的一个特征图,
语义分割学习_第4张图片
这里的参数计算得到:7 x 7 x 512 x 4096 = 102760448,两种方式需要的参数个数是相同的。并且这里得到的特征值和上图得到的结果其实一样,下图保留了一个长宽的概念,上图就是输出的值。

2、三种方式

如果直接对最后一层上采样回原尺寸,小尺寸的特征图对应原图的感受野很大,会丢失小细节,只适合识别大的物体。因此,通过跳级结构将最后一层的预测(富有全局信息)和更浅层(富有局部信息)的预测结合起来,在遵守全局预测的同时进行局部预测。

下图就是经过卷积之后,直接上采样32倍得到原图尺寸的特征图,这样得到的结果并不理想。语义分割学习_第5张图片FCN-16s 网络—上采样分为两次完成。VGG网络前几次卷积之后,得到为源图像长宽 1/32 的特征图,接着继续进行卷积,使用padding=3,4096 个 7× 7× 512的卷积核进行提升维度,得到4096channels的特征图,长宽不变,接着在进行1×1×4096的卷积,得到的还是长宽和深度均不变的特征图,再继续进行卷积,卷积核为1×1×4096,个数为num_class(需要分割的类别个数+背景),得到的特征图channel就是类别个数加一。最后进行转置卷积(上采样),利用双线性插值上采样2倍,得到原图长宽1/16 的特征图。将VGG网络中第4个pooling层特征图进行一个卷积,改变channel为num_class,将二者相加融合,再进行一个转置卷积,上采样16倍,得到原图的大小。语义分割学习_第6张图片

语义分割学习_第7张图片

8S与16S的操作相同,在第一次融合之后,在进行一个2倍上采样,得到原图长宽1/8的特征图;VGG中第3个pooling层输出的特征图经过卷积后channel数变为num_class;将二者进行相加融合,在进行一个8倍的上采样就可以得到最终结果。

3、损失计算

语义分割学习_第8张图片
左侧可以理解为还原得到的预测图,H、W为3,channel为3(表示有三个类别),针对每一个像素点,在深度方向(代表类别的channel上)使用softmax处理,得到针对每一个类别的概率,选择最大的预测值即为得到的类别,每一个像素点的预测值与真实标签进行一个交叉熵运算,所有的像素点的交叉熵结果进行相加求平均值,得到损失值。

4、转置卷积

转置卷积又叫反卷积,常用于上采样,但是,假设A图经过一次卷积之后,再进行转置卷积放大回原大小的图,两个特征图的取值是不同的。转置卷积不是卷积的逆运算
语义分割学习_第9张图片
举例计算
语义分割学习_第10张图片
上图中,元素不需要填充,需要在四周填充(3-0-1=2)2周的0,将卷积核上下、左右翻转,在进行相乘,可以得到结果。
关于卷积和转置卷积的关系,该视频给出了详细讲解。

二、Mask R-CNN

关于Mask R-CNN,这篇csdn博客给出了详细的介绍

链接

你可能感兴趣的:(学习,计算机视觉,深度学习)