首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将MobileNet从Keras转换为CoreML

将MobileNet从Keras转换为CoreML
EN

Stack Overflow用户
提问于 2018-10-18 17:30:14
回答 2查看 2.3K关注 0票数 1

我使用的是Keras2.1.3,我想将MobileNet转换为CoreML:

代码语言:javascript
复制
from keras.applications import MobileNet
from keras.applications.mobilenet import relu6
from keras.applications.mobilenet import DepthwiseConv2D

import coremltools.converters.keras as k

def save_model():
    model = MobileNet(input_shape=(128,128,3), include_top=False)
    model.save('temp.h5')

def convert():
    model = k.convert('temp.h5',
                      input_names=['input'],
                      output_names=['output'],
                      model_precision='float16',
                      custom_conversion_functions={'relu6': relu6, 'DepthwiseConv2D': DepthwiseConv2D})
    model.save('temp.model')

save_model()
convert()

这就产生了一个错误:ValueError: Unknown activation function:relu6

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-18 17:59:40

以下是基于https://github.com/apple/coremltools/issues/38的解决方案

代码语言:javascript
复制
from keras.applications import MobileNet
import keras

import coremltools.converters.keras as k
from keras.utils.generic_utils import CustomObjectScope

def save_model():
    model = MobileNet(input_shape=(128,128,3), include_top=False)
    model.save('temp.h5')

def convert():
    with CustomObjectScope({'relu6': keras.applications.mobilenet.relu6,
                            'DepthwiseConv2D': keras.applications.mobilenet.DepthwiseConv2D}):
        model = k.convert("temp.h5",
                          input_names=['input'],
                          output_names=['output'],
                          model_precision='float16')

    model.save('temp.mlmodel')

save_model()
convert()
票数 0
EN

Stack Overflow用户

发布于 2019-01-31 18:02:03

对于Keras2.2.4和Tensorflow 1.12.0,我找到了一个解决方案。

保存模型权重和体系结构,如:

代码语言:javascript
复制
model_json = model.to_json()
open('architecture.json', 'w').write(model_json)
model.save_weights('weights.h5', overwrite=True)

对于将模型转换为CoreML .mlmodel,我使用:

代码语言:javascript
复制
import coremltools

from keras.layers import DepthwiseConv2D, ReLU
from pathlib import Path
from keras.models import model_from_json
from tensorflow.python.keras.utils.generic_utils import CustomObjectScope

model_architecture = './Networks/architecture.json'
model_weights = './Networks/weights.h5'

model_structure = Path(model_architecture).read_text()

with CustomObjectScope({'relu6': ReLU ,'DepthwiseConv2D': DepthwiseConv2D}):
    model = model_from_json(model_structure)
    model.load_weights(model_weights)

    output_labels = ['0', '1', '2', '3', '4', '5', '6']
    coreml_model = coremltools.converters.keras.convert(
        model, input_names=['image'], output_names=['output'],
        class_labels=output_labels, image_input_names='image')

    coreml_model.save('ModelX.mlmodel')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52879519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档