当我尝试使用coremltools将模型从Caffe转换为Core ML模型时,我得到以下结果:
================= Starting Conversion from Caffe to CoreML ======================
Layer 0: Type: 'Data', Name: 'data'. Output(s): 'data', 'label'.
WARNING: Skipping Data Layer 'data' of type 'Data'. It is recommended to use Input layer for deployment.
Layer 1: Type: 'Split', Name: 'label_data_1_split'. Input(s): 'label'. Output(s): 'label_data_1_split_0', 'label_data_1_split_1'.
Layer 2: Type: 'Convolution', Name: 'conv1'. Input(s): 'data'. Output(s): 'conv1'.
Layer 3: Type: 'Slice', Name: 'slice1'. Input(s): 'conv1'. Output(s): 'slice1_1', 'slice1_2'.
Layer 4: Type: 'Eltwise', Name: 'etlwise1'. Input(s): 'slice1_1', 'slice1_2'. Output(s): 'eltwise1'.
Traceback (most recent call last):
File "test.py", line 2, in <module>
coreml_model = coremltools.converters.caffe.convert('_iter_3560000.caffemodel')
File "/Users/zfh/Desktop/face_verification_experiment/model/python27/lib/python2.7/site-packages/coremltools/converters/caffe/_caffe_converter.py", line 142, in convert
predicted_feature_name)
File "/Users/zfh/Desktop/face_verification_experiment/model/python27/lib/python2.7/site-packages/coremltools/converters/caffe/_caffe_converter.py", line 187, in _export
predicted_feature_name
RuntimeError: Unsupported option 'Max' for the parameter 'operation' in layer 'etlwise1' of type 'Elementwise' during caffe conversion.
这是我正在使用的代码:
import coremltools
coreml_model = coremltools.converters.caffe.convert(('_iter_3560000.caffemodel', 'LCNN_deploy.prototxt'))
coreml_model.save('_iter_3560000.mlmodel')
任何想法是什么问题?非常感谢你!
答案 0 :(得分:1)
正如错误消息所示,问题是coremltools不支持Eltwise层中的Max操作。 Core ML仅支持有限数量的层。
然而......似乎你可能正在尝试转换用于训练的.prototxt(即使文件名为{{1}})。你确定这是正确的deploy.prototxt吗?
答案 1 :(得分:0)
最近,我从coremltools中提取了caffe2mlmodel的转换工具,它是c ++实现。 首先,你需要知道这个工具支持的caffe层,在caffe.proto中定义(包括在caffeconverter目录中) 然后,打开caffe.proto,你可以找到消息LayerParameter,如下所示:,。您可以找到支持的caffe图层。 caffe.proto in caffeconverter of coremltools 最后,如果你想要自定义caffe图层,只需添加适应caffe.proto,并学习Core ML模式protobuf规范(https://apple.github.io/coremltools/coremlspecification/#)