无法将 Caffe 模型转换为 Core ML 模型

Fail to convert Caffe model to Core ML model

当我尝试使用 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')

知道问题出在哪里吗?非常感谢!

如错误信息所述,问题是coremltools不支持Eltwise层中的Max操作。 Core ML 仅支持有限数量的层。

但是...您似乎正在尝试转换用于训练的 .prototxt(即使文件名是 LCNN_deploy.prototxt)。你确定这是正确的 deploy.prototxt?

最近从coremltools中提取了caffe2mlmodel的转换工具,是c++实现的。 首先,你需要知道这个工具支持caffe层,定义在caffe.proto(包含在caffeconverter目录下) 然后,打开caffe.proto,就可以定位到message LayerParameter,如下图:,。您可以找到支持的 caffe 层。 caffe.proto in caffeconverter of coremltools 最后,如果你想要自定义caffe层,只需添加适配caffe.proto,并学习Core ML模式protobuf规范(https://apple.github.io/coremltools/coremlspecification/#)