简介
UNet网络主要用在医学图像分割任务上,网络的结构特点就是:
- 全卷积网络,没有全连接层,训练参数少,模型体积小。对于医学图像,通常样本量有限,过多的网络参数会导致模型过拟合,所以UNet在医学图像分割任务上表现很好。
- 模型结构简单,形状类似U形,前半部分提取特征并下采样,后半部分skip connect 并反卷积进行上采样。使用的都是常见的op,对于模型部署有着很大的优势。
感觉写到这里,我就没什么想介绍的了,我可能太菜了。
模型结构
前面已经介绍了,模型就是一个编码器+解码器,类似U形,并且还使用了skip connection技术,我看到的不少网络都有借鉴这两个结构设计。

画图实在太复杂了,直接搬图又显得没有诚意,只能把tensorboard上的graph拿出来。上面的图因为代码设计的原因,很多步骤合并到了一起,另外箭头上很小的数字就是输入输出的tensor的shape,可惜因为有点大没办法直接保存下来。这里面的DoubleConv就是连续做两次卷积,input椭圆形小圈是下采样,可以看到图中一共4个小白圈,对应四次下采样。Up对应的就是反卷积上采样、Skip connection和DoubleConv三个过程。

DoubleConv做完以后,可以看到上图有两个箭头,一个是把tensor传到下一个卷积层提取特征,另一个是用来和后面反卷积数据concatenate也就是skip connection。

下采样就很简单,输入32x256x256,输出32x128x128,channel数没变,feature map长宽减半。
Up部分的结构本来不复杂,但是我参考的代码在实现的时候,为了让反卷积得到的tensor和前面的feature map大小一致,自己实现了padding。随着不断了解pytorch,感觉似乎没有必要这样做,直接在ConvTranspose2d里面设置参数就可以了。这导致Up部分的graph显示的很复杂,所以就没有放。
理论方面我也不怎么在行,写起来挺没感觉的,后面我将介绍一些UNet Pytorch实现以及训练相关的东西,努力!奋斗!
网友评论