FCN(Fully Convolutional Networks,全卷积网络)是首个端对端的针对像素级预测的全卷积网络。
当时的分类网络都是在特征提取之后使用全连接进行概率预测,但这种预测是针对全图的。如何对每个像素进行预测进而得到分割mask呢?FCN的办法也很朴素,全连接得到的是固定长度的一维向量,那么使用卷积替换全连接,得到2D的特征向量,一维是固定长度,表示可分类数目,一维是和原始图像分辨率相等。
这样就可以对每个像素执行一个softmax进行分类。但我们知道特征提取的过程分辨率是降低的,这就要求还有一个上采样的过程。先忽略上采样的具体方法,FCN对比了直接一次性上采样到原尺寸和类似于拉普拉斯金字塔重建的区别。
要是直接对最后一层上采样,采样倍数需要是32倍。其实也可以先上采样2倍,然后和更浅的一层特征图进行相加,对相加结果再上采样16倍。由此类推,还可以两次2倍上采样和一次8倍上采样。这几种采样方法分别记作FCN-32s,FCN-16s,FCN-8s。可以预见到,使用多层的信息,分次的上采样可以得到更高的准确性:
FCN使用的back bone是VGG,所以卷积层部分分辨率不变,每次池化后降低为一半。
U-Net同样使用了全卷积的结构,网络中没有全连接层,并且把上采样部分提高到特征提取相同的层数,二者对称分布,像U形一样。
对训练图像使用弹性形变进行数据增强。
压缩路径中,每次池化之后会进行两次卷积。卷积中的分辨率只降低了一点点,主要是池化来降低分辨率。两次卷积后的通道数(滤波器个数)是上一次池化之后的2倍。而在压缩路径中则相反,池化变为上采样,通道数变为减半的关系。
压缩路径中的中间结果在copy and crop之后,大小与上采样结果一致,就可以与上采样的结果在channel维度进行拼接,目的是特征融合,提高预测和分割的准确性。拼接之后通道数double,所以在卷积时再将其减半。
裁剪的原因是保证尺寸一致,那么上采样前后尺寸为什么会不一样呢,因为卷积。在得到32*32大小之后仍然进行了两次卷积才上采样。
Overlay-tile Strategy,在卷积之前,针对边界的像素进行的镜像填充操作。感受野尺寸是60,那么边界就填充30.
上采样之后还是要卷积,提取关键特征,也是和压缩路径对称。
在最后一层,使用1x1卷积将每个64分量特征向量映射到所需数量的类。
损失函数使用softmax估计得到的每个像素位置属于各个类别的概率分布,既然每个像素有一个概率,如何加权求和得到最终的loss呢?位置的不同,权重应该是不同的,距离边界更近的像素权重应该更高。可以使用形态学计算出边界,根据到边界的最近距离和次近距离计算权重,构建交叉熵。
有效卷积?same卷积?
Reference:
1.https://zhuanlan.zhihu.com/p/31428783?from_voters_page=true
2.https://zhuanlan.zhihu.com/p/43927696
3.https://lmb.informatik.uni-freiburg.de/Publications/2015/RFB15a/