Caffe各层参数解析

本文以OpenPose的网络结构为例对各层参数进行解析

训练的网络文件


数据层

layer {
  name: "data"                          表示该层名字
  type: "CPMData"                       层有多种类型,比如:Data、Convolution、Pooling,Data表示数据来源于Leveldb或者LMDB
  top: "data"                           每一层用top来输出数据,只有top没有bottom,则这一层只有输出没有输入,反之亦然
  top: "label"                          如果有多个top和bottom,表示有多个blobs数据的输入输出
  data_param {
    source: "/mnt/sdb/yangbin/COCO_kpt/lmdb"      包含数据库的目录名称
    batch_size: 10                      每次处理数据的个数
    backend: LMDB                       选择采用Leveldb还是LMDB,默认采用leveldb
  }
  cpm_transform_param {                 自定义层,之后会进行补充
    stride: 8
    max_rotate_degree: 40
    visualize: false
    crop_size_x: 368
    crop_size_y: 368
    scale_prob: 1
    scale_min: 0.5
    scale_max: 1.1
    target_dist: 0.6
    center_perterb_max: 40
    do_clahe: false
    num_parts: 56
    np_in_lmdb: 17
  }
}

Eltwise层

layer {
  name: "weight_stage1_L2"               官方注释:http://caffe.berkeleyvision.org/tutorial/layers/eltwise.html
  type: "Eltwise"                        按元素操作层
  bottom: "conv5_5_CPM_L2"
  bottom: "heat_weight"
  top: "weight_stage1_L2"
  eltwise_param {
    operation: PROD                      支持三种基本操作:1.PROD - 按元素乘积; 2.SUM - 按元素求和(默认,若实现相减,设置第一个coeff参数为1,第二个coeff参数为-1); 3.MAX - 保存元素大者
  }
}

EuclideanLoss层

layer {
  name: "loss_stage1_L1"                 官方注释:http://caffe.berkeleyvision.org/tutorial/layers/euclideanloss.html
  type: "EuclideanLoss"                  源码分析:https://blog.csdn.net/seashell_9/article/details/68064294
  bottom: "weight_stage1_L1"
  bottom: "label_vec"
  top: "loss_stage1_L1"
  loss_weight: 1                         默认为1
}

BatchNorm层

BN层的设定一般按照conv→BN→scale→relu的顺序来形成一个block
https://www.cnblogs.com/makefile/p/batch-norm.html?utm_source=debugrun&utm_medium=referral

layer {
  name: "conv1/bn"
  type: "BatchNorm"
  bottom: "conv1"
  top: "conv1"                           #inplace
  param {                                #均值
    lr_mult: 0
    decay_mult: 0
  }                      
  param {                                
    lr_mult: 0                           #方差
    decay_mult: 0
  }
  param {                             
    lr_mult: 0                           #Scale
    decay_mult: 0
  }
  batch_norm_param {
    use_global_stats: true                #训练的时候要设置为false,测试时设置为true
    eps: 1e-5                             #分母附加值,防止除以方差时出现除0操作,默认为1e-5
  }
}

VGG19前十层

OpenPose采用VGG19模型的前十层网络进行初始化


卷积层

layer {
  name: "conv1_1"                        #表示该层的名称
  type: "Convolution"                    #层类型
  bottom: "image"                        #输入
  top: "conv1_1"                         #输出
  param {                               
    lr_mult: 1.0                         #权值的学习率,最终的学习率是这个系数乘以solver.prototxt配置文件中的base_Ir
    decay_mult: 1                        #权值衰减系数
  }
  param {
    lr_mult: 2.0                         #如果有两个Ir_mult,则第二个代表偏置项的学习率,一般来说偏置项的学习率是权值学习率的两倍
    decay_mult: 0
  }
  convolution_param {
    num_output: 64                       #卷积核的个数,convolution_param主要用于设定卷积层的特有参数
    pad: 1
    kernel_size: 3
    weight_filler {                      #权值初始化
      type: "gaussian"                   #默认为“constant”,值为0,“gaussian”使用高斯分布初始化权值
      std: 0.01                          #std是参数初始化成是高斯分布的标准差,std越小,证明高斯曲线越平滑,各个权重值基本相同   
                                         详见https://blog.csdn.net/kenny_star/article/details/69949846
    }
    bias_filler { 
      type: "constant"                   #偏置项的初始化,一般设置为“constant”,值全为0
    }
  }
}

激活层

layer {
  name: "relu1_1"                        对输入数据进行激活操作(一种函数变换),从bottom得到一个blob数据输入,运算后,从top输出一个blob数据
  type: "ReLU"                           在运算过程中,只对输入数据逐个元素进行函数变化,不改变数据维度大小
  bottom: "conv1_1"                      输入:n*c*h*w  输出:n*c*h*w
  top: "conv1_1"                         Relu层支持in-place计算,因此Relu层的输入输出可以相同,这意味着该层的输入输出可以共享同一块内存,减少内存消耗,其它层不支持
}

池化层

layer {
  name: "pool1_stage1"
  type: "Pooling"                        #层类型
  bottom: "conv1_2"
  top: "pool1_stage1"
  pooling_param {
    pool: MAX                            #池化方法,默认为MAX,其他还有AVE、STOCHASTIC(随机采样池化)
    kernel_size: 2
    stride: 2
  }
}

连接层

layer {
  name: "concat_stage2"                  #输入:n_i * c_i * h * w  for each input blob i from 1 to K.
  type: "Concat"
  bottom: "conv5_5_CPM_L1"
  bottom: "conv5_5_CPM_L2"
  bottom: "conv4_4_CPM"
  top: "concat_stage2"
  concat_param {                         https://blog.csdn.net/u012426298/article/details/80743284
    axis: 1                              if axis = 0: (n_1 + n_2 + ... + n_K) * c_1 * h * w, and all input c_i should be the same
                                         if axis = 1: n_1 * (c_1 + c_2 + ... + c_K) * h * w, and all input n_i should be the same
  }
}

Scale层

https://blog.csdn.net/zxyhhjs2017/article/details/85265921

Reshape层

https://www.cnblogs.com/rainsoul/p/8321195.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容