FCN以及U-Net系列学习笔记

本专栏将从论文的角度解读一下CV方向的一些经典神经网络模型及其贡献与意义,以期加深自己的印象,后续可以随时翻看并且学习其中好的tricks。这一期介绍两个语义分割任务中的经典模型。

FCN

在这里插入图片描述

论文全名为《Fully Convolutional Networks for Semantic Segmentation》(原文链接),发表在2015的CVPR上。

在这里插入图片描述

这篇论文的贡献是比较大的,在语义分割领域也算得上是旗帜性模型了。首先就是提出了一个端到端的网络,通常CNN在最后的卷积层之后会接上若干个全连接层, 将卷积层产生的二维特征图映射成一个固定长度的特征向量,而FCN用卷积层代替传统的全连接层,使得输出也可以变成二维形式,这一做法使得输出中保留了相当的空间信息,对于语义分割这种任务来说还是非常有效的,同时还解决了输入图片尺寸的问题;其次就是用反卷积对特征图进行上采样,然后融合来自不同尺度的特征图,起到结合浅层信息(位置与轮廓等)与深层语义信息的作用。

U-Net

论文全名为《U-Net: Convolutional Networks for Biomedical Image Segmentation》(原文链接),是基于医学影像领域提出的,所以发表在了MICCAI 2015上。U-Net应该是每一个学习语义分割的人都要看的经典论文了,其将FCN的思想进一步发挥,同样是没有全连接层只有卷积层,同样是逐层融合不同尺度特征图,但U-Net更加像一个非常规整的Encoder-Decoder结构。论文中提出,左半的编码部分叫Contracting Path,收缩路径,用于获取信息;右边的解码部分叫Expanding Path,扩张路径,用于精确定位。

在这里插入图片描述
这张结构图非常清晰,并且蕴含了很多细节,接下来分析一下。首先,和FCN相比,特征图融合的方式不同,FCN中使用的是逐点相加的方式( .add() ),而U-Net中是按channel维度拼接在一起( .concat() ),直接将通道数翻倍,形成更“厚”的特征图。对于这两种方式,我理解的就是通常对于分类任务直接使用add的方式增加特征,比较高效,而concat的方式的话可以保留更多通道和维度信息,可以看到在融合之后的第一个卷积,就将通道缩小回去了,所以concat提供了一个选择的空间,对于恢复分辨率比较有效。
在这里插入图片描述
其次,也是比较容易产生疑惑的地方,就是整个流程中特征图大小的问题,输入是 572×572,输出是 388×388,这如何进行像素级的分类?主要是因为这篇论文中使用了一个策略:在这里插入图片描述
我们把细节放大:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
是不是发现了镜像的感觉,没错,这就是论文中提出的 Overlap-tile 的一个策略,图中的黄框示例才是你实际上需要去分割的图像,周围的一圈边边都是根据原图镜像生成的!目的就是当卷积到边界的时候会由于padding产生一部分空白,对边界上的分割结果有负面影响,因此加一圈边边提供一些信息。在编码过程中,也是使用了 valid 模式,不进行padding操作,所以从结构图上也可以看出,每经过一次3×3卷积,都要损失一点特征图大小。

如果有仔细算了的应该发现问题了,算上由于valid模式要损失而补上的那一圈边边,也不可能有 572-388=184 这么多,我们还可以仔细看一下这张图:
在这里插入图片描述
论文中的数据集应该是数量少,但单个图像比较大的,左图中白框框出来的就是原始数据集图像,因此不要一次直接把整个图像输入网络中,每一次只截一部分输入,就是图中的蓝框,蓝框中的黄框就是没有补边的原图的那一部分,即这一次需要分割的部分。这也是比较自然的做法,图像很大直接输入本来就不好把握网络深度;其次数据量又少,这样还能起到扩大数据集的作用;且在对一个区域进行分割的时候又能结合周围的信息,一举多得。

另外引申出来的问题就是,在特征图融合的时候,本来应该是同样大小的特征图,由于上述操作变得不一样大了,因此仔细看图中灰色箭头的注释,这里还存在一个裁剪的操作:
在这里插入图片描述
其实,这也是U-Net的缺点之一,首先就是通过裁剪后的特征图,直觉上和上采样后的特征图融合感觉有点格格不入…其次在使用U-Net做自己的数据集时,这个裁剪就需要你好好设计裁剪的大小才能适配,所以其实大部分类似算法还是使用了 same 模式去卷积,该论文中提出的这种镜像策略可能只是对医学影像有提升,针对自己任务时还需要再通过实验对比一下。但不管怎么说,U-Net的地位无需多说,后续也有很多针对U-Net的改进,比如:

UNet++

在这里插入图片描述

论文全名为《UNet++: A Nested U-Net Architecture for Medical Image Segmentation》(原文链接),2018年的工作。作者是周纵苇大神,这里直接放上大神自己对U-Net++的深度解析,看完深受启发。

U2-Net

论文全名为《U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection》(原文链接),是2020年的工作。其实放一张结构图就明白大致的思路了:
在这里插入图片描述

我看到的第一反应就是,这参数量不会爆炸吗?所以我觉得其厉害之处就在于保证了低内存和低计算成本的情况下,实现了这样看似比较复杂的网络架构,同时其可以不用预训练,效果还很好。一言以蔽之的话,就是用一个类似小号U-Net的RSU卷积模块代替原来U-Net中的普通卷积模块,所以叫U"平方" - Net。
在这里插入图片描述
RSU看似会增加很多参数量,实际上计算开销不大,这是因为大多数操作是对下采样后的特征图进行的,并且不同深度的RSU模块大小也不同,论文中也和其他模型针对参数量进行了对比,还是挺牛的。
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值