目标检测和目标跟踪都用到了RPN层,anchor是RPN的基础,感受野(receptive field,RF)是anchor的基础。
感受野概念介绍
在经典CNN网络中,FC层每个输出节点的值都依赖FC层所有输入,而卷积层每个输出节点的值仅依赖卷积层输入的一个区域,这个区域之外的其他输入值都不会影响输出值,该区域就是感受野。
上图是个微型CNN,来自Inception-v3论文,原图是为了说明一个 卷积可以用两个 卷积代替,从下到上称为第1,2,3层:
- 第2层左下角的值,是第1层坐下红框中 区域的值经过卷积,也就是乘加运算计算出来的,即第2层左下角位置的感受野是第1层左下红框区域。
- 第3层唯一值,是第2层所有 区域卷积得到的,即第3层唯一位置的感受野是第2层所有 区域。
- 第3层唯一值,是第1层所有 区域经过两层卷积得到的,即第3层唯一位置的感受野是第1层所有 区域。
某一层feature map中某个位置的特征向量,是由前面某一层固定区域的输入计算出来的,那这个区域就是这个位置的感受野。
任意两个层之间都有位置——感受野对应关系,但我们更常用的是feature map层到输入图像的感受野,如目标检测中我们需要知道feature map层每个位置的特征向量对应输入图像哪个区域,以便我们在这个区域中设置anchor,检测该区域内的目标。
感受野区域之外图像的像素不会影响feature map层的特征向量,所以我们不太可能让CNN仅依靠某个特征向量去找到其对应输入感受野之外的目标。这里说“不太可能”而不是“绝无可能”,是因为CNN很强大,且图像像素之间有相关性,有时候感受野之外的目标是可以猜出来的,就好像见微知著一样,对CNN目标检测都是有可能的,但猜出来的结果并不总是那么靠谱。
感受野的作用
- 一般任务要求感受野越大越好,比如图像分类中最后卷积层的感受野要大于输入图像,网络深度越深感受野越大性能越好。
- 密集预测任务要求输出像素的感受野足够大,确保做出决策时没有忽略重要信息,一般也是越深越好。
- 目标检测任务中设置anchor要严格对应感受野,anchor太大或偏离感受野都会严重影响检测性能。
感受野计算
有效感受野
并不是感受野内所有像素对输出向量的共享相同,在很多情况下感受野区域内像素的影响分布是高斯,有效感受野仅占理论感受野的一部分,且高斯分布从中心到边缘快速衰减。(博主这一块还不太了解,等看了一些相关的论文和材料后再补充)