CV中对感受野的理解

一、什么是感受野

在卷积神经网络CNN中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野receptive field。


image.png

image.png

二、为什么要增大感受野

常规的神经网络作用是通过一层全连接层,接受输入图像的各个元素,学习到特征并输出图像的类别。

但是如果一个图像维度特别高的话,直接连全连接层可能参数会很多,因此只能先通过一个卷积核感受部分图像维度学习特征,然后将卷积核进行stack,最终后面的filter也相当于接受了整幅图像然后输出整幅图像的特征,最后我们再根据这个特征做分类。【卷积神经网络的作用是 通过多次卷积下采样生成逐渐抽象的特征,最终分类层通过全局抽象特征做分类】

这是一种利用神经网络通过小参数学习到整幅图像特征的办法。这个方法适用于一些任务,比如图像识别。但是在图像分割里面却不太好用。为什么?

分割任务是一个像素级别的任务,因此需要在输入的空间尺寸下对每个像素都有分割的结果。换句话说,如果输入的空间尺寸是HxW,那么输出也需要是HxW的。【因为语义分割不仅需要抽象的信息,同时还需要一些细节的信息,因为需要对一些像素点做分类】

然而,为了提高网络性能,许多结构采用了池化或striding操作来增加感受野,同时提升远程信息的获取能力。但是这样的结构也带来了空间分辨率的下降。

比如之前提到的编解码结构中的编码器。

image

因此为了实现图像分割,一个解决方式是先卷积编码后再用一些方法利用编码后的全局特征。上采样来恢复空间分辨率以达到分割的效果。这类方法一般是上采样或者是反卷积。前者通常是通过线性或双线性变换进行插值,虽然计算量小,但是效果有时不能满足要求;后者则是通过卷积实现,虽然精度高,但是参数计算量增加了。

但是,如果我们有一种卷积,本身就能够扩大感受野,同时还不损失空间分辨率的话,就能解决上述问题,这就是空洞卷积。

空洞卷积主要作用:不丢失分辨率的情况下扩大感受野;调整扩张率获得多尺度信息。

感受野的作用
一般task要求感受野越大越好,如图像分类中最后卷积层的感受野要大于输入图像,网络深度越深感受野越大性能越好
密集预测task要求输出像素的感受野足够的大,确保做出决策时没有忽略重要信息,一般也是越深越好
目标检测task中设置anchor要严格对应感受野,anchor太大或偏离感受野都会严重影响检测性能


【调整感受野(多尺度信息)的同时控制分辨率的神器】

三、如何计算感受野

【https://zhuanlan.zhihu.com/p/109617755】
感受野的计算方式有两种,一种是自上而下,即:从输入层到输出层依次计算每层的感受野;另一种是自下而上,即:从输出层逐层反推到原图得到该输出层的感受野。下面一一介绍:

统一符号表达方式:其中RF_k表示第k层的感受野,f_k表示第k层的kernel size,s_k表示第k层的stride。

  • 自下而上,如公式(1),其中 RF_0=1:


    image.png
  • 自下而上,如公式(2),其中第一个计算层的 RF_k 为 f_k:


    image.png

    【现有文章已经分析表明,理论感受野和实际感受野是不同的,有效感受野呈现高斯分布】

四、如何增大感受野

空洞卷积、
池化【下采样】

你可能感兴趣的:(CV中对感受野的理解)