前文的思路存在问题,文末部分进行了更正。


Preface

知道这个词一年多了,还记得当时的情景,当时没有涉及到CNN就过去了,后面才知道是一个有趣的事物。前不久打算估计一下网络的这一指标,发现并不那么轻松,就准备另找时间。昨晚的PR课突然发现没什么可以打发时间的了,搜肠一番,那就列些等式吧。

Step1

刚提笔那会发现没什么简洁明了的思路,还一度考虑用仿真的方法编程算了。后面想到了一种逆向计算的思路,觉得可行。

Proposal

这种思路是把关注点放在两端上:如果一段长为\(l_0\)的区域(现在只考虑一维情况),通过网络后输出为的长度为\(l_T\)。那么当\(l_T=1\)时,就认为其感受野为\(1\)。(说实话,wikipedia上的定义什么的我还没看,我所理解的感受野是指:输入中某种最大空间范围,这个范围内的所有数据,都有可能在输出中存在相互作用。写完这把,我再去看看正式的定义,但目前这个定义对我现在的认知来说,还是有意义的)。
于是就可以这样考虑,每一个操作层都会使数据的长度发生变化,并且这个变化的属性只与这一层有关。于是我们可以寻找一个长度\(l_0\)使得在经过所有层后,其长度为\(1\)。

Method

长度的变化关系如下面这个图(装了asymptote的机器正在run,先忍忍,后面找时间改图):

convpool操作都可处理为统一的符号。

Op Analysis

于是我们来考虑单个操作的属性。
首先pad操作不能扩展信息量,不能被考虑,剩下的是核尺寸\(k\)和步长\(s\)。
一段长为\(l_n\)的数据,首先被核截取两端,然后剩下的那部分再用步长处理,第一个关系式:
\[ \begin{equation}\label{eq:l_n+1} l_{n+1} = \lceil \frac{l_n-2\times\lfloor\frac{k_n}{2}\rfloor}{s_n}\rceil \end{equation} \]
此处,最外层上取整的原因是步长从去两端后的首个数据开始。
根据Proposal的思路,我们是从输出端向输入端计算的,现在需要根据\(l_{n+1}\)计算\(l_n\),拆分成两个不等式计算:
\[ \begin{equation}\label{eq:joint_ineq} \frac{l_n-2\lfloor\frac{k_n}{2}\rfloor}{s_n}\leq l_{n+1} < \frac{l_n-2\lfloor\frac{k_n}{2}\rfloor}{s_n}+1 \end{equation} \]
得到关于\(l_n\)为中心的不等式:
\[ \begin{equation}\label{eq:joint_l_n} L_{n+1}-s_n<l_n\leq L_{n+1} \end{equation} \]
其中
\[ \begin{equation}\label{eq:L_n+1} L_{n+1}=s_nl_{n+1}+2\lfloor\frac{k_n}{2}\rfloor \end{equation} \]
\ref{eq:joint_l_n}得到的是一个范围,取值的话应该是最大整数,于是\(l_n\)的计算式应该是
\[ \begin{equation}\label{eq:l_n} l_n=\lceil s_nl_{n+1}+2\lfloor\frac{k_n}{2}\rfloor\rceil \end{equation} \]

Step2

以上是昨晚的结果,今早进行整理的时候发现存在些问题。
比如网络只有一个核尺寸为\(3\),步长为\(2\)的conv层,记为A,那么根据\ref{eq:l_n},其感受野\(R=2\times 1+2\times 1=4\);而如果将步长改为\(1\),记为B,则\(R=1\times 1+2\times 1=3\)。很明显,两个网络的感受野都应为\(3\)。

Flaw

我们从A中的计算结果考虑问题是怎样出现的:
假定现在的输入长度为\(4\)(序列: \(I:=\{a,b,c,d\}\)),然后用该核进行处理。只能得到一个元素的集合:\(O:=\{conv(\{a,b,c\})\}\)。也就是说,实际的\(R\)只有\(3\),\(d\)因为没有参与计算,不能算入\(R\)中,但在这种计算方式下(以输入数据长度衡量)却被考虑进去了。

Fixing

上述的情况只有在第一层的时候才会产生作用,因为经过第一层,各数据已经产生耦合了,后续的目标只是降维就好。所以只需要对最后的\(R\)计算,修正的方式就是将操作进行的次数作为标准:
\[ \begin{equation}\label{eq:R} R=(l_1-1)s_1+1+2\times\lfloor\frac{k_1}{2}\rfloor \end{equation} \]

Solution

最后的方案是,根据\ref{eq:l_n},从\(l_T=1\)开始迭代至\(l_1\),然后根据\ref{eq:R}计算最后结果。

Further Discussion

刚才在讨论中,发现一个可能牵涉到pad的环节。
问题发生在Step2中的Flaw中:如果存在了pad,\(O\)就有可能出现两个元素。——然而这仍不能改变\(R\)的计算。
另外pad实际发生在两端,实际进行计算(计算\(R\))的时候,可以认为是在中部区域计算的。这也支持pad无关假设。


Jun 27, 2017 更正

之前的讨论,存在着某些问题,给人感觉没有清晰统一的模型。这就导致,Fixing所述的补丁方法也存在问题,比如
\(k_1=3,s_1=1;k_2=3,s_2=2\),输入序列为\(I:=\{a,b,c,d,e,f\}\),那么第一层输出\(O_1:=\{conv1(\{a,b,c\},conv1(\{b,c,d\},conv1(\{c,d,e\},conv1(\{d,e,f\})\}=\{a_1,b_1,c_1,d_1\}\),第二层输出\(O_2:=\{conv2(\{a_1,b_1,c_1 \})\}\)。也就是说\(f\)被遗漏了,但按照fixing的方法,\(f\)仍被计算入\(R\)中。

Model

感觉到需要一个统一的模型进行描述,用这张图好了。


Hierarchy of Receptive Field

图中蓝色的箭头指示序列长度\(l\)的变化,\(e\)是在层间传递时损失的长度。红色的箭头指示下一层序列最多能吸收到的上一层数据长度。
这样看来,由两端的数据长度着手的思路是一个误解,实际的感受野应当是由红色箭头引导出的\(R\)。计算法则为\ref{eq:R},只是需要更换下符号:
\[ \begin{eqnarray} R_n& =& (R_{n+1}-1)s_{n+1}+1+2\times\lfloor\frac{k_{n+1}}{2}\rfloor\nonumber\\ & = & (R_{n+1}-1)s_{n+1}+k_{n+1} \end{eqnarray} \]
最后的计算是:
\[ \begin{equation}\label{eq:R_final} R=R_n \end{equation} \]


Appendix

式子简洁没必要放code了。

转载于:https://www.cnblogs.com/chenyliang/p/7079702.html

一种关于感受野尺寸计算的思路相关推荐

  1. 卷积的感受野计算及特征图尺寸计算

    <卷积的感受野计算及特征图尺寸计算>   从FPN开始,目标检测的精度大幅提升,各种特征融合方式层出不穷,多尺度的特征一大优势是解决了小目标的检测问题.核心思想是利用浅层特征预测小目标,深 ...

  2. 空洞卷积感受野大小计算

    空洞卷积感受野的计算 空洞卷积感受野的大小分两种情况: (1)正常的空洞卷积: 若空洞卷积率为dilate rate 则感受野尺寸=(dilate rate-1)(k-1)+k ###### k为卷积 ...

  3. AndroidQ 分屏窗口尺寸计算 (WMS部分)

    1. 分屏窗口尺寸计算 1.1 窗口添加到WMS Activity首次启动之后,在其resume阶段会将自己的Window添加到WMS: void makeVisible() {if (!mWindo ...

  4. 神经网络中感受野的计算

    什么是感受野 "感受野"的概念来源于生物神经科学,比如当我们的"感受器",比如我们的手受到刺激之后,会将刺激传输至中枢神经,但是并不是一个神经元就能够接受整个皮 ...

  5. 卷积神经网络物体检测之感受野大小计算

    学习RCNN系列论文时, 出现了感受野(receptive field)的名词, 感受野的尺寸大小是如何计算的,在网上没有搜到特别详细的介绍, 为了加深印象,记录下自己对这一感念的理解,希望对理解基于 ...

  6. 用于计算的计算机主机,一种用于区块链计算的计算机主机的制作方法

    技术特征: 1.一种用于区块链计算的计算机主机,包括计算机主机主体(1),其特征在于:所述计算机主机主体(1)上开凿有散热孔(2),且计算机主机主体(1)的内腔通过散热孔(2)与外界相连通,所述散热孔 ...

  7. inventor如何钣金出弧面_Inventor技巧丨外螺纹内径尺寸计算原理

    今天为大家带来:外螺纹内径尺寸计算原理. 比如,有个零件如下图,这个零件包含一个外螺纹. 在工程图中,你可以做以下标注,标识外螺纹相关规格.但某些时候,你可能需要知道螺纹底径是多少?或者说,你想知道软 ...

  8. 响应式分布式区别_边缘计算的七种定义,边缘计算与云计算、雾计算的区别

    一.概述 边缘计算是一个分布式计算的范式,正如云计算也是一个分布式计算的范式. 由于行业.技术背景等不同,边缘计算在不同人眼里是有一定差异的.我们先来看看不同专家是如何定义边缘的,然后介绍边缘计算处理 ...

  9. 按要求编写一个Java应用程序:(1)定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。(2)编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性

    (1)定义一个类,描述一个矩形,包含有长.宽两种属性,和计算面积方法. public class Jvcs {private int Long; //长private int wide; //宽pub ...

最新文章

  1. swift如何打印对象的地址
  2. LESSON 12.1-12.6 梯度提升树的基本思想梯度提升树的参数
  3. SAP 电商云 Spartacus UI 的自定义 hamburger 菜单
  4. 脑子越来越不好使,文字越来越像驮shi
  5. rds基于什么开发_IaaS、PaaS、SaaS、DaaS都是什么?现在怎么样了?终于有人讲明白了...
  6. Spring中的动态代理
  7. SpringMVC拦截器(interceptors)
  8. unittest Module中的常用6种断言方法
  9. 集合Collection总览
  10. javascript JSON.parse和eval的区别
  11. 判断包含字符当中包含小数点_Python|提取包含指定文本的行到一个文本文件(字符串或正则)...
  12. CODE[VS] 1548 贝贝的车牌问题
  13. 对口本科计算机专业,对口高考计算机类专业综合试题(卷).doc
  14. LOGO在线生成代码
  15. SuperSlide插件轮播图展示
  16. 三星手机服务器暂时不可用是怎么回事,三星手机用户注意了!三星云将于2017年1月20日起停止服务...
  17. 笔记本开机速度怎么计算机,笔记本开机加速的步骤_如何给笔记本电脑开机提速-win7之家...
  18. 苹果手机微信怎么接龙_【手机】微信接龙
  19. 同侪隐修录 (2016-12-25 23:10:21)转载▼
  20. 查找算法--Java实例/原理

热门文章

  1. python学习官网-Python学习(一)—— 初识python
  2. 开课吧python学费-分享一个小白也能月赚2万的新技能
  3. 用python绘制漂亮的图形-python如何画出漂亮的地图?
  4. python好找工作吗2017-2017,再来聊一聊Python,未来发展怎样?
  5. python代码大全下载-最全Python算法实现资源汇总!
  6. python爬虫简单实例-最简单的Python爬虫案例,看得懂说明你已入门,附赠教程
  7. python好学吗mooc中文网-Python的N种玩法_中国大学MOOC(慕课)
  8. python中文软件-Python3.8.3下载
  9. python读取txt文件代码-python批量处理txt文件的实例代码
  10. python装饰器-如何理解Python装饰器?