winograd卷积实践
创始人
2024-02-27 00:01:29
0

winograd卷积基本原理参考

Winograd算法实现卷积原理_Luchang-Li的博客-CSDN博客_optimizing batched winograd convolution on gpus

winograd卷积图示:

注意这张图里面隐藏了input和output channel。实际上每个空间维度里面还包含了batch和in/out channel维度。 

输入数据格式为[n, h, w, c],input transform后格式原始的论文[Fast Algorithms for Convolutional Neural Networks]的格式是[ho/2*w0/2, 16, n, ci],实际也常用[n, ho/2*w0/2, 16, 1, ci]。ho, wo是输出height和width尺寸,除以2是因为两个相邻元素共享一个4x4矩阵。

输入变换是空间维乘以变换矩阵,由于每个空间维元素实际上对应于一个2维向量,实际上相当于每个空间维元素对应的的向量之间做各种乘加运算。

weight原始格式为[c0, ci, h, w],这里h = w = 3, 先处理为[h, w, ci, co], 然后weight transform转换后为[4*4, ci, co]。

转换后的输入和weight做batch矩阵乘得到数据格式为[n, ho/2*w0/2, 4*4, 1, co]。

[1, ci]与[ci, co]的矩阵乘可以考虑通过每个线程计算1x1*1x4大小矩阵乘(常用的方法是每个线程计算4x1*1x4或者8x1*1x4矩阵乘并沿着k方向循环,这里行数只有1,因此缩减到1x1*1x4,可参考[施工中] CUDA GEMM 理论性能分析与 kernel 优化 - 知乎)。

最后做输出transform得到格式为[n, ho/2*w0/2, 2*2, co],也就是[n, ho, wo, co]

端侧推理引擎如mnn由于通常没有或只有很少的shared mem,线程之间数据交换能力比较弱,通常按照这个流程把整个计算流程拆分为了三个步骤而不是写在一个完整的kernel:input transform, matmul, output transform。而权重在推理时是常量,可以通过常量折叠提前做好weight transform。

对于NHWC的数据,通常采用每个thread读取4x4,并且channel深度为4的输入数据做input transform。

卷积通过im2row+matmul的实现问题,其一是相邻的卷积框有重复的数据,对于3x3 stride=1,每个位置数据读取一次,写出9次,因此im2row写回和matmul读取数据量增大了9倍。

winograd input transform相当于4x4 kernel, stride = 2,input transform写回和matmul读取数据数据量相比输入增大4倍。

相关内容

热门资讯

北京律师行业年均免费为群众提供... 12月19日,北京市律师协会发布《北京市律师行业社会责任报告》,展示“十四五”时期北京律师行业在履行...
分居期间男子与公司女员工不正当... 公司股东李某乙在与妻子李某甲分居期间,与公司女员工马某某存在不正当交往并育有子女,还向其大额转账。李...
男子带作弊设备考科目一,被考官... 花钱就能够通过科目一考试,前不久,一名男子轻信朋友考试“包过”承诺,带着隐蔽的作弊设备进入考场,没想...
一个月内收两封监管函,瑞茂通怎... 12月19日,瑞茂通(600180)公告,于2025年12月19日收到监管工作函,监管机构就公司信息...
律师的作用 我以前自己打官司都是当被告,想办法不让对方讹诈就行,感觉律师没啥用,只是在法庭替你发言而已,孩子谢浩...
120多万卡宴只卖60万!海南... 12月20日,话题#海南封关120多万卡宴只要60万#冲上热搜,引发公众热议。 据媒体报道,12月1...
女子醉驾找人“摆平”被骗7万后... 因醉酒驾驶轻信他人“可摆平”的谎言被骗,女子葛某乙不堪压力自杀身亡。在实施诈骗的苏某被判刑并赔偿后,...
政策护航,智能建造企业“出海”... 长沙晚报掌上长沙12月21日讯(全媒体记者 刘嘉)近日,长沙市智能建造产业链推进办公室印发了《关于推...