U-Net语义分割系列(一):
SS-Model【5】:U-Net
U-Net语义分割系列(二):
SS-Model【6】:U2-Net
U2Net 是基于 Unet 提出的一种新的网络结构,同样基于 encode-decode,作者参考 FPN 和 UNet,在此基础之上提出了一种新模块 RSU(ReSidual U-blocks)。 经过测试,对于分割物体前、背景取得了惊人的效果。同样具有较好的实时性,经过测试在 P100 上前向时间仅为18ms(56fps)。
原论文链接:
U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection
在本文中,作者设计了一个简单而强大的深度网络架构 -- U-Net,用于显著性物体检测(SOD)。我们的 U-Net 的结构是一个两级嵌套的 U 型结构。该设计有以下优点:
ReSidual U-block(RSU)中不同大小的感受野的混合,它能够从不同的尺度捕捉更多的上下文信息;这种架构使我们能够从头开始训练一个深度网络,而不使用来自图像分类任务的 backbone。
显著性目标检测(SOD)指的是将图像中最显著的物体进行分割,广泛用于视觉追踪和图像分割任务中。
显著性目标检测任务与语义分割任务非常相似,只不过显著性目标检测任务是二分类任务,它的任务是将图片中最吸引人的目标或区域分割出来(偏主观),故只有前景和背景两类。
下图是从 DUTS-TR 数据集中随便挑的几张图片,第一行是原图,第二行是对应的GT,其中白色区域对应前景(最吸引人的目标或区域)黑色区域对应背景:

目前现状:
大多数的 SOD 网络有一个共性,就是注重利用现有的主干提取深层特征,比如 Alexnet、VGG、ResNet、ResNeXt、DenseNet 等。这些主干最终都是为图像分类任务而设计的,他们提取的特征代表语义,而不是局部细节和全局对比信息,但这对显著性检测至关重要。
他们需要在 ImageNet 数据集上进行预训练,如果目标数据与 ImageNet 具有不同的分布,则会比较低效。
SOD 模型中存在的问题:
U2Net 网络的解决方法:
RSU,能够在不降低特征映射分辨率的情况下提取级内多尺度特征U-Net 的结构,每一 stage 由一个 RSU 块填充对于显著目标检测和其他分割任务来说,局部和全局上下文信息都非常重要。在现代 CNN 设计中,如 VGG、ResNet、DenseNet 等,1×1 或 3×3 的小型卷积滤波器是最常用的特征提取元件,因为它们需要较少的存储空间并且计算效率高。

1x1 或 3x3 滤波器的感受野太小而无法捕捉全局信息,因此底层的输出特征图只包含局部特征。为了在高分辨率浅层特征图上获取更多的全局信息,最直接的想法是扩大感受野。inception like block,试图通过使用空洞卷积来扩大感受野以提取局部特征和非局部特征。然而,在原始分辨率的输入特征图上进行多次扩展卷积(尤其是初始阶段)需要大量的计算和内存资源受 U-Net 的启发,提出了一种新的 RSU 来捕捉阶段内多尺度特征。下图显示了 RSU-L(Cin, M, Cout) 结构, 其中 L 是编码器层数,$C_{in}$,$C_{out}$ 表示输入和输出通道,M 表示 RSU 内部层中的通道数。

标出每个输出特征图的 shape 以及 concat 的位置后的重绘结构图如下所示:

RSU 主要由三个部分组成:

与上述 RSU-L 结构不同的是,在 RSU-4F 中并没有进行下采样或上采样,而是将采样层全部替换成了膨胀卷积。作者解释说,到 En_5 时,特征图的分辨率已经很低了,如果接着下采样会丢失很多上下文信息,所以在 RSU-4F 中就不再进行下采样了。这意味着 RSU-4F 的所有中间特征图都与其输入的特征图具有相同的分辨率
上图中带参数 d 的卷积层全部是膨胀卷积,d 为膨胀系数

上图表示残差块与 RSU 对比,主要设计区别在于:
RSU 用 U-Net 代替了普通的单流卷积,并用一个权重层构成的局部特征代替了原始特征
作者提出了一种嵌套的 UNet 结构,即在一个大的 UNet 当中,嵌套了一堆小的 UNet。理论上,可以将指数 n 设为任意正整数,实现单级或多级嵌套 U 型结构。但是,嵌套层太多的体系结构过于复杂,无法在实际中实现和应用。
本文所讲解的模型,就是指数为 2 时的一个 2 层嵌套结构,如下图所示。它的顶层是一个由11 stages(图中的立方体)组成的大 U 型结构,每一个 stage 由一个配置良好的 RSU 填充。因此,嵌套的U结构可以更有效的提取 stage 内的多尺度特征和聚集阶段的多层次特征。

在 Encoder 阶段,每通过一个 block 后都会下采样 2 倍(maxpool),在 Decoder 阶段,每通过一个 block 前都会上采样 2 倍(bilinear)
如上图所示,U2-Net网络由三部分构成:
En_1、En_2、En_3 和 En_4 阶段中,使用的是 2.1.2 小节中讲解的 RSU-L 结构,分别为 RSU-7、RSU-6、RSU-5 和 RSU-4
En_5、En_6 阶段中,使用的是 2.1.2 小节中讲解的 RSU-4F 结构saliency map 进行融合并得到最终预测概率图U2-Net 网络首先通过大小为
3
×
3
3 \times 3
3×3、kernel = 1 的卷积(输出的特征层的 channel 为 1)和 Sigmoid 函数从 En_6,De_5,De_4,De_3,De_2 和 De_1 生成 6 个输出显著概率图
S
s
i
d
e
(
6
)
S_{side}^{(6)}
Sside(6),
S
s
i
d
e
(
5
)
S_{side}^{(5)}
Sside(5),
S
s
i
d
e
(
4
)
S_{side}^{(4)}
Sside(4),
S
s
i
d
e
(
3
)
S_{side}^{(3)}
Sside(3),
S
s
i
d
e
(
2
)
S_{side}^{(2)}
Sside(2),
S
s
i
d
e
(
1
)
S_{side}^{(1)}
Sside(1)concat)相融合,然后通过
1
×
1
1 \times 1
1×1 卷积层和一个 Sigmoid 函数,以生成最终的显著性概率映射图
S
f
u
s
e
S_{fuse}
Sfuse在 U2Net 中损失计算公式如下所示:
L = ∑ m = l M w s i d e ( m ) l s i d e ( m ) + w f u s e l f u s e L = \displaystyle\sum_{m=l}^M w_{side}^{(m)}l_{side}^{(m)} + w_{fuse}l_{fuse} L=m=l∑Mwside(m)lside(m)+wfuselfuse
参数含义:
l 代表二值交叉熵损失w 代表每个损失的权重该损失函数可以看成两部分:
Sup1、Sup2、Sup3、Sup4、Sup5 和 Sup6 与 GT 之间的损失
Sup1、Sup2、Sup3、Sup4、Sup5 和 Sup6 通过Sigmoid 激活函数得到对应的概率图)GT 之间的损失标准二进制交叉熵计算公式如下所示:
l = − ∑ ( r , c ) ( H , W ) [ P G ( r , c ) l o g P S ( r , c ) + ( 1 − P G ( r , c ) ) l o g ( 1 − P S ( r , c ) ) ] l = - \displaystyle\sum_{(r, c)}^{(H, W)}[P_{G(r, c)}logP_{S(r, c)} + (1 - P_{G(r, c)})log(1 - P_{S(r, c)})] l=−(r,c)∑(H,W)[PG(r,c)logPS(r,c)+(1−PG(r,c))log(1−PS(r,c))]
参数含义:
(r, c) 为像素坐标(H, W) 为图像大小训练过程试图最小化整个损失。测试过程中,我们选择最后融合结果
l
f
u
s
e
l_{fuse}
lfuse
作为最终的显著性图
precision 即为预测为正确的数据中,真实值为正确的比例recall 即为在所有的真实值为正确的数据中,有多少能预测正确DUTS 数据集包含了 10553 张训练图片,5019 张测试图片。其中所有的训练图片采集自ImageNet DET 训练 / 验证集,而所有的测试图片采集自 ImageNet DET 测试集以及 SUN 数据集
数据集结构如下所示:
├── DUTS-TR
│ ├── DUTS-TR-Image: 该文件夹存放所有训练集的图片
│ └── DUTS-TR-Mask: 该文件夹存放对应训练图片的GT标签(Mask蒙板形式)
│
└── DUTS-TE
├── DUTS-TE-Image: 该文件夹存放所有测试(验证)集的图片
└── DUTS-TE-Mask: 该文件夹存放对应测试(验证)图片的GT标签(Mask蒙板形式)
U2-Net 网络的设计允许具有丰富多尺度特性和相对较低的计算和内存成本de1深层架构。该结构只建立在 RSU 块上,没有使用任何特性分类的预训练主干网络,因此是灵活的,可适应不同的工作环境,性能损失很小。
本文中,使用不同的滤波器配置提供两种情况下的U2-Net