简介

全称为Fully Convolutional Networksfor Semantic Segmentation,用于语义分割,是第一个将语义分割的网络做成全卷积的网络结构。

  • FCN-VGG16是backbone
  • 输入可以任意大小

    请输入图片描述

    一般的用法就是下降4strides后进行上采样,torchvision中的FCN就是resnet第四层出来后(已经下降了4strides,进入的时候最大池化一次,layer1没用空洞卷积,stride为2)后经过

    class FCNHead(nn.Sequential):
        def __init__(self, in_channels, channels):
            inter_channels = in_channels // 4
            layers = [
                nn.Conv2d(in_channels, inter_channels, 3, padding=1, bias=False),
                nn.BatchNorm2d(inter_channels),
                nn.ReLU(),
                nn.Dropout(0.1),
                nn.Conv2d(inter_channels, channels, 1)
            ]
    
            super(FCNHead, self).__init__(*layers)

    后,直接上采样


    (这个不知道是哪来的)

    蓝色:卷积层。

    绿色:Max Pooling层。

    黄色: 求和运算, 使用逐数据相加,把三个不同深度的预测结果进行融合:较浅的结果更为精细,较深的结果更为鲁棒。

    灰色: 裁剪, 在融合之前,使用裁剪层统一两者大小, 最后裁剪成和输入相同尺寸输出。(应该是双线性插值)

    对于不同尺寸的输入图像,各层数据的尺寸(height,width)相应变化,深度(channel)不变。

    请输入图片描述

  • 卷积分类虽然在较深的层分类得分较高,但是在会丢失更多的细节特征信息
  • 主要运用了卷积和反卷积取代了MLP层,真正实现全卷积

Skip Architectures (跳跃框架)

  • 为了将层与层融合
  • 首先通过裁剪填充将层的对应大小统一
  • 为了弥补因为裁剪损失的信息,通过级联(concatenation)融合特征
  • 最后通过由1×1卷积组成的“得分层”进行分类
  • 将所有层这样做以后,将最后结果进行上采样后得出结果
  • 每个“得分层”都是独立的,因此不会互相影响结果

ps:FCN-32s、FCN-16s、FCN-8s分别指在VGG16-FCN的第32步、第16步、第8步的池化层进行跳跃结构

如果对你有帮助就太好了)))