UNet讲解
20231103
1.UNet的提出是为了解决什么问题?
一般认为使用带注释的训练样本越多训练出来的深度神经网络越好,但是在UNet所应用的医学领域中并没有那么多的数据供应给模型训练。UNet想使用在医学图像的分割上,在UNet提出的2015年,CNN在图片分类上!取得了很好的成果,但是分割任务是需要为每个像素都分配类标签,而不是为整张图分类。
2.UNet针对这个问题的解决方案
UNet模型是在 全卷积网络(FCN) 上进行修改得来的。下面先简要说明一下FCN。
全卷积网络(FCN)
全卷积网络是深度学习用于语义分割领域的开山之作,其由两个部分组成,全卷积部分和反卷积部分。
全卷积部分由一些经典的CNN网络组成,用于提取图片信息,他去掉了传统CNN后面的全连接层和全局平均池化层,这样网络的输出将不再是类别而是热力图。
反卷积部分通过上采样得到原尺寸的语义分割图像。
上图是UNet的网络结构。
3.网络结构解析
首先观察UNet的输入和输出:
UNet的输入是一张\(1*572*572\)的图片,输出是一张\(1*388*388\)的图片。
根据图示,原始图片输入后经过了一个蓝色箭头\(3*3\)的卷积层,使用的激活函数为ReLu。
对卷积网络熟悉的话很快能算出一张图片输入卷积层后得到的输出大小:\[\frac{Scale-Kernel+2*Padding}{Stride}=Scale_{new} \]分析卷积层要关注它的:\(CHin(输入通道数) CHout(输出通道数) Kernelsize(卷积核大小) Padding(填充) Stride(步长)\)
其中,\(CHout\)由卷积核的数量决定。
一张通道数为1,尺寸为\(572*572\)的图片输入第一个卷积,输出64通道尺寸为\(570*570\)的图片,我们可以算出这里没有对输入图片进行填充,卷积核步长为1。
灰色箭头为复制和裁剪,最上层的箭头:一张\(568*568\)的图片经过操作后生成一张\(392*392\)的图片,然后和经过收缩路径后的UNet图片合起来(原图为64通道,经过收缩路径的图片为64通道,合起来为128通道)
红色箭头为\(2*2\)最大池化层,经过最大池化层后图片的尺寸要除以2。
绿色箭头为上采样操作,一般使用转置卷积(注:转置卷积只是将矩阵形状进行了还原,输出的矩阵数值和原来的不一样。)
蓝绿色箭头为一个\(1*1\)的卷积核,输入通道数为64,输出通道数为2。可得Padding为0,Stride为1。
这里写下反卷积的公式:$$Hout = (Hin-1)stride-2Padding + kernel_{size}$$
当\(kernel_{size}=2,stride=2\)时,\(Hout=2*Hin\)