Convert a Caffe Model to Core ML Format
Get a tutorial on converting a trained AlexNet Caffe model into a CoreML format that can be used in Apple's devices.
In This Article
Apple's CoreML was first introduced at the WWDC 2017 conference. It brings ML (machine learning) models to Apple's devices using: iOS, iPadOS, watchOS, macOS and tvOS. — i.e without backend support.
However all models to be used by Apple's devices need to be in CoreML format. Aside from pre-converted models, Apple also provides a
coremltools package to convert trained ML models to CoreML models.
Here is an example of converting a Caffee Model to CoreML ML.
What we need for converting
- Python: since
coremltoolsis a python package. Version 3.8.5 is used in this example.
coremltools: version 4.0b2
- A file contains class labels used in a training model. Class labels map the index of the output of a neural network to labels in a classifier.
Step by step
- Create a folder/directory on a computer:
convertmodel. Note: all files will be installed or added to the same folder.
coremltools: from a terminal:
python -m pip install coremltools==4.0b2
- Generate a file that contains class labels from the trained model. Normally, this file can be provided by the people/team who train the model. In our case, the Github repo used in this example provided a
class_labels.pybut we need to modify it a bit.
class_labels.pyand add the following line at the end of the file.
for label in labels: print(label)
- From a terminal:
python class_labels.py > flower_lables.txt
you should see something that looks like this:
- Create a python script:
covert.py. Again, make sure all files used are in the same folder. Open a text editor of your choice. As an important note: generated CoreML model MUST have the extension
import coremltools caffe_modle = ('oxford102.caffemodel', 'deploy.prototxt') model_labels = 'class_labels.txt' # look into deploy.prototxt file # find input: "data" image_input = 'data' coreml_model = coremltools.converters.caffe.convert(caffe_modle, class_labels=model_labels, image_input_names=image_input) coreml_model.save('Oxford102.mlmodel')
Please note: For the image_input field - find this info in
deploy.prototxt look for
At this point, we have all info we needed to generate a CoreML model from the terminal:
$> python covert.py
Finally, you have successfully converted a trained model to a CoreML model!