Coremltools TypeError:不支持 Keras 层类型

Posted

技术标签:

【中文标题】Coremltools TypeError:不支持 Keras 层类型【英文标题】:Coremltools TypeError: Keras layer type not supported 【发布时间】:2020-12-16 14:01:30 【问题描述】:

我训练了一个自定义 YOLOv4 模型。然后我使用以下方法将权重转换为 .h5:

https://github.com/david8862/keras-YOLOv3-model-set/tree/master/tools/model_converter

之后我尝试将 .h5 转换为 coreml:

# Custom activation function
from keras.layers import Activation
from keras import backend as K
from keras.utils.generic_utils import get_custom_objects

def mish(x):
  return x * K.tanh(K.softplus(x))

get_custom_objects().update('mish': Activation(mish))

from keras.models import load_model
from keras.utils import CustomObjectScope
from keras.initializers import glorot_uniform

with CustomObjectScope('GlorotUniform': glorot_uniform()):
    model = load_model('yolov4_custom.h5', compile=False)

mlModel = coremltools.converters.keras.convert(model,
                                        input_names='image',
                                        image_input_names='image',
                                        input_name_shape_dict='image': [None, 416, 416, 3])

调用 ..keras.convert(....) 时出现错误:

TypeError: 不是 支持

【问题讨论】:

【参考方案1】:

Keras 中的后端数学运算(在您的情况下为 tanh 和 softplus)不是可以转换的层。而是尝试使用函数的 Layer 或 Activation 版本来重构函数。

一般来说,如果你想要一个 CoreML 不支持的自定义层或激活,你需要在 convert 方法中指定自定义函数并提供一个 Swift/Objective-C 实现。以下是为 Swish 激活执行此类操作的一个很好的指南:https://machinethink.net/blog/coreml-custom-layers/

【讨论】:

以上是关于Coremltools TypeError:不支持 Keras 层类型的主要内容,如果未能解决你的问题,请参考以下文章

CoreMLTools 转换为 MLModel:reName_Feature 不起作用

TypeError:输入类型不支持 ufunc 'isnan' - seaborn Heatmap

TypeError:实例Python之间不支持'<'

TypeError: 'str' 不支持缓冲区接口

TypeError: 不支持的操作数类型 -: 'list' 和 'list'

TypeError:不支持的操作数类型|:'bool'和'Q'[关闭]