Convertește un model FastAI în ONNX și CoreML
- 2 minute de citit
- 5 exemple de cod în Python și Shell
- 1 imagine
Disponibil și în English
Pe această pagină

Salut 👋,
În acest articol îți arăt cum să convertești un model FastAI în ONNX și CoreML.
Convertește un model FastAI în Pytorch
Înainte să putem converti modelul în format ONNX sau CoreML, trebuie să îl convertim mai întâi în Pytorch.
Este un proces simplu. Presupunând că modelul este antrenat, trebuie să apelăm torch.save pentru a exporta modelul:
from fastai.vision.all import *# learn este Learner-ul tău FastAItorch.save(learn.model, "/models/model.pth")Convertește un model FastAI în ONNX
ONNX este un standard pentru modelele de machine learning. El îți permite să convertești un model dintr-un framework precum PyTorch sau TensorFlow în formatul lui, pentru a fi folosit în diferite runtime-uri, de exemplu Windows, Android, Linux, MacOS și iOS și din diverse limbaje de programare precum C#, C++, Java, JavaScript și Python.
Pentru a converti modelul tău FastAI în ONNX, urmează acești pași:
Presupunând că ai pachetul torch instalat, pentru a converti modelul în ONNX trebuie să rulezi următoarele:
import torchmodel_path = "/models/model.pth"model = torch.load(model_path, map_location=torch.device('cpu'))model.eval()dummy_input = torch.randn(1, 3, 224, 224)torch.onnx.export(model, dummy_input, "models/model.onnx", export_params=True)Folosesc torch.randn pentru a crea o intrare de test. Acest lucru este necesar pentru funcția torch.onnx.export.
Deoarece export un model de clasificare a imaginilor, forma intrării este (1, 3, 224, 224). Prima dimensiune este
dimensiunea batch-ului, a doua este numărul de canale, iar ultimele două sunt lățimea și înălțimea imaginii.
Convertește un model FastAI în CoreML
CoreML este un framework dezvoltat de Apple care îți permite să rulezi modele de machine learning în ecosistemul Apple, care include: iOS, MacOS, iPadOS, watchOS și tvOS.
Conform documentației CoreML, ai nevoie de un calculator cu MacOS sau Linux pentru a converti modelul în CoreML. Am încercat să convertesc modelul pe Windows, dar am primit o eroare.
Pentru a converti modelul tău FastAI în CoreML, urmează acești pași, într-un proiect nou:
- Creează un proiect Python nou cu Python 3.10 și instalează următoarele pachete:
fastai==2.7.12torch==2.0.0torchvision==0.15.1scikit-learn==1.1.0coremltools==6.3.0- Creează un fișier nou numit
main.pyși adaugă următorul cod:
# Convertește modelul torch în torchscript (traced)import torchimport coremltools as ctmodel_name = "resnet151"model_path = f"./{model_name}.pth"model = torch.load(model_path, map_location=torch.device("cpu"))model.eval()# Trasează modelul cu date aleatorii.dummy_input = torch.rand(1, 3, 224, 224)traced_model = torch.jit.trace(model, dummy_input)# Încarcă etichetele claselor.class_labels = []with open("categories.txt", "r") as f: class_labels = [line.strip() for line in f.readlines()]# Folosind image_input în parametrul inputs:# Convertește în program Core ML folosind Unified Conversion API.scale = 1 / (0.226 * 255.0)bias = [-0.485 / (0.229), -0.456 / (0.224), -0.406 / (0.225)]model = ct.convert( traced_model, convert_to="mlprogram", inputs=[ ct.ImageType( name="input_image", shape=(1, 3, 224, 224), color_layout=ct.colorlayout.RGB, scale=scale, bias=bias, ) ], classifier_config=ct.ClassifierConfig(class_labels))# Salvează modelul convertit.model.save(f"{model_name}.mlpackage")- Rulează scriptul:
python main.pyAr trebui să obții un fișier numit resnet151.mlpackage. Acesta este modelul CoreML.
Gata! Mulțumesc că ai citit! 📚