大半夜上厕所看到了在看节目的时候没看懂的话的解读哭成狗~出来看到conv蹲在门口。它大概不是因为黏我,只是想攻击我~我蹲下来,它竖起毛,摆出试图攻击的姿势。我看着它,哭哭啼啼说了一大堆,它就呆愣愣的,我伸出手,它试探着走过来闻我。我好像已经知道我们不会成为那种,它黏我蹭我趴在我腿上翻着肚皮用肉垫够我的手让我撸的关系。它心里有外面,我的圈养让它注定是失去了外面,它固执地坚持着去保有野外生活能力和警惕,也会在某个时刻乖乖坐在脚边看着做饭的我,或是在我戳电脑的时候跟我的书包带和鞋玩的不亦乐乎,还会在将醒未醒的时刻在我的手放到它的腮边时发出呼噜。#L的日常记录#
硬件和DNN处理
拓普利兹矩阵的应用
A. 在CPU和GPU平台上加速卷积核计算
CPU和GPU使用并行化技术如SIMD或SIMT并行地执行MAC(multiply-and-accumulate)。所有ALU共享相同的控制和内存(寄存器文件)。在这些平台上,FC层和CONV层一般都映射到矩阵乘法(卷积核或滤波器计算)。附件1(标注为图18)显示FC层如何使用矩阵乘法。滤波器矩阵的高度为滤波器个数,宽度为每个滤波器的权值个数(输入通道(C) × 宽度(W) × 高度(H),因为FC层R=W, S=H);输入特征图矩阵的高度为每个输入特征图的激活次数(C × W × H),宽度是输入特征图的个数(图18(a)为1,图18(b)为N);最后,输出特征图矩阵的高度是输出特征图中的通道数(M)、宽度是输出特征图的个数(N),其中FC层的每一个输出特征图的维数为1×1×输出通道数(M)。
DNN中的的CONV层能采用附件2所示的托普利茨矩阵的松弛形式映射到矩阵乘法中。对于CONV层使用矩阵乘法的缺点是: 输入特征图矩阵中存在冗余数据,如附件2(图19(a))所示。这可能导致存储效率低下或导致复杂的内存访问模式。
有一些为CPU(如Open-BLAS、Intel MKL等)和GPU(如cuBLAS、cuDNN等)设计的软件库,其优化用于矩阵乘法。矩阵乘法被平铺到这些平台的存储层次结构中,在更高级别上,这些存储层次结构的大小约为几兆字节。
通过对数据应用计算变换来减少乘法次数,同时仍然给出相同的逐位结果,我们进一步加快这些平台上的矩阵乘法。这可能会增加添加次数和更不规则的数据访问模式。
快速傅里叶变换(FFT)[10,74]是一种流行的方法,如附件2所示,它减少从O(N^2 x Nf^2)到O(N^2 log2 N)的乘法次数,其中输出大小为N × N和滤波器尺寸是Nf×Nf。为执行卷积,我们采用滤波器的FFT快速傅里叶变换和输入特征映射,然后在频域中执行乘法;接着得到的积应用逆FFT以恢复空间域中的输出特征映射。然而使用FFT有几个缺点:
(1) FFT的优势随滤波器尺寸的增加而减小;
(2) FFT的大小由输出特征图的尺寸决定,输出特征图的尺寸通常比滤波器大得多;
(3) 频域中的系数是复杂的。
虽然FFT减少计算,但是它需要更大的存储容量和带宽。降低复杂性的一种流行方法是使权重稀疏,这在第VII-B2节中讨论;使用FFT会使这种稀疏性难以被利用。
我们能对FFT执行若干优化以使其对DNN更有效。为减少操作次数,可预先计算和存储滤波器的FFT。此外,输入特征图的FFT可计算一次并用于在输出特征图中生成多个通道。由于图像仅包含实数值,因此其傅立叶变换是对称的且能利用它降低存储和计算开销。
其它方法包括Strassen和Winograd,它们重新排列计算,使乘法的数量分别从O(N^3)减少到O(N^2.807),对于3×3滤波器减少2.25倍,降低数值稳定性,增加存储要求和专门处理的开销取决于过滤器的大小。
在实践中,不同算法能用于不同的层形状和大小(例如对于大于5×5的滤波器的FFT以及对于3×3和更低的滤波器的Winograd)。现有的平台库如MKL和cuDNN为给定的形状和大小动态选择合适的算法[77,78]
备注:
拓普利兹矩阵(Toeplitz)是指矩阵中每条自左上到右下的斜线上的元素相同,形如附件中的矩阵(不必是方阵);对于方阵的情形,它可描述为:任一条平行于主对角线的直线上的元素相同。matlab中生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x, y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的拓普利兹矩阵。
拓普利兹矩阵的应用
A. 在CPU和GPU平台上加速卷积核计算
CPU和GPU使用并行化技术如SIMD或SIMT并行地执行MAC(multiply-and-accumulate)。所有ALU共享相同的控制和内存(寄存器文件)。在这些平台上,FC层和CONV层一般都映射到矩阵乘法(卷积核或滤波器计算)。附件1(标注为图18)显示FC层如何使用矩阵乘法。滤波器矩阵的高度为滤波器个数,宽度为每个滤波器的权值个数(输入通道(C) × 宽度(W) × 高度(H),因为FC层R=W, S=H);输入特征图矩阵的高度为每个输入特征图的激活次数(C × W × H),宽度是输入特征图的个数(图18(a)为1,图18(b)为N);最后,输出特征图矩阵的高度是输出特征图中的通道数(M)、宽度是输出特征图的个数(N),其中FC层的每一个输出特征图的维数为1×1×输出通道数(M)。
DNN中的的CONV层能采用附件2所示的托普利茨矩阵的松弛形式映射到矩阵乘法中。对于CONV层使用矩阵乘法的缺点是: 输入特征图矩阵中存在冗余数据,如附件2(图19(a))所示。这可能导致存储效率低下或导致复杂的内存访问模式。
有一些为CPU(如Open-BLAS、Intel MKL等)和GPU(如cuBLAS、cuDNN等)设计的软件库,其优化用于矩阵乘法。矩阵乘法被平铺到这些平台的存储层次结构中,在更高级别上,这些存储层次结构的大小约为几兆字节。
通过对数据应用计算变换来减少乘法次数,同时仍然给出相同的逐位结果,我们进一步加快这些平台上的矩阵乘法。这可能会增加添加次数和更不规则的数据访问模式。
快速傅里叶变换(FFT)[10,74]是一种流行的方法,如附件2所示,它减少从O(N^2 x Nf^2)到O(N^2 log2 N)的乘法次数,其中输出大小为N × N和滤波器尺寸是Nf×Nf。为执行卷积,我们采用滤波器的FFT快速傅里叶变换和输入特征映射,然后在频域中执行乘法;接着得到的积应用逆FFT以恢复空间域中的输出特征映射。然而使用FFT有几个缺点:
(1) FFT的优势随滤波器尺寸的增加而减小;
(2) FFT的大小由输出特征图的尺寸决定,输出特征图的尺寸通常比滤波器大得多;
(3) 频域中的系数是复杂的。
虽然FFT减少计算,但是它需要更大的存储容量和带宽。降低复杂性的一种流行方法是使权重稀疏,这在第VII-B2节中讨论;使用FFT会使这种稀疏性难以被利用。
我们能对FFT执行若干优化以使其对DNN更有效。为减少操作次数,可预先计算和存储滤波器的FFT。此外,输入特征图的FFT可计算一次并用于在输出特征图中生成多个通道。由于图像仅包含实数值,因此其傅立叶变换是对称的且能利用它降低存储和计算开销。
其它方法包括Strassen和Winograd,它们重新排列计算,使乘法的数量分别从O(N^3)减少到O(N^2.807),对于3×3滤波器减少2.25倍,降低数值稳定性,增加存储要求和专门处理的开销取决于过滤器的大小。
在实践中,不同算法能用于不同的层形状和大小(例如对于大于5×5的滤波器的FFT以及对于3×3和更低的滤波器的Winograd)。现有的平台库如MKL和cuDNN为给定的形状和大小动态选择合适的算法[77,78]
备注:
拓普利兹矩阵(Toeplitz)是指矩阵中每条自左上到右下的斜线上的元素相同,形如附件中的矩阵(不必是方阵);对于方阵的情形,它可描述为:任一条平行于主对角线的直线上的元素相同。matlab中生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x, y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的拓普利兹矩阵。
几篇论文实现代码:
《Extreme Rotation Estimation using Dense Correlation Volumes》(CVPR 2021) GitHub:https:// github.com/RuojinCai/ExtremeRotation_code [fig1]
《Practical Single-Image Super-Resolution Using Look-Up Table》(CVPR 2021) GitHub:https:// github.com/yhjo09/SR-LUT
《A Unified Generative Framework for Aspect-Based Sentiment Analysis》(ACL 2021) GitHub:https:// github.com/yhcc/BARTABSA
《Stereo Waterdrop Removal with Row-wise Dilated Attention》(IROS 2021) GitHub:https:// github.com/VivianSZF/Stereo-Waterdrop-Removal [fig2]
《Fast Weakly Supervised Action Segmentation Using Mutual Consistency》(TPAMI 2021) GitHub:https:// github.com/yassersouri/MuCon [fig3]
《MLP Singer: Towards Rapid Parallel Korean Singing Voice Synthesis》(2021) GitHub:https:// github.com/CODEJIN/MLPSinger
《Deep Hierarchical Representation of Point Cloud Videos via Spatio-Temporal Decomposition》(2021) GitHub:https:// github.com/hehefan/PSTNet2
《CoaT: Co-Scale Conv-Attentional Image Transformers》(2021) GitHub:https:// github.com/mlpc-ucsd/CoaT
《TDANet: Text-Guided Neural Image Inpainting》(2020) GitHub:https:// github.com/idealwhite/tdanet
《Extreme Rotation Estimation using Dense Correlation Volumes》(CVPR 2021) GitHub:https:// github.com/RuojinCai/ExtremeRotation_code [fig1]
《Practical Single-Image Super-Resolution Using Look-Up Table》(CVPR 2021) GitHub:https:// github.com/yhjo09/SR-LUT
《A Unified Generative Framework for Aspect-Based Sentiment Analysis》(ACL 2021) GitHub:https:// github.com/yhcc/BARTABSA
《Stereo Waterdrop Removal with Row-wise Dilated Attention》(IROS 2021) GitHub:https:// github.com/VivianSZF/Stereo-Waterdrop-Removal [fig2]
《Fast Weakly Supervised Action Segmentation Using Mutual Consistency》(TPAMI 2021) GitHub:https:// github.com/yassersouri/MuCon [fig3]
《MLP Singer: Towards Rapid Parallel Korean Singing Voice Synthesis》(2021) GitHub:https:// github.com/CODEJIN/MLPSinger
《Deep Hierarchical Representation of Point Cloud Videos via Spatio-Temporal Decomposition》(2021) GitHub:https:// github.com/hehefan/PSTNet2
《CoaT: Co-Scale Conv-Attentional Image Transformers》(2021) GitHub:https:// github.com/mlpc-ucsd/CoaT
《TDANet: Text-Guided Neural Image Inpainting》(2020) GitHub:https:// github.com/idealwhite/tdanet
✋热门推荐