深度学习图像分割——U-net网络

写在前面:html

一直没有整理的习惯,致使不少东西会有所遗忘,遗漏。借着这个机会,养成一个习惯。算法

对现有东西作一个整理、记录,对新事物去探索、分享。数组

所以博客主要内容为我作过的,所学的整理记录以及新的算法、网络框架的学习。基本上是深度学习、机器学习方面的东西。网络

第一篇首先是深度学习图像分割——U-net网络方面的内容。后续将会尽量系统的学习深度学习而且记录。框架

更新频率为每周大于等于一篇。机器学习


 

 

深度学习的图像分割来源于分类,分割即为对像素所属区域的一个分类。函数

有别于机器学习中使用聚类进行的图像分割,深度学习中的图像分割是个有监督问题,须要有分割金标准(ground truth)做为训练的标签。post

在图像分割的过程当中,网络的损失函数通常使用Dice系数做为损失函数,Dice系数简单的讲就是你的分割结果与分割金标准之间像素重合个数与总面积的比值。学习

【https://blog.csdn.net/liangdong2014/article/details/80573234,医学图像分割中经常使用的度量指标】.net

 

U-net参考文献:

U-net: Convolutional networks for biomedical image segmentation.

https://arxiv.org/pdf/1505.04597.pdf

                    U-net网络结构

 

U-net网络是一个基于CNN的图像分割网络,主要用于医学图像分割上,网络最初提出时是用于细胞壁的分割,以后在肺结节检测以及眼底视网膜上的血管提取等方面都有着出色的表现。

最初的U-net网络结构如上图所示,主要由卷积层、最大池化层(下采样)、反卷积层(上采样)以及ReLU非线性激活函数组成。整个网络的过程具体以下:

最大池化层,下采样过程:

假设最初输入的图像大小为:572X572的灰度图,通过2次3X3x64(64个卷积核,获得64个特征图)的卷积核进行卷积操做变为568X568x64大小,

而后进行2x2的最大池化操做变为248x248x64。(注:3X3卷积以后跟随有ReLU非线性变换为了描述方便因此没写出来)。

按照上述过程重复进行4次,即进行 (3x3卷积+2x2池化) x 4次,在每进行一次池化以后的第一个3X3卷积操做,3X3卷积核数量成倍增长。

达到最底层时即第4次最大池化以后,图像变为32x32x512大小,而后再进行2次的3x3x1024的卷积操做,最后变化为28x28x1024的大小。

反卷积层,上采样过程:

此时图像的大小为28x28x1024,首先进行2X2的反卷积操做使得图像变化为56X56X512大小,而后对对应最大池化层以前的图像的复制和剪裁(copy and crop),

与反卷积获得的图像拼接起来获得56x56x1024大小的图像,而后再进行3x3x512的卷积操做。

按照上述过程重复进行4次,即进行(2x2反卷积+3x3卷积)x4次,在每进行一次拼接以后的第一个3x3卷积操做,3X3卷积核数量成倍减小。

达到最上层时即第4次反卷积以后,图像变为392X392X64的大小,进行复制和剪裁而后拼接获得392X392X128的大小,而后再进行两次3X3X64的卷积操做。

获得388X388X64大小的图像,最后再进行一次1X1X2的卷积操做。

 

而后获得的结果大概是这样的(下图),须要经过黄色区域的分割结果去推断蓝色区域的分割结果,固然在实际应用中基本上都是选择保持图像大小不变的进行卷积(卷积后周围用0填充)。

【关于卷积、反卷积相关的内容能够参考:https://blog.csdn.net/qq_38906523/article/details/80520950】

讲完了具体怎么作的,再来说讲U-net的优缺点,能够看到网络结构中没有涉及到任何的全链接层,同时在上采样过程当中用到了下采样的结果,

使得在深层的卷积中可以有浅层的简单特征,使得卷积的输入更加丰富,天然获得的结果也更加可以反映图像的原始信息。

(CNN卷积网络,在浅层的卷积获得的是图像的简单特征,深层的卷积获得的是反映该图像的复杂特征)

像上面说的那样,U-net网络的结构主要是对RPN(Region Proposal Network)结构的一个发展,它在靠近输入的较浅的层提取的是相对小的尺度上的信息(简单特征),

靠近输出的较深的层提取的是相对大的尺度上的信息(复杂特征),经过加入shortcut(直接将原始信息不进行任何操做与后续的结果合并拼接)整合多尺度信息进行判断。

可是U-net网络结构仅在单一尺度上进行预测,不能很好处理尺寸变化的问题。

【天池医疗第一名队伍:https://tianchi.aliyun.com/forum/new_articleDetail.html?spm=5176.8366600.0.0.6021311f0WILtQ&raceId=231601&postsId=2947】

 

所以对于该网络的改进,就我而言,尝试过:一、在最后一层(最后一次下采样以后,第一次上采样以前)加入一个全链接层,目的是增长一个交叉熵损失函数,为了加入额外的信息(好比某张图是是否为某一类的东西)

二、对于每一次的上采样都进行一次输出(预测),将获得的结果进行一个融合(相似于FPN网络(feature pyramid networks),固然这个网络里有其余的东西)

三、加入BN(Batch Normalization)层

改进的结果天然是对于特定要处理的问题有一些帮助。

 

最后就是相应的代码,因为U-net网络结构较为简单,因此通常使用Keras去写的会比较多,我也是用Keras写的。后续整理了以后将代码的连接贴上。

相关文章
相关标签/搜索