文章目录
- u-net的引入
- 1.主要思想
- 2.网络架构
- 论文补充
- 1.U-Net数据输入
- 2.卷积核中的数值如何确定?
- 3.如何解决U-net训练样本少的问题?
- 4.U-net可以如何改进?
u-net的引入
Unet 发表于 2015 年,属于 FCN 的一种变体。Unet 的初衷是为了解决生物医学图像的问题,由于效果确实很好后来也被广泛的应用在语义分割的各个方向,如卫星图像分割,工业瑕疵检测等。
1.主要思想
Unet 跟 FCN 都是 Encoder-Decoder 结构,结构简单但很有效。
1.Encoder 负责特征提取,可以将各种特征提取网络放在这个位置。
2.Decoder 恢复原始分辨率,该过程比较关键的步骤就是 upsampling 与 skip-connection。
从图中可以看出最后输出的大小与原图大小不相等。在官方最新的代码中,卷积不会导致尺寸的变化,所以最后能恢复最后的大小。
2.网络架构
Unet主要可分为三部分来看分别为左(特征提取),中(拼接),右(上采样)
1.特征提取部分:它是一个收缩网络,通过四个下采样,使图片尺寸减小,在这不断下采样的过程中,特征提取到的是浅层信息。具体过程是,输入图片然后经过两个卷积核(3x3后面紧跟着一个Relu)以论文原图为例:输入572x572,经过两个卷积核(大小为3x3)大小从572-570-568,然后经过一个Maxpool(2x2)图片尺寸变为284这即为一个完整的下采样,接下来三个也是如此。在下采样的过程中,通道数翻倍,例如图上的从64-128。
2.copy and crop拼接:在UNet有四个拼接操作。有人也叫Skip connect,目的是融合特征信息,使深层和浅层的信息融合起来,在拼接的时候要注意,不仅图片大小要一致,特征的维度(channels)也要一样,才可以拼接。
3.上采样部分up-conv,也叫扩张网络,图片尺寸变大,提取的是深层信息,使用了四个上采样,在上采样的过程中,图片的通道数是减半的,与左部分的特征提取通道数的变化相反。在上采样的过程融合了左边的浅层的信息即拼接了左边的特征。
Upsampling 上采样常用的方式有两种:1.FCN 中介绍的反卷积;2. 插值。
1.反卷积 ①卷积后,结果图像比原图小:称之为valid卷积
②卷积后,结果图像与原图大小相同:称之为same卷积
③卷积后,结果图像比原图大:称之为full卷积
其中,full卷积其实就是反卷积的过程。到这里应该可以意识到,反卷积实际上也是一种特殊的卷积方式,它可以通过full卷积将原图扩大,增大原图的分辨率,所以对图像进行反卷积也称为对图像进行“上采样”。因此,也可以很直接地理解到,图像的卷积和反卷积并不是一个简单的变换、还原过程,也就是先把图片进行卷积,再用同样的卷积核进行反卷积,是不能还原成原图的,因为反卷积后只是单纯地对图片进行扩大处理,并不能还原成原图像。
2.双线性插值的综合表现较好也较为常见 。双线性插值的计算过程没有需要学习的参数,实际就是套公式。
论文补充
1.U-Net数据输入
由于在不断valid卷积过程中,会使得图片越来越小,为了避免数据丢失,在图像输入前都需要进行镜像扩大(在现有代码中已不存),如图所示:
可以看到图像在输入前,四个边都进行了镜像扩大操作,以保证在通过一系列的valid卷积操作之后的结果能够与原图大小相一致。
由于有些计算机的内存较小,无法直接对整张图片进行处理(医学图像通常都很大),会采取把大图进行分块输入的训练方式,最后将结果一块块拼起来。
为了避免在拼接过程中边缘部分出现不连接等问题,在训练前,每一小块都会选择镜像扩大而不是直接补0扩大,以保留更多边缘附近的信息。
使用overlap的方式预测边界
2.卷积核中的数值如何确定?
权值的确定一般都是经过“初始化→根据训练结果逐步调整→训练精度达到目标后停止调整→确定权值”这样一个过程,因此U-net卷积核中数值的确定过程也是类似的,一开始也是先用随机数(服从高斯分布)进行初始化,后面则根据前面提到的损失函数逐步对数值进行调整,当训练精度符合要求后停止,即能确定每个卷积核中的数值(即权值)。
而调整卷积核数值的过程,实际上就是U-net的训练过程,当卷积核结束训练确定数值后,则U-net训练完成。
3.如何解决U-net训练样本少的问题?
医学影像数据存在一个共同的特点,就是样本量一般较少,当训练样本过少时,容易使得训练效果不佳。解决该问题的方法是数据增强,数据增强可以在训练样本较少时,也能够让神经网络学习到更多的数据特征,不同的训练任务,数据增强的方法也不尽相同。由于U-net文章中的任务是分割Hela细胞,作者选择了弹性变换
的方式进行数据增强,如图所示:
弹性变换其实就是把原图进行不同的弹性扭曲,形成新的图片,扩大样本量,由于这种弹性变化在细胞中是十分常见的,人为增加这种数据量能够让U-net学习到这种形变的不变性,当遇到新的图像时候可以进行更好地分割。
4.U-net可以如何改进?
①可以对U-net中的损失函数进行改进。损失函数有很多种,U-net原文中采用的是有权重的交叉熵损失函数,主要为了更好地分离粘连在一起的同类细胞设计的,如果分割的任务不同,也可以往损失函数中添加权重或进行其他的改进,以增强分割的准确性和鲁棒性。
②可以对U-net结构进行改进,如采用U-net++网络,如图所示:
U-net++是在深度为4层的U-net基础上,把1~3层的U-net也全部组合到一起(图中左上角最小的三角形为深度为1层的U-net,第二个三角形为深度为2层的U-net,以此类推,把4个深度的U-net组合在一起),这个U-net++能够把每个深度的训练效果相互融合相互补充,可以对图像进行更为精确的分割。
③u2-net看下一篇博客