语义分割学习笔记(三)FCN网络结构详解

推荐课程:FCN网络结构详解(语义分割)_哔哩哔哩_bilibili

感谢博主霹雳吧啦Wz  / 太阳花的小绿豆提供视频讲解和源码支持,真乃神人也!

目录

1.FCN网络概述

2.几种不同的FCN网络

        (1) FCN-32s

        (2) FCN-16s

        (3) FCN-8s

3.损失计算


1.FCN网络概述

FCN网络(Fully Convolutional Networks):首个端对端的针对像素级预测的全卷积网络。

语义分割学习笔记(三)FCN网络结构详解_第1张图片

FCN网络思想:输入图像经过多次卷积,得到一个通道数为21的特征图,再经过上采样,得到一个与原图同样大小的特征图,再经过Softmax函数处理就能得到该像素针对Pascal Voc数据集每一个类别的预测概率,选择最大概率的类别作为该像素的预测类别。

FCN网络在VGG网络上做出的修改:把VGG全连接层改为卷积层。一方面,可以不用固定输入图像的大小。另一方面,当输入图像大小大于24x24,最终得到的输出特征图的channel就会变为2D的数据,这时我们把channel提取出来就得到一张热图(heatmap)。

语义分割学习笔记(三)FCN网络结构详解_第2张图片

 最上面一个网络模型为vgg 16。

2.几种不同的FCN网络

语义分割学习笔记(三)FCN网络结构详解_第3张图片

FCN-32s:使用32倍的上采样。FCN-16s:使用16倍的上采样。FCN-8s:使用8倍的上采样。

(1) FCN-32s

语义分割学习笔记(三)FCN网络结构详解_第4张图片

VGG16 Backbone(主干网络)为VGG16网络全连接层之前的网络部分。注意:FCN网络把VGG全连接层改为卷积层,即其中两个卷积层为FC6,FC7。

模型的训练过程如下:

1.输入图片,首先,通过VGG16 Backbone(主干网络)会将图片下采样32倍,得到的特征图W、H为原图片大小的1/32,Channel变为512

2.其次,经过size=7x7,padding=3,卷积核数为4096的FC6卷积,输出特征图大小不变,Channel变为4096。

3.再次,经过size=1x1,padding=1,卷积核数为4096为FC7卷积,输出特征图大小不变,Channel也不变。

4.然后,经过size=1x1,padding=1,卷积核数为num_class的卷积,输出的特征图大小不变,Channel变为num_class

(num_class为分类个数,VGG网络全连接层会经过softmax进行多分类,因此我们要把Channel值设置为分类个数,确保参数个数与VGG保持一致。讲解视频中有提到!)

5.最后,经过一个size=64的上采样(即32倍的上采样),特征图恢复到原图大小。得到的特征图的Channel仍然为num_class。

(在源码中,这里没有使用上采样,而是直接使用双线性插值还原。原因是直接使用32倍的上采样效果不明显,不用也可以。这是由于直接放大32倍导致的。)

(2) FCN-16s

语义分割学习笔记(三)FCN网络结构详解_第5张图片

很明显FCN-16s网络在VGG16 Backbone(主干网络)之后分为两个分支:

1.最上面的分支其结构与FCN-32s的结构基本一致,唯一的不同在于采用了2倍的上采样(特征图大小扩大2倍),得到的特征图size=原图的1/16Channel=num_class

2.最下面的分支接受到VGG16主干网络中MaxPool4层输出的特征图(这里的特征图已经经过了16倍的下采样,大小为原图的1/16),再经过size=1x1,padding=1,卷积核数为num_class的卷积,得到size=原图的1/16,Channel=num_class的特征图。

3.得到的两个特征图进行矩阵相加,得到一个新的特征图。

4.最后,经过一个16倍的上采样,将特征图还原为原图大小。

(3) FCN-8s

语义分割学习笔记(三)FCN网络结构详解_第6张图片

很明显FCN-8s网络一共有3条分支。自上而下命名为分支1,分支2,分支3。

模型的训练过程如下:

1.分支1和分支2整体的结构与FCN-16s基本一致,唯一的不同在两个特征图相加后(第一个相加)经过一个2倍的上采样,得到一个size=原图大小的1/8,Channel=num_class的特征图。

2.分支3接受到VGG16主干网络中MaxPool3层输出的特征图(这里的特征图已经经过了8倍的下采样,大小为原图的1/8),再经过size=1x1,padding=1,卷积核数为num_class的卷积,得到size=原图的1/8,Channel=num_class的特征图。

3.得到的两个特征图进行矩阵相加,得到一个新的特征图。

4.最后,经过一个8倍的上采样,将特征图还原为原图大小。

3.损失计算

语义分割学习笔记(三)FCN网络结构详解_第7张图片

左边的通过训练模型最终得到的特征图,右边为真实标记

计算损失值过程:

1.特征图的每一个方格为一个pixel(像素),如上图沿Channel方向每个pixel还有三个参数。沿Channel方向为每个像素做softmax处理,就能得到每个像素的预测值预测值与对应真实值(在真实标记对应位置)计算交叉熵损失

计算交叉熵损失公式:

2.计算每一个像素的损失值,求平均值,最终得到整个网络模型的损失值。

你可能感兴趣的:(深度学习-语义分割,深度学习,FCN网络,语义分割)