MatConvNet中关于vl_simplenn_display的一些分析

一、关于各层data size的分析

layer1:  floor((224-7)/2)+1=109

              这里7是filter大小,2是stride

layer4: floor((109+0+1-3)/2)+1=54

               这里0和1是前向和后向的pad,3是filter大小,2是stride

layer5:floor((54+1+1-5)/2)+1=26

        floor((54+1-5)/2)+1=26

              不知道上面那个是正确的,就是不知道layer5的pad的1是只一个方向(后)pad1,还是两个方向(前,后)都pad1

layer8: floor((26+0+1-3)/2)+1=13

layer11: floor(13+1+1-3)/1)+1=13    

              floor(13+1-3)/1)+1=12

              从这里可以知道layer5的第一个公式是正确的,也就是前后两个方向都pad 1,如果是2维图像,则在上下左右都pad了1.

 

二、关于rf size的分析

这里的rf是指receptive field,各层接受野的计算思路如下:

按照这个思路就很容易理解这段代码:(上图蓝色圆珠笔有误,应该是layer1,4,5;我写成了layer1,2,3)

info.receptiveFieldSize(1:2,l) = 1 + ...
sum(cumprod([[1;1], info.stride(1:2,1:l-1)],2) .* ...
(info.support(1:2,1:l)-1),2) ;%只要画图就可以计算出来

 

三、关于rf offset的分析

首先layer1 如果以中心对齐,可以看到原先的像素4对应了layer1的△1,所以layer1的offset就是4

layer4: layer4是三个layer1对应一个layer4,所以layer1的△2对应了layer4的○1,而layer1的△2对应的实际上是原先输入像素的6,即offset是6

layer5: layer5是五个layer4对应一个layer5,所以layer4的○3对应了layer5的□1,而layer4的○3对应了layer1的△6,进一步的实际上是原先输入像素的14

但是这个值和上面display出来的结果是不一样的,实际上layer5有一个pad的操作,这个操作当然是对layer4去pad,如果去考虑这个pad,那么:

layer4的○2对应了layer5的□1,而layer4的○2对应了layer1的△4,进一步的实际上是原先输入像素的10,即offset是10

这样就和simplenn_display出来的结果一样了,有了这个思路,就很好去理解:

info.receptiveFieldOffset(1:2,l) = 1 + ...
sum(cumprod([[1;1], info.stride(1:2,1:l-1)],2) .* ...
((info.support(1:2,1:l)-1)/2 - info.pad([1 3],1:l)),2) ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值