caffe的卷积层的乘积运算的优化

https://hal.inria.fr/file/index/docid/112631/filename/p1038112283956.pdf

caffe的卷积计算的优化来自这篇paper,实际上就是将卷积核矩阵和feature map矩阵(或者图像矩阵)转换为大的矩阵

jiayangqing自己也分析了为何要做这种转换,如下图

具体的优化过程如下图:

在caffe中是通过conv_im2col_cpu函数来实现,conv_im2col_cpu(/include/caffe/vision_layers.hpp)又通过im2col_cpu来实现(/util/im2col.cpp),还通过skip_im2col来控制是否要进行这种转换

https://github.com/Yangqing/caffe/wiki/Convolution-in-Caffe:-a-memo,jiayangqing自己将caffe的卷积实现

https://www.zhihu.com/question/28385679,知乎也有这个问题的讨论

https://www.zhihu.com/question/28385679,这个人讲的也还可以

原文地址:https://www.cnblogs.com/ymjyqsx/p/9402514.html

时间: 2024-10-08 23:17:40

caffe的卷积层的乘积运算的优化的相关文章

TensorFlow与caffe中卷积层feature map大小计算

刚刚接触Tensorflow,由于是做图像处理,因此接触比较多的还是卷及神经网络,其中会涉及到在经过卷积层或者pooling层之后,图像Feature map的大小计算,之前一直以为是与caffe相同的,后来查阅了资料发现并不相同,将计算公式贴在这里,以便查阅: caffe中: TF中: 参考: http://blog.csdn.net/lujiandong1/article/details/53728053 http://www.cnblogs.com/denny402/p/5071126.h

caffe之(一)卷积层

在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要介绍卷积层 1. 卷积层总述 下面首先给出卷积层的结构设置的一个小例子(定义在.prototxt文件中) layer { name: "conv1" // 该层的名字 type: "Convolution" // 该层的类型,具体地,可选的类型有:Convolution

Caffe 源码阅读(二) 卷积层

背景: 项目中需要在 caffe 中增加 binary convolution layer, 所以在单步调试了 minist 的训练,大致看了一下流程,就详细看 convolution layer 了. 1.数据结构 caffe 的基本数据结构是 Blob,也就是数据流的基本结构. 2.网络结构 Net 是 Layer 构造出来的,Layer 包括了数据和运算(Blob input, Blob output, operation). 3.卷积 3.1 卷积意义 卷积实际上是一种线性运算,只不过用

Caffe 中卷积运算的原理与实现

caffe中卷积运算设计的很巧妙,今天就来讨论一下caffe中卷积运算的原理,最后会给出一个自己的实现版本,便于初学者理解. Caffe中卷积运算的原理 俗话说,一图胜千言,首先先给出原理示意图,为了方便,这里以二维核为例 滑动窗口在图像中每滑动一个地方,将图像中该滑动窗口图像展开为一列,所有列组成图中的滑动窗口矩阵,这里假设pad=1,stride=1,K=3,则滑动窗口矩阵每行大小为W*H,一共K*K行. 每个核展开为一行,N个核形成的核矩阵大小为N*K*K. 最后将核矩阵和滑动窗口矩阵相乘

[转]LeNet-5结构分析及caffe实现————卷积部分

LeNet-5结构分析及caffe实现----卷积部分 原文地址:http://www.cnblogs.com/wangxiu/p/5513354.html 1.lenet-5的结构以及部分原理 2.caffe对于lenet-5的代码结构 图一 图一是整个LeNet-5的结构图,要点有:convolutions.subsampling.full connection.gaussian connection. 要点拆分: 1.convolution 是卷积操作,对应的概念有卷积核.特征图.权值共享

FCN用卷积层代替FC层原因(转)

分类任务 CNN对于常见的分类任务,基本是一个鲁棒且有效的方法.例如,做物体分类的话,入门级别的做法就是利用caffe提供的alexnet的模型,然后把输出的全连接层稍稍修改称为自己想要的类别数,然后再根据实际需要修改网络模型(通常是瘦身).下面记录几个point. 关于crop 一般在训练的时候会利用两个手段做data augmentation,分别是mirror和crop.其中,mirror没什么特别,但是crop有一些东西我们需要了解. 在训练的时候,crop操作会在大图上随机切小图,然后

【深度学习】卷积层提速Factorized Convolutional Neural Networks

Wang, Min, Baoyuan Liu, and Hassan Foroosh. "Factorized Convolutional Neural Networks." arXiv preprint arXiv:1608.04337 (2016). 本文着重对深度网络中的卷积层进行优化,独特之处有三: - 可以直接训练.不需要先训练原始模型,再使用稀疏化.压缩比特数等方式进行压缩. - 保持了卷积层原有输入输出,很容易替换已经设计好的网络. - 实现简单,可以由经典卷积层组合得到

学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层

CNN神经网络架构至少包含一个卷积层 (tf.nn.conv2d).单层CNN检测边缘.图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率. TensorFlow加速所有不同类弄卷积层卷积运算.tf.nn.depthwise_conv2d,一个卷积层输出边接到另一个卷积层输入,创建遵循Inception架构网络 Rethinking the Inception Architecture for Computer Vision https://arxiv.org/ab

『cs231n』作业2选讲_通过代码理解卷积层&池化层

卷积层 卷积层向前传播示意图: def conv_forward_naive(x, w, b, conv_param): """ A naive implementation of the forward pass for a convolutional layer. The input consists of N data points, each with C channels, height H and width W. We convolve each input w