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ă

coreml convert

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:

  1. 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
  1. 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")
  1. Rulează scriptul:
python main.py

Ar trebui să obții un fișier numit resnet151.mlpackage. Acesta este modelul CoreML.

Gata! Mulțumesc că ai citit! 📚