将onnx(开放式神经网络交换)模型转换为apple coreml格式。

onnx-coreml的Python项目详细描述


将onnx型号转换为apple coreml格式。

Build statusonnxmltools

这里有一个全面的教程

安装

从pypi安装

pip install -U onnx-coreml

从源安装

要获取转换器的最新版本,请从源代码安装,方法是克隆存储库及其子模块并运行install.sh脚本。也就是说,

git clone --recursive https://github.com/onnx/onnx-coreml.git
cd onnx-coreml
./install.sh

从源安装(供贡献者使用)

要获取转换器的最新版本,请从源代码安装,方法是克隆存储库及其子模块并运行install-develope.sh脚本。也就是说,

git clone --recursive https://github.com/onnx/onnx-coreml.git
cd onnx-coreml
./install-develop.sh

依赖关系

  • 单击
  • 努比
  • CoremlTools(2.0+)
  • onnx(1.3.0+)

如何使用

要转换模型,请使用onnx coreml中的单个函数"convert":

fromonnx_coremlimportconvert
defconvert(model,mode=None,image_input_names=[],preprocessing_args={},image_output_names=[],deprocessing_args={},class_labels=None,predicted_feature_name='classLabel',add_custom_layers=False,custom_conversion_functions={})

函数返回可保存到.mlmodel文件的coreml模型实例,例如:

mlmodel=convert(onnx_model)mlmodel.save('coreml_model.mlmodel')

coreml模型规范可以从模型实例中获得,它可以用于更新模型属性,如输出名、输入名等,例如:

importcoremltoolsfromcoremltools.modelsimportMLModelspec=mlmodel.get_spec()new_mlmodel=MLModel(spec)coremltools.utils.rename_feature(spec,'old_output_name','new_output_name')coremltools.utils.save_spec(spec,'model_new_output_name.mlmodel')

有关更多详细信息,请参阅coremltools文档

参数

型号:onnx型号str
onnx模型,参数加载在onnx包或文件路径中
带型号。

模式:str('classifier','regressor'或none)
转换的coreml模型的模式:
"分类器",将构造一个NeuralNetworkClassifier规范。
"回归器",将构造一个神经网络回归器规范。

图像输入名称:字符串列表
要定义为图像类型的输入的名称。否则,默认情况下,所有输入都是多数组类型。

预处理参数:dict
指定预处理参数,这些参数将应用于通过"图像输入名称"参数指定的所有图像输入。 ‘is_bgr’、‘red_bias’、‘green_bias’、‘blue_bias’、‘gray_bias’,
"图像缩放"键的含义与

https://apple.github.io/coremltools/generated/coremltools.models.neural嫒network.html嫒coremltools.models.neural嫒networkbuilder.set嫒pre pro处理参数

图像输出名称:字符串列表
要定义为图像类型的输出的名称。否则,默认情况下,所有输出都是多数组类型。

去处理参数:dict
与"预处理参数"相同,但用于输出。

类标签:字符串或字符串列表。
作为字符串,它表示包含
分类标签(每行一个)。
作为字符串列表,它表示映射
神经网络输出到分类器中标签的索引。

预测的功能名称:str
核心ml中公开的类标签的输出特性的名称
模型(仅适用于分类器)。默认为'classlabEL

添加自定义图层:bool
如果为真,则"自定义"层将添加到模型中,以代替不支持的onnx操作或用于操作 具有不支持的属性。
这些自定义层的参数应通过编辑mlmodel手动填充
或者"custom_conversion_functions"参数可用于在转换过程中执行相同操作

onnx_coreml_input_shape_map:dict(str:list[int])
(可选)具有与模型输入名称对应的键的字典。值是指定 如何将输入的形状映射到coreml。用于coreml形状的约定是:
0:顺序,1:批次,2:通道,3:高度,4:宽度。
例如,秩2的输入可以映射为[3,4](即h,w)或[1,2](即b,c)等。

返回

模型:coreml模型。

CLI

也可以使用命令行脚本来简化:

convert-onnx-to-coreml [OPTIONS] ONNX_MODEL

命令行脚本当前不支持上述所有选项。对于更高级的用例,必须直接调用python函数。

运行单元测试

为了运行单元测试,您需要pytest。

pip install pytest
pip install pytest-cov

要运行所有单元测试,请导航到tests/文件夹并运行

pip install -U onnx-coreml
0

要运行特定的单元测试,例如自定义层测试,请运行

pip install -U onnx-coreml
1

当前支持

型号

来自https://github.com/onnx/models" rel="nofollow">https://github.com/onnx/models的已测试可与此转换器一起使用的模型:

  • BVLC AlexNet
  • BVLC咖啡厅
  • BVLC谷歌
  • BVLC参考文献
  • 登塞内特
  • 情感激情
  • 初始v1
  • 初始版本2
  • mnist
  • resnet50
  • 随机播放
  • 挤压网
  • ZFnet

操作员

可转换为其coreml等效值的onnx运算符列表:

    < 添加< /LI>
  • argmax
  • argmin
  • 平均池
  • 批量规范化
  • 剪辑
  • concat
  • 转换
  • convTranspose
  • 深度空间
  • Div >< Elu >< Exp
  • 扁平化
  • gemm
  • 全球平均泳池
  • globalMax工具
  • 硬乙状结肠
  • 瞬间规范化
  • 漏洞百出
  • 日志
  • logsoftmax
  • matmul
  • 马克斯><
  • 马克斯普尔
  • 平均值
  • 平均方差规范化
  • Mul ><
  • 预备
  • 倒数
  • 还原1
  • 减速器2
  • 还原铀
  • 还原最大值
  • 还原曼
  • 还原胺
  • 还原速度
  • 还原量
  • 缩小平方
  • relu
  • 重塑
  • selu
  • 乙状结肠
  • 切片
  • softmax
  • SoftPlus
  • 软标志
  • 空间深度
  • 拆分
  • sqrt
  • Sub >< < >
  • 阈值Delu
  • 转置
  • 向上采样

一些运算符是部分兼容的,因为coreml不支持任意张量的gemm,对非4阶张量等的支持有限。
对于支持的操作中不支持的操作或不支持的属性,可以使用coreml自定义层。
请参阅测试脚本tests/custom_layers_test.py了解如何使用自定义层生成coreml模型。

许可证

版权所有©2018,苹果公司、Facebook公司和Prisma Labs公司所有。

此源代码的使用受可在license.txt文件中找到的麻省理工学院许可证控制。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java岩石、布、剪刀程序,带文件输入   java迭代Hashmap中的值列表   数组不能正确循环   JavaHibernate:对于一个遥远的惰性依赖,有一个渴望的获取者吗?   交通阻塞下的java车辆路径选择   如何在java中创建布尔方法来检查添加到具有特定索引的arraylist的对象   java Tomcat配置文件/上下文xml似乎已经崩溃了。请确保它是可分析和有效的。有关详细信息,请参阅服务器日志   为什么坐标有时相等,有时不相等?   java libgdx CameraInputController过于敏感,平移开始得太早   将C++排序函数移植到java   java应该是十进制的   swing Java JFrame中的所有内容都不可见   java使用数组中除一个元素以外的所有元素   从子类运行构造函数的Java