语义分割学习笔记(三)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网络思想:输入图像经过多次卷积,得到一个通道数为21的特征图,再经过上采样,得到一个与原图同样大小的特征图,再经过Softmax函数处理就能得到该像素针对Pascal Voc数据集每一个类别的预测概率,选择最大概率的类别作为该像素的预测类别。

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

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

2.几种不同的FCN网络

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

(1) FCN-32s

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-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-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.损失计算

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

计算损失值过程:

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

计算交叉熵损失公式:

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向岸看

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值