上一篇介绍了UNet网络的总体结构和工程实现,详见UNet的PyTorch实现,本篇进一步深入UNet网络细节,进行代码层面的分析。
首先,还是先贴出UNet的网络结构图,以便和实现细节做对照。
从上图可以看到,Unet网络的结构比较简单,左侧分支每一层包含两个重复的卷积,我们命名为DoubleConv,从第二层开始,都是max_pool+DoubleConv;右侧分支每一层都是up_conv +copy_crop+DoubleConv,在最后输出层,有一个1x1 conv。所以,我们可以将以上网络简化为4个模块,分别是:
- 输入层的DoubleConv模块;
- 左侧分支从第二层开始的max_pool+DoubleConv,称为Down模块;
- 右侧分支的up_conv+copy_crop+DoubleConv,称为Up模块;
- 输出层的1x1卷积,称为OutConv模块。
下面我们分别来介绍这几个模块的实现细节。