【学习笔记】doubly block toeplitz matrix 在加速矩阵差卷积上的应用

文档链接,原文 16×9 的矩阵有一处写错了。

CNN 的卷积是执行了 wi,j=x,ywi+x,j+y×Cx,y,有人认为每次平移卷积核,运算量很大,又是乘法又是加法。

现在我们把 wx,y 展开形成一个 [n×m,1] 的向量 V,然后构造一个大小为 [(n+1)×(m+1),n×m] 矩阵 P 使得 X=PV 得到的 X 压缩成 [n+1,m+1] 矩阵之后取右下部分能得到正确的 w

虽然我感觉变成矩阵乘向量之后运算更多了啊。

这个矩阵 P 可以通过把 teoplitz 矩阵拼起来得到(或者说叫做 doubly block matrix,那么先给出一个 teoplitz 矩阵的示例:

(a0a1a2a(N1)a1a0a1a2a2a1a0a1a0a1a2a1a0a1aM1a2a1a0)

不难发现:ai,j=Vij,所以说该矩阵也可以被压缩成一个向量。上面提到了,doubly block teoplitz 矩阵是由若干块 teoplitz 矩阵拼起来的,即现有若干大小相同的 teoplitz matrix A(M1),AN1,那么一个 doubly block teoplitz 矩阵可以如下:

(A0A1A2A(N1)A1A0A1A2A2A1A0A1A0A1A2A1A0A1AM1A2A1A0).

注意无论是 teoplitz 矩阵还是拼起来的新矩阵,我们都不要求它是方阵,或者说,只要满足 ai,j=Vij 即可

记卷积核为(k1,1k1,2k2,1k2,2) ,我们将卷积核展开成一个大小 [n+1,m+1] 的矩阵 K=(k2,2k2,100k1,2k1,10000000000),左上角把卷积核中心对称了,剩下的全是 0

取出它的所有列向量,展开成一个 teoplitz 矩阵:

F0=(k2200k21k2200k21k2200k21)F1=(k1200k11k1200k11k1200k11)F2=F3=(000000000000)

然后把这些碎片拼成:

F=(F0F3F2F1F0F3F2F1F0F3F2F1)

第一列是依次 F0F3,右上角你可以理解成把矩阵接到下面再让对角线延申得到的。

不妨假设你现在的二位图片大小为 3×3,把它展开成一个大小为 [9,1] 的向量,于是我们通过

(k2200000000k21k2200000000k21k2200000000k21000000k1200k2200000k11k120k21k2200000k11k120k21k2200000k1100k21000000k1200k2200000k11k120k21k2200000k11k120k21k2200000k1100k21000000k1200000000k11k1200000000k11k1200000000k11)(i11i12i13i21i22i23i31i32i33)

得到卷积结果,新向量大小是 [16,1],理论上是取右下角。

posted @   没学完四大礼包不改名  阅读(359)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示