【霹雳吧啦】手把手带你入门语义分割3:FCN 网络结构详解 & FCN-32s FCN-16s FCN-8s & Convolutionalization & 损失计算 & 评价指标

目录

前言

一、什么是 FCN 网络模型

二、Convolutionalization

1、Convolutionalization 引入

2、回忆 VGG16 网络模型

3、Convolutionalization 过程

三、详细介绍 FCN 网络模型 

1、FCN-32s

2、FCN-16s

3、FCN-8s

四、损失计算 Cross Empty Loss

五、语义分割评价指标

最后说些话


前言

这篇文章是我根据 B 站 霹雳吧啦Wz 的《深度学习:语义分割篇章》中的 FCN网络结构详解 所作的学习笔记,涵盖内容如目录所示,希望能为正在学习语义分割的小伙伴们提供一些帮助ヾ(^▽^*))) 因为才刚刚开始接触语义分割,所以在表达上可能比较幼稚,希望王子公主们多多包涵啦!如果存在问题的话,请大家直接指出噢~

一、什么是 FCN 网络模型

相关论文:Fully Convolutional Networks for Semantic Segmentation

这篇论文中提到,FCN 网络是 首个 端对端的针对像素级预测的 全卷积 网络,这里的 全卷积 是指将分类网络中的全连接层全部替换为卷积层。FCN 网络是语义分割领域中非常经典的网络噢 ヾ(•ω•`)o

首先,通过查看 FCN 网络进行语义分割的效果,可以发现 FCN-8s 的效果与我们人工标注的 Ground truth 非常接近,这说明 FCN 网络在当年进行语义分割的效果非常不错。

接着,作者基于 2011 与 2012 的 PASCAL VOC 测试数据集,将 FCN 网络与当年的主流网络进行对比,发现 FCN 网络的 mean IoU 提升了 20% ,且 推理时间 更短。具体的对比情况可以参考论文提供的这张表:

此外,论文还给出了 FCN-32s 网络模型的正向推理与反向学习过程:通过一系列的 卷积 下采样 得到 特征层 ,最后一个特征层的 channel = 21 ,因为使用的是 PASCAL VOC 数据集(20 类别+背景),再经过 上采样 得到和原图大小相同且 channel = 21 的特征图,通过对其每个像素的 21 个值进行 softmax 处理,得到该像素针对每个类别的预测概率,最后取概率最大的类别作为预测类别。

二、Convolutionalization

1、Convolutionalization 引入

在下面这张图中,4096、4096 和 1000 对应的都是全连接层的输出,输入一张图片,通过分类网络后会得到一个针对 1000 个类别的预测值,将这 1000 个预测值进行 softmax 处理后,可以得到针对每个类别的概率,然后对这些数值进行可视化,例如以柱状图的形式进行可视化展示,我们可以看到预测为 tabby cat 的柱子最高。

全连接层要求输入结点的个数固定,即 输入图片的像素固定 ,若改变则报错,因此训练分类网络时要固定输入图片的大小。但如果我们将 全连接层改为卷积层 ,那么训练分类网络时对输入图片的大小就无限制了。因此我们对全连接层进行了 Convolutionalization 处理。

【补充】如果输入图片的大小大于 224 x 224 ,那么最终得到的特征层的高和宽将大于 1 ,这时对应每个 channel 的数据就是 2 维数据,我们可以将其可视化成一张图片的形式,也就是上图中的 tabby cat heatmap 。

2、回忆 VGG16 网络模型

在 VGG16 网络模型中,通常使用 D 配置,输入图片经过这个网络模型后,从 224 x 224 x 3 至 7 x 7 x 512 ,下采样 32 倍,在经过三个全连接层,前两个全连接层对应的是 4096 个结点,第三个全连接层对应的是 1000 个结点。

【注意】大家最好记住 Maxpool3 的下采样率为 8 ,Maxpool4 的下采样率为 16 哟! 

3、Convolutionalization 过程

通过分析计算可知,这两个过程完全等效,这也就是 Convolutionalization 的过程,将第一个全连接层转化为卷积层的过程:

  • 全连接层:对 7 x 7 x 512 的特征层进行展平和全连接操作后,FC1 参数数量为 7 x 7 x 512 x 4096 = 102760448
  • 卷积层:对 7 x 7 x 512 的特征层进行 conv ( 7 x 7 , s1, 4096 ) 卷积操作后,Conv 参数数量为 7 x 7 x 512 x 4096 = 102760448

三、详细介绍 FCN 网络模型 

这篇论文还给出了 FCN-32s-fixed、FCN-32s、FCN-16s 和 FCN-8s 等模型的性能指标对比列表,具体如下:

 先来简单讲讲 FCN-32s、FCN-16s 和 FCN-8s 是什么样的:

  • FCN-32s 将预测结果上采样了 32 倍,还原回原图大小
  • FCN-16s 将预测结果上采样了 16 倍,还原回原图大小
  • FCN-8s 将预测结果上采样了 8 倍,还原回原图大小

1、FCN-32s

在原论文中,作者在 backbone 的第一个卷积层中将 padding 设置为 100 ,这是为了让 FCN 网络能够适应不同大小的图片。

参考上文的 VGG 模型可知,输入图片的高宽小于 192 时,最后一个特征层的高宽小于 7 ,此时若将 padding 设置为 0 会报错。

【注意】我们通常不对高宽小于 32 的图片进行语义分割,所以只需将 padding 设置为 3 即可,这样就可以训练任意高宽大于 32 的图片啦!没有必要将 padding 设置为 100 ,这样不仅会增大网络的计算量,还会导致在上采样后要做一定的裁剪。

【重点】结合视频教程的截图,微臣尽可能用比较清晰的语言来介绍 FCN-32s 网络模型:

  1.  输入特征图经过 VGG16 Backbone 后的输出为 h / 32 * w / 32 * 512
  2.  经过 FC6 对应的卷积层后高宽不变 :H_out = ( H_in + 2 * padding - kernel_size ) / stride + 1 = ( H_in + 6 - 7 ) / 1 + 1  = H_in
  3.  经过 FC7 对应的卷积层后高宽不变 :H_out = ( H_in + 2 * padding - kernel_size ) / stride + 1 = ( H_in + 0 - 1 ) / 1 + 1  = H_in
  4.  经过 1 x 1 的卷积层,卷积核个数 channel = 包含背景在内的分类类别个数 num_class
  5.  经过转置卷积(在我的上篇文章中有具体讲解)上采样 32 倍,恢复到原图的大小,针对每个像素都有 num_class 个参数
  6.  经过 softmax 处理后就能够得到针对每个像素的预测类别

【注意】在第五步中,原论文作者是通过双线性差值的方法来初始化转置卷积的参数的,大家如果有兴趣的话,可以参考这篇博文:

双线性插值-CSDN博客文章浏览阅读7.3k次,点赞87次,收藏183次。线性插值根据百度百科的介绍:线性插值是指插值函数为一次多项式的插值方式。线性插值的几何意义即为利用过A点和B点的直线来近似表示原函数。线性插值可以用来近似代替原函数,也可以用来计算得到查表过程中表中没有的数值。那么如下图所示,假设已知y1=f(x1)y_1=f(x_1)y1​=f(x1​),y2=f(x2)y_2=f(x_2)y2​=f(x2​),现在要通过线性插值的方式得到区间[x1,x2][x_1, x_2][x1​,x2​]内任何一点的f(x)f(x)f(x)值。通过上图我们很容易得到以下公式:_双线性插值https://blog.csdn.net/qq_37541097/article/details/112564822

【补充】在第五步中,源代码中转置卷积的学习参数被冻结住了,这意味着它就是一个简单的双线性插值,因此这里甚至可以不使用转置卷积,而直接使用深度学习框架中提供的双线性插值方法。将其冻结是因为原论文作者通过实验发现是否冻结对结果的影响不大,但是冻结之后就无需训练其对应的权重,从而可以加速网络的训练过程。而之所以这里转置卷积的使用效果不佳,是因为上采样率过大。

2、FCN-16s

谈谈 FCN-16s 和 FCN-32s 的区别:

  • FCN-16s 使用的第一个转置卷积上采样 2 倍,第二个转置卷积上采样 16 倍
  • FCN-16s 额外使用了来自 MaxPool4 下采样了 16 倍的输入特征图

3、FCN-8s

谈谈 FCN-8s 和 FCN-16s 的区别:

  • FCN-16s 使用的第一个转置卷积上采样 2 倍,第二个转置卷积上采样 2 倍,第三个转置卷积上采样 8 倍,
  • FCN-16s 额外使用了来自 MaxPool3 下采样了 8 倍的输入特征图

 

四、损失计算 Cross Empty Loss

 针对每个像素( pixel )计算 Cross Entropy Loss,然后将所有 Cross Entropy Loss 相加求平均得到网络的最终损失。

五、语义分割评价指标

常见的语义分割评价指标主要包括 Pixel Accuracy ( Global Accuracy )、mean Accuracy、mean IoU 等:

  •  Pixel Accuracy = 类别预测正确的像素个数总和 ÷ 图片的总像素个数
  •  mean Accuracy = 对每个类别的 Accuracy 求平均值
  •  mean IoU = 对每个类别的 IoU 求平均值

关于语义分割评价指标,微臣在本系列的第一篇文章中已经作了详细的讲解,王子公主们请移驾我的这篇博文:

【霹雳吧啦】手把手带你入门语义分割1:语义分割的定义 & 常见数据集 & 评价指标 & 标注工具-CSDN博客文章浏览阅读965次,点赞30次,收藏26次。这篇文章是作者根据 B 站 霹雳吧啦Wz 的《深度学习:语义分割篇章》所作的第一篇学习笔记,文章在简单列举了常见的分割任务后,又大致介绍了语义分割的网络模型、常见数据集格式、所得结果的具体形式、常见评价指标以及常用标注工具。作者小白,请多包涵!https://blog.csdn.net/nanzhou520/article/details/134771956

最后说些话

致亲爱的王子公主们:微臣在这篇文章中已经尽可能用比较清晰的语言来陈述啦!但感觉还有极大的进步空间~之后会继续努力的!最后祝大家身体健康,生活顺利!

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: FCN-8s、FCN-16s、FCN-32s是基于全卷积神经网络(Fully Convolutional Network,FCN)的语义分割模型。它们分别使用了8倍、16倍、32倍的下采样和上采样,以实现对输入图像的像素级别的分类和分割。其中,FCN-8s是最早提出的模型,FCN-16s和FCN-32s则是在其基础上进行了改进和优化。这些模型在图像分割领域取得了很好的效果,被广泛应用于自动驾驶、医学图像分析等领域。 ### 回答2: FCN是全卷积神经网络(Fully Convolutional Networks)的缩写,是在CNN(卷积神经网络)的基础上进行修改和扩展得到的一个特殊网络结构FCN的主要特点是可以处理图像的变换和尺度变化,能够输出与输入图像大小相同的特征图,是语义分割和目标识别领域常用的方法之一。 FCN-8s,FCN-16s和FCN-32s是FCN的三种不同变种。其中的数字表示网络最后一层的步长(stride)。简单来说,stride指的是卷积核在对图像进行卷积时每次移动的像素数。步长为1时,卷积核每次移动一个像素;步长为2时,每次移动两个像素。 FCN-32s是最简单的FCN结构,它的输出尺寸为输入图像尺寸的1/32,每层卷积后,特征图的尺度会缩小2倍,因此需要先将输入图像缩小32倍,然后送入网络进行训练和测试。FCN-32s的性能较低,适合处理相对较小的图像。 FCN-16s和FCN-8s是FCN网络中比较优秀的版本。他们的输出分别为输入图像尺寸的1/16和1/8。FCN-16s和FCN-32s的主要区别在于初始化策略不同。在FCN-16s中,使用了另一个FCN-32s模型的参数来进行初始化,同时保留了FCN-32s中的pool5层,这样可以利用FCN-32s中的pool5层提取的高层特征来进行计算,从而提高分割的精度。在FCN-8s中,使用了FCN-16s模型的参数来进行初始化,同时再加入一个新的迭代层来进行计算,提取更多的低层特征,从而进一步提高分割的精度。 总之,FCN-32s、FCN-16s和FCN-8s是一系列针对不同需求的图像语义分割神经网络。在实际应用中,可以根据具体需求和计算资源等因素选择不同的FCN结构,以获得更好的分割效果。 ### 回答3: FCN(Fully Convolutional Network)是一种基于卷积神经网络的语义分割网络模型。FCN架构的出现,使得我们可以用卷积神经网络来解决图像语义分割问题。FCN-8s、FCN-16s、FCN-32s是FCN网络的不同版本,下面我将分别介绍它们的特点和应用。 FCN-8s FCN-8s是第一个被提出并被广泛应用的FCN版本。它的主要特点是将VGG-16网络的最后三层全连接层(FC6,FC7和FC8)替换为卷积层。这个替换过程将输入图像映射到相应的feature map,以此来解决图像中像素级别的物体分类问题。FCN-8s包含了三个分辨率的feature map,分别是14×14,28×28和56×56。这三个特征图分别代表了高层次,中层次和低层次的图像特征。FCN-8s性能达到了目前最好的语义分割模型。 FCN-16s FCN-16s是FCN的改进版本。它是在FCN-8s的基础上加入了额外的pooling层,从而使得feature map的分辨率减小了,并提高了模型的速度。FCN-16s包含了两个分辨率的feature map,分别是14×14和28×28。它的主要应用是在对速度要求较高的任务中进行物体的语义分割FCN-32s FCN-32s是最简单的FCN版本。它是将VGG-16网络的所有全连接层都替换为卷积层,并且只有一个feature map,分辨率为32×32。FCN-32s的训练速度和推断速度都很快,并且是一个参数较少的模型。但是,它的性能要略低于FCN-16s和FCN-8s。 总之,FCN-8s、FCN-16s和FCN-32s都是基于卷积神经网络的图像语义分割模型,它们分别在速度和准确性方面有所不同,并适用于不同类型的场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

作者正在煮茶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值