CoreML Spazio dei nomi
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Lo spazio dei nomi CoreML offre accesso relativamente elevato ai runtime dei modelli di Machine Learning.
Classi
MLArrayBatchProvider |
Un oggetto IMLBatchProvider supportato da una matrice. |
MLCustomLayer_Extensions |
Implementazioni predefinite per i metodi facoltativi nel IMLCustomLayer protocollo. |
MLCustomModel |
Implementazione predefinita di IMLCustomModel. |
MLCustomModel_Extensions |
Implementazioni predefinite per i metodi facoltativi nel MLCustomModel protocollo. |
MLDictionaryConstraint |
Contiene un valore che limita il tipo di chiavi del dizionario. |
MLDictionaryFeatureProvider |
Implementazione di IMLFeatureProvider supportata da un NSDictionaryoggetto . |
MLFeatureDescription |
Descrizione significativa dello sviluppatore di una MLModel funzionalità. |
MLFeatureValue |
Valore non modificabile e MLFeatureType per una funzionalità. |
MLImageConstraint |
Contiene vincoli per una funzionalità di immagine. |
MLImageSize |
Descrive una dimensione accettabile dell'immagine per gli input del modello CoreML. |
MLImageSizeConstraint |
Descrizione del vincolo sulle dimensioni dell'immagine per un modello CoreML. |
MLModel |
Incapsula un modello di Machine Learning sottoposto a training. |
MLModelConfiguration |
Lo spazio dei nomi CoreML offre accesso relativamente elevato ai runtime dei modelli di Machine Learning. |
MLModelDescription |
Descrizione significativa dello sviluppatore dell'oggetto MLModel. |
MLModelErrorExtensions |
Metodi di estensione per l'enumerazione CoreML.MLModelError. |
MLModelMetadata |
Oggetto DictionaryContainer che contiene metadati correlati a un MLModeloggetto . |
MLMultiArray |
Rappresenta una matrice multidimensionale efficiente. |
MLMultiArrayConstraint |
Contiene vincoli per una funzionalità di matrice multidimensionale. |
MLMultiArrayShapeConstraint |
Descrive i vincoli sulla forma della matrice multidimensionale consentita dal modello. |
MLPredictionOptions |
Contiene un valore che indica se limitare i calcoli di stima alla CPU. |
MLSequence |
Codifica una sequenza come singolo input. |
MLSequenceConstraint |
Vincolo sulle sequenze di funzionalità. |
Interfacce
IMLBatchProvider |
Interfaccia che definisce il protocollo per fornire dati in batch al modello. |
IMLCustomLayer |
Interfaccia che definisce i metodi necessari per un livello di modello personalizzato. |
IMLCustomModel |
Interfaccia che definisce un modello CoreML personalizzato. |
IMLFeatureProvider |
Interfaccia che definisce le funzionalità di input o output e consente l'accesso ai valori. |
Enumerazioni
MLComputeUnits |
Lo spazio dei nomi CoreML offre accesso relativamente elevato ai runtime dei modelli di Machine Learning. |
MLFeatureType |
Enumera i tipi di funzionalità supportati da CoreML. |
MLImageSizeConstraintType |
Enumera la forma di un MLImageSizeConstraintoggetto . |
MLModelError |
Enumera gli errori che possono verificarsi nell'uso di Core ML. |
MLMultiArrayDataType |
Enumera i tipi di valori archiviati in un MLMultiArrayoggetto . |
MLMultiArrayShapeConstraintType |
Enumera la forma di un MLMultiArrayShapeConstraintoggetto . |
Commenti
Lo spazio dei nomi CoreML, introdotto in iOS 11, consente di eseguire query di runtime di un'ampia gamma di modelli di Machine Learning prodotti da framework come scipy-learn, TensorFlow e Servizi cognitivi di Azure Visione personalizzata. CoreML non supporta la modifica su dispositivo di modelli o pesi, ma supporta il caricamento di un modello da un URL, in modo che gli sviluppatori possano usare tale opzione per scaricare modelli aggiornati.
CoreML si basa su un "modello" distribuito come singolo file con estensione mlmodel. Questo modello viene compilato in un modulo utilizzabile usando strumenti integrati in Xcode, Xamarin Studio o nella riga di comando. Nella riga di comando è possibile compilare un file mlmodel con xcrun coremlcompiler compile model.mlmodel outputfolder
. Un modello compilato assume la forma di una directory denominata modelname.mlmodelc
. Il modello viene quindi caricato in fase di esecuzione con codice simile a:
var bundle = NSBundle.MainBundle;
var assetPath = bundle.GetUrlForResource("MarsHabitatPricer", "mlmodelc");
NSError mlErr;
model = MLModel.Create(assetPath, out mlErr);
I modelli in CoreML sono abbastanza "opachi" e non hanno un'API estesa. Invece, lo sviluppatore iOS deve conoscere i nomi di input e output e i tipi previsti dal modello. Ad esempio, un modello di riconoscimento delle immagini potrebbe prevedere una dimensione pari a 227x227 identificata come "immagine" e potrebbe avere due output: una CVPixelBuffer stringa identificata come "classLabel" e una NSDictionary con NSString chiavi e double
valori nell'intervallo [0,1] che rappresentano la attendibilità della stima.
Gli sviluppatori devono convertire le relative rappresentazioni native in istanze compatibili con CoreML di IMLFeatureProvider . Il modo più semplice per eseguire questa operazione è con un MLDictionaryFeatureProvider :
CVPixelBuffer pixelBuffer = // from image or video stream
var imageValue = MLFeatureValue.Create(pixelBuffer);
var inputs = new NSDictionary<NSString, NSObject>(new NSString("image"), imageValue);
NSError error, error2;
var inputFp = new MLDictionaryFeatureProvider(inputs, out error);
if(error != null)
{
ErrorOccurred(this, new EventArgsT<string>(error.ToString()));
return;
}
var outFeatures = model.GetPrediction(inputFp, out error2);
if(error2 != null)
{
ErrorOccurred(this, new EventArgsT<string>(error2.ToString()));
return;
}
var predictionsDictionary = outFeatures.GetFeatureValue("classLabelProbs").DictionaryValue;
Un modo più complesso, ma più flessibile, consiste nell'implementare IMLFeatureProvider :
public class MarsHabitatPricerInput : NSObject, IMLFeatureProvider
{
public double SolarPanels { get; set; }
public double Greenhouses { get; set; }
public double Size { get; set; }
public NSSet<NSString> FeatureNames => new NSSet<NSString>(new NSString("solarPanels"), new NSString("greenhouses"), new NSString("size"));
public MLFeatureValue GetFeatureValue(string featureName)
{
switch (featureName)
{
case "solarPanels":
return MLFeatureValue.Create(SolarPanels);
case "greenhouses":
return MLFeatureValue.Create(Greenhouses);
case "size":
return MLFeatureValue.Create(Size);
default:
return MLFeatureValue.Create(0);
}
}
}
Ottenere una stima si verifica in modo sincrono, con una chiamata a GetPrediction :
NSError prErr;
IMLFeatureProvider outFeatures = model.GetPrediction(pricerInput, out prErr);
double result = outFeatures.GetFeatureValue("price").DoubleValue;
CoreML supporta attualmente:
Tipo | Varianti | Prodotto da: |
---|---|---|
Reti neurali | Convolutionale, feed-forward, ricorrente | Caffe, Keras, Azure Visione personalizzata |
Insiemi di alberi | Foreste casuali, alberi incrementati, alberi decisionali | scikit-learn, XGBoost |
SVM | Scalare e multiclasse | scikit-learn, LIBSVM |
Modelli lineari generalizzati | Regressione lineare e logistica | scikit-learn |
Modelli di pipeline | Modelli concatenati in sequenza | scikit-learn |
Apple ha strumenti python open source (licenza BSD) per creare modelli CoreML: https://pypi.python.org/pypi/coremltools