论文地址:https://arxiv.org/abs/1505.04597
学习视频:U-Net网络结构讲解(语义分割)_哔哩哔哩_bilibili
整体结构
如下图,U-net结构为Encoder-Decoder,左边为Encoder部分,作用是下采样,右边为Decoder部分,作用为上采样
在图中每一个长条代表一个特征层,每一个箭头对应于一种操作
Encoder部分也即下采样部分
第一步
如下图,来看左边部分第一层,蓝色箭头代表卷积层,卷积核大小为3*3,padding = 0,步长为1,经过两层卷积层大小每经过一层减小2,高和宽变成了568*568通道大小变成了64
之后经过红色箭头,表示最大池化层,大小缩小为一半为284*284
第二步
此时再进行2次卷积,将channel翻倍,如下图得到280*280*128的特征图
然后再经过一个最大池化层得到128*128
第三步
对上面280*280的特征图继续进行卷积,得到136*136*256,如下图
再经过最大池化层得到68*68的特征图
第四步
对68*68*256的特征图继续进行卷积操作得到64*64*512的特征图,如下
再经过最大池化层得到32*32的特征图
第五步
对32*32*512的特征层进行卷积得到28*28*1024的特征层
Decoder部分也即上采样部分
至此下采样结束接下来是上采样,这里上采样使用的是转置卷积
第一步
图中绿色箭头代表上采样,每一次上采样会将高和宽扩大两倍,通道数减半,变成56*56*512,同时灰色箭头表示将左边对应部分的特征图进行中心裁剪出一块与右边一样大小,与右边进行拼接,得到56*56*1024的特征图,然后经过3*3大小的卷积,将特征图通道数减半,同时会继续缩小高和宽为52*52,最终经过这一步的decoder得到52*52*512大小的特征图
接下来进行转置卷积将特征图大小调整为104*104*256
第二步
此时与刚刚上采样的第一步类似,对左边部分进行中心裁剪拼接得到104*104*512,如图,再进行两层卷积操作得到100*100*256的特征图
接下来进行转置卷积将特征图大小调整为200*200*128
第三步
此时与刚刚上采样的第二步类似,对左边部分进行中心裁剪拼接得到200*200*256,如图,再进行两层卷积操作得到196*196*128的特征图
接下来继续上采样,使用转置卷积得到392*392*64大小的特征图
第四步
此时与刚刚上采样的第三步类似,对对应左边部分进行中心裁剪拼接得到392*392*128,如图,再进行两层卷积操作得到388*388*64的特征图,如图
最后进行一个1*1的卷积操作,原论文只有两个类别一个背景一个是要分割的物体,卷积核个数因此为2,最终得到的输出是388*388*2的分割图
实际U-net网络
可以看到在原文中,输入和输出大小不一样
如图对于这个细胞分割,实际上要黄色部分的分割图要用到蓝色框区域的信息,但是在图像边缘往往是没有这些信息,这时图像边缘信息缺失了,这时需要镜像对应部分补全缺失信息,才能进行分割。而且对于大分辨率的图像分割时,往往分割时要有overlap部分,如下图。
然而,事实上,当今主流U-net网络在卷积的时候会有padding,来保证输入特征图大小与输出特征图大小一样,这样就不需要考虑边缘缺失问题了。