语义分割|学习记录(5)Pytorch官方实现的FCN网络结构

文章目录

  • 前言
  • FCN网络结构
  • 参考资料


前言

Pytorch官方实现的FCN和当年论文的结构图稍有不同,因为现在有了更多的backbone的选择,而且应用了膨胀卷积技术。

FCN网络结构

下图是Pytorch官方实现的FCN网络结构:

语义分割|学习记录(5)Pytorch官方实现的FCN网络结构_第1张图片
下图是Resnet的网络结构:

对比两个网络进行分析:FCN网络的backbone选择的是Resnet50 backbone,在这一部分的蓝色虚线框的前面的结构和Resnet是一模一样的。

重点关注layer3和layer4的部分。FCN的layer3和layer4对应于Resnet的conv4_x和conv5_x。区别在于:

  • Resnet的conv4_x中的6个残差结构对应FCN的layer3中的1个Bottleneck1和5个Bottleneck2。
  • Resnet的conv5_x中的3个残差结构对应FCN的layer4中的1个Bottleneck12个Bottleneck2

接下来我们重点关注一下Bottleneck1Bottleneck2的结构:

  • Bottleneck1对应残差结构中的虚线结构,在这里和resnet中的区别在于它将捷径分支上的 1 ∗ 1 1*1 11卷积的步距改成了1。因此在这里并没有进行下采样操作,语义分割中下采样倍率过大还原会原图效果会受影响。另外在 3 ∗ 3 3*3 33卷积核处的步距也改成了1,并且引入了膨胀卷积
  • Bottleneck2同样也是引入了膨胀卷积。

接下来再来看一下FCN Head部分:

  • 经过一个3*3的卷积层,输入特征图的channel数被调整为原来的1/4变为512.
  • 通过一个Dropout层
  • 再通过一个1*1卷积层,调整特征层的channel为类别个数。
  • 最后通过一个双线性插值的方法,还原回原来的大小。

另外在右侧还有一个FCN Head,官方给出的理由:防止误差梯度没办法传递到网络浅层,所以这里引入了辅助分类器。
训练的时候可以启用这个辅助分类器,都可以去试一下。在实际部署到真实环境的时候,我们只去利用output。

参考资料

up主霹雳吧啦Wz原视频

你可能感兴趣的:(语义分割学习记录,pytorch,深度学习,机器学习)