caffe源码
文章平均质量分 83
兢兢业业小码农
深度学习+python+有意思的小东西
分享爬坑经验
展开
-
caffe源码 Blob.cpp 详解
caffe数据块是整个框架的基础部分,了解其结构特点对了解框架特点抑或自己开发新层是十分必要的。 其blob.hpp主要是进行了一些:声明、类函数inline内嵌、简单函数定义等,不是很复杂。 因此主要介绍其cpp模块。#include <climits>#include <vector>#include "caffe/blob.hpp"#include...原创 2018-05-17 00:08:07 · 867 阅读 · 0 评论 -
caffe中的矩阵运算函数caffe_cpu_gemm,cblas_sgemm等解析
caffe中最典型且常用的卷积运算,是通过将卷积操作转化成矩阵乘法来实现的,因此,卷积层的一系列程序实际上就是在为矩阵的卷积式展开和矩阵乘法函数做准备,caffe_cpu_gemm也就是在调用矩阵乘法函数cblas_sgemm。1.矩阵间乘法:这里我们先来看一下这些矩阵乘法函数有输入需求,以单精度矩阵乘法函数cblas_sgemm为例:cblas_sgemm(CblasRowMajor, Cbla...原创 2018-05-31 11:24:19 · 5861 阅读 · 0 评论 -
caffe源码 base_conv_layer详解
看完了caffe中层的基础功能及构成后,我们通过base_conv_layer这个十分基础的卷积层来具体认识一下,caffe中层的定义,不多说,看源码。1.头文件先看头文件中,主要是一些声明和变量的定义:#ifndef CAFFE_BASE_CONVOLUTION_LAYER_HPP_#define CAFFE_BASE_CONVOLUTION_LAYER_HPP_#include <...原创 2018-05-30 16:35:15 · 1881 阅读 · 0 评论 -
caffe Dtype 泛型编程详解
caffe源码中大量应用了泛型编程,即编写与类型无关的代码,便于代码复用。其中,最常见的就是 template <typename Dtype>Dtype是泛型类型,进行利用模板的泛型编程,独立于任何特定类型,其参数模板类型Dtype无具体类型,根据输入类型来实例化具体类型。即使用其为占位符,使用类时再提供具体类型或者值。举个栗子:模板函数:template<typename T...原创 2018-05-16 21:03:17 · 2081 阅读 · 0 评论 -
ubuntu18.04编译最新caffe错误修正
这里记录些编译caffe时的报错:每次报错修改好后,别忘了先make clean,再make all -j4:1.主要是cuda,nvcc路径问题,解决方案:就是找到东西,把它复制到caffe想要的路径或者修改make.config文件中相应的库路径,个人比较喜欢复制的方法。。。2.还有就是我用的CUDA9.1不再支持compute_20架构了,所以把以下两行注释了就好了。CUDA_ARCH :=...原创 2018-05-15 14:58:02 · 2597 阅读 · 0 评论 -
octree generative net 向最新版caffe移植过程
1.先将caffe/src/caffe/layers 中cpp文件和 caffe/include/caffe/layers 中hpp文件中所有有关于OGN的层复制到最新版caffe的对应位置,除了ogn开头的文件外,还有caffe/src/caffe/layers/label_to_onehot_layer.cpp和其对应hpp文件。此外,将caffe/include/image_tree_too...原创 2018-05-14 21:29:25 · 242 阅读 · 0 评论 -
高效八叉树octree:基于hash函数的数据结构
1.基础知识八叉树octree是一种递归、轴对齐且空间分隔的数据结构,常用于计算机几何来优化碰撞检测、最邻近搜索等,且常用于3D数据的表达。一个八叉树结构,将有限的三维体数据等分为8个octants。octants也被称为nodes(节点,树结构概念中)或者cells(单元,空间概念中)。将空间分成等大小的立方体可以加速细分运算,且单元大小的存储也节省空间。一个八叉树是通过递归的将空间细分成八个子...原创 2018-05-21 12:28:24 · 10321 阅读 · 4 评论 -
caffe NetState 参数中 level stages解释
摘自http://caffecn.cn/?/question/104level stages这两个参数网上没有太多解释,但实际上这两个参数可以一定程度增加网络的灵活程度,只需要设置几个数字即可便捷的在网络初始化阶段进行网络各层的删减和增加。NetState描述网络的State,在caffe.proto里的定义如下:message NetState { optional Phase phase ...原创 2018-05-14 10:56:15 · 3728 阅读 · 0 评论 -
caffe源码 Net的Init()及Netparameter 详解
Net完成的工作主要是:根据咱们写的prototxt网络结构文件,完成层之间的连接和初始化。这里先介绍其数据结构Netparameter ,再详解源码。关于protobuf的前置知识可以参考之前的博文。message NetParameter { optional string name = 1; // consider giving the network a name网络名 // DE...原创 2018-05-20 22:02:08 · 3207 阅读 · 0 评论 -
caffe源码 数据结构 google protobuf
caffe的数据结构,除了使用blob作为数据块,大部分的数据结构都用proto文件来定义。我们为表达网络结构所写prototxt文件就是protobuf读取的文件,从其中,protobuf可以获取层、参数的设置,反馈NetParameter、LayerParameter等重要初始化信息用于网络、层的建立和设置。caffe编译时,第一个编译的就是caffe.proto,它是所有文件的基础。什么是p...原创 2018-05-18 11:20:57 · 1479 阅读 · 0 评论 -
caffe源码 Layer 详解
Layer层是深度网络中基础单元,了解其源码架构,利于我们编写自定义的caffe层。通过阅读源码我们可以了解到Layer层的上通下达,不仅是对输入输出明确,还要明确需要重写、覆写的部分是哪些。#ifndef CAFFE_LAYER_H_#define CAFFE_LAYER_H_#include <algorithm>#include <string>#inclu...原创 2018-05-17 19:38:32 · 755 阅读 · 0 评论 -
caffe源码 SyncedMemory 详解
SyncedMemory是caffe中直接用于管理内存分配和GPU、CPU数据交互的类,只要服务Blob类。其头文件中大部分是声明,还有一些特别的:优化多GPU:如果用CUDA+GPU模式,CPU内存将会被分配固定(分配的内存可以常驻在内存空间中对效率是有帮助的,空间不会被别的进程所抢占)用cudamallochost,避免了用于传输的动态固定。这种对单GPU没啥用,但对多GPU提升了大模型的稳定...原创 2018-05-17 11:42:15 · 635 阅读 · 0 评论 -
opencv3与opencv2代码区别总结
总是在caffe编译时遇到opencv的版本问题,继续总结记录一波。基本上都是opencv3与opencv2版本差距问题。本人常常遇到的是:cvtColor函数中颜色转换系的宏,全替换为”COLOR_”前缀,如CV_BGR2HSV改为COLOR_BGR2HSV在caffe有时还要在前加cv::,不然还是找不到。caffe2 报错:caffe2/image/image_input_op.h:521:...原创 2018-06-22 12:39:40 · 9457 阅读 · 1 评论