十岁的小男孩

  本文为终端移植的一个小章节。

目录

  引言

  FFT Conv2d (7x7, 9x9)

  Winograd Conv2d (3x3, 5x5)

引言

  本节针对CNN进行加速计算的,主要有以下两种方法,FFT和Winograd两种方法。

FFT Conv2d (7x7, 9x9)

  FFT(Fast Fourier Transformation)是离散傅氏变换(DFT)的快速算法。即为快速傅氏变换。它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

   FFT加速convolution,按照Convolution Theorem,时域上的卷积可以转成空间域的傅立叶变换进行。

  lecun的文章就是通过把卷积变成傅立叶变换实现加速的。从实验里看到,加速比2倍左右。目前这部分有代码开源,但是好像并没有merge到caffe中,原因可能是因为加速比例有限,再者消耗空间。猜测主要是加速比例问题吧,因为加速过程中,由于其原理,当卷积核小,是没什么加速的,当核是3或者5时,速度有的更慢或者相当,而在cnn中卷积的核大多数比较小,起到的加速作用很小,而基于图像处理本身目前的任务来说,卷积核一般不会太大,googlenet用7X7已经是爆炸天了。而从另外一方面来说,对caffe实现多GPU卡的加速或者多机的加速,则是实打实的加速,无论你的卷积核多大,你都能加速。

  lecun他们又出了一篇新的文章,facebook的,Fast Convolutional Nets With fbfft: A GPU Performance Evaluation。caffe上已经有人实现了,加速1.4(3X3)到14.5倍。从他们的文章中看到,卷积核小的时候也是实现了加速了。

  参考:Duan2baka的博客

Winograd Conv2d (3x3, 5x5)

  论文地址  GitHub源码  论文解读

  Winograd 方法简单讲, 就是用更多的加法计算来减少乘法计算. 因此, 一个前提就是, 在处理器中, 乘法计算的时钟周期数要大于加法计算的时钟周期数.

  参考文献:

   Winograd小卷积算法 

“Not so fast, FFT”: Winograd

知识应该是开源的,欢迎斧正,929994365@qq.com

Op-level的快速算法的更多相关文章

  1. MinFilter(MaxFilter)快速算法C++实现

    目录 1.算法简述 1.1.MinFilter(MaxFilter) 算法简述 1.2.MinFilter(MaxFilter) 快速算法简述 2.实现代码 2.1.MinFilterOneRow 单 ...

  2. 从大整数乘法的实现到 Karatsuba 快速算法

    Karatsuba 快速乘积算法是具有独特合并过程(combine/merge)的分治算法(Karatsuba 是俄罗斯人).此算法主要是对两个整数进行相乘,并不适用于低位数(如 int 的 32 位 ...

  3. Layer-level的快速算法

    十岁的小男孩 本文为终端移植的一个小章节. Sparse Block Net 本节为优化加速的第二章节,主要介绍Sparse-block net.上章节为OP算子层的加速,本节为层级间的加速,主要针对 ...

  4. 自动色彩均衡(ACE)快速算法

    ACE算法源自retinex算法,可以调整图像的对比度,实现人眼色彩恒常性和亮度恒常性,通过差分来计算目标点与周围像素点的相对明暗关系来校正最终像素值,有很好的增强效果.但是计算复杂度非常高,本文提出 ...

  5. 产生N个不重复的随机数的快速算法

    //seed array ,,,,,,,,,}; //随机数个数 ; //结果存放在里面 ]; ; i < N; i++) { //从剩下的随机数里生成 , startArray.length ...

  6. 多项式相乘快速算法原理及相应C代码实现---用到fft

    最近认真研究了一下算法导论里面的多项式乘法的快速计算问题,主要是用到了FFT,自己也实现了一下,总结如下. 1.多项式乘法 两个多项式相乘即为多项式乘法,例如:3*x^7+4*x^5+1*x^2+5与 ...

  7. 求素数的一个快速算法 Python 快速输出素数算法

    思想 以100以内为例. 生成一个全是True的101大小的数组 2开始,遇到2的倍数(4,6,8,10...)都赋值为False 因为这些数字都有因子 2 3开始,遇到3的倍数(6,9,12...) ...

  8. 图像处理之基础---卷积及其快速算法的C++实现

    头文件: /* * Copyright (c) 2008-2011 Zhang Ming (M. Zhang), zmjerry@163.com * * This program is free so ...

  9. 快速傅里叶变换(FFT)算法【详解】

    快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一.我打开一本老旧的算法书,欣赏了JW Cooley 和 John Tukey 在1965年的文章 ...

随机推荐

  1. linux 下的init 0,1,2,3,4,5,6知识介绍

    一. init是Linux系统操作中不可缺少的程序之一. 所谓的init进程,它是一个由内核启动的用户级进程. 内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后, ...

  2. js开发模式

    js中的开发模式进化史: js中有最初的只能由基本数据类型描述——>单例模式-->工厂模式-->构造函数模式-->原型模式-->各个模式相结合的混合模式,下面我会给大家逐 ...

  3. printf是在libc库中么?

    libc中果然有很多的函数,使用nm看了一下,里面竟然还有reboot函数,汗! 使用grep,可以看到各种 printf 也都在这里头. objdump是看函数的地址与函数名对应的,虽然也能证明pr ...

  4. 20165337岳源 第四次实验 Android开发

    1.实验要求: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章 参考http://www.cnblogs.com ...

  5. SpringCloud Config(分布式配置中心)

    ⒈是什么? Spring Cloud Config分为服务端和客户端两部分. 服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信心等接口. ...

  6. Windows PowerShell 入門(10)-デバッグ編

    対象読者 Windows PowerShellでコマンドレット操作ができる方 何らかのプログラミング経験があればなお良い 必要環境 Windows PowerShell デバッグメッセージの出力 Po ...

  7. matlab处理手写识别问题

    初学神经网络算法--梯度下降.反向传播.优化(交叉熵代价函数.L2规范化) 柔性最大值(softmax)还未领会其要义,之后再说 有点懒,暂时不想把算法重新总结,先贴一个之前做过的反向传播的总结ppt ...

  8. Webpack2 中的 NamedModulesPlugin 与 HashedModuleIdsPlugin

    要讨论Webpack 2中新增的这两个plugin的功能,还要先从使用Webpack打包的项目的前端资源缓存方案说起. 通常在使用了Webpack的项目中我们会使用CommonsChunkPlugin ...

  9. $Django Rest Framework-序列化组件

    1 序列化组件 e=serializers.SerializerMethodField()   # 方法名:叫get_字段名, 参数,返回字典  def get_e(self,obj): #obj为b ...

  10. bootstrap4简单使用和入门03-响应式布局

    响应式布局的原理 页面源码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...