CoreML Espacio de nombres

El espacio de nombres CoreML proporciona acceso relativamente alto a los entornos de ejecución del modelo de Machine Learning.

Clases

MLArrayBatchProvider

Un IMLBatchProvider respaldado por una matriz.

MLCustomLayer_Extensions

Implementaciones predeterminadas para métodos opcionales en el IMLCustomLayer protocolo.

MLCustomModel

Implementación predeterminada de IMLCustomModel.

MLCustomModel_Extensions

Implementaciones predeterminadas para métodos opcionales en el MLCustomModel protocolo.

MLDictionaryConstraint

Contiene un valor que restringe el tipo de claves de diccionario.

MLDictionaryFeatureProvider

Una implementación de IMLFeatureProvider que está respaldada por un NSDictionary.

MLFeatureDescription

Descripción significativa para el desarrollador de una MLModel característica.

MLFeatureValue

Valor inmutable y MLFeatureType para una característica.

MLImageConstraint

Contiene restricciones para una característica de imagen.

MLImageSize

Describe un tamaño de imagen aceptable para las entradas del modelo CoreML.

MLImageSizeConstraint

Descripción de la restricción en los tamaños de imagen de un modelo CoreML.

MLModel

Encapsula un modelo de aprendizaje automático entrenado.

MLModelConfiguration

El espacio de nombres CoreML proporciona acceso relativamente alto a los entornos de ejecución del modelo de Machine Learning.

MLModelDescription

Descripción significativa para el MLModeldesarrollador de .

MLModelErrorExtensions

Métodos de extensión para la enumeración CoreML.MLModelError.

MLModelMetadata

que DictionaryContainer contiene metadatos relacionados con un MLModelobjeto .

MLMultiArray

Representa una matriz multidimensional eficaz.

MLMultiArrayConstraint

Contiene restricciones para una característica de matriz multidimensional.

MLMultiArrayShapeConstraint

Describe las restricciones de la forma de la matriz multidimensional permitida por el modelo.

MLPredictionOptions

Contiene un valor que indica si se deben restringir los cálculos de predicción a la CPU.

MLSequence

Codifica una secuencia como una sola entrada.

MLSequenceConstraint

Restricción en secuencias de características.

Interfaces

IMLBatchProvider

Interfaz que define el protocolo para proporcionar datos en lotes al modelo.

IMLCustomLayer

Interfaz que define los métodos necesarios para una capa de modelo personalizada.

IMLCustomModel

Interfaz que define un modelo CoreML personalizado.

IMLFeatureProvider

Interfaz que define las características de entrada o salida y permite el acceso a sus valores.

Enumeraciones

MLComputeUnits

El espacio de nombres CoreML proporciona acceso relativamente alto a los entornos de ejecución del modelo de Machine Learning.

MLFeatureType

Enumera los tipos de características compatibles con CoreML.

MLImageSizeConstraintType

Enumera la forma de un objeto MLImageSizeConstraint.

MLModelError

Enumera los errores que pueden producirse en el uso de Core ML.

MLMultiArrayDataType

Enumera los tipos de valores almacenados en .MLMultiArray

MLMultiArrayShapeConstraintType

Enumera la forma de un objeto MLMultiArrayShapeConstraint.

Comentarios

El espacio de nombres CoreML, introducido en iOS 11, permite realizar consultas en tiempo de ejecución de una amplia variedad de modelos de aprendizaje automático generados por marcos como scipy-learn, TensorFlow y Cognitive Services de Azure Custom Vision. CoreML no admite la modificación en el dispositivo de modelos o pesos, pero admite la carga de un modelo desde una dirección URL, por lo que los desarrolladores podrían usarlo para descargar modelos actualizados.

CoreML se basa en un "modelo" que se distribuye como un único archivo .mlmodel. Este modelo se compila en un formulario utilizable mediante herramientas integradas en Xcode, Xamarin Studio o en la línea de comandos. En la línea de comandos, se puede compilar un archivo .mlmodel con xcrun coremlcompiler compile model.mlmodel outputfolder . Un modelo compilado tiene la forma de un directorio denominado modelname.mlmodelc . A continuación, el modelo se carga en tiempo de ejecución con código similar al siguiente:

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

Los modelos de CoreML son bastante "caja opaca" y no tienen una API extensa. En su lugar, el desarrollador de iOS debe conocer los nombres y tipos de entrada y salida que espera el modelo. Por ejemplo, un modelo de reconocimiento de imágenes podría esperar un CVPixelBuffer tamaño de 227 x 227 identificado como "imagen" y podría tener dos salidas: una cadena identificada como "classLabel" y una NSDictionary con NSString claves y double

valores del intervalo [0,1] que representan la confianza de la predicción.

Los desarrolladores deben convertir sus representaciones nativas en instancias compatibles con CoreML de IMLFeatureProvider . La manera más fácil de hacerlo es con :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;

Una manera más compleja, pero más flexible, es implementar 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);
		}
	}
}

La obtención de una predicción se produce de forma sincrónica, con una llamada a GetPrediction :

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

CoreML admite actualmente:

TipoVariantesProducido por:
Redes neuronalesConvolucional, avance de avance, recurrente Caffe, Keras, Azure Custom Vision
Conjuntos de árbolesBosques aleatorios, árboles impulsados, árboles de decisión scikit-learn, XGBoost
SVMEscalar y multiclase scikit-learn, LIBSVM
Modelos lineales generalizadosRegresión lineal y logísticascikit-learn
Modelos de canalizaciónModelos encadenados secuencialmente scikit-learn

Apple tiene herramientas de Python de código abierto (licencia BSD de 3 cláusulas) para crear modelos CoreML: https://pypi.python.org/pypi/coremltools

Consulte también