keras-> mlmodel:coreml对象没有属性'convert'

时间:2019-01-13 06:39:52

标签: keras coreml

我正在尝试使用coreml将我的keras模型转换为mlmodel。但是,这就是说coremltools模块没有属性'convert'。

AttributeError: 'module' object has no attribute 'convert'

我的coremltools,keras,tensorflow(tensorflow-gpu)模块都是最新的。 我也在使用python 2.7.10。

我使用过Windows和Mac,但都无法使用。但是,caffe.convert使用的是caffe模型。

代码:

coreml_model = coremltools.converters.keras.convert(MODEL_PATH)

根据文档,我希望coremltools中可以使用converters.keras.convert方法。 文档:https://apple.github.io/coremltools/generated/coremltools.converters.keras.convert.html

请帮助,谢谢!

编辑:

import coremltools
# from keras.models import load_model
import keras
import sys
from keras.applications import MobileNet
from keras.utils.generic_utils import CustomObjectScope

with CustomObjectScope({'relu6': keras.applications.MobileNet.relu6, 'DepthwiseConv2D': keras.applications.mobilenet.DepthwiseConv2D}):
    model = load_model('weights.hdf5')

MODEL_PATH = "data/model_wide_cifar-10_fruits_model.h5"

def main():
    """ Takes in keras model and convert to .mlmodel"""
    print(sys.version)

    # Load in keras model.
    # model = load_model(MODEL_PATH)

    # load labels
    labels=[]
    label_handler = open("fruit-labels.txt", 'r')
    for label in label_handler:
        labels.append(label.rstrip())
    label_handler.close()
    print("[INFO] Labels: {0}".format(labels))

    # Convert to .mlmodel
    coreml_model = coremltools.converters.keras.convert(
        model=MODEL_PATH,
        input_names="image",
        output_names="image",
        class_labels=labels)

    labels = 'fruit-labels.txt'

    # Save .mlmodel
    coreml_model.utils.save_spec('fruitclassifier.mlmodel')

2 个答案:

答案 0 :(得分:1)

解决方案是使用virtualenv 。请遵循coremltools README中的说明:

安装

我们建议使用virtualenv使用,安装或构建coremltools。是 确保使用系统pip安装virtualenv。

pip install virtualenv

coremltools 的安装方法遵循 standard python package installation steps。 要创建名为pythonenv的Python虚拟环境,请执行以下步骤:

# Create a folder for virtualenv
mkdir virtualenvs
cd virtualenvs

# Create a Python virtual environment for your Core ML project
virtualenv coremltools

要激活新的虚拟环境并在此环境中安装coremltools,请按照以下步骤操作:

# Active your virtual environment
source coremltools/bin/activate


# Install coremltools in the new virtual environment, pythonenv
pip install --upgrade pip
pip install -U coremltools==3.0b5

安装keras和tensorflow

pip install keras tensorflow

现在确保它可以工作。激活coremltools环境后,运行

>>> python
Python 3.7.4 (v3.7.4:e09359112e, Sep 5 2019, 14:54:52)
>>> import coremltools
>>> coremltools.converters.keras.convert()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: convert() missing 1 required positional argument: 'model'

coremltools documentation

此人的信用额:https://github.com/apple/coremltools/issues/440

答案 1 :(得分:1)

Communist Hacker 的回答不适用于我当前的设置:

  • 张量流 2.4.1
  • coremltools 4.1
  • Python 3.8.7

但是,在查看了 coremltools here 的文档后,我能够通过从函数中删除 keras 来修复它,并且调用现在可以正常工作了:

import coremltools

coreml_model = coremltools.converters.convert(model, 
                                              input_names="inputname", 
                                              output_names="outputname")

现在运行上面的命令会在我的 Jupyter 笔记本中产生这个:

Running TensorFlow Graph Passes: 100%|██████████| 5/5 [00:00<00:00, 37.53 passes/s]
Converting Frontend ==> MIL Ops: 100%|██████████| 6/6 [00:00<00:00, 5764.05 ops/s]
Running MIL optimization passes: 100%|██████████| 17/17 [00:00<00:00, 5633.05 passes/s]
Translating MIL ==> MLModel Ops: 100%|██████████| 3/3 [00:00<00:00, 6864.65 ops/s]
<块引用>

注意 - 我完全是个菜鸟,所以我可能描述了一些事情 不正确。