将onnx(开放式神经网络交换)模型转换为apple coreml格式。
onnx-coreml的Python项目详细描述
将onnx型号转换为apple coreml格式。
这里有一个全面的教程
安装
从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’,
"图像缩放"键的含义与
图像输出名称:字符串列表
要定义为图像类型的输出的名称。否则,默认情况下,所有输出都是多数组类型。
去处理参数: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-coreml0
要运行特定的单元测试,例如自定义层测试,请运行
pip install -U onnx-coreml1
当前支持
型号
来自https://github.com/onnx/models" rel="nofollow">https://github.com/onnx/models的已测试可与此转换器一起使用的模型:
- BVLC AlexNet
- BVLC咖啡厅
- BVLC谷歌
- BVLC参考文献
- 登塞内特
- 情感激情
- 初始v1
- 初始版本2
- mnist
- resnet50
- 随机播放
- 挤压网
- ZFnet
操作员
可转换为其coreml等效值的onnx运算符列表:
- <
- argmax
- argmin
- 平均池
- 批量规范化
- 剪辑
- concat
- 转换
- convTranspose
- 深度空间 Div >< Elu ><
- 扁平化
- 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文件中找到的麻省理工学院许可证控制。