CoreML Espacio de nombres
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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:
Tipo | Variantes | Producido por: |
---|---|---|
Redes neuronales | Convolucional, avance de avance, recurrente | Caffe, Keras, Azure Custom Vision |
Conjuntos de árboles | Bosques aleatorios, árboles impulsados, árboles de decisión | scikit-learn, XGBoost |
SVM | Escalar y multiclase | scikit-learn, LIBSVM |
Modelos lineales generalizados | Regresión lineal y logística | scikit-learn |
Modelos de canalización | Modelos 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