Coremltools类型错误:不支持Keras图层类型

Coremltools类型错误:不支持Keras图层类型,keras,yolo,coreml,coremltools,Keras,Yolo,Coreml,Coremltools,我训练了一个定制的YOLOv4模型。然后,我使用以下方法将权重转换为.h5: 之后,我尝试将.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.

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

之后,我尝试将.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:类型的Keras层不可用 支持


Keras中的后端数学操作(在您的例子中是tanh和softplus)不是可以转换的层。相反,尝试使用功能的层或激活版本来重建功能

通常,如果您想要创建CoreML不支持的自定义层或激活,则需要在convert方法中指定自定义函数,并提供Swift/Objective-C实现。这里有一个很好的指南,可以帮助您进行Swish激活: