https://www.zhihu.com/question/28385679

https://github.com/Yangqing/caffe/wiki/Convolution-in-Caffe:-a-memo

作者贾扬清亲自解释了这个问题。Caffe框架是他在研究生毕业毕业前两个月的时间写的,自然有一些缺点(占用内存方面)。其实卷积是很难优化的,因为我们一般是在单通道的图像和单个滤波器之间进行卷积,但是深度学习中是多核多通道卷积。

对通道为C,高和宽分别为H、W的图像,在每一个位置上,划分一个KxK大小的patch,算上通道数,那就是CxKxK大小的patch,一共有HxW个patch:

这样就完成了由图像到矩阵的转化,这种操作在matlab中叫做im2col。需要注意的是,因为每一个像素点都对应一个patch,可以看成patch区域在图像上滑动,滑动的过程是有重叠的,转化所得的矩阵大小大于原图像。

与此同时,我们也要将滤波器转化成矩阵形式。

这样,卷积就可以转化为矩阵乘法(Gemm in BLAS)问题,调用GEMM(GEneralized Matrix Multiplication)对两矩阵内积。BLAS有许多性能优良的库,而且由分销商Intel和Nvidia针对所有平台进行优化。

以上,就是作者上学期间采用的一种讨巧的方法,将问题转换成更加简单的,已经可以解决的问题。在当时取得了很好的效果,直到Alex Krizhevsky基于对GPU的深刻理解,在cuda-convert中又取得了巨幅的提升,这种方法被碾压,这就是另外一个故事了。https://code.google.com/p/cuda-convnet2/

Caffe中的卷积实现相关推荐

  1. Caffe 中的卷积--权宜之计

    Caffe 中的卷积中的效果不是很好,经常被人所诟病.首先来看看作者本人是怎么回答这个问题的. https://github.com/Yangqing/caffe/wiki/Convolution-i ...

  2. c++调用caffe ssd_【caffe教程5】caffe中的卷积

    本文首发于公众号<有三AI> [caffe解读] caffe从数学公式到代码实现5-caffe中的卷积​mp.weixin.qq.com 今天要讲的就是跟卷积相关的一些layer了 im2 ...

  3. caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?

    在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权 ...

  4. caffe中forward过程总结

    caffe中最重要的两个部分就是forward和backward的过程,farward是根据输入数据正向预测输入属于哪一类:backward是根据输出的结果求得代价函数,然后根据代价函数反向求去其相对 ...

  5. caffe中各个层——解析

    转自:http://www.cnblogs.com/denny402/p/5071126.html 所有的层都具有的参数,如name, type, bottom, top和transform_para ...

  6. 【caffe解读】 caffe从数学公式到代码实现5-caffe中的卷积

    文章首发于微信公众号<与有三学AI> [caffe解读] caffe从数学公式到代码实现5-caffe中的卷积 今天要讲的就是跟卷积相关的一些layer了 im2col_layer.cpp ...

  7. Caffe中如果高效实现卷积层

    卷积层是caffe中比较关键的的一个层,其里面实现运用了大量技巧,关键卷积层的实现可以看看贾清杨是如何吐槽的 https://github.com/Yangqing/caffe/wiki/Convol ...

  8. caffe中RGB图像三通道卷积过程学习推导

    idea来源于自己的想法,之前在github看过大神贾杨清的推导slider,caffe中如果计算卷积,加上自己最近有个很小的疑惑,输入的image一般是RGB三通道的彩色图片,但是我们在定义卷积层时 ...

  9. caffe中卷积层的实现

    在caffe中卷基层是通过矩阵相乘来实现的实现,直接计算卷积可以由下面的程序表示: 可以看到,这段程序循环嵌套多,时间复杂度高,而使用矩阵相乘的形式:很多现成的矩阵运算库,不重复"造轮子&q ...

最新文章

  1. 【怎样写代码】参数化类型 -- 泛型(四):泛型之类型参数约束
  2. java web配置dll文件_JavaWeb项目中dll文件动态加载方法解析(详细步骤)
  3. android 双 webview,Android webview加载页面
  4. windows netstat 查看端口、进程
  5. Fedora 17 Beta 版发布
  6. 我的docker随笔2:docker在ubuntu上的安装
  7. 第二部分:开发简要指南-第六章 使用Fragments构建动态UI
  8. 计算机求百钱买百鸡采用的算法,多种解法求百钱百鸡问题.doc
  9. java正则表达式获得html字符串中图片的url地址
  10. 戏说前端 JavaScript 之『防抖节流』基础知识
  11. 如何用C#写一个简单的Login窗口
  12. 从有序数组中找出某个数出现的次数
  13. 在安装win7系统时如何不产生100M的系统保留分区
  14. 人工智能研究中心快递柜——代码分析五
  15. linux修复win10启动失败,win10自动修复失败开不了机解决方法
  16. Windows下如何启动Redis服务?
  17. flash_tools安装及使用完全教程
  18. Vue-3-单文件组件
  19. 自学编程之路(自我记录)
  20. 诺基亚5800XM深度测

热门文章

  1. 2019 年,智能问答(Question Answering)的主要研究方向有哪些?
  2. java程序员学习路线以及我的学习经验
  3. Java多线程系列(十一):ReentrantReadWriteLock的实现原理与锁获取详解
  4. 论文浅尝 - ICLR2020 | 知识图谱中数值规则的可微学习
  5. 论文浅尝 | 将字面含义嵌入知识图谱表示学习
  6. 论文浅尝 | 面向自动分类归纳的端到端强化学习
  7. Python 捕获异常
  8. 机器阅读理解首次超越人类!云从刷新自然语言处理新纪录
  9. Android官方开发文档Training系列课程中文版:多样屏幕之支持不同的屏幕尺寸
  10. Java学习--内部类