传统的基于CNN的分割方法的做法通常是:为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入用于训练和预测。这种方法有几个缺点:一是存储开销很大。二是计算效率低下,相邻的像素块基本上是重复的。三是像素块大小的限制了感知区域的大小。通常像素块的大小比整幅 FCN将传统CNN中的全连接层转化成一个个的卷积层。
FCN将传统CNN中的全连接层转化成一个个的卷积层。
在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。
FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。
可以发现,经过多次卷积(还有pooling)以后,得到的图像越来越小,分辨率越来越低(粗略的图像),FCN使用了上采样得到图像中每一个像素的类别。例如经过5次卷积(和pooling)以后,图像的分辨率依次缩小了2,4,8,16,32倍。对于最后一层的输出图像,需要进行32倍的上采样,以得到原图一样的大小。
这个上采样是通过反卷积(deconvolution)实现的。第4层的输出和第3层的输出也依次反卷积,分别需要16倍和8倍上采样,结果就精细一些了。
FCN 的优势在于:
- 可以接受任意大小的输入图像(没有全连接层)
- 更加高效,避免了使用邻域带来的重复计算和空间浪费的问题
其不足也很突出:
- 得到的结果还不够精细
- 没有充分考虑像素之间的关系,缺乏空间一致性