image-20230128232704049

image-20230128234013013

输入和输出

网络的输入可以为任意尺寸的彩色图像;

输出 与输入尺 寸相同,通道数为:n(目标类别数)+1(背景)。

全卷积

网络在CNN卷积部分不用全连接而是替换成卷积的目的 是允许输入的图片为超过某一尺寸的任意大小。

上采样 Upsampling

由于在卷积过程中,我们的特征图像变得很小(比如长宽变 为原图像的1/32),为了得到原图像大小的稠密像素预测, 我们需要进行上采样。

容易想到三种方式,分别对应最大池化、平均池化和卷积操 作的反过来使用。

  1. 插值法
  2. 反池化
  3. 反卷积(转置卷积)
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_bias Boolean,层是否使用偏置向量。
kernel_initializer kernel 权重矩阵的初始化程序(请参阅 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 )。

image-20230128235010112

image-20230128235221628

语义分割的跳级结构

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

image-20230128235816485

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

image-20230128235939509

全卷积神经网络(FCN)的缺点

  1. 得到的结果还不够精细,对细节不够敏感;
  2. 没有考虑像素与像素之间的关系,缺乏空间一致性等。