【霹雳吧啦】手把手带你入门语义分割11:U2-Net 网络结构(Block 结构:RSU-L)& 损失计算 & F-measure 指标 & MAE 指标 & DUTS 数据集

目录

前言

Preparation

一、U2-Net 网络效果对比

二、U2-Net 网络结构解析

1、第一种 block 结构

2、第二种 block 结构

3、saliency map fusion module

4、U2-Net 网络配置

三、损失计算

四、评价指标

1、F-measure 

2、MAE

五、DUTS 数据集简介


前言

这篇文章是我根据 B 站 霹雳吧啦Wz 的《深度学习:语义分割篇章》中的 U2-Net 网络结构讲解 所作的学习笔记,涵盖内容如目录所示,希望能为正在学习语义分割的小伙伴们提供一些帮助ヾ(^▽^*))) 因为才刚刚开始接触语义分割,所以在表达上可能比较幼稚,希望王子公主们多多包涵啦!如果存在问题的话,请大家直接指出噢~

Preparation

相关论文:U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection

【补充】这篇论文是针对 SOD 任务 提出的,即 salient object detection 显著性目标检测任务,与语义分割任务非常类似,但 SOD 任务只有 前景  背景 两个类别。

一、U2-Net 网络效果对比

原论文提供了 U2-Net 网络与当年主流的显著性目标检测网络的效果对比图,分析下图可知,U2-Net 网络在当年的显著性目标检测任务中的效果非常好,对第一张图片的分割精细程度非常高,明显优于当年的主流网络,轻量级的 U2-Net 效果也非常好!

  • 第 1 列 :输入的原始图像
  • 第 2 列 :人工标注的 GT(ground truth)
  • 第 3 列 :标准版 U2-Net 的预测结果
  • 第 4 列 :轻量级 U2-Net 的预测结果
  • 其他列 :当年比较主流的显著性目标检测网络

Figure 7. Qualitative comparison of the proposed method with seven other SOTA methods: (a) image , (b) GT , (c) Ours , (d) Ours† , (e) BASNet , (f) PoolNet , (g) CPD , (h) PiCANetR , (i) R3Net+ , (j) AFNet , (k) DSS+ , where '+' indicates the CRF post-processing.

【补充】显著性目标检测 Salient Object Detection(SOD)任务就是 将图片中最吸引人的目标或者区域分割出来 ,因此只有前景和背景两个类别,相当于语义分割中的 二分类任务 。下图是从 DUTS-TR 数据集中随机挑选的若干图片,第一行为原始图像,第二行为对应的 GT ,其中的白色区域代表 前景 ,即最吸引人的目标或区域(可能偏主观),而黑色区域代表 背景

原论文还基于 ECSSD 数据集将 U2-Net 网络与当年的其他主流网络模型进行效果对比,主要比较 模型的大小 以及 maxF measure 指标 。分析下图可知,无论是模型大小还是 maxF measure 指标,U2-Net 都优于其他主流网络,图中的 ★ 为标准模型,★ 为轻量级模型。

Figure 1. Comparison of model size and performance of our U2-Net with other state-of-the-art SOD models. The maxFβ measure is computed on dataset ECSSD [46]. The red star denotes our U2-Net (Ours) (176.3 MB) and the blue star denotes our small version U2-Net† (Ours†) (4.7 MB).

二、U2-Net 网络结构解析

原论文提供了 U2-Net 的网络结构图,该网络的主体是一个类似于 U-Net 的结构,网络中的每个 Encoder 和 Decoder 模块也都类似于 U-Net 的结构,也就是在一个大的 U-Net 中嵌套了一堆小的 U-Net ,因此该网络称为 U^{2}-Net ,但因为平方符号不好打,通常简写为 U2-Net 。

U2-Net 的核心就是这些普通的 block ,这些 block 在论文中被称为 ReSidual U-block ,图中的 block 其实可以分为两种,Encoder1~Encoder4 与 Decoder1~Decoder4 采用的是同一种结构的 block ,只不过深度不同。Encoder5、Encoder6、Decoder5 采用的是另一种结构的 block 。 

  • a : 在 Encoder 阶段,每通过一个 block 后都会下采样 2 倍(maxpool)
  • b : 在 Decoder 阶段,每通过一个 block 前都会上采样 2 倍(bilinear)
  • c : 将每个阶段的预测输出进行融合,得到最终融合之后的预测概率图

Figure 5. Illustration of our proposed U2-Net architecture. The main architecture is a U-Net like Encoder-Decoder, where each stage consists of our newly proposed residual U-block (RSU). For example, En 1 is based on our RSU block shown in Fig. 2(e). Detailed configuration of RSU block of each stage is given in the last two rows of Table 1.

1、第一种 block 结构

原论文中提出的 ReSidual U-block 简称为 RSU ,下图 (e) 是论文提供的 RSU-7 结构,其中的 7 代表深度 L ,注意最下面的 3 x 3 卷积采用的是膨胀卷积,膨胀因子为 2 。分析图 (e) 可知:

  • 在 Encoder 阶段,每通过一个 block 后就会通过最大池化层下采样 2 倍,输入特征图在宽和高的方向上都下采样了 32 倍。
  • 在 Decoder 阶段,每通过一个 block 前都会用双线性插值法上采样 2 倍,特征图又在宽和高的方向上都上采样了 32 倍。

Figure 2. Illustration of existing convolution blocks and our proposed residual U-block RSU: (a) Plain convolution block PLN, (b) Residual-like block RES, (c) Dense-like block DSE, (d) Inception-like block INC and (e) Our residual U-block RSU.

为了能够更清楚地解释 RSU-7 结构,霹雳吧啦重绘了结构图,图中标出了每个输出特征图的 shape 以及 concat 拼接 的位置。

【重点】在大致了解 RSU 结构后,我们再回到 U2-Net 结构:

  • U2-Net 网络结构中的 Encoder1 和 Decoder1 采用的是 RSU-7 结构
  • U2-Net 网络结构中的 Encoder2 和 Decoder2 采用的是 RSU-6 结构
  • U2-Net 网络结构中的 Encoder3 和 Decoder3 采用的是 RSU-5 结构
  • U2-Net 网络结构中的 Encoder4 和 Decoder4 采用的是 RSU-4 结构

【说明】相邻 block 相差一次下采样和一次上采样,例如 RSU-6 相比于 RSU-7 少了一个下采样卷积和上采样卷积部分,RSU-7 是下采样 32 倍和上采样 32 倍,RSU-6 是下采样 16 倍和上采样 16 倍。

2、第二种 block 结构

这是霹雳吧啦绘制的 RSU-4F 结构图,U2-Net 中的 Encoder5、Encoder6、Decoder5 采用的都是 RSU-4F 结构,注意 RSU-4F 与 RSU-4 的结构并不相同,在 RSU-4F 中未进行下采样和上采样,而是将采样全部替换成了 膨胀卷积 ,整个过程中特征图的宽高不变。

【说明】图中带参数 d 的卷积层均为膨胀卷积,参数 d 就是膨胀系数。 

提问:为什么 Encoder5、Encoder6、Decoder5 要采用 RSU-4F 结构? 

原论文作者的解释:在经过 Encoder1~Encoder4 的下采样后,特征图的宽高已经比较小了,如果继续进行下采样,就会丢失很多上下文信息。为了保留上下文信息,就在 RSU-4 的基础上将下采样和上采样换成了膨胀卷积,整个过程中特征图的宽高不变。

3、saliency map fusion module

将每个阶段的特征图进行融合,主要收集 Decoder1~Decoder5 和 Encoder6 的输出特征图,对它们进行如下操作:

  • Step 1 :通过一个卷积核大小为 3 x 3 的卷积层,卷积核个数为 1 ,因此这里输出的特征图 channel 为 1
  • Step 2 :通过双线性插值方法进行上采样恢复至原图的宽高,得到 Sup1~Sup6 特征图
  • Step 3 :将 Sup1~Sup6 特征图进行 concat 拼接
  • Step 4 :通过一个卷积核大小为 1 x 1 的卷积层和 sigmoid 激活函数,得到最终的预测概率图

4、U2-Net 网络配置

原论文给出了标准 U2-Net 和轻量级 U2-Net 的详细配置信息,如下图所示,带 † 符号的是 U2-Net :

【说明】这张表中每个 block 的 I 代表 input channel( C_{in} ),M 代表 mid channel( C_{mid} ),O 代表 output channel( C_{out} )。

三、损失计算

原论文给出了 U2-Net 的损失计算公式:

L=\sum_{m=1}^{M}{w_{side}^{(m)}}\, {l_{side}^{(m)}}+w_{fuse}\,l_{fuse}

式中:l 代表二值交叉熵损失,w 代表每个损失的权重,M=6 表示有 Decoder1~Decoder5 和 Encoder6 等 6 个输出。

这个损失函数可以看成两部分, + 前半部分 是 Sup1~Sup6 特征图与手工标注的 Ground Truth 之间的损失,这里需要注意的是,计算损失前需要将 Sup1~Sup6 特征图通过 Sigmoid 激活函数得到对应的预测概率图,然后与 GT 求损失,再进行加权求和; + 后半部分 是融合后得到的最终的预测概率图与 GT 之间的损失。在源码中,权重 w 全部等于 1 。

四、评价指标

原论文罗列了 6 种显著性目标检测的评价指标,其中最常用的指标是 F-measure MAE

  •  PR curve
  •  F-measure
  •  MAE
  •  weighted F-measure
  •  S-measure
  •  relax boundary F-measure

1、F-measure 

 F-measure 的计算公式:

F_{\beta}=\frac{(1+\beta^{2})\times Precision\times Recall}{\beta^{2}\times Precision+ Recall}

式中:Precision 代表精准度,Recall 代表召回率,\beta ^{2} 在论文源码中被设置为 0.3 。

【说明】F-measure 的数值范围在 0 到 1 之间,数值越大就代表网络的分割效果越好。由公式可知,F-measure 是结合了 Precision 和 Recall 的综合指标,因为针对不同的概率阈值,会得到不同的 Precision 值和 Recall 值,所以这里得到的 F-measure 是一个数组,数组中的一个元素对应一组 Precision 和 Recall ,而最终报告的指标是 maxF-measure ,即取 F-measure 的最大值。

2、MAE

 MAE ( Mean Absolute Error 平均绝对误差 ) 的计算公式:

MAE=\frac{1}{H \times W} \sum_{r=1}^{H} \sum_{c=1}^{W}\left | P(r,c)-G(r,c)) \right |

式中:P 代表预测概率图,G 代表手工标注的 Ground Truth ,H 代表特征图的高,W 代表特征图的宽。

【说明】MAE 的数值范围在 0 到 1 之间,越趋于 0 就代表网络的性能越好。

五、DUTS 数据集简介

针对显著性目标检测 SOD 任务,公开的数据集很多,这里只简单介绍了 DUTS 数据集:

DUTS-TR 训练集:

  • DUTS-TR-Image : 该文件夹存放所有训练集的图片
  • DUTS-TR-Mask : 该文件夹存放对应训练图片的 GT 标签( Mask 蒙板形式 )

DUTS-TE 验证集:

  • DUTS-TE-Image: 该文件夹存放所有验证集的图片
  • DUTS-TE-Mask: 该文件夹存放对应验证图片的 GT 标签( Mask 蒙板形式 )

DUTS 数据集的下载地址:http://saliencydetection.net/duts/

### U2-Net在缺陷分割任务中的效果 U2-Net作为一种改进型的U-Net架构,特别适用于资源受限环境下的高效处理。该模型不仅保持了U-Net原有的优点——即通过编码器-解码器结构有效捕捉图像中的多尺度上下文信息[^1],还引入了多个嵌套式的跳跃连接机制,进一步增强了细节保留能力。 实验表明,在Classic VOC, Blender VOC, Cityscapes等多种数据集测试环境下,即使面对复杂的场景变化以及类别不平衡等问题时,U2-Net依然能展现出优秀的鲁棒性和适应性[^3]。特别是在有标签样本数量有限的情况下,其性能优势更为明显。 然而值得注意的是,尽管U2-Net可以在一定程度上缓解因训练集中某些类别的实例数远少于其他类别而导致的表现不佳现象,但对于极端情况下的长尾分布问题仍然存在挑战。因此当应用于特定领域如工业产品表面瑕疵检测等实际应用场景时,可能还需要针对性地调整优化策略以获得更佳的结果。 ### 实现方法概述 为了实现高效的缺陷分割功能,U2-Net采用了独特的设计思路: - **多级监督学习**:不同于传统单阶段输出的方式,U2-Net利用中间层产生的特征映射作为辅助损失函数输入,使得整个网络能够在不同层次上接受反馈指导,进而提高最终预测的质量。 - **强化版残差模块**:在网络内部构建了一系列有门控单元的记忆细胞,允许信息沿深层路径传递的同时减少梯度消失的风险;此外,这些记忆细胞还可以帮助过滤掉不必要的噪声干扰项,专注于重要区域的学习过程。 - **轻量化设计原则**:考虑到计算成本与部署灵活性的要求,开发者们精心裁剪每一部分参数规模,并采用分组卷积技术代替标准形式的操作符,既降低了内存占用又加快了推理速度。 ```python import torch.nn as nn class RSU7(nn.Module): # Residual U-block with seven convolutions def __init__(self, in_ch=3, mid_ch=12, out_ch=3): super(RSU7,self).__init__() self.rebnconvin = REBNCONV(in_ch,out_ch,dirate=1) self.rebnconv1 = REBNCONV(out_ch,mid_ch,dirate=1) ... ``` 此代码片段展示了U2-Net中使用的加强版本Residual U-block之一RSU7的具体定义方式,其中包含了七个连续执行的标准或膨胀卷积操作序列。 ### 常见问题分析 虽然U2-Net具备诸多先进特性,但在具体实施过程中仍会遇到一些典型难题: - 对于非常规形状或者微小目标物体难以准确定位; - 当背景复杂程度较高时容易误判正常部位为异常区; - 需要大量高质量标注图片支持才能达到理想识别率; - 训练初期可能会因为权重初始化不当而陷入局部最优解陷阱。 针对上述状况,建议采取如下措施加以改善: - 利用形态学运算预处理原始影像资料,突出潜在病变位置轮廓边界; - 结合先验知识设定合理的阈值范围区分疑似病灶与其他成分; - 积极收集更多种类丰富的正负样本扩充数据库容量; - 尝试不同的随机种子组合多次重复试验寻找稳定收敛模式。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

作者正在煮茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值