【霹雳吧啦】手把手带你入门语义分割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/

  • 24
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
TensorBoard是TensorFlow提供的一个可视化工具,用于帮助开发者可视化和理解深度学习模型的训练过程和结果。而U2Net是一种用于图像分割任务的深度学习模型。 要搭建U2Net模型并使用TensorBoard进行可视化,可以按照以下步骤进行操作: 1. 安装TensorFlow和TensorBoard:首先确保你已经安装了TensorFlow和TensorBoard。可以使用pip命令进行安装: ``` pip install tensorflow pip install tensorboard ``` 2. 下载U2Net代码和数据集:从GitHub上下载U2Net的代码和相应的数据集。可以在GitHub上搜索U2Net并找到相应的仓库。 3. 数据准备:根据U2Net的要求,准备好训练数据集和测试数据集,并将其放置在合适的文件夹中。 4. 模型训练:使用U2Net的代码进行模型训练。根据代码中的说明,设置好训练参数,包括数据路径、模型保存路径等。运行代码开始训练模型。 5. TensorBoard集成:在代码中添加TensorBoard的集成代码。在训练过程中,使用TensorBoard提供的`tf.summary`函数记录训练过程中的关键信息,如损失函数、准确率等。示例代码如下: ```python import tensorflow as tf # 创建一个写入器,用于写入TensorBoard日志 writer = tf.summary.create_file_writer(logdir) # 在训练过程中使用tf.summary记录关键信息 with writer.as_default(): tf.summary.scalar('loss', loss, step=epoch) tf.summary.scalar('accuracy', accuracy, step=epoch) # 其他需要记录的信息 # 关闭写入器 writer.close() ``` 6. 启动TensorBoard:在命令行中运行以下命令启动TensorBoard: ``` tensorboard --logdir=path/to/logdir ``` 其中,`path/to/logdir`是你保存TensorBoard日志的路径。 7. 查看结果:在浏览器中打开TensorBoard提供的链接,即可查看训练过程中的可视化结果,包括损失函数曲线、准确率曲线等。 希望以上步骤对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

作者正在煮茶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值