在caffe中卷基层是通过矩阵相乘来实现的实现,直接计算卷积可以由下面的程序表示:

可以看到,这段程序循环嵌套多,时间复杂度高,而使用矩阵相乘的形式:很多现成的矩阵运算库,不重复“造轮子” 。

我们来看代码:

在conv_layer 中卷记的操作主要由上面两个带红框的操作组成,其中bias是为卷积操作后的结果加入偏差项,这个简单暂不分析。关键在于gemm,卷积操作的核心所在。如下图:

在做矩阵相乘之前首先要将图片转化成向量的形式,调用的函数就是im2col。然后就是矩阵相乘gemm。Im2col 是一个用于图像到向量转换的函数,你大多数情况下不需要了解他,他的作用就是用在caffe原生的卷积运算中,将卷积运算变成矩阵相乘的运算。具体分析im2col_layer.cpp代码:

如下为参数设定的一些代码:

SetUp kernelShape

SetUp stride

SetUp pad

其中,pad的含义可以由下图所示:

SetUp dilation(膨胀系数)

通过reshape为im2col分配空间:

以及计算生成的卷记feature map的尺寸:

最关键的核心在于如下代码:

这段代码看上去特别复杂,但整体上可以分成两个部分,一个是红框的,一个是绿的。其中input_row:在原图中的行数input_col:在原图中的列数

通过这段代码,卷记的kernel就能转化成如下的矩阵:

这样,feature map 就转换成了对应的矩阵的形式,因此,卷积的操作也就能对应的用矩阵相乘的形式实现了。

77695@中国科学技术大学多媒体计算与通信教育部-微软重点实验室

MultiMedia Computing Group

caffe中卷积层的实现相关推荐

  1. Caffe中BN层与CONV层的融合(merge_bn)

    半年前写的博客,今天发现没有发出去,还好本地有md的文档,决定重新发一下 毕竟网上来回抄袭的blog太多了,代码质量也莫得保证 今天需要用pytorch融合下bn层,写个脚本稍后再传到csdn上 原理 ...

  2. caffe中各层的作用

    caffe中各层的作用: 关于caffe中的solver: cafffe中的sover的方法都有: Stochastic Gradient Descent (type: "SGD" ...

  3. 三分钟完全了解PyTorch中卷积层内部计算方法和权值初始值的来历,让你对模型有更深层次的理解

    首先先说明第一个答案,也就是PyTorch中卷积层的计算方法,其实这点很多人可能在书上已经看过图了,我只是用代码复现一遍 我们把所有变量都明确,首先是输入变量,我们设为2 * 2的全1矩阵,如下: 然 ...

  4. Pytorch中卷积层转向全连接层时,全连接层输入维度的确定

    Pytorch中卷积层转向全连接层时,全连接层输入维度的确定 一.代码法: 改变的AlexNet网络结构: AlexNet 二.公式法: 一.代码法: 改变的AlexNet网络结构: 输入维度为 ( ...

  5. CNN中卷积层、池化层和全连接层分别有什么作用和区别?

    卷积层:提取特征."不全连接,参数共享"的特点大大降低了网络参数,保证了网络的稀疏性,防止过拟合.之所以可以"参数共享",是因为样本存在局部相关的特性. 池化层 ...

  6. caffe中各个层——解析

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

  7. Caffe中Convolution层

    层类型:Convolution  lr_mult: 学习率的系数,最终的学习率是这个数乘以solver.prototxt配置文件中的base_lr.如果有两个lr_mult, 则第一个表示权值的学习率 ...

  8. caffe中batchnormal层的param参数lr_mult和decay_mult都为0的原因

    如下截取一部分train.prototxt的片段: layer {   name: "conv2_em/bn"   type: "BatchNorm"   bo ...

  9. CNN网络中卷积层的正向传播与反向传播理解

    1. 基础理论 1.1 网络结构梳理 在CNN网络模型是建立在传统神经网络结构上的,对于一个传统的神经网络其结构是这样的: 从上面可以看出,其模型是全连接的.若是使用一幅512*512大小的图像作为输 ...

最新文章

  1. 网站架构之统一数据服务平台技术
  2. iOS 实现多个可变 cell 复杂界面的制作
  3. java通过JDBC链接SQLServer2012
  4. koa html中添加数据,从零开始的Koa实战(6)插入数据
  5. torch-toolbox
  6. 禁止更改计算机名_【复习收藏】计算机操作系统考点归纳
  7. Juniper Space License Issue on Citrix Xen Environment
  8. VS的包含目录、库目录、引用目录、可执行目录解释
  9. python爬虫下载模块_python爬虫系列(4.5-使用urllib模块方式下载图片)
  10. 基于CSS3实现水平轮播效果
  11. oracle 不等函数,SQL(Oracle)日常使用与不常使用函数的汇总
  12. oracle怎么把in值列出来,oracle – SELECT的解析和绑定变量.. WHERE列IN(..)查询
  13. 毒鸡汤|心情不好的时候,看一看。你会发现心情会很不好。
  14. FFTW使用说明及实例调用
  15. 冲击港交所:百果园书写水果连锁运营默示录
  16. 角色设计竟然有这些小技巧
  17. 【C018】外星人冯诺依曼【转】
  18. 天琊 V1.0(测试 1125版)
  19. 下载b站视频方法,pr去水印
  20. 【bzoj 3238】差异

热门文章

  1. [detectron2 ] Mask R-CNN代码笔记
  2. 可以放adsense广告的博客-Google Bloger
  3. python接口学习记录
  4. Mono-mbe版本编译libmonobdwgc-2.0.so
  5. 音乐播放器开发实例(可毕设含源码)
  6. 除甲醛除雾霾更清新,AIRMX发布后装式新风系统旗舰
  7. 医生个人简历模板范文--带详细内容
  8. 1973 年 8 月 21 日 谷歌联合创始人Sergey Brin诞生
  9. 【智能家居远程控制系统】ESP8266连接阿里云(六)
  10. lucene-使用lius解析html