0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Google提出间接卷积算法,未来可会有突破?

WpOh_rgznai100 来源:YXQ 2019-07-15 16:24 次阅读

本文介绍的内容主要聚焦Google 的一项最新工作:改变基于 GEMM 实现的 CNN底层算法提出的新方法。通用矩阵乘法(General Matrix Multiply, GEMM)是广泛用于线性代数、机器学习、统计学等各个领域的常见底层算法,其实现了基本的矩阵与矩阵相乘的功能,因此算法效率直接决定了所有上层模型性能,目前主流的卷积算法都是基于GEMM来实现的。来自谷歌的Peter Vajda在ECV2019中提出了一种全新的间接卷积算法,用于改进GEMM在实现卷积操作时存在的一些缺点,进而提升计算效率。

通用矩阵乘法

GEMM是基础线性代数子程序库(Basic Linear Algebra Subprograms, BLAS)中的一个函数。BLAS提供了实现矩阵和向量基本运算的函数,最早于1979年由C.L.LAWSON提出。BLAS的发展大致可以分为三个阶段(levels)的历程,这和函数定义,出版顺序,以及算法中多项式的阶数以及复杂性有关,第一阶段只包含与向量(vector)有关的运算,第二阶段添加了向量与矩阵进行运算的操作,第三阶段添加了矩阵与矩阵之间的运算,前两个阶段的BLAS都是用于向量处理器的,而第三阶段适用于矩阵处理器,所以BLAS的发展和硬件的发展密不可分。GEMM属于第三阶段的算法,正式公布于1990年,其迭代更新形式为:

其中A和B可以进行转置或hermitian共轭转置,而A、B和C都可以被忽略(be strided),因此实际上这个公式就表示了任意矩阵之间所有可能的加法和乘法组合,例如最基本的A*B,可以将α置1,C置为全0矩阵即可,这也是其通用性的表现。

由于矩阵乘法相对于向量-向量乘法以及向量-矩阵乘法,有更低的时间复杂度,效率更高,因此其广泛用于许多科学任务中,与之相关的GEMM算法成为了目前BLAS设计者的主要优化对象。例如可以将A和B分解为分块矩阵,使得GEMM可以递归实现。有关GEMM的详细信息可以参见[1][2][3]。如何对GEMM进行优化,是BLAS相关工作的研究热点。

基于 GEMM 的卷积算法及其缺点

卷积神经网络(CNN)在CV问题中的表现很出色,有多种在算法层面对齐进行实现的方法:直接卷积算法,采用7层循环,快速卷积算法,利用傅里叶变换来进行卷积,以及基于GEMM的卷积算法。

通过将卷积操作用矩阵乘法来代替,进而使用GEMM算法来间接进行卷积操作,这使得卷积操作可以在任何包含GEMM的平台上进行,并且受益于矩阵乘法的高效性,任何针对GEMM的改进和研究都能有助于卷积运算效率的提升,从而提高模型的运算速度,因此目前大部分主流的神经网络框架,例如Tensorflow、Pytorch和Caffe都使用基于GEMM的方法来在底层代码中实现卷积。

具体的,基于GEMM的卷积方法需要借助于 im2col或im2row buffer来内存转换,使得数据格式满足GEMM算法的输入要求,从而将卷积操作转化为GEMM操作,然而这个转换过程是一个计算开销和内存开销都比较大的过程,特别是在输入channel数较小时,这个过程会在整个卷积过程中占有很大的比例。简言之,就是在卷积过程中,每个pixel都会被多次重复的转换,这是不必要的计算开销。因此有许多工作都在对这一过程进行改进,本文工作提出了一种改进算法——间接卷积算法(Indirect Convolution algorithm),主要有以下两个优点:

1、去掉了im2row的转换过程,这使得算法性能有了巨大的提升(up to 62%)。

2、用了一个更小的indirection buffer来代替原来的im2row buffer。不同于im2row buffer的大小随着输入channel数线性增加,indirection buffer没有这个特性,因此indirection buffer的内存占用特性非常有利于输入channel数较多时的卷积操作。

间接卷积算法

原始的GEMM通过如下计算来不断迭代进行矩阵运算操作并输出矩阵:

其中A是输入张量,B是一个常量滤波器,C是输出矩阵,在传统的im2col+GEMM算法中,通常α=1而β=0,原始GEMM操作示意图如下:

图1 原始GEMM操作

其中 im2col buffer 代表矩阵A,filter tensor 代表矩阵B,A和B的乘积就是输出copy表示将输入的张量展开为一个二维矩阵,也就是im2col buffer。可以看到buffer的每一行则是由固定个数(步长)的pixel展开成一维的向量组成的,这些pixel都在原始tensor中的一个patch内,在经过和filter tensor相乘后,由于矩阵行列相乘得到一个元素,因此这几个pixel的信息都被整合成了一个值,也就是对他们进行了卷积操作。最后在输出矩阵C中,行数rows代表输出的像素点个数,columns代表输出的channel数。可以看到buffer的columns是和输入channel数有关的。

为了降低buffer带来的开销,作者提出了一种间接矩阵乘法的思想,不把输入的tensor直接展开并存储在buffer中,而只是在buffer中存放每个pixel在input tensor的坐标,也就是从存数据变成了存地址(类似于指针pointer思想),这样不管channel数有多少,存的地址信息始终只有二维,极大的降低了buffer的计算和存储开销,如下图:

图2 indirect convolution

当然,由于buffer中存的是地址信息,因此不能直接和filter做矩阵乘法,所以就只能通过在buffer的行间进行循环,根据该行的pointer找到对应的输入数据,再将输入数据与kernel相乘,并与之前循环的结果拼接起来,从而间接的实现矩阵乘法,因此叫做indirection buffer。

对于不同的卷积步长,只需要将不同步长对应的卷积patch位置确定即可。而对于padding策略,将指向填充位置的pointer对应的输入pixel的向量值全部设置为0。

间接卷积算法的缺点

间接卷积算法作为GEMM-BASED CNN算法的一种改进,能极大的提升计算效率,但是存在以下几个限制:

1. 这个算法是为NHWC layout设计的,也就是说应用范围比较窄,不能和目前的主流方法相比。

2. 算法适用于前向传播中的卷积操作,而在反向传播中作用不大,不及基于col2im和row2im的算法。

3. 具有和GEMM相同的缺点,在深度小卷积核的卷积操作中效率并不好。

实验测试结果

Efficient Deep Learning for Computer Vision主要聚焦于如何将深度学习部署到移动设备上,因此本文的工作主要在移动设备和移动芯片上进行测试,结果如下:

可以看到一旦步长增加,那么Indirect convolution带来的性能提升就会明显下降,这是因为步长越大,在原始的GEMM算法中重复计算的量就会减小,因此原始GEMM的性能本身就会提升,而indirect convolution并不受益于步长增加。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Google
    +关注

    关注

    5

    文章

    1712

    浏览量

    56788
  • 算法
    +关注

    关注

    23

    文章

    4452

    浏览量

    90746

原文标题:基于GEMM实现的CNN底层算法被改?Google提出全新间接卷积算法

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AURIX TC397是否可以搭配Google TensorFlow的演算法去运算?

    请问各位大神,AURIX TC397 是否可以搭配 Google TensorFlow 的演算法 去运算??
    发表于 02-18 06:05

    stm32f103有没有图像卷积算法函数或者例程参考下载 ?

    stm32f103有没有图像卷积算法函数或者例程参考下载
    发表于 09-22 06:34

    Google算法抵御来自量子计算的威胁,Saphlux新技术推动AR/VR领域创新

    大家好。欢迎收看河套IT WALK第96期。 在今天的科技新闻中,我们将向大家介绍两项引人注目的技术突破。首先,Google的研究人员推出了一项新算法,旨在保护FIDO2安全密钥免受未来
    的头像 发表于 08-22 20:10 709次阅读
    <b class='flag-5'>Google</b>新<b class='flag-5'>算法</b>抵御来自量子计算的威胁,Saphlux新技术推动AR/VR领域创新

    cnn卷积神经网络算法 cnn卷积神经网络模型

    cnn卷积神经网络算法 cnn卷积神经网络模型 卷积神经网络(CNN)是一种特殊的神经网络,具有很强的图像识别和数据分类能力。它通过学习权重和过滤器,自动提取图像和其他类型数据的特征。
    的头像 发表于 08-21 17:15 1160次阅读

    卷积神经网络算法流程 卷积神经网络模型工作流程

    卷积神经网络算法流程 卷积神经网络模型工作流程  卷积神经网络(Convolutional Neural Network,CNN)是一种广泛应用于目标跟踪、图像识别和语音识别等领域的深
    的头像 发表于 08-21 16:50 1565次阅读

    卷积神经网络算法代码matlab

    卷积神经网络算法代码matlab 卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习网络模型,其特点是具有卷积层(Convolutional
    的头像 发表于 08-21 16:50 804次阅读

    卷积神经网络算法代码python

    卷积神经网络算法代码python  卷积神经网络(Convolutional Neural Network,CNN)是深度学习中最为重要的算法之一。它在计算机视觉、自然语言处理、语音识
    的头像 发表于 08-21 16:50 556次阅读

    卷积神经网络算法三大类

    卷积神经网络算法三大类 卷积神经网络(Convolutional Neural Network,简称CNN)是一种常用的人工神经网络,它的主要应用领域是图像识别和计算机视觉方面。CNN通过卷积
    的头像 发表于 08-21 16:50 844次阅读

    卷积神经网络算法有哪些?

    卷积神经网络算法有哪些?  卷积神经网络(Convolutional Neural Network, CNN) 是一种基于多层感知器(multilayer perceptron, MLP)的深度学习
    的头像 发表于 08-21 16:50 1153次阅读

    卷积神经网络算法原理

    卷积神经网络算法原理  卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习(Deep Learning)的模型,它能够自动地从图片、音频、文本等数据中提
    的头像 发表于 08-21 16:49 768次阅读

    卷积神经网络算法比其他算法好吗

    卷积神经网络算法比其他算法好吗 卷积神经网络(Convolutional Neural Networks, CNN)是一种用于图像识别和处理等领域的深度学习
    的头像 发表于 08-21 16:49 449次阅读

    卷积神经网络算法是机器算法

    卷积神经网络算法是机器算法吗  卷积神经网络算法是机器算法的一种,它通常被用于图像、语音、文本等
    的头像 发表于 08-21 16:49 517次阅读

    卷积神经网络的介绍 什么是卷积神经网络算法

    的深度学习算法。CNN模型最早被提出是为了处理图像,其模型结构中包含卷积层、池化层和全连接层等关键技术,经过多个卷积层和池化层的处理,CNN可以提取出图像中的特征信息,从而对图像进行分
    的头像 发表于 08-21 16:49 1423次阅读

    卷积神经网络原理:卷积神经网络模型和卷积神经网络算法

    卷积神经网络原理:卷积神经网络模型和卷积神经网络算法 卷积神经网络(Convolutional Neural Network,CNN)是一种
    的头像 发表于 08-17 16:30 912次阅读

    简谈卷积—幽默笑话谈卷积

    的物理意义呢?那下面咱们就来看一看详细的卷积本质以及物理意义的介绍。 一、来源 卷积其实就是为冲击函数诞生的。“冲击函数”是狄拉克为了解决一些瞬间作用的物理现象而提出的符号。古人曰:“说一堆
    发表于 05-25 18:08