objectanimator 改变view的实际的宽高_卷积的横向(宽高)拆分

33ce7ea8ddd067b058a8bfd7d249d05e.png

前言

在我之前的文章中有讲过卷积的基础运算、卷积的通道拆分(Mobile net V1),现在我再来把卷积的横向(宽高)拆分补充一哈!

ps:文章中会涉及到好几个模型结构或论文,我仅仅是从拆分的角度来串这条线,模型每一次优化都有它背后的复杂原理,也有很多本文中介绍不到的东西,例如通过resnet结构来优化梯度的传导等等。我希望这篇文章能让小白明白卷积也是有多种多样的用法,让不是那么小白的朋友在遇到OOM的时候能有个缩小模型可训练参数的手段。万万不可只从本文的角度来理解我串到的那几个模型。。。

这篇文章会顺着inception系列模型来讲解,所以也有些东西和拆分不太相关= =

正文

在我们做物体检测任务的时候,我们经常会遇到被检测物体大小不一的情况,有些模型会在喂数据的时候先用图像金字塔生成多个大小的数据、有些则会在模型中设置多个尺度的输出、还有些使用多个anchor来框物体,其实还有一种其他的方法,就是用不同大小的卷积核提取不同尺度的信息,所以有了如下的操作:

f5eae29577eae384872cedaf80d3a8d5.png
Inception module, naive version

您已解锁:Inception原始模块结构!

附:Inception论文地址

这个特殊的网络结构在前后两层之间,同时使用1*1的卷积、3*3的卷积、5*5的卷积、3*3的最大池化层共计4种计算方式提取特征,成功实现了对多尺度信息的提取。而这只是开始。

在Inception论文中,对每层的参数有所说明,下面我们截取一层的参数套入上图中,看看可训练参数有多少(pooling没有可训练参数哦)。

1a8bf3df6638169b832f3ce0f67fa127.png
由max pool输入到inception

09fd20e419ff6ae8b8aee475e87622a6.png

---------------------------------------小小分割线---------------------------------------

不过这样一个个通道数都那么大,还是挺吃计算量的,要不我们想办法把输入通道给缩小一下,1*1的卷积参数只与通道数有关,我们可以用它来改变特征图的通道数,在那两个大卷积之前把通道数先降一降~(pooling的1*1放在后面):

33c86e607ea86e219c9cf5e269d73068.png
黄色1*1里的通道数就是之前表格中reduce的值

您已解锁:InceptionV1模块结构!

这时的参数量是多少呢?

参数少了一半!

---------------------------------------小小分割线---------------------------------------

但是此时我们仍不能满足。我们知道,现在常用的各大模型结构中,卷积核都是3*3的,很少简单其他尺寸的卷积核了,那这是为什么呢?我们发现两层3*3的卷积的感受野和一层5*5的卷积核的感受野相同!

34cb905d6043b0f74b17ec019efa331a.png
1层5*5的感受野和2层3*3的感受野相同

我们通过一个简单的例子,可以计算得到?

两层3*3的卷积所需的计算量比5*5还小呢(这么算不准确,实际上还涉及到通道的变化,是通道在一定范围内的时候3比5参数少),那么我们不就可以把那个5*5的卷积核换成两个3*3的了:

42be7a44a46623bd0008d92295d14c45.png
换了个论文,所以画风不一样了。。

您已解锁:InceptionV2模块基本结构!

论文链接:InceptionV2论文地址

params公示越写越长,这里就不继续算了总的parmas了。。

---------------------------------------小小分割线---------------------------------------

刚才这次微调并没有很显著的降低可训练参数,还不能就此满足,肯定还能找到更好的办法来降低可训练参数的量,3*3的卷积还能继续拆分!

ccd1fea187092af42d13bae8432cf27e.png
1层3*3的感受也和1层1*3+1层3*1的感受野相同

上图所示,一个3*3的卷积核的感受野和一个1*3的卷积核+一个3*1的卷积核相同!下面来比较一下这两种算法的计算量,看看有没有差别:

可见后者的可训练参数更少,前者是后者的1.25倍(因为通道都以1为例并且加了偏置,看起来差别不大,其实这个省的还是挺多的,例如把通道换成100通的话,偏置的影响就更小,前者可训练参数会比后者大1.497倍)。那么我们把这个操作融入到刚才的模块中的话,就会得到:

f40e36187ffff43d7f2a1ed915817a65.png
论文截的图,n都换成3就好了~

同样我就不详细算参数了~肯定是少了就对了。

Ps:这里有个专门讲拆卷积的文章。。我没看呢。。链接贴上来有人看就看吧。。

http://openaccess.thecvf.com/content_ICCV_2019/papers/Ding_ACNet_Strengthening_the_Kernel_Skeletons_for_Powerful_CNN_via_Asymmetric_ICCV_2019_paper.pdf

---------------------------------------小小分割线---------------------------------------

到现在为止,我们把最开始的单层1、3、5卷积小模块变成了一个一共5层的大模块,模型深度加深了很多,然而过深的模型的梯度更新会很困难。我们还有一个小技巧可以缓解这个问题,那就是把模型变宽,而不是变深~

我们可以把之前串联的13 31改成并联,再把他们得到的特征图都Concat在一起,这样也能获取我们所要的特征:

e95f0acc3db33d2d37468f33d8799e50.png

未经同意,禁止转载!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值