标签:upd deb new code ssi height 增加 href 其他
---恢复内容开始---
在caffe中如果想要增加新的功能层,必须要自己在caffe的安装目录下(source code)中增加相应的文件
大体步骤如下:
参考教程: https://blog.csdn.net/tangwei2014/article/details/46815231
https://www.cnblogs.com/denny402/p/5071126.html
tensorflow ckpt转 caffemodel遇到的坑
龙明盛老师的论文基本都是caffe 可以看他是怎么实现的一些层
一个别人实现的新层例子:
https://github.com/luoyetx/OrdinalRegression
具体实现:
一些基础知识:
Kevin 老师帮忙整理的资料
1. bottom是个blob指针的数组,bottom[0]第一个输入的指针, bottom[1]第二个输入指针, top[0]第一个输出指针
LayerSetUp函数中:
int bottom_batch_size_ = bottom[0]->num();
int bottom_channels_ = bottom[0]->channels();
int bottom_height_ = bottom[0]->height();
int bottom_width_ = bottom[0]->width();
注意,对于指针取数据用-> 对于单纯blob取数据 用 .
blob<Dtype>* 表示指向blob的指针,其中blob的数据类型是Dtype
但是如果要取blob对应的数据地址要用 ->cpu_data() 这个类似于取数据的地址操作
Forward_cpu函数中:
Dtype* top_data = top[0]->mutable_cpu_data(); //mutable_cpu_data()表示top[0]数据可修改
const Dtype* bottom_data = bottom[0]->cpu_data(); //-> cpu_data()表示只可读
caffe自带的数学函数 https://blog.csdn.net/seven_first/article/details/47378697
2. shape操作
vector<int> top_shape = bottom[0]->shape();
top[0]->Reshape(top_shape);
如果top[0]的channel是bottom[0]的channel+bottom[1]的channel,其他的都一样,可以这样定义:
vector<int> top_shape = bottom[0]->shape();
top_shape[1] = bottom[0]->shape(1)+bottom[0]->shape(1);
top[0]->Reshape(top_shape);
如果这个变量是一个中间变量的话,可以这样定义:
Blob<Dtype> conf_permute_; //一般写在.hpp里
然后在.cpp中的LayerSetUp或者Reshape中定义 conf_permute_.ReshapeLike(*(bottom[1]));
注意成员函数的参数都是类型的,比如是blob指针,就可以直接输bottom[0], 如果要求参数是blob,
如果有取地址符,那么只需要传入实体,这样也能修改内容
如果是指针的话是 *的形式
3. 关于count
const int count = bottom[0]->count();表示 count = bottom[0]的num * channel * height * width
const int count = bottom[0]->count(0, 1); 表示 count = bottom[0]的num * channel
const int count = bottom[0]->count(0, 2); 表示 count = bottom[0]的num * channel* height
const int count = bottom[0]->count(1); 表示 count = bottom[0]的 channel * height * width
const int count = bottom[0]->count(2); 表示 count = bottom[0]的 height * width
const int num = bottom[0]->shape(0); //bottom[0]的batch_size
const int channel = bottom[0]->shape(1); //bottom[0]的channel
const int height = bottom[0]->shape(2); //bottom[0]的height
const int width = bottom[0]->shape(3); //bottom[0]的width
3.printf:
const int count = bottom[0]->count();
printf("count %d\n", count);
4.gdb Debug调试:
https://zhuanlan.zhihu.com/p/28146796
标签:upd deb new code ssi height 增加 href 其他
原文地址:https://www.cnblogs.com/lainey/p/9026381.html