[Caffe]:关于filler type

本文详细介绍了Caffe中参数填充器的作用与多种类型,包括Constant、Uniform、Gaussian等,并重点解析了Xavier与MSRA填充算法的工作原理及应用场景。

Caffe中parameter filler的作用和类型

作用

Fillers是caffe用特定算法随机生成的值来填充网络参数在blob里面的初始值。它只作用在参数的初始化阶段,与gpu无关的操作。

类型

  • Constant : 令填充值 x=0
  • Uniform : 令填充值 xU(a,b)
  • Gaussian : 令填充值 x=a
  • PositiveUnitball : 令填充值 x[0,1] ijxij=1
  • Xavier :令填充值 xU(a,+a) ; 其中 a 与输入节点,输出节点或着两者的均值成反比 (该算法是Bengio和Glorot 2010在Understanding the difficulty of training deep feedforward neuralnetworks里提出的)
  • MSRA : 令填充值xN(0,σ2); 其中 a 与输入节点,输出节点或着两者的均值成反比 (该算法是Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun在Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification里提出的)
  • bilinear : 一般用在deconvolution 层做upsampling;例子如下:
layer {
  name: "upsample", type: "Deconvolution"
  bottom: "{{bottom_name}}" top: "{{top_name}}"
  convolution_param {
    kernel_size: {{2 * factor - factor % 2}} stride: {{factor}}
    num_output: {{C}} group: {{C}}
    pad: {{ceil((factor - 1) / 2.)}}
    weight_filler: { type: "bilinear" } bias_term: false
  }
  param { lr_mult: 0 decay_mult: 0 }
}

更多细节读者可以查看这里.

在使用 `caffe2ncnn` 工具将 Caffe 模型转换为 NCNN 模型时,如果遇到错误提示: ``` Message type "caffe.InnerProductParameter" has no field named "normalize" ``` 这通常表示 Caffe 模型的 `.prototxt` 文件中某个层的参数字段 `normalize` 并不被 `caffe.proto` 中定义的 `InnerProductParameter` 所支持。具体来说,该错误可能来源于以下几种情况: 1. **模型定义文件中存在 NCNN 不支持的字段** Caffe 的某些自定义层或扩展功能在 NCNN 的 `caffe2ncnn` 转换工具中未被支持。例如,如果在 `InnerProduct` 层中引入了 `normalize` 字段,而该字段并未在原始 Caffe 的 `caffe.proto` 中定义,则会导致转换失败。NCNN 的 `caffe2ncnn` 工具基于 Caffe 官方的 proto 定义进行解析,因此只能识别标准字段[^2]。 2. **使用了非标准的 Caffe 模型定义** 如果模型是由第三方 Caffe 分支(如修改过的 caffe)生成,可能引入了新的参数字段(如 `normalize`),这些字段在标准 Caffe 或 NCNN 的解析器中无法识别。这种情况常见于一些定制化模型(如 SSD 中的 Normalize 层被错误地用于全连接层中)[^3]。 ### 解决方案 - **修改 `.prototxt` 文件,移除不支持的字段** 可以手动编辑 `.prototxt` 文件,找到报错的 `InnerProduct` 层,删除其中的 `normalize` 字段,确保其仅包含标准的 `num_output`、`weight_filler` 等字段。例如: ```protobuf layer { name: "fc1" type: "InnerProduct" bottom: "pool2" top: "fc1" inner_product_param { num_output: 100 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } ``` - **确认模型是否基于标准 Caffe 构建** 如果模型是通过修改后的 Caffe 框架导出,建议使用官方版本的 Caffe 重新导出模型。可以使用 `upgrade_net_proto_text` 和 `upgrade_net_proto_binary` 工具将模型转换为标准格式[^2]: ```bash ~/caffe/build/tools/upgrade_net_proto_text deploy.prototxt deploy_new.prototxt ~/caffe/build/tools/upgrade_net_proto_binary model.caffemodel model_new.caffemodel ``` - **检查 Normalize 层是否被错误地合并进 InnerProduct 层** 在某些模型优化过程中(如层融合),Normalize 层可能被错误地合并到 `InnerProduct` 层中,导致字段冲突。这种情况下应确保模型结构清晰、层之间无非法合并。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值