CoreML Namespace
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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:
type | Varianten | Produziert von: |
---|---|---|
Neuronale Netze | Convolutional, feed-forward, rezidiv | Caffe, Keras, Azure Custom Vision |
Strukturensembles | Zufällige Gesamtstrukturen, verstärkte Bäume, Entscheidungsbäume | scikit-learn, XGBoost |
SVMs | Skalar und Multiklassen | scikit-learn, LIBSVM |
Generalisierte lineare Modelle | Lineare und logistische Regression | scikit-learn |
Pipelinemodelle | Sequenziell 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