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