谈谈多通道img2col的实现

释放双眼,带上耳机,听听看~!
本文详细解释了多通道输入图的img2col加速的数学原理,以及展示了实现过程和应用示例,适合对深度学习卷积操作和图像处理技术感兴趣的读者。

本文正在参加t.zsxq.com/0aiNxERDq

我在21年的时候写过一篇文章《【模型推理】一文看懂Img2Col卷积加速算法》,其中用手绘图 (画得比较丑陋) 详细解释了 直接卷积 和 img2col卷积加速算法的实现原理 (ps: 主要是数学原理,有兴趣的同学可以先去看看),其中主要说的输入图是灰度图,也就是单通道图,也就是c为1的图。写这篇主要是做一些延伸,详细解释一下多通道输入图的img2col加速的数学原理。

老生常谈,还是先说一下 img2col卷积加速是什么,img2col卷积加速算法是一种用于加速深度学习中卷积操作的技术,它通过将输入图像转换为一个2D矩阵,其中矩阵的每一列对应于卷积操作的一个感受野。这种转换允许卷积操作作为矩阵乘法来执行,可以使用优化的线性代数库进行高效计算。

下面开始。

首先需要抛个例子,输入图为 [1, 3, 4, 4],以 pytorch nchw 的 layout 来说,也即 n=1, c=3, h=4, w=4,c维也即通道维,为bgr,如下图:

谈谈多通道img2col的实现

img2col的卷积加速可以看成两个部分,首先是展平,然后是矩阵乘。对于矩阵乘来说,和灰度图的过程一致,反正最后给你展平成什么样了,你就直接乘就行。多通道img2col和单通道img2col的区别就在于怎么展平,对于单通道来说,因为c恒为1,如果不考虑n的话,其实是一个二维到二维的展平过程。而对于多通道来说,c不为1,如果不考虑n的话,其实是一个三维到二维的过程。那么三维到二维该怎么展呢。这其实又会涉及到数据排布,也就是layout,咱们这里默认是在pytorch里操作,所以数据排布按nchw来。那么展平后用图像的示意就是下面这样的。

谈谈多通道img2col的实现

对于nchw或者nhwc做展平操作的过程,可能很多同学会比较凌乱,其实抓住一个要点就是,比如对于nchw展平,先铺hw再铺c再铺n就行,同理适用于nhwc,就是从右往左看

还是拿n=1来说,其实展平后的特征图长这样:

谈谈多通道img2col的实现

然后回到img2col的卷积加速实现,就是拿卷积核去滑窗,先拿卷积核 [3, 3, 3, 1],步长为1,填充为0举例,它其实就是这么滑:

谈谈多通道img2col的实现

这里其实需要注意一点的是所谓的卷积核的维度的含义为 [核宽,核高,in_维度,out_维度],所以很明显就可以看出这里输入的 in_维度 为3 (跟输入的特征图对应),输出的 out_维度 为1,也就是咱们这个特征图经卷积后的c为1

下图很好的诠释了整个推理过程,得到最终的输出为 [1, 1, 2, 2]。

谈谈多通道img2col的实现

继续举个例子,如果卷积核为 [3, 3, 3, 3] 呢,那将会是这样的,最终输出为 [1, 3, 2, 2],通道为3,如下图展示。

谈谈多通道img2col的实现

好了,以上分享了 谈谈多通道img2col的实现。希望我的分享能对你的学习有一点帮助。

 【公众号传送】

《极智AI | 谈谈多通道img2col的实现》

畅享人工智能的科技魅力,让好玩的AI项目不难玩。邀请您加入我的知识星球, 星球内我精心整备了大量好玩的AI项目,皆以工程源码形式开放使用,涵盖人脸、检测、分割、多模态、AIGC、自动驾驶、工业等。不敢说会对你学习有所帮助,但一定非常好玩,并持续更新更加有趣的项目。 t.zsxq.com/0aiNxERDq

谈谈多通道img2col的实现

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

ChatGPT: 生成式预训练变换模型

2023-12-15 21:05:14

AI教程

从机器学习到深度学习:发展历程和关键事件

2023-12-15 21:25:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索