众所周知,在语义分割领域,最经典的网络框架之一就是UNet,简洁的结构,出众的性能,使其不仅在当时取得了骄人的成绩,更对后来的语义分割领域产生了极其深远的影响(尤其是医学图像)。我们先来简单地看看UNet的基本情况。
1.UNet网络简介
这张图就是网上最常见的那张图,也是原文中的网络结构图。
- 主体部分:显示输入一张
572*572
的图片,然后通过两个步长为1
的3*3
卷积(没有padding),得到了568*568
分辨率的特征图,然后再通过2*2
的最大池化下采样,以此类推,总共经过了4
次的下采样。采样之后通过两个3*3
的卷积,然后再上采样,上采样的方式采用的是转置卷积(或成为反卷积,其实我觉得反卷积这样的表达容易让人误解,毕竟反卷积并不是严格意义上的反向卷积操作)。经过相同次数的上采样。然后再通过两次卷积,一个1*1
的卷积操作调节通道数,输出。 - 短连接部分(灰色箭头部分):同一个stage的第二次卷积操作输出,然后经过裁剪,再与右侧特征图concat起来。等待卷积核的采样。
2.UNet的优点及其思考
-
数据增强(数据扩张等称呼皆可),医学图像的一大特点是数据量匮乏,而面对深度学习这样的任务,显然训练样本是不够的,这个时候就需要数据增强,作者不仅仅采用了常见的平移和旋转变换来实现这样的需求,更是采用了随机弹性变形进一步扩充了训练的数据。随机弹性形变如下图所示:
随机弹性形变并不是在所有的任务中都适用的,这种弹性形变可以很好地模拟生物细胞的动态变化。所以大大扩充了训练数据。 -
数据数理方法,本文中并没有将整个医学影像全部放入神经网络中进行处理,而是一部分一部分地进行处理,这样大大增加了网络处理的效率,也减轻了网络训练和推理的负担。而输入图片的padding操作也是相当讲究,直接采用的镜面翻转的方式,这样做的好处,是既没有引入“信号噪声”,又保证了网络对训练图片尺寸的需求。其他论文中的实现方式,要么使用整张图片的平均像素进行填充,要么使用某个数值进行填充,仔细想想,都不如这种方式好。 如下图所示:
-
网络结构方面,并没有在特征图上进行padding操作,而是在输入图像上进行了padding,保证了信息的“纯净度”。还有个值得探讨的问题,下采样的时候为什么是
2*2
的最大池化,而没有采用步长2*2
的卷积,个人以为,卷积的步长就代表了采样的精度,因为语义分割任务是像素级的任务,所以在采样的同时,需要保留尽可能多的空间结构,而2*2
的最大池化也不会对图像的空间结构做尽可能多的保留。上采样的方法中,常见的有转置卷积和双线性差值,为什么作者采用了前者,个人以为,这样做在上采样的过程中也会学到参数,网络才会取得更好的效果,本身网络的参数量横向比较已经算是非常非常少了。 -
损失函数的优化(改进),对于医学影像来说,即使采用了数据增强,训练数据相对来说还是比较吃紧的,于是作者就采用了加权损失来让网络更加倾向于学习边缘区域的像素,因为对该任务来说,细胞的边缘是非常重要的。所以作者对不同位置采用了不同的权重,公式如下:
这个公式其实并不好理解,其中的第一项是平衡类频率的权重,因为背景在全图中的占比较小,所以为了平衡,就这个权重就比较大,文章中没有给具体数值,大概可以这样计算,比方说每张图片总共有100个像素,前景有71个像素,背景有29个像素,那么前景区域的像素权重就可以按照29计算,背景区域按照71计算(大概是这样的原理)。
第二项中用采用了距离之和的方法,d1和d2是理解公式的关键,也非常微妙。
我直接在论文原图中进行了标注,x1和x2分别是前景和背景的两个点。对于x1而言,d1就是粉色箭头,d2就是蓝色箭头,对于x2而言,d1就是黄色箭头,d2就是绿色箭头。这样就可以看到,x2的两个距离之和明显要小于x1,所以在损失函数中的占比较大(仅个人想法,不同意见的可以评论区留言)。
毕竟作者本人没有看过论文源码,所以在一些深入的细节方面还是有所疏漏,有更好的想法大家可以一起讨论。谢谢。文章来源:https://www.toymoban.com/news/detail-448685.html
------------------------------------------------------------------------------------------END-------------------------------------------------------------文章来源地址https://www.toymoban.com/news/detail-448685.html
到了这里,关于UNet介绍及其相关思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!