Caffe for windows中的未知图层类型(裁剪)

时间:2016-09-10 16:59:39

标签: python caffe

我想使用以下卷积神经网络:

http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/

使用https://github.com/BVLC/caffe/tree/windows

构建的caffe

适用于带有Visual Studio 2013,CUDA 7.5,cudNN 4和python支持的Windows 10。

现在,当我打电话给

提供的两个网络中的任何一个时
net = caffe.Net('xyz.prototxt', 'xyz.caffemodel', caffe.TEST)

我收到以下错误:

 Error parsing text-format caffe.NetParameter: 43:85: Unknown enumeration value of "CROP" for field "type".

网络的第43行如下所示:

layers { bottom: 'd3c' bottom: 'u3a' top: 'd3cc'  name: 'crop_d3c-d3cc'  type: CROP }

我在网上看过,有些人似乎遇到了同样的错误信息。但是,我找不到任何解决方案。

我现在的问题是:如何摆脱这个错误?

非常感谢帮助!

修改

根据Dale Song的建议更改.prototxt消除了此错误,但导致另一个错误:

[libprotobuf ERROR ..\src\google\protobuf\text_format.cc:274] Error parsing text-format caffe.NetParameter: 10:102: Message type "caffe.LayerParameter" has no field named "blobs_lr".

我通过替换

来解决这个问题
blobs_lr: 1 weight_decay: 1 blobs_lr: 2 weight_decay: 0

 param {lr_mult: 1 decay_mult: 1} param {lr_mult: 2 decay_mult: 0}
在.prototxt中

,如建议here

谢谢!

1 个答案:

答案 0 :(得分:3)

<强>解决方案:

您应该修改net.prototxt

layers { ... type: CROP }

layer { ... type: "Crop" }

同时,其他层次&#39;原型中的参数也应该类似于:

进行修改

layer { ... type: "TypeString" }

TypeString可以从以下网址找到:

  1. 相关REGISTER_LAYER_CLASS(some_layer_name)文件中的行some_layer_name_layer.cpp。例如,REGISTER_LAYER_CLASS(Data)中的data_layer.cpp表示在TypeString中编写数据层时Data应为net.prototxt
  2. REGISTER_LAYER_CREATOR(some_layer_name, GetSomeLayer)
  3. layer_factory.cpp。例如,REGISTER_LAYER_CREATOR(Convolution, GetConvolutionLayer)表示在TypeString中编写卷积图层时Convolution应为net.prototxt
  4. <强>原因:

    您遇到问题的原因是:您使用了旧的图层参数格式

    layers { ... type: SOMELAYERNAME }

    来自caffe.protoV1LayerParameter的此格式不支持某些较新的图层类型,包括crop图层。

    您可以通过检查enum LayerType的{​​{1}}是否包含图层类型V1LayerParameter来确认这一点。

    为避免此问题,您始终可以使用最新格式:

    CROP

    其中layer { ... type: "TypeString" }可以在上述2个地方找到。

    修改1

    简单说一句:

    一般来说,错误:

    TypeString

    总是可以通过检查Error parsing text-format caffe.xxxParameter: ... 文件使用caffe.proto中声明的正确字段名称并为其分配正确的值(通过检查字段类型及其值范围)来解决。