当前位置: 首页 > news >正文

SS-Model【6】:U2-Net

系列文章目录

U-Net语义分割系列(一):
SS-Model【5】:U-Net
U-Net语义分割系列(二):
SS-Model【6】:U2-Net


文章目录

  • 系列文章目录
  • 前言
  • 1. Abstract & Introduction
    • 1.1. Abstract
    • 1.2. Introduction
  • 2. Network Architecture
    • 2.1. Residual U-blocks
      • 2.1.1. Comparison
      • 2.1.2. RSU - 7
      • 2.1.3. RSU - 4F
      • 2.1.4. RSU - 7 & residual block
    • 2.2. Model Structure
    • 2.3. Loss Function
    • 2.4. Evaluation indicators
  • 3. DUTS
  • 总结


前言

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


1. Abstract & Introduction

1.1. Abstract

在本文中,作者设计了一个简单而强大的深度网络架构 -- U-Net,用于显著性物体检测(SOD)。我们的 U-Net 的结构是一个两级嵌套的 U 型结构。该设计有以下优点:

  • 由于我们提出的 ReSidual U-block(RSU)中不同大小的感受野的混合,它能够从不同的尺度捕捉更多的上下文信息;
  • 由于这些 RSU 块中使用的池化操作,它增加了整个架构的深度,而没有明显增加计算成本。

这种架构使我们能够从头开始训练一个深度网络,而不使用来自图像分类任务的 backbone

1.2. Introduction

显著性目标检测(SOD)指的是将图像中最显著的物体进行分割,广泛用于视觉追踪和图像分割任务中。

显著性目标检测任务与语义分割任务非常相似,只不过显著性目标检测任务是二分类任务,它的任务是将图片中最吸引人的目标或区域分割出来(偏主观),故只有前景和背景两类。

下图是从 DUTS-TR 数据集中随便挑的几张图片,第一行是原图,第二行是对应的GT,其中白色区域对应前景(最吸引人的目标或区域)黑色区域对应背景:

在这里插入图片描述

目前现状:

大多数的 SOD 网络有一个共性,就是注重利用现有的主干提取深层特征,比如 AlexnetVGGResNetResNeXtDenseNet 等。这些主干最终都是为图像分类任务而设计的,他们提取的特征代表语义,而不是局部细节全局对比信息,但这对显著性检测至关重要。

他们需要在 ImageNet 数据集上进行预训练,如果目标数据与 ImageNet 具有不同的分布,则会比较低效。

SOD 模型中存在的问题:

  • 网络结构复杂,这是由于在现有主干网络上添加特征聚合模块,从这些模型中提取多层显著性特征
  • 现有主干网络通常通过牺牲高分辨率的特征映射来实现更深层次的体系结构

U2Net 网络的解决方法:

  • 该网络是一个两层嵌套的U型结构,没有使用图像分类的预训练主干模型,可以从头训练
  • 新的体系结构允许网络更深入、获得高分辨率,而不会显著增加内存和计算成本。
    • 在底层,设计了一个新的 RSU,能够在不降低特征映射分辨率的情况下提取级内多尺度特征
    • 在顶层,有一个类似于 U-Net 的结构,每一 stage 由一个 RSU 块填充

2. Network Architecture

2.1. Residual U-blocks

2.1.1. Comparison

对于显著目标检测和其他分割任务来说,局部和全局上下文信息都非常重要。在现代 CNN 设计中,如 VGGResNetDenseNet 等,1×13×3 的小型卷积滤波器是最常用的特征提取元件,因为它们需要较少的存储空间并且计算效率高。
在这里插入图片描述

  • ( a ) - ( c ) 显示了具有最小感受野的现有卷积块。由于 1x13x3 滤波器的感受野太小而无法捕捉全局信息,因此底层的输出特征图只包含局部特征。为了在高分辨率浅层特征图上获取更多的全局信息,最直接的想法是扩大感受野。
  • ( d ) 显示了一个 inception like block,试图通过使用空洞卷积来扩大感受野以提取局部特征和非局部特征。然而,在原始分辨率的输入特征图上进行多次扩展卷积(尤其是初始阶段)需要大量的计算和内存资源

2.1.2. RSU - 7

U-Net 的启发,提出了一种新的 RSU 来捕捉阶段内多尺度特征。下图显示了 RSU-L(Cin, M, Cout) 结构, 其中 L 是编码器层数,$C_{in}$$C_{out}$ 表示输入和输出通道,M 表示 RSU 内部层中的通道数。
在这里插入图片描述

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

在这里插入图片描述

RSU 主要由三个部分组成:

  • 输入卷积层:它将输入特征图 H × W × C i n H \times W \times C_{in} H×W×Cin 转成一个具有 Cout 通道数的中间图 F 1 ( x ) F_1(x) F1(x),这是提取局部特征的普通卷积层
  • 以中间特征图 F 1 ( x ) F_1(x) F1(x) 为输入,学习提取和编码多尺度上下文信息 U ( F 1 ( x ) ) U(F_1(x)) U(F1(x))
    • U 表示如上图所示的 U-Net
      • L 越大,RSU 越深,池化操作越多,即更大的感受野以及更丰富的局部和全局特征
      • 配置此参数可以从具有任意空间分辨率的输入特征图中提取多尺度特征。从梯度降采样特征图中提取多尺度特征,并通过逐步上采样、合并和卷积等方法将其编码到高分辨率特征图中
    • 这一过程减少了大尺度直接上采样造成的细节损失
  • 通过求和: F 1 ( x ) + U ( F 1 ( x ) ) F_1(x) + U(F_1(x)) F1(x)+U(F1(x)) 融合局部特征和多尺度特征

2.1.3. RSU - 4F

在这里插入图片描述

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

上图中带参数 d 的卷积层全部是膨胀卷积,d 为膨胀系数

2.1.4. RSU - 7 & residual block

在这里插入图片描述

上图表示残差块RSU 对比,主要设计区别在于:

  • RSUU-Net 代替了普通的单流卷积,并用一个权重层构成的局部特征代替了原始特征
    • H R S U ( x ) = U ( F 1 ( x ) ) + F 1 ( x ) H_{RSU}(x)=U(F_1(x)) + F_1(x) HRSU(x)=U(F1(x))+F1(x),其中 U 代表前面图中所示的多层 U 型结构
  • 这种设计变化使网络能够直接从每个残差块的多个尺度中提取特征
  • 同时,U结构的计算开销很小,因为大多数操作都应用于下采样的特征映射

2.2. Model Structure

作者提出了一种嵌套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_1En_2En_3En_4 阶段中,使用的是 2.1.2 小节中讲解的 RSU-L 结构,分别为 RSU-7RSU-6RSU-5RSU-4
      • 区别在于,后一个编码器比前一个编码器上一步上采样过程和一步下采样过程,下采样倍数也会相应地减少
    • 编码器 En_5En_6 阶段中,使用的是 2.1.2 小节中讲解的 RSU-4F 结构
  • 五级解码器
    • 解码阶段具有与对称编码阶段相似的结构
    • 每个解码器阶段将来自前一级的上采样特征映射和来自其对称编码器阶段的特征映射的级联作为输入
  • 与解码器和最后一级编码器相连的显著图融合模型(saliency map fusion module)
    • 通过该模块将不同尺度的 saliency map 进行融合并得到最终预测概率图
    • U2-Net 网络首先通过大小为 KaTeX parse error: Undefined control sequence: \tiems at position 3: 3 \̲t̲i̲e̲m̲s̲ ̲3、kernel = 1 的卷积(输出的特征层的 channel 为 1)和 Sigmoid 函数从 En_6De_5De_4De_3De_2De_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)
    • 将输出的显著图的逻辑图(卷积输出、Sigmoid 函数之前)向上采样至与输入图像大小一致,并通过级联操作(concat)相融合,然后通过 1 × 1 1 \times 1 1×1 卷积层和一个 Sigmoid 函数,以生成最终的显著性概率映射图 S f u s e S_{fuse} Sfuse

2.3. Loss Function

在 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=lMwside(m)lside(m)+wfuselfuse

参数含义:

  • l 代表二值交叉熵损失
  • w 代表每个损失的权重

该损失函数可以看成两部分:

  • 一部分是上述提到的 Sup1Sup2Sup3Sup4Sup5Sup6GT 之间的损失
    • 注意,在计算损失前需要将 Sup1Sup2Sup3Sup4Sup5Sup6 通过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)+(1PG(r,c))log(1PS(r,c))]

参数含义:

  • (r, c) 为像素坐标
  • (H, W) 为图像大小
  • P G ( r , c ) P_{G(r, c)} PG(r,c) 表示 GT 像素值
  • P S ( r , c ) P_{S(r, c)} PS(r,c) 表示预测的显著概率图

训练过程试图最小化整个损失。测试过程中,我们选择最后融合结果 l f u s e l_{fuse} lfuse
作为最终的显著性图

2.4. Evaluation indicators

  • PR curve
  • weighted F-measure
  • S-measure
  • relax boundary F-measure
  • F-measure
    F β = ( 1 + β 2 × P r e c i s i o n × R e c a l l ) β 2 × P r e c i s i o n + R e c a l l F_{\beta} = \frac{(1 + \beta^2 \times Precision \times Recall)}{\beta^2 \times Precision + Recall} Fβ=β2×Precision+Recall(1+β2×Precision×Recall)
    • 参数含义
      • precision 即为预测为正确的数据中,真实值为正确的比例
      • recall 即为在所有的真实值为正确的数据中,有多少能预测正确
      • 在源代码中 β 2 = 3 \beta^2 = 3 β2=3
    • 计算得到的范围为: ( 0 , 1 ) (0, 1) (0,1)
    • 数值越大,表示网络的分割效果越好
    • 针对不同的概率阈值会得到一组不同的 precision 和 recall,所以计算得到的 F β F_{\beta} Fβ 是一组数据,最终的指标,是这组数据中最大的值
  • MAE ( Mean Absolute Error )
    M A E = 1 H × W ∑ r = 1 H ∑ c = 1 W ∣ P ( r , c ) − G ( r , c ) ∣ MAE = \frac{1}{H \times W} \sum_{r=1}^H\sum_{c=1}^W | P(r,c) - G(r,c) | MAE=H×W1r=1Hc=1WP(r,c)G(r,c)
    • 参数含义
      • P ( r , c ) P(r, c) P(r,c) 表示预测概率图
      • G ( r , c ) G(r, c) G(r,c) 表示 GTboxes
    • 计算得到的范围为: ( 0 , 1 ) (0, 1) (0,1)
    • 数值越小,表示网络的分割效果越好

3. DUTS

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

  • 普通版本的 U2-Net(176.3MB)
  • 较小版本的U2-Net†(4.7MB)

博文参考
视频资料

相关文章:

  • 创新战略|工业企业如何应对颠覆式变革带来的挑战?
  • HashMap不安全后果及ConcurrentHashMap线程安全原理
  • 22_access 阶段
  • 如何位图转换矢量图或者数字油画底稿
  • 阿里巴巴面试题- - -多线程并发篇(三十八)
  • python java php一起考研资料文件下载系统 微信小程序
  • 超好理解的子网和超网
  • Linux常用命令练习
  • Codeforces Round #813 (Div. 2) A. Wonderful Permutation
  • Windows Terminal远程连接阿里云
  • 了解MQ和安装使用RabbitMQ
  • Ubuntu 22.04 LTS 入门安装配置优化、开发软件安装一条龙
  • 软件工程综合实践课程第三周个人作业(工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进)
  • 关于系统架构
  • c语言分层理解(动态通讯录的实现)
  • CSS相对定位
  • HashMap ConcurrentHashMap
  • httpie使用详解
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JavaScript DOM 10 - 滚动
  • javascript 哈希表
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Just for fun——迅速写完快速排序
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PAT A1050
  • Redis 中的布隆过滤器
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 飞驰在Mesos的涡轮引擎上
  • 高性能JavaScript阅读简记(三)
  • 基于遗传算法的优化问题求解
  • 计算机常识 - 收藏集 - 掘金
  • 爬虫模拟登陆 SegmentFault
  • 数组大概知多少
  • 算法之不定期更新(一)(2018-04-12)
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​secrets --- 生成管理密码的安全随机数​
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​什么是bug?bug的源头在哪里?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #{}和${}的区别?
  • #NOIP 2014#Day.2 T3 解方程
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (离散数学)逻辑连接词
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (译)2019年前端性能优化清单 — 下篇
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core 6 集成 elasticsearch 并 使用分词器