当UNet遇见ResNet会发生什么?

2023-11-16

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

1.前言

这篇文章主要以几篇经典的分割论文为切入点,浅谈一下当Unet遇见ResNet会发生什么?

2. UNet

首先回顾一下UNet,UNet的结构如下图所示:

764a044a03b37efea8f28a68ee26a3db.png
UNet 网络结构

「从UNet的网络结构我们会发现两个最主要的特点,一个是它的U型结构,一个是它的跳层连接。」 其中UNet的编码器一共有4次下采样来获取高级语义信息,解码器自然对应了4次上采样来进行分辨率恢复,为了减少下采样过程带来的空间信息损失跳层连接被引入了,通过Concat的方式使得上采样恢复的特征图中包含更多low-level的语义信息,使得结果的精细程度更好。

使用转置卷积的UNet参数量是31M左右,如果对其channel进行缩小例如缩小两倍,参数量可以变为7.75M左右,缩小4倍变成2M左右,可以说是非常的轻量级了。UNet不仅仅在医学分割中被大量应用,也在工业界发挥了很大的作用

3. ResNet

 

再来简单回顾一下ResNet。

在ResNet之前普遍认为网络的深度越深,模型的表现就更好,因为CNN越深越能提取到更高级的语义信息。但论文的实验发现,通过和浅层网络一样的方式来构建深层网络,结果性能反而下降了,这是因为网络越深越难训练。实验如Figure1所示:

1e235a5be84666971e6a7f9de2a934ae.png
Figure1

因此网络的深度不能随意的加深,前面介绍的GoogLeNet和VGG16/19均在加深深度这件事情上动用了大量的技巧。那么到底什么是残差呢?

首先,浅层网络都是希望学习到一个恒等映射函数,其中指的是用这个特征/函数来代表原始的的信息,但随着网络的加深这个恒等映射变得越来越难以拟合。即是用BN这种技巧存在,在深度足够大的时候网络也会难以学习这个恒等映射关系。因此ResNet提出将网络设计为,然后就可以转换为学习一个残差函数,只要残差为,就构成了一个恒等映射,并且相对于拟合恒等映射关系,拟合残差更容易。残差结构具体如Figure2所示,identity mapping表示的就是恒等映射,即是将浅层网络的特征复制来和残差构成新的特征。其中恒等映射后面也被叫作跳跃连接(skip connrection)或者短路连接(shortcut connection),这一说法一直保持到今天。同时我们可以看到一种极端的情况是残差映射为,残差模块就只剩下,相当于什么也不做,这至少不会带来精度损失,这个结构还是比较精巧的。

472c8946d4792cb5b985e57385d4a07d.png
残差模块

为什么残差结构是有效的呢?这是因为引入残差之后的特征映射对输出的变化更加敏感,也即是说梯度更加,更容易训练。从图2可以推导一下残差结构的梯度计算公式,假设从浅层到深层的学习特征,其中就是带权重的卷积之后的结果,我们可以反向求出损失函数对的提取

402 Payment Required

,其中 代表损失函数在最高层的梯度,小括号中的 表示残差连接可以无损的传播梯度,而另外一项残差的梯度则需要经过带有可学习参数的卷积层。另外残差梯度不会巧合到全部为 ,而且就算它非常小也还有 这一项存在,因此梯度会稳定的回传,不用担心梯度消失。同时因为残差一般会比较小,残差学习需要学习的内容少,学习难度也变小,学习就更容易。

4. 当UNet初见ResNet

我们知道UNet做下采样的BackNone是普通的CBR模块(Conv+BN+ReLU)堆叠的,一个自然的想法就是如果将学习更强的ResNet当作UNet的BackBone效果是否会更好呢?

CVPR 2017的LinkNet给出了答案。LinkNet的网络结构如下所示:

c5f5a105cf77388545f7e6872d9f0e30.png其中,conv 代表卷积,full-conv 代表全卷积,/2代表下采样的步长是2*2代表上采样的因子是2。在卷积层之后添加 BN,后加 ReLU。左半部分表示编码,右半部分表示解码。编码块基于ResNet18。编解码模块如下所示。

18b74ee1651eab3d99bb97ca8b446e38.png
编码模块
2a190fd29306dec487b42d40ac13aced.png
解码模块

这项工作的主要贡献是在原始的UNet中引入了残差连接,并直接将编码器与解码器连接来提高准确率,一定程度上减少了处理时间。通过这种方式,保留编码部分中不同层丢失的信息,同时,在进行重新学习丢失的信息时并未增加额外的参数与操作。在Cittycapes和CamVID数据集上的实验结果证明残差连接的引入(LinkNet without bypass)使得mIOU获得了提升。

55a0029b2c357e2d60bfa9fd2ae2ab4d.png
在Cityscapes上的实验结果
089c35e71b31a032c2c4c12fa777f293.png
在CamVid上的实验结果

这篇论文的主要提升技巧在于它的bypass技巧,但我们也可以看到ResNet也进一步对网络的效果带来了改善,所以至少说明ResNet是可以当成BackBone应用在UNet的,这样结果至少不会差。

5. 当UNet再见ResNet

 

CVPR 2018北邮在DeepGlobe Road Extraction Challenge全球卫星图像道路提取)比赛中勇夺冠军,他们提出了一个新网络名为D-LinkNet,论文链接以及代码/PPT见附录。

8fb635e3c5d4aaa598612ab45269b468.png
D-LinkNet 网络结构

D-LinkNet使用LinkNet作为基本骨架,使用在ImageNet数据集上与训练好的ResNet作为网络的encoder,并在中心部分添加带有shortcut的dilated-convolution层,使得整个网络识别能力更强、接收域更大、融合多尺度信息。网络中心部分展开示意图如下:

fb544430b77f8c12eac25950ccdc02ff.png
网络中心部分展开示意图

这篇论文和ResNet的关系实际上和LinkNet表达出的意思一致,也即是将其应用在BackBone部分增强特征表达能力。

6. 最后,ResNet+UNet被玩出了花


这篇文章其实是比上两篇文章早的,但我想放到最后这个位置来谈一下,这篇文章是DLMIA 2016的文章,名为:「The Importance of Skip Connections in Biomedical Image Segmentation」 。这一网络结构如下图所示,对图的解释来自akkaze-郑安坤的文章(https://zhuanlan.zhihu.com/p/100440276):

44c94e41306f8d4108ffc4f4f58744fa.png
长短跳过网络,对各个块(Block)的解释如下

(a) 整个网络结构

使用下采样(蓝色):这是一条收缩路径。

上采样(黄色):这是一条不断扩大的路径。

这是一个类似于U-Net的FCN架构。

并且从收缩路径到扩展路径之间存在很长的跳过连接。

(b)瓶颈区

使用,因此称为瓶颈。它已在ResNet中使用。

在每次转化前都使用,这是激活前ResNet的想法。

(c)基本块

两个卷积,它也用在ResNet中。

(d)简单块

个卷积

(b)-(d)

所有块均包含短跳转连接。

下面的Table1表示整个网络的维度变化:

611d4ac584ecc2856cf71f39f35e1407.png
整个网络的维度变化

接下来是这节要分析的重点了,也就是长短跳过网络中两种不同类型的跳跃连接究竟对UNet的结果参生了什么影响?

这里训练集以张电子显微镜(EM)图像为数据集,尺寸为。张图像用于训练,其余张图像用于验证。而测试集是另外张图像。

下面的Figure3为我们展示了长短跳过连接,以及只有长跳过连接,只有短跳过连接对准确率和损失带来的影响:

1506bed3ee1e59471caf001b51446a65.png
损失/准确性:(a)长短跳过连接,(b)只有长跳过连接,(c)只有短跳过连接
009800e3c9fdc05224bac182e551176c.png
同时使用长跳和短跳连接可以获得最小的损失和最高的精度。

下面来看一可视化权重分析:

d4388cc0638032388de29b235042c02a.png
(a)长跳和短跳连接,(b)仅长跳连接具有9个重复的简单块,(c)仅长跳连接具有3个重复的简单块,(d)仅长跳连接具有7个重复的简单块没有BN。蓝色:权值小。红色:权值较大。

(a)长跳和短跳连接

当长跳转和短跳转连接都存在时,参数更新看起来分布良好。

(b)仅长跳连接具有9个重复的简单块

删除短跳过连接后,网络的较深部分几乎没有更新。

当保留长跳连接时,至少可以更新模型的浅层部分。

(c)仅长跳连接具有3个重复的简单块

当模型足够浅时,所有层都可以很好地更新。

(d)仅长跳连接具有7个重复的简单块,没有BN。

论文给出的结论如下:

  • 没有批量归一化的网络向网络中心部分参数更新会不断减少。

  • 根据权值分析的结论,由于梯度消失的问题(只有短跳连接可以缓解),无法更有效地更新靠近模型中心的层。

所以这一节介绍的是将ResNet和UNet结合之后对跳跃连接的位置做文章,通过这种长跳短跳连接可以使得网络获得更好的性能。

7. 总结

这篇文章只是对我个人阅读ResNet相关的类UNet分割结构的一点小总结,希望能起到一点作用科普和给你带来一点点启发。

 
 

好消息!

小白学视觉知识星球

开始面向外开放啦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当UNet遇见ResNet会发生什么? 的相关文章

随机推荐

  • Openwrt下ipk包的安装、卸载与更新

    一 环境说明 Openwrt version 17 01 4 Linux version 4 4 92 二 安装ipk 将编译好的 ipk传到开发板上 使用命令 opkg install xxxxx ipk 安装成功的界面如下 再进入 li
  • 【软件工程期末复习内容】

    前言 时不可以苟遇 道不可以虚行 一 软件工程的概念 软件是计算机系统运行的 指令 数据 和 相关文档 的集合 即软件等于程序 数据 加上文档 程序 是事先按照预定功能性能等要求设计和编写的指令序列 数据 是使程序正常处理信息的数据结构及信
  • 远程计算机内部错误,Win10系统远程桌面连接出现内部错误怎么办?

    Win10系统远程桌面连接出现内部错误该怎么办 大家在使用Win10系统的时候总是会出现这样那样的问题 Win 10 远程桌面连接偶尔提示 出现了内部错误 刚刚明明还好好的 有时连接久了会突然断开 提示出现了内部错误 我们遇到这个问题该怎么
  • 生态系统过程模型

    生态系统过程模型 根据生态系统的生理生态学特性 结合影响生态系统过程的观测指标 提出的能够反映生态系统过程的机制模型 统计模型 stochasticmodel statisticmodel probabilitymodel 指以概率论为基础
  • qt 动态库的创建和使用教程(step by step)

    一般大型项目中 会将实现特定功能的函数或类 封装成链接库 供应用程序代码调用 下面我将一步步教你如何在qt 中创建动态库 并使用它 目录 创建多子目录项目 创建动态链接库 编辑链接库内容 创建应用工程并连接动态链接库 创建多子目录项目 首先
  • React基础入门

    系统学习React 一 基础知识 邂逅React开发 React系列一 核心JSX语法一 React系列二 核心JSX语法二 React系列三 阶段案例练习 React系列四 React脚手架 React系列五 组件化开发 一 React系
  • mysql8.0.30用户与权限管理

    文章目录 用户管理 登录mysql服务器 创建用户 修改用户 删除用户 查看用户 修改用户密码 权限管理 查看权限 授予权限的原则 授予权限 查看权限 收回权限 查看user 信息表结构和信息 db表 其他表信息 角色管理 创建角色 给角色
  • Python之NumPy(axis=0/1/2...)的透彻理解

    前言 在numpy的使用中 对axis的使用总是会产生疑问 如np sum函数 在多维情况下 axis不同的取值应该做怎样的运算呢 返回的是什么形状的数组呢 在网上查了很多资料 总是似懂非懂 查阅了官方文件 以及多次试验后 我总结出一种能深
  • [ZYNQ随笔] uboot移植中bitstream比特流加载问题:zynq_validate_bitstream: Bitstream is not validated yet

    问题介绍 由于项目设计需要 需要频繁的更换比特流文件 之前使用petalinux生成的boot bin每次都需要合并比特流 比较麻烦 遂换了一个uboot版本 米联客默认的u boot 将bitstream放到了独立于boot bin的文件
  • 经验教训

    最近有一个项目基于STM32F446ZE MCU使用FREERTOS操作系统开发 之前有部分功能代码是基于MCU裸机开发的 移植过程种发现程序老出错 DEBUG模式条件发现程序停在了HardFault Handler中断服务程序中 查看对应
  • 对角矩阵np.diag()

    np diag 是 NumPy 库中的一个函数 用于创建一个对角矩阵或从一个矩阵中提取对角线元素 具体来说 np diag 可以接受以下两种参数 一个一维数组 将其转换为一个对角矩阵 数组中的元素将成为对角线上的元素 例如 np diag
  • STM3232 GPIO的配置寄存器(为了移植IIC)

    参考 https blog csdn net qq 45539458 article details 129481019 https blog csdn net weixin 43314829 article details 1255734
  • 公共IP地址、私有IP地址、NAT技术

    1 公共IP地址和私有IP地址的区别 在 Internet 上存在数量有限的 IP 地址 这些能在Intenet上使用的地址被称为公共IP地址 且IP地址必须是唯一的 但是私有IP地址就是例外 这些IP地址供LAN网络中使用 同时它们可以在
  • Win7连接共享打印机时,报 0x00000bcb 错误

    打印服务器添了台 DocuCentre VI C3371 富士施乐3371打印机 问题描述 Win8 1 Win10等系统均能正常连接 部分 Win7 客户端连接时 报0x00000bcb错误 解决方法 后来桌面小哥找到了解决方法 Win7
  • 带头节点链表的操作使用讲解

    带头结点链表 链表一共具有创建 增添 删除 查找四种基本操作 接下来会对这四种操作进行挨个讲解 在此之前首先提供链表结点 初始化链表 删除链表的代码 链表结点 每一个节点都包含有一个数据以及指向下一结点的指针 以及定义一个链表的头指针 ty
  • 【Java八股文总结】之面试题(二)

    文章目录 面试题 一 几种锁的区别 1 synchronized 和ReentrantLock的区别 二 Java高级 1 反射 1 反射的应用场合 2 Java反射API 3 反射使用步骤 获取Class 对象 调用对象方法 4 获取Cl
  • shell脚本学习笔记2

    小试牛刀 文章目录 小试牛刀 1 7 别名 1 8 获取并设置日期及延时 1 9 调试脚本 1 10 函数和参数 1 11 将一个命令的输出发送给另一个命令 1 11 1 利用子 shell 生成一个独立的进程 1 11 2 通过引用子sh
  • 轻型数据库SQLite与Android实例

    SQLite 是一款轻型的数据库 是遵守ACID的关联式数据库管理系统 它的设计目标是嵌入式的 而且目前已经在很多嵌入式产品中使用了它 它占用资源非常的低 在嵌入式设备中 可能只需要几百K的内存就够了 它能够支持Windows Linux
  • 双口RAM及Vivado RAM IP核的使用

    目录 1 双口RAM概述 2 Vivado 双口RAM IP核 2 1 Block Memory Generator概述 2 2 真双口RAM的设置 2 2 1 Basic设置 2 2 2 Port设置 3 双口RAM例程 4 仿真 4 后
  • 当UNet遇见ResNet会发生什么?

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 1 前言 这篇文章主要以几篇经典的分割论文为切入点 浅谈一下当Unet遇见ResNet会发生什么 2 UNet 首先回顾一下UNet UNet的结构如下图所示 UNet
Powered by Hwhale