UNet
前言
一般的深度网络都认为大连各地数据集是成功关键 但是UNet可以从更少的数据中进行端对端的训练,主要是对数据进行各种增强结构
UNet修改扩展了FCN结构,主要思想是(对着结构图看):
1.提高输出的分辨率:通过连续的层补充下采样层(contracting network),再用上采样取代池化层
2.提高定位能力:将从下采样路径提取的高分辨率特征与上采样输出结合
3.随后连续的卷积层可以在这些信息的基础上学习集成更精确的输出
注意灰色箭头部分,还有白色块区域
灰色箭头表示对当前特征进行中心裁剪后,拼接过去
白色块表示将灰色箭头另一边的蓝色块进行裁剪后的特征
(结构中没采用BN层,因为发表的时候是2015年,BN还没火起来)
最后得到的图的大小和原图大小不一样,是因为原UNet的卷积中没有padding,每次通过卷积层特征图的高宽都会减小
注意
大多数实现的方法都会加上padding和BN层,这样做以后就不用考虑论文中作者所提到的镜像的方法,也就是下图的结构
网络中比较重要的修改:
1.在上采样部分,我们也有大量的特征通道,这允许网络将上下文信息传播到更高分辨率的层
2.提出了一种加权损失的方法,其中接触单元之间分离的背景标签在损失函数中获得较大的权重。
方法
加权损失
作者提出,面对分割细胞时,细胞与细胞之间是较难分割的,因此让细胞之间的像素获得更高的权重值,如最右侧热力图所示,但是论文中没有提及这个方法能够提高多少精度
训练参数
1.batch_size=1
2.使用Caffe的随机梯度下降,momentum=0.99(使得大量先前的训练样本在当前的优化步骤中更新)
该网络初始权重选取的方法:
通过从标准偏差为±2/n的高斯分布中提取初始权值来实现,其中n表示一个神经元的传入节点数
数据增强
图像增强的方法:
在粗糙的3×3网格上使用随机位移向量生成光滑的变形图像。 位移是从具有10像素标准偏差的高斯分布中采样的。 然后使用双三次插值计算每个像素的位移。下采样路径最后的dropout进一步暗示数据增强
总结
UNet主要是能够在只有少量数据集的情况下对数据集进行训练并取得不错的成效
UNet发行的时候BN还没有流行,并且做卷积时没有padding(导致卷积前后大小不一),在大部分的实现代码中,都加入了BN层,并且也使用了padding
代码中使用了loss中的weight参数,来减轻样本不平衡问题
U2Net
前言
U2Net是用来做的SOD(显著目标检测),SOD任务就是把图片中最显著的目标分割出来。
该网络的优点:
1.添加了U残差块,能够捕获更多的上特征信息
2.U残差块的池化使得网络结构更深,而不会使得计算负担增加太多
问题&解决
关于网络的问题
1.可以创建一个属于SOD的模型吗?能够从头开始训练并且效果比那些与训练好的主干结构好?
2.是否能使网络既有深度又有高分辨率,同时占用的内存和计算量不大?
关于SOD的问题
1.太复杂。
因为网络中经常使用一些额外的特征汇合模块(类似ASPP,金字塔那样的结构)。这样就能从主干中提取多层的显著特征
2.现有结构通常会牺牲特征的高分辨率来达到更深的网络结构。
为了运行的起深度模型,会将特征映射缩小到较低的分辨率。但是高分辨率在分割中也是非常重要的。
解决
1.U2Net是一个两级嵌套的U结构,是为SOD设计的,不需要使用任何预训练的图像分类backbone,可以从头开始训练
2.能使网络既有深度又有高分辨率,同时占用的内存和计算量不大,这是因为U2Net的底层设计了个残差块RSU,能够在不降低分辨率的前提下取出层内的多尺度特征。顶层有一个类似于UNet的结构,每层都有RSU填充
方法
RSU
主要由三个部分组成:
1.输入卷积层,将映射输入特征图转化为通道数为Cout的中间图,这是一个用于局部特征提取的普通卷积层。
- 一种高度为L的类U网对称编解码器结构,以中间特征映射f1(x)为输入,学习提取和编码多尺度上下文信息u(F1(x))。
3.一种融合局部特征和多尺度特征的残差连接方法:F1(x)+U(F1(x))。
RSU与普通卷积不同之处
1.RSU用UNet结构代替了简单的单流卷积,用权重层变换的局部特征代替了原始特征(也就是把普通卷积替换为了U-block),这种设计上的改变使网络能够直接从每个残差块中提取多个尺度的特征
2.UNet结构开销很小,因为大多数操作都应用在下采样的特征映射上
结构
在这之前,有人已经研究出U×N-Net模式,其中N是重复U-网模块的数目。这些方法通常将U网结构按顺序堆叠,建立级联模型, 而且计算量和内存开销也被放大了n。
但是本文提出的是指数形式的U^n-Net,这里的指数表示法指的是嵌套U型结构而不是级联堆叠。
U2Net大致由三个部分组成:
1.六层编码器
2.五层编码器
3.显著图融合模块,该模块与译码器级和最后一个编码器级相连
每一个block中有一个小的UNet,每一个block中对应的结构如下,RSU-7(En1-4,Dn1-4)
详细化后如下:
注意En5,En6,Dn5的结构是RSU4F,与上面的不同
实验结果
消融实验
修正了U2-NET的外部编解码器结构,并将其级替换为其他流行的块,包括普通卷积块(PLN)、类残差块(RSE)、类密集块(DSE)、类初始块(INC)和金字塔池模块(PPM),而不是RSU块。
们可以看到,基线U-网的性能是最差的,而PLN U-网、RES U-网、DES U-网、INC U-网和PPM U-网的性能要好于基线U-网。 因为它们要么更深,要么具有提取多尺度特征的能力。 然而,它们的性能仍然不如我们的全尺寸U2-net和小版本U2-net
堆叠和联级,联级的U2Net明显胜过堆叠的CUNet和Stacked-H
UNet采用全卷积神经网络。
(2)左边网络为特征提取网络:使用conv和pooling
(3)右边网络为特征融合网络:使用上采样产生的特征图与左侧特征图进行concatenate操作。(pooling层会丢失图像信息和降低图像分辨率且是永久性的,对于图像分割任务有一些影响,对图像分类任务的影响不大,为什么要做上采样呢?上采样可以让包含高级抽象特征低分辨率图片在保留高级抽象特征的同时变为高分辨率,然后再与左边低级表层特征高分辨率图片进行concatenate操作)
(4)最后再经过两次卷积操作,生成特征图,再用两个卷积核大小为1*1的卷积做分类得到最后的两张heatmap,例如第一张表示第一类的得分,第二张表示第二类的得分heatmap,然后作为softmax函数的输入,算出概率比较大的softmax,然后再进行loss,反向传播计算。
要想网络获得好的效果,跳层连接基本必不可少。UNet 中的跳层连接通过拼接将底层的位置信息与深层的语义信息相融合