来详解一下计算机视觉中的语义分割任务 (7)—FCN

696 阅读3分钟

这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战

老生常谈 FCN,这一篇当年在语义分割举足轻重的一篇文章,发表于 2014 年,是当年的 SOTA 模型,开创性的全卷积网络,实现端到端基于卷积的语义分割网络。今天虽然已经退出了语义分割的舞台,但是每当人们谈到语义分割发展过程,一定是要说一说这个里程碑的网络 FCN。

将卷积网络推广到空间密集预测任务,也就是像素级别分类任务上。

我们今天将谈到

  • 从图像分类到语义分割
  • 迁移学习
  • 谈谈转置卷积
  • 输出融合

有关图像分类到语义分割在之前我们已经聊过了,如果大家是从这篇开始,可以回头看一看之前分享有关转置卷积的那两篇文章。

图像分类到语义分割

对于图像分类和语义分割输入的都是一张图像,不过图像分类任务输入图像的尺寸通常是固定的,这是因为对图像分类网络最后几层通常是全连接,而对于语义分割网络通常输入图像尺寸大小不同,所以其采样全连接的网络,这样避免了对图像的限制。

在分类网络后几层将卷积层输出特征图输入到全连接层,经过几个全连接层后输出是一个类别个数相同的维度的向量,然后经过 softmax 后得到一个类别概率分布。

全连接的局限性是限制输入需要为固定尺寸同时还丢弃了空间坐标。然而,全连接层也可以被视为具有覆盖其整个输入区域大小卷积核的卷积

全连接层转为卷积层

例如对于 ImageNet 分类问题,例如输入为 224×224×3224 \times 224 \times 3 经过一系列卷积核下采样(pooling 层)变为特征图 7×7×512 7 \times 7 \times 512 然后将其展平后连接到全连接层,输出为 4096 经过几层全连接层后得到 1000 神经元对应 1000 分类。其实可以用 7×77 \times 7 大小 输出为 1×1×40961 \times 1 \times 4096 其实其参数量没有发生变化,最后通过 1×11 \times 1 卷积核大小将通道数变换为 1×1×10001 \times 1 \times 1000

迁移学习

通常使用 ImageNet 或者 COCO 这样大规模的数据集上训练一个预训练模型后,然后跟对一些特定任务来在一些数据集进行继续训练的得到想要网络为迁移学习。

输出融合

FCN_003.png

当图像通过不断 pooling 进行下采样,得到一个比较小特征图,特征图的尺寸是原图 1/32, 然后通过上采样会得到一个和输入图像尺寸一样图像。但是这样得到 label 特征图是一个比较粗略,因为是进行 32 倍下采样,所有这样设计网络结构是 FCN-32s。

随着网络层数增加,也就是网络变得越来越深,获取更多深度上特征同时也损失空间上的信息。那么也就是在网络中,空间信息更多地位于网络的浅层。那么我们可不可将浅层信息融入到输出结果中呢? 这个想法也就是输出融合

FCN_005.png

具体融合方式,逐点求和,例如可以先对 pool5 进行 2 倍上采样后和 pool4 进行融合后在进行 16 倍上采样。可以对 pool4 进行 2 倍上采样后和 pool3 进行融合后再进行 8 被上采样。

FCN_006.png

由于位置损失函数原因,所以 FCN-32s 得到结果比较粗略,而 8s 效果相对要多了。

参考了

  • Sik-Ho Tsang 的 《Review: FCN — Fully Convolutional Network (Semantic Segmentation)》