CoreML Spazio dei nomi

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:

TipoVariantiProdotto da:
Reti neuraliConvolutionale, feed-forward, ricorrente Caffe, Keras, Azure Visione personalizzata
Insiemi di alberiForeste casuali, alberi incrementati, alberi decisionali scikit-learn, XGBoost
SVMScalare e multiclasse scikit-learn, LIBSVM
Modelli lineari generalizzatiRegressione lineare e logisticascikit-learn
Modelli di pipelineModelli concatenati in sequenza scikit-learn

Apple ha strumenti python open source (licenza BSD) per creare modelli CoreML: https://pypi.python.org/pypi/coremltools

Vedi anche