卷积实现—im2col+gemm

文章详细介绍了卷积神经网络中卷积的计算方式,包括普通卷积的滑窗计算、分组卷积的原理、空洞卷积的作用,以及padding在保持特征图尺寸中的作用。此外,还讨论了im2col和gemm在实现卷积计算中的应用,以及如何通过im2col+gemm优化卷积运算。文章最后提到了优化过程中遇到的瓶颈和解决方案。

普通卷积

    看卷积的实现,先看其普通的计算方式:滑窗计算和其计算shape大小的公式,以及各个卷积特性对其计算的影响,比如:stride,group,dilation,pad等。 H o u t = ( H i n − k h + p t + p b ) / s t r i d e h + 1 H_{out}=(H_{in}-k_{h}+p_t+p_b)/stride_{h}+1 Hout=(Hinkh+pt+pb)/strideh+1 W o u t = ( W i n − k w + p l + p r ) / s t r i d e w + 1 W_{out}=(W_{in}-k_{w}+p_l+p_r)/stride_{w}+1 Wout=(Winkw+pl+pr)/stridew+1    上面公式以2D卷积为例,输出特征图的形状计算公式。

Group

    假如group不是1,则是分组卷积,分组卷积与普通卷积的区别就是利用分组,将卷积计算的范围更小化,从而降低计算量。分组卷积将一个正常卷积划分为多个更小范围的卷积的拼接。
在这里插入图片描述
    如图这是一个组数为2的分组卷积示意图,其中对输入的特征图通道与滤波器的通道都进行了分组,设置原输入特征图大小为 N C i n H W NC_{in}HW NCinHW,滤波器大小为 C o u t C i n K h K w C_{out}C_{in}K_{h}K_{w} CoutCinKhKw,输出特征图的输出大小为 N C o u t H o u t W o u t NC_{out}H_{out}W_{out} NCoutHoutWout,假如加入分组卷积系数g后,每个计算卷积参数就会变成 C o u t g C i n g K h K w \frac{C_{out}}{g}\frac{C_{in}}{g}K_{h}K_{w} gCoutgCinKhKw,得到输出
    矩阵大小为 N C o u t g H o u t W o u t N\frac{C_{out}}{g} H_{out}W_{out} NgCoutHoutWout。然后由g组的卷积计算结果concat 成为一个正常的卷积输出大小。这样计算量会小很多,但是具体的计算量的降低我们这里就不再多说,这里只是对分组卷积的一个简单描述。

dilation

    感觉在卷积中比较难理解的系数就是一个分组卷积系数,另外一个是空洞卷积系数,空洞卷积的主要目的是为了扩大卷积计算过程中的感受野,相当于将一个卷积扩张成一个更大的卷积,如下图:
在这里插入图片描述
    而关于空洞系数为有效位置之间的关系如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值