This tool helps convert Torch7 models into Apple CoreML format which can then be run on Apple devices.
pip install -U torch2coreml
In order to use this tool you need to have these installed:
- Xcode 9
- python 2.7
If you want to run tests, you need MacOS High Sierra 10.13 installed.
- coremltools (0.6.2+)
- PyTorch
Using this library you can implement converter for your own model types. An example of such a converter is located at "example/fast-neural-style/convert-fast-neural-style.py". To implement converters you should use single function "convert" from torch2coreml:
from torch2coreml import convert
This function is simple enough to be self-describing:
def convert(model,
input_shapes,
input_names=['input'],
output_names=['output'],
mode=None,
image_input_names=[],
preprocessing_args={},
image_output_names=[],
deprocessing_args={},
class_labels=None,
predicted_feature_name='classLabel',
unknown_layer_converter_fn=None)
model: Torch7 model (loaded with PyTorch) | str
A trained Torch7 model loaded in python using PyTorch or path to file
with model (*.t7).
input_shapes: list of tuples Shapes of the input tensors.
mode: str ('classifier', 'regressor' or None)
Mode of the converted coreml model:
'classifier', a NeuralNetworkClassifier spec will be constructed.
'regressor', a NeuralNetworkRegressor spec will be constructed.
preprocessing_args: dict
'is_bgr', 'red_bias', 'green_bias', 'blue_bias', 'gray_bias',
'image_scale' keys with the same meaning as
https://apple.github.io/coremltools/generated/coremltools.models.neural_network.html#coremltools.models.neural_network.NeuralNetworkBuilder.set_pre_processing_parameters
deprocessing_args: dict
Same as 'preprocessing_args' but for deprocessing.
class_labels: A string or list of strings.
As a string it represents the name of the file which contains
the classification labels (one per line).
As a list of strings it represents a list of categories that map
the index of the output of a neural network to labels in a classifier.
predicted_feature_name: str
Name of the output feature for the class labels exposed in the Core ML
model (applies to classifiers only). Defaults to 'classLabel'
unknown_layer_converter_fn: function with signature:
(builder, name, layer, input_names, output_names)
builder: object - instance of NeuralNetworkBuilder class
name: str - generated layer name
layer: object - PyTorch (python) object for corresponding layer
input_names: list of strings
output_names: list of strings
Returns: list of strings for layer output names
Callback function to handle unknown for torch2coreml layers
model: A coreml model.
Only Torch7 "nn" module is supported now.
List of Torch7 layers that can be converted into their CoreML equivalent:
- Sequential
- ConcatTable
- SpatialConvolution
- ELU
- ReLU
- SpatialBatchNormalization
- Identity
- CAddTable
- SpatialFullConvolution
- SpatialSoftMax
- SpatialMaxPooling
- SpatialAveragePooling
- View
- Linear
- Tanh
- MulConstant
- SpatialZeroPadding
- SpatialReflectionPadding
- Narrow
- SpatialUpSamplingNearest
- SplitTable
Copyright (c) 2017 Prisma Labs, Inc. All rights reserved.
Use of this source code is governed by the MIT License that can be found in the LICENSE.txt file.