图像语义分割 FCN 概念


输入和输出
网络的输入可以为任意尺寸的彩色图像;
输出 与输入尺 寸相同,通道数为:n(目标类别数)+1(背景)。
全卷积
网络在CNN卷积部分不用全连接而是替换成卷积的目的 是允许输入的图片为超过某一尺寸的任意大小。
上采样 Upsampling
由于在卷积过程中,我们的特征图像变得很小(比如长宽变 为原图像的1/32),为了得到原图像大小的稠密像素预测, 我们需要进行上采样。
容易想到三种方式,分别对应最大池化、平均池化和卷积操 作的反过来使用。
- 插值法
- 反池化
- 反卷积(转置卷积)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 tf.keras.layers.Conv2DTranspose(
filters,
kernel_size,
strides=(1, 1),
padding='valid',
output_padding=None,
data_format=None,
dilation_rate=(1, 1),
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
**kwargs
)
Args filters整数,输出空间的维度(即卷积中输出滤波器的数量)。 kernel_size一个整数或2个整数的元组/列表,指定2D卷积窗口的高度和宽度。可以是一个整数,指定所有空间维度的相同值。 strides一个整数或2个整数的元组/列表,指定沿高度和宽度的卷积步幅。可以是单个整数,以为所有空间尺寸指定相同的值。指定任何跨步值!= 1与指定任何 dilation_rate值!= 1不兼容。padding"valid"或"same"之一(不区分大小写)。"valid"意味着没有填充。"same"导致在输入的左/右或上/下均匀填充零,以使输出具有与输入相同的高度/宽度尺寸。output_padding一个整数或2个整数的元组/列表,指定沿输出张量的高度和宽度的填充量。可以是单个整数,以为所有空间尺寸指定相同的值。沿给定尺寸的输出填充量必须小于沿相同尺寸的步幅。如果设置为“ None(默认),则将推断输出形状。data_format字符串, channels_last(默认)或channels_first中的一个。输入中尺寸的顺序。channels_last对应于形状为(batch_size, height, width, channels)输入,而channels_first对应于形状为(batch_size, channels, height, width)。它的默认值为在~/.keras/keras.json配置文件中找到的image_data_format值。如果您从未设置,那么它将是“ channels_last”。dilation_rate一个整数,指定扩张卷积的所有空间维度的扩张率。不支持为不同维度指定不同的膨胀率。目前,指定任何 dilation_rate值 != 1 与指定任何 stride 值 != 1 是不兼容的。activation要使用的激活功能。如果您未指定任何内容,则不会应用任何激活(请参阅 keras.activations)。use_biasBoolean,层是否使用偏置向量。 kernel_initializerkernel权重矩阵的初始化程序(请参阅keras.initializers)。默认为“glorot_uniform”。bias_initializer偏置向量的初始化程序(请参阅 keras.initializers)。默认为“零”。kernel_regularizer正则化函数应用于 kernel权重矩阵(请参阅keras.regularizers)。bias_regularizer将正则化函数应用于偏差向量(请参阅 keras.regularizers)。activity_regularizer正则化函数应用于图层的输出(其“激活”)(请参阅 keras.regularizers)。kernel_constraint约束函数应用于内核矩阵(请参阅 keras.constraints)。bias_constraint将约束函数应用于偏差向量(请参阅 keras.constraints)。


语义分割的跳级结构
增加Skips结构将最后一层的预测(有更富的全局信息) 和更浅层(有更多的局部细节)的预测结合起来, 这样可以在遵守全局预测的同时进行局部预测。

将底层(stride 32)的预测(FCN-32s)进行2倍的上采样 得到的图像,并与从pool4层(stride 16)进行的预测融合 起来(相加),这一部分的网络被称为FCN-16s。随后将这 一部分的预测再进行一次2倍的上采样并与从pool3层得到的 预测融合起来,这一部分的网络被称为FCN-8s。

全卷积神经网络(FCN)的缺点
- 得到的结果还不够精细,对细节不够敏感;
- 没有考虑像素与像素之间的关系,缺乏空间一致性等。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YuKiFuHaNeの博客!




