windows Caffe 中的未知图层类型(裁剪)
Unknown layer type (crop) in Caffe for windows
我想使用以下卷积神经网络:
http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/
使用从 https://github.com/BVLC/caffe/tree/windows
构建的咖啡
对于 windows 10,具有 visual studio 2013、CUDA 7.5、cudNN 4 和 python 支持。
现在,当我调用
提供的两个网络中的任何一个时
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 }
我上网查了一下,好像有人遇到了同样的错误信息。但是,我找不到任何解决方案。
我现在的问题是:如何摆脱这个错误?
非常感谢帮助!
编辑:
按照 的建议更改 .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。
谢谢!
解法:
您应该将 net.prototxt
修改为:
layers { ... type: CROP }
至
layer { ... type: "Crop" }
同时prototxt中其他层的参数也要修改成类似:
layer { ... type: "TypeString" }
,
并且 TypeString
可以从以下位置找到:
- 相关
some_layer_name_layer.cpp
文件中的行 REGISTER_LAYER_CLASS(some_layer_name)
。例如,data_layer.cpp
中的REGISTER_LAYER_CLASS(Data)
表示在net.prototxt
中写入数据层时,TypeString
应为Data
。
REGISTER_LAYER_CREATOR(some_layer_name, GetSomeLayer)
在 layer_factory.cpp
。例如REGISTER_LAYER_CREATOR(Convolution, GetConvolutionLayer)
表示在net.prototxt
中写一个卷积层时TypeString
应该是Convolution
。
原因:
您出现问题的原因是:您使用了旧的图层参数格式
layers { ... type: SOMELAYERNAME }
。
并且这种来自 V1LayerParameter
in caffe.proto 的格式不支持一些较新的图层类型,包括 crop
图层。
您可以通过检查 V1LayerParameter
的 enum LayerType
不包含图层类型 CROP
来确认这一点。
为避免此问题,您始终可以使用最新格式:
layer { ... type: "TypeString" }
其中TypeString
可以在上面提到的两个地方找到
编辑 1
简单说明:
一般来说,错误:
Error parsing text-format caffe.xxxParameter: ...
始终可以通过检查 xxx.prototxt
文件是否使用了在 caffe.proto 中声明的正确字段名称并为其分配了正确的值(通过检查字段类型及其值范围)来解决。
我想使用以下卷积神经网络:
http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/
使用从 https://github.com/BVLC/caffe/tree/windows
构建的咖啡对于 windows 10,具有 visual studio 2013、CUDA 7.5、cudNN 4 和 python 支持。
现在,当我调用
提供的两个网络中的任何一个时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 }
我上网查了一下,好像有人遇到了同样的错误信息。但是,我找不到任何解决方案。
我现在的问题是:如何摆脱这个错误?
非常感谢帮助!
编辑:
按照
[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。
谢谢!
解法:
您应该将 net.prototxt
修改为:
layers { ... type: CROP }
至
layer { ... type: "Crop" }
同时prototxt中其他层的参数也要修改成类似:
layer { ... type: "TypeString" }
,
并且 TypeString
可以从以下位置找到:
- 相关
some_layer_name_layer.cpp
文件中的行REGISTER_LAYER_CLASS(some_layer_name)
。例如,data_layer.cpp
中的REGISTER_LAYER_CLASS(Data)
表示在net.prototxt
中写入数据层时,TypeString
应为Data
。 REGISTER_LAYER_CREATOR(some_layer_name, GetSomeLayer)
在layer_factory.cpp
。例如REGISTER_LAYER_CREATOR(Convolution, GetConvolutionLayer)
表示在net.prototxt
中写一个卷积层时TypeString
应该是Convolution
。
原因:
您出现问题的原因是:您使用了旧的图层参数格式
layers { ... type: SOMELAYERNAME }
。
并且这种来自 V1LayerParameter
in caffe.proto 的格式不支持一些较新的图层类型,包括 crop
图层。
您可以通过检查 V1LayerParameter
的 enum LayerType
不包含图层类型 CROP
来确认这一点。
为避免此问题,您始终可以使用最新格式:
layer { ... type: "TypeString" }
其中TypeString
可以在上面提到的两个地方找到
编辑 1
简单说明:
一般来说,错误:
Error parsing text-format caffe.xxxParameter: ...
始终可以通过检查 xxx.prototxt
文件是否使用了在 caffe.proto 中声明的正确字段名称并为其分配了正确的值(通过检查字段类型及其值范围)来解决。