文章目录
简述:提出了一种类似于 ResNet 的新型架构,这种架构具有很强的定位和识别性能。通过在网络中使用两个处理流,将多尺度上下文与像素级精度相结合: 其中一个分支,以全图像分辨率传输信息,从而实现精确的分段边界。另外的分支,经过一系列池化操作以获得用于识别的鲁棒特征。两个流使用残差在全图像分辨率下耦合。
wwei
一、提出的问题:
依赖分类网络预训练基础上完成的分割网络,能够看到有识别性能优异,但是定位精度较差(擅长识别场景中的元素,但不擅长将它们定位到像素精度。)
解决:提出类似 ResNet 的架构,执行额外的处理步骤,以便在全图像分辨率下获得像素级别精度的分割掩模。
二、相关工作:
1、早期工作的参考和改进
a. Long等人引入全卷积网络(FCN),修改VGG网络使得可以使用预训练模型,为了提高对象边界的分割性能,添加了跳跃连接,允许信息直接从早期的高分辨率层传播到更深的层。
b. FCN中通过使出操作来增加感受野的大小,同时也是带来了分辨率降低的问题,从而致使边界细节信息丢失。作者提出跳跃连接从中间层提取特征。
c. Noh 等人提出一种编码器解码器架构,通过一系列池化和卷积运算来计算低维特征表示。解码器堆叠在编码器之上,然后通过后续的反池化和反卷积操作重建高维特征。作者则采用单独的数据流来实现高维特征的保持。
d . 为了保持更一致的输出预测结果,采用了平滑操作。包括了条件随机场(CRF)、包括域变换 和基于超像素的平滑等方法。
三、论文模型搭建
从AlexNet 架构 在 ImageNet 大规模视觉分类挑战赛 (ILSVRC) 中取得成功以来,网络深度不断增加,首先使用流行的 VGG 网络。然后使用 GoogleNet [51] 进行批量归一化。后续的ResNet 架构等。
1、前馈神经网络
以线性层序列的形式组成,每一层通过计算函数 F 来生成输出。输出
x
n
{x}_{n}
xn计算公式如下,其中
W
n
{W}_{n}
Wn是该层的参数:
x
n
=
F
(
x
n
−
1
;
W
n
)
x_n =F(x_ {n-1}; W_n)
xn=F(xn−1;Wn)
2、残差网络(ResNets)
预计,网络深度不断增大有助于精度的提高,然而随着网络层不断的加深,模型的准确率先是不断的提高,达到最大值(准确率饱和),然后随着网络深度的继续增加,模型准确率毫无征兆的出现大幅度的降低。ResNet团队发现,甚至难以完成 y = x 的恒等变换,该现象命名为,退化现象。
为了解决这个问题,提出了残差网络(ResNets)。由一系列残差单元(RUs)组成,其中输出
x
n
{x}_{n}
xn 的计算方式为如下。这引入了连接”,允许信息绕过计算 F 的直接路径,有助于梯度流的改善。
x
n
=
x
n
−
1
+
F
(
x
n
−
1
;
W
n
)
x_n =x_{n-1}+F(x_ {n-1}; W_n)
xn=xn−1+F(xn−1;Wn)
3、全分辨率残差网络(FRRNs)
1、FRRNs在ResNets的基础上提出,具有相似的训练特性但具有两个处理流。,其中一个流通过添加连续的残差计算特征,而另一个流通过卷积和池化操作直接计算特征。假设 z n z_ n zn 是残差输入, y n y_ n yn 是池化输入,而 z n − 1 z_{n-1} zn−1和 y n − 1 y_{n-1} yn−1 分别是前一层的残差输入和池化输入
a. 残差流的计算:
z
n
=
z
n
−
1
+
H
(
y
n
−
1
;
z
n
−
1
;
W
n
)
z _n=z _{n−1} +H(y _{n−1} ; z_{ n−1};W _n)
zn=zn−1+H(yn−1;zn−1;Wn)
这里 H 是一个由参数
W
n
W_n
Wn控制的函数,表示残差流的计算。它接收池化输入
y
n
−
1
y_{n−1}
yn−1和残差输入
z
n
−
1
z_{n−1}
zn−1。
b. 池化流的计算
y
n
=
G
(
y
n
−
1
;
z
n
−
1
;
W
n
)
y_n=G(y_{n−1};z_{n−1};W_n)
yn=G(yn−1;zn−1;Wn)
这里 G 是一个由参数
W
n
W_n
Wn 控制的函数,表示池化流的计算。它接收池化输入
y
n
−
1
y_{n−1}
yn−1 和残差输入
z
n
−
1
z_{n−1}
zn−1。
2、作者为什么上来先介绍前馈网络和残差网络呢?
如果 G ≡ 0, 我们可以容易的将该网络理解为ResNet,同时,如果 H ≡ 0,我们则可以理解为前馈网络。
3、训练过程中类似于ResNet的相似
递归过程中,对于深度为 m 的层(m>n,即深度大于 n)
z
m
z_m
zm 的表示式是通过对 H 计算得到,具体为:
z
m
=
z
n
+
∑
i
=
n
m
−
1
H
(
y
i
;
z
i
;
W
i
+
1
)
z_m = z_n + \sum_{i=n}^{m-1} H(y_i;z_i;W _{i+1})
zm=zn+i=n∑m−1H(yi;zi;Wi+1)
具体含义可以理解为
z
m
z_m
zm表示深度为 m 的层的输出.这个输出由当前层的残差流
z
n
z_n
zn 和前面层的池化流
H
(
y
i
;
z
i
;
W
i
+
1
)
H(y_i;z_i;W _{i+1})
H(yi;zi;Wi+1) 组成。
4、权重更新的梯度计算,通过链式法则,可以计算损失 l 对于参数
W
n
W_n
Wn 的梯度,这里
∂
l
∂
z
n
\frac{∂l}{∂z_n}
∂zn∂l 和
∂
l
∂
y
n
\frac{∂l}{∂yn}
∂yn∂l分别表示损失对于残差流和池化流的梯度。
∂
l
∂
W
n
=
∂
l
∂
z
n
∂
z
n
∂
W
n
+
∂
l
∂
y
n
∂
y
n
∂
W
n
\frac{∂l}{∂W_n} =\frac{∂l}{∂z_n} \frac{∂z_n}{∂W_n}+\frac{∂l}{∂y_n} \frac{ ∂y_n}{∂W_n}
∂Wn∂l=∂zn∂l∂Wn∂zn+∂yn∂l∂Wn∂yn
=
∂
z
n
∂
W
n
(
∂
l
∂
z
m
+
∂
l
∂
z
m
∑
i
=
n
m
−
1
∂
h
(
y
i
,
z
i
,
W
i
+
1
)
∂
z
n
)
+
∂
l
∂
y
n
∂
y
n
∂
W
n
=\frac{∂z_n}{∂W_n} ( \frac{∂l}{∂z_m} + \frac{∂l}{∂z_m} \sum_{i=n}^{m-1} \frac{∂h(y_i, z_i, W_{i+1})}{∂z_n}) + \frac{∂l}{∂y_n} \frac{∂y_n}{∂W_n}
=∂Wn∂zn(∂zm∂l+∂zm∂li=n∑m−1∂zn∂h(yi,zi,Wi+1))+∂yn∂l∂Wn∂yn
5.出于何种目的构建采残差网络
根据以上的梯度函数的分析,其中权重更新取决于三个信息源:
a. 第一部分中的两个内容 ∂ l ∂ y n ∂ y n ∂ W n \frac{∂l}{∂y_n} \frac{∂y_n}{∂W_n} ∂yn∂l∂Wn∂yn 和 ∑ i = n m − 1 H ( y i ; z i ; W i + 1 ) \sum_{i=n}^{m-1} H(y_i;z_i;W _{i+1}) ∑i=nm−1H(yi;zi;Wi+1),主要取决于深度你。
a. 第二部分, ∂ l ∂ z m \frac{∂l}{∂z_m} ∂zm∂l 与深度无关
6.基于第五项内容,作者为残差函数 H 使用的所有参数实现了与深度无关的梯度流。
如果使用其中一些权重来计算 G 的输出,则该单元的所有权重都会受益于改进的梯度流。通过重用 G 的输出来计算 H,最容易实现这一点。
z
n
=
z
n
−
1
+
H
(
y
n
−
1
;
z
n
−
1
;
W
n
)
−
残差流
z _n=z _{n−1} +H(y _{n−1} ; z_{ n−1};W _n) \qquad \qquad - 残差流
zn=zn−1+H(yn−1;zn−1;Wn)−残差流
y
n
=
G
(
y
n
−
1
;
z
n
−
1
;
W
n
)
−
池化流
y_n=G(y_{n−1};z_{n−1};W_n) \qquad \qquad \qquad \qquad - 池化流
yn=G(yn−1;zn−1;Wn)−池化流
7. 上图的解释
第一步是通过使用池化层连接两个输入流,以减小残差流的大小
四、 训练过程
作者在训练过程中采用的一些关键步骤和技术。
1、交叉熵损失函数
用了一种基于自举法(bootstrapped)的交叉熵损失函数来训练网络,损失函数通过对K个像素进行计算,选择那些被误分类或者以较小的概率预测正确标签的像素。损失的最小化使用了ADAM优化器。损失函数定义为:
l = − 1 K ∑ i = 1 N 1 [ p i , y i < t K ] l o g p i , y i l=−\frac{1}{K}\sum_{i=1}^{N} 1 [pi,yi<tK] logp_i, y_i l=−K1i=1∑N1[pi,yi<tK]logpi,yi
其中:c 是类别数;
y
1
,
…
,
y
N
y _1 ,…,y _N
y1,…,yN是像素 1,…,N 的目标类别标签;
p
i
,
j
p_{i,j}
pi,j是第 i 个像素属于类别 j 的后验概率;
1[x] 是示性函数,如果 x 为真则为1,否则为0;
t
K
t _K
tK是阈值,通过对预测的对数概率进行排序选择第 K+1 个确定。
2、全分辨率网络的训练内存限制
通过手动在图中放置切点,将计算图划分为多个连续的块,并对每个块单独计算导数。在训练过程中,采用了一种简单的方案,即在每个块的(部分)前向传播中仅存储计算该块导数所需的特征图。这样的方式允许手动控制时空权衡,以缓解内存压力。
3、数据增强:
为了减轻过拟合,采用了两种数据增强方法:平移增强和伽马增强。
a.平移增强随机平移图像及其注释,并通过反射填充图像和在注释上使用空标签的常数填充,以保持一致的图像尺寸。
b.伽马增强使用了略微修改的伽马增强方法。伽马增强的基本思想是通过调整图像中每个像素的亮度级别,从而影响图像的整体对比度。增加伽马值会使图像变暗,而减小伽马值则会使图像变亮。这种增强方法通常用于预处理图像,以提高图像的质量、对比度和可视性。