其他
目标检测和感受野的总结和想法
The following article is from GiantPandaCV Author pprp
一
概念
并不是感受野内所有像素对输出向量的贡献相同,实际感受野是一个高斯分布,有效感受野仅占理论感受野的一部分
二
计算
2.1 一种简单的感受野计算方法
第一个feature map(也就是原始图片)的感受野默认为1 经过kernelSize=k, s=1 的卷积层, 感受野计算方法如下:
经过kernelSize=k, s=2 的卷积层, 感受野计算方法如下:
经过s=2的maxpool或avgpool层,感受野计算方法如下:
经过kernelSize=1的卷积层不改变感受野 经过全连接层和Global Average Pooling层的感受野就是整个输入图像 经过多路分支的网络,按照感受野最大支路计算 shortcut层不改变感受野 ReLU、BN、Dropout不改变感受野 全局Stride等于所有层Stride的累乘 全局Padding需要通过以下公式计算(通过feature map反推即可):
R=(((((1+2+2)x2+2+2)x2+2+2+2)x2+2+2+2)x2+2+2+2)x2=308
S=2x2x2x2x2=32
P=138
2.2 自下而上的计算方法
空洞卷积:引入空洞率 , 经过空洞卷积,kernel size有原来的 变为 ,所以只要替换原来的公式中的k即可。 上采样:一般通过插值来实现,假如 通过2倍上采样得到 ,上采样的感受野相当于为了生成 的一个pixel,参与的 的pixel的数目。(经评论区 @Kevin)英文原文也附在下边供参考。
可分离卷积: 等价于普通卷积,并没有变化。 BatchNorm:推理过程中BN不改变感受野,而训练过程中,BN的感受野是整个输入图像。 转置卷积: 会增加感受野,和普通计算方法类似
三
作用
四
关系
五
总结
首先,许多经典的网络结构中的这些卷积不是随便决定的,在修改网络的时候不能随便删除。比如在yolov3中,backbone后边的几个卷积再接yolo层这个当时就觉得很随意,但是他是有一定道理的。 假如出于对小目标的考虑,想要降低下采样率,那么直接删掉一个maxpool层,或者删掉stride=2的卷积层都是不可取的。通过公式我们知道,stride对一个网络的感受野影响非常大,而且会对后边的网络层的感受野都进行影响,所以要通过使用stride=1的maxpool或者空洞卷积来弥补对感受野带来的损失。 实际感受野依然是一个超参数,他是会随着训练的过程发生变化,我们无法准确计算出来实际感受野,但是通过分析anchor,实际感受野和理论感受野,我们知道了anchor<实际感受野<理论感受野,所以anchor还是会被理论感受野的大小所限制。 自己尝试过使用kmeans算法聚类自己数据集的Anchor,之前两个数据,两次聚类,都出现了自己聚类得到的Anchor不如默认的Anchor得到的结果。之前一直不知道原因在哪里。在总结了感受野以后,我觉得可以合理推测,Anchor应该和实际感受野尽量匹配,但是实际感受野实际上是一个超参数,通过聚类得到的anchor有一定代表性,但是效果反而不如默认的anchor,这是因为我们自己聚类得到的Anchor的范围实际上没有默认的广。
比如yolov3-tiny里边的anchor最小是【10,14】最大是【344,319】,经过计算理论感受野是382,按照SFD里边推导得到的公式计算,对应的anchor大小应该为159,如果按照理论感受野的三分之一来计算,大概是127.3。大概在这个范围,自己聚类得到的最大anchor也就是20左右,所以网络如果想要适应(回归)20左右的anchor需要网络更长时间的训练。
六
参考文献
历史文章推荐
CNN真的需要下采样(上采样)吗?
面对新型肺炎疫情,AI 能做什么?
人体姿态估计的过去,现在,未来
给研究新生的建议,光看论文是学不好的,一定要看书,看书,看书!
So Young Sohn:信用评级与专利保护中的AI技术概览
Shai Ben-David:无监督学习中的鲜花与荆棘
不是我们喜新厌旧,而是RAdam确实是好用,新的State of the Art优化器RAdam
机器学习中的评价指标
CVPR2019 |《胶囊网络(Capsule Networks)综述》,附93页PPT下载
AiLearning:一个 GitHub万星的中文机器学习资源
你正在看吗?👇