Freigeben über


CoreML Namespace

Der CoreML-Namespace bietet relativ allgemeinen Zugriff auf Machine Learning-Modelllaufzeiten.

Klassen

MLArrayBatchProvider

Eine IMLBatchProvider , die von einem Array unterstützt wird.

MLCustomLayer_Extensions

Standardimplementierungen für optionale Methoden im IMLCustomLayer Protokoll.

MLCustomModel

Die Standardimplementierung von IMLCustomModel.

MLCustomModel_Extensions

Standardimplementierungen für optionale Methoden im MLCustomModel Protokoll.

MLDictionaryConstraint

Enthält einen Wert, der den Typ der Wörterbuchschlüssel einschränkt.

MLDictionaryFeatureProvider

Eine Implementierung von IMLFeatureProvider , die durch eine NSDictionaryunterstützt wird.

MLFeatureDescription

Eine für Entwickler aussagekräftige Beschreibung eines MLModel Features.

MLFeatureValue

Ein unveränderlicher Wert und MLFeatureType für ein Feature.

MLImageConstraint

Enthält Einschränkungen für ein Bildfeature.

MLImageSize

Beschreibt eine zulässige Bildgröße für die CoreML-Modelleingaben.

MLImageSizeConstraint

Beschreibung der Einschränkung für Bildgrößen für ein CoreML-Modell.

MLModel

Kapselt ein trainiertes Machine Learning-Modell.

MLModelConfiguration

Der CoreML-Namespace bietet relativ allgemeinen Zugriff auf Machine Learning-Modelllaufzeiten.

MLModelDescription

Eine für Entwickler aussagekräftige Beschreibung von MLModel.

MLModelErrorExtensions

Erweiterungsmethoden für die CoreML.MLModelError-Enumeration.

MLModelMetadata

Eine DictionaryContainer , die Metadaten enthält, die sich auf einen beziehen MLModel.

MLMultiArray

Stellt ein effizientes mehrdimensionales Array dar.

MLMultiArrayConstraint

Enthält Einschränkungen für ein mehrdimensionales Arrayfeature.

MLMultiArrayShapeConstraint

Beschreibt die Einschränkungen für die Form des mehrdimensionalen Arrays, das vom Modell zugelassen wird.

MLPredictionOptions

Enthält einen Wert, der angibt, ob Vorhersageberechnungen auf die CPU beschränkt werden sollen.

MLSequence

Codiert eine Sequenz als einzelne Eingabe.

MLSequenceConstraint

Eine Einschränkung für Sequenzen von Features.

Schnittstellen

IMLBatchProvider

Schnittstelle, die das Protokoll zum Bereitstellen von Daten in Batches für das Modell definiert.

IMLCustomLayer

Schnittstelle, die Methoden definiert, die für eine benutzerdefinierte Modellebene erforderlich sind.

IMLCustomModel

Schnittstelle, die ein benutzerdefiniertes CoreML-Modell definiert.

IMLFeatureProvider

Eine Schnittstelle, die Eingabe- oder Ausgabefeatures definiert und den Zugriff auf deren Werte zulässt.

Enumerationen

MLComputeUnits

Der CoreML-Namespace bietet relativ allgemeinen Zugriff auf Machine Learning-Modelllaufzeiten.

MLFeatureType

Listet die Arten von Features auf, die von CoreML unterstützt werden.

MLImageSizeConstraintType

Listet die Form eines auf MLImageSizeConstraint.

MLModelError

Listet Fehler auf, die bei der Verwendung von Core ML auftreten können.

MLMultiArrayDataType

Listet die Typen von Werten auf, die in einem MLMultiArraygespeichert sind.

MLMultiArrayShapeConstraintType

Listet die Form eines auf MLMultiArrayShapeConstraint.

Hinweise

Der coreML-Namespace, der in iOS 11 eingeführt wurde, ermöglicht Laufzeitabfragen einer Vielzahl von Machine Learning-Modellen, die von Frameworks wie scipy-learn, TensorFlow und Azure Custom Vision Cognitive Services erstellt werden. CoreML unterstützt keine Änderungen von Modellen oder Gewichtungen auf dem Gerät, unterstützt jedoch das Laden eines Modells aus einer URL, sodass Entwickler dies zum Herunterladen aktualisierter Modelle verwenden können.

CoreML basiert auf einem "Modell", das als einzelne .mlmodel-Datei verteilt wird. Dieses Modell wird in eine verwendbare Form kompiliert, indem entweder integrierte Tools in Xcode, Xamarin Studio oder über die Befehlszeile verwendet werden. In der Befehlszeile kann eine MLMODEL-Datei mit xcrun coremlcompiler compile model.mlmodel outputfolder kompiliert werden. Ein kompiliertes Modell hat die Form eines Verzeichnisses namens modelname.mlmodelc . Das Modell wird dann zur Laufzeit mit folgendem Code geladen:

var bundle = NSBundle.MainBundle;
var assetPath = bundle.GetUrlForResource("MarsHabitatPricer", "mlmodelc");
NSError mlErr;
model = MLModel.Create(assetPath, out mlErr);

Modelle in CoreML sind ziemlich "undurchsichtig" und verfügen nicht über eine umfangreiche API. Stattdessen muss der iOS-Entwickler die Eingabe- und Ausgabenamen und -typen kennen, die das Modell erwartet. Beispielsweise kann ein Bilderkennungsmodell eine CVPixelBuffer der Größe 227 x 227 erwarten, die als "Image" identifiziert wird und zwei Ausgaben aufweist: eine als "classLabel" identifizierte Zeichenfolge und eine NSDictionary mit NSString Schlüsseln und double

Werte im Bereich [0,1], die die Konfidenz der Vorhersage darstellen.

Entwickler müssen ihre nativen Darstellungen in CoreML-kompatible Instanzen von IMLFeatureProvider konvertieren. Die einfachste Möglichkeit ist dies mit einem 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;

Eine komplexere, aber flexiblere Methode ist die Implementierung IMLFeatureProvider von :

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);
		}
	}
}

Das Abrufen einer Vorhersage erfolgt synchron mit einem Aufruf von GetPrediction :

NSError prErr;
IMLFeatureProvider outFeatures = model.GetPrediction(pricerInput, out prErr);
double result = outFeatures.GetFeatureValue("price").DoubleValue;

CoreML unterstützt derzeit Folgendes:

typeVariantenProduziert von:
Neuronale NetzeConvolutional, feed-forward, rezidiv Caffe, Keras, Azure Custom Vision
StrukturensemblesZufällige Gesamtstrukturen, verstärkte Bäume, Entscheidungsbäume scikit-learn, XGBoost
SVMsSkalar und Multiklassen scikit-learn, LIBSVM
Generalisierte lineare ModelleLineare und logistische Regressionscikit-learn
PipelinemodelleSequenziell verkettete Modelle scikit-learn

Apple verfügt über Open-Source-Python-Tools (BSD-Lizenz mit 3-Klauseln), um CoreML-Modelle zu erstellen: https://pypi.python.org/pypi/coremltools

Weitere Informationen