caffe代码学习--Blob

在caffe/src/caffe/中的blob.cpp文件和在caffe/include/caffe/中的blob.hpp文件分别对应于blob的实现文件及其头文件

data_:表示网络各层的输入和输出;diff_:表示代价函数相对于各层参数的梯度;shape_中主要存储4个变量:num表示数量;channels表示对应层的通道;height和width就表示单个数据的尺寸;count_:表示这个Blob里已经存储的元素的个数;capacity_:表示这个Blob的容量。


一、定义三个Reshape函数,分别对应的作用是(1)读取blob的num,channels,width,height;(2)计算blob的count,即为num*channels*width*height,如果count大于blob本身的容量(capacity),进行reset处理;(3)定义一个与shape有相同维度的向量,并把shape的对应维度赋值给新的向量

二、是ReshapeLike函数,定义一个新的blob,与原来的一样,命名为othera

三、对blob的简单初始化操作

四、blob结构体中的data和diff的数据指针操作,有cpu和gpu两种,同时还有限制不能对返回的指针指向内容进行修改和可以对返回的指针指向内容进行修改两种类型,即是const和mutable这两种情况

五、sharedata和sharediff表示可以让其他blob的data和diff和当前的Blob进行共享

六、blob的更新,主要有三种情况,HEAD_AT_CPU;HEAD_AT_GPU;SYNCED,并对每种情况单独解释说明,最终的目的都是减去diff的值,计算公式为data=-1 * diff + data

七、CopyFrom表示从source文件中拷贝数据,copy_diff表示的从data还是diff中拷贝,是一个bool型的变量

八、FromProto表示的是从proto中将文件数据读取进来

九、ToProto表示将文件数据保存到proto中

而blob中的SyncedMemory主要就是在gpu或者cpu上分配数据内存

其中blob中的主要函数为如下图所示:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装依赖 首先需要安装 Caffe 和一些相关的依赖项: sudo apt-get update sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install --no-install-recommends libboost-all-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev 2. 下载源码 下载 Caffe源码,建议使用 GitHub 上的官方仓库: git clone https://github.com/weiliu89/caffe.git 3. 编译 Caffe 进入 Caffe 的根目录,然后执行以下命令进行编译: cd caffe cp Makefile.config.example Makefile.config make all -j8 make test -j8 make runtest -j8 4. 下载预训练模型 下载 SSD 的预训练模型,可以从以下链接中选择: https://github.com/weiliu89/caffe/tree/ssd#models 将下载好的模型放到 Caffe 的根目录下的 models 目录中。 5. 测试 SSD 在 Caffe 的根目录下执行以下命令,测试 SSD 的效果: ./build/tools/caffe test \ --model=models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt \ --weights=models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel \ --iterations=5000 \ --gpu=0 6. 使用 SSD 如果已经成功测试了 SSD,就可以在自己的代码中使用它了。需要引入以下头文件: #include "caffe/caffe.hpp" #include "caffe/util/db.hpp" #include "caffe/blob.hpp" #include "caffe/common.hpp" #include "caffe/net.hpp" #include "caffe/proto/caffe.pb.h" #include "caffe/layers/input_layer.hpp" #include "caffe/layers/conv_layer.hpp" #include "caffe/layers/pooling_layer.hpp" #include "caffe/layers/softmax_layer.hpp" #include "caffe/layers/relu_layer.hpp" #include "caffe/layers/detection_output_layer.hpp" 然后可以通过以下方式加载模型: caffe::Net<float> net("models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt", caffe::TEST); net.CopyTrainedLayersFrom("models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel"); 最后就可以使用 SSD 进行目标检测了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值