Qué compilarás
En este instructivo, descargarás un modelo personalizado de Core ML exportado (.mlmodel
). Luego, ejecutarás una app para iOS prediseñada que usa el modelo a fin de identificar imágenes de flores.
Objetivos
En esta introducción detallada, usarás el código para lo siguiente:
- Ejecutar un modelo de Core ML previamente entrenado en una app para iOS
Descripción general
Con el framework de Core ML, puedes usar un modelo entrenado de aprendizaje automático para clasificar los datos de entrada. El framework de Vision funciona con Core ML para aplicar modelos de clasificación a imágenes y procesarlas previamente a fin de facilitar y hacer más confiables las tareas de aprendizaje automático.
Antes de comenzar
Descarga un modelo general de Edge
Descarga una carpeta que contenga un modelo de Core ML previamente entrenado. En este instructivo, usarás ese modelo.
Descomprime el archivo ZIP que se descargó.
Antes de comenzar el instructivo, navega al directorio raíz del proyecto:
cd ClassifyingImagesWithVisionAndCoreML
Ejecutarás todas las siguientes muestras de códigos de este directorio.
Entrena y exporta un modelo de Edge personalizado
Antes de continuar, completa la Guía de inicio rápido sobre los modelos de dispositivos de Edge con las siguientes modificaciones:
- Usa el conjunto de datos de flores proporcionado o uno propio.
- En el paso Entrena tu modelo, selecciona la opción de radio del modelo Edge.
- En el paso Exportar el modelo, sigue las instrucciones para exportar un modelo de Core ML.
Usa el archivo de flores resultante model.mlmodel
de Core ML a fin de ejecutar una versión personalizada de la app para iOS existente.
Configura la app para iOS
Para la app de demostración de iOS, se requieren varias herramientas adicionales:
- Xcode
- Herramientas de línea de comandos de Xcode
Descarga Xcode
Usa el siguiente vínculo para descargar Xcode en tu máquina.
Instala herramientas de línea de comandos de Xcode
Para instalar las herramientas de línea de comandos de Xcode, ejecuta el siguiente comando en la línea de comandos:
xcode-select --install
Abre el proyecto
Abre el proyecto con Xcode. Puedes abrir el proyecto a través de la línea de comandos o Google Cloud Platform Console. Para abrir el proyecto con la línea de comandos, ejecuta el siguiente comando:
open ./Vision+ML\ Example.xcodeproj
Ejecuta la app original
Para iniciar la app en el simulador y obtener anotaciones de imágenes, completa los siguientes pasos:
- Para iniciar la app, selecciona el botón de reproducir en la esquina superior izquierda de la ventana de Xcode.
- Proporciona una imagen de predicción a la app. Puedes hacerlo de las siguientes dos maneras:
- Toma una foto con la cámara del dispositivo.
- Arrastra y suelta las fotos en la ventana del simulador para agregarlas a la biblioteca de fotos del dispositivo.
La app muestra las dos categorías de clasificación principales en el orden de la puntuación de confianza que el modelo asigna a cada una.
En el resultado, se deberían mostrar anotaciones similares a las siguientes imágenes:
Ejecuta la app personalizada
La app original usa un modelo de Core ML que clasifica las imágenes en una de las 1,000 clases genéricas de ImageNet (animales, frutas, muebles, plantas, etc.) mediante MobileNet estándar.
Modifica la app para que use el modelo que se volvió a entrenar con las siguientes categorías de imágenes de flores personalizadas:
- margarita
- dandelion
- roses
- sunflowers
- tulipanes
Agrega los archivos del modelo al proyecto
Descarga el modelo de flores personalizado (
model.mlmodel
exportado de Core ML) que obtendrás una vez que completes la Guía de inicio rápido sobre los modelos de dispositivos de Edge. Los archivosmodel.mlmodel
ydict.txt
de la exportación del modelo de Core ML se encuentran en la ubicación de Google Cloud Storage que especificaste.Cambia el nombre de tu modelo personalizado a
AutoML.mlmodel
.Borra el modelo existente del proyecto (
MobileNet.mlmodel
).Agrega el modelo personalizado al proyecto en la carpeta
Vision+ML Example
.Modifica la línea 30 en
ImageClassificationViewController
. Quita lo siguiente:let model = try VNCoreMLModel(for: MobileNet().model)
Reemplaza esta línea por la siguiente:
let model = try VNCoreMLModel(for: AutoML().model)
Ejecuta tu app del modelo personalizado
Para reiniciar la app en el simulador, selecciona el botón de reproducir en la esquina superior izquierda de la ventana de Xcode.
Para probar las modificaciones, agrega los archivos de imagen del directorio flower_photos/
y obtén predicciones.
Los resultados deberían ser similares a esto:
A fin de probar el modelo, agrega las imágenes de datos de entrenamiento que descargaste antes o descarga imágenes de una Búsqueda de Google para usarlas en la predicción.
¿Cómo funciona?
Ahora que la app está en ejecución, observa el código específico del framework de CoreML y de Vision.
Configura Vision con un modelo de Core ML
Core ML genera una clase de Swift de manera automática que permite un fácil acceso a tu modelo de AA.
En este ejemplo, Core ML genera la clase de MobileNet de forma automática desde MobileNetmodel
.
Obtén la instancia de modelo con el siguiente código:
let model = try VNCoreMLModel(for: MobileNet().model)
Crea la solicitud de Vision con el modelo anterior y el controlador de finalización. El controlador de finalización controla la respuesta de predicción del modelo.
Google Cloud Platform Console debe actualizarse en el subproceso principal:
let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in DispatchQueue.main.async { guard let results = request.results else { self.classificationLabel.text = "Unable to classify image.\n\(error!.localizedDescription)" return }
Los results
siempre estarán en VNClassificationObservation
, según se especifique en el modelo de Core ML de este proyecto.
let classifications = results as! [VNClassificationObservation] })
El controlador de finalización de la solicitud de Visión indica si la solicitud se realizó de manera correcta o si generó un error. Si se realiza de manera correcta, su propiedad de resultados tendrá objetos VNClassificationObservation
que describen posibles clasificaciones identificadas por el modelo de AA.
Un modelo de AA procesa imágenes de entrada con una relación de aspecto fija, pero estas imágenes pueden tener relaciones de aspecto arbitrarias, por lo que Vision debe ajustarlas o recortarlas. Para obtener mejores resultados, configura la propiedad
imageCropAndScaleOption
de la solicitud a fin de que coincida con el diseño de imagen con el que se entrenó el modelo.request.imageCropAndScaleOption = .centerCrop
Crea el
VisionRequestHandler
con la imagen de entrada mediante el siguiente código:let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
Puedes llamar a la función perform del controlador si pasas el objeto de solicitud.
do { try handler.perform([self.classificationRequest]) } catch {
Este controlador detecta errores generales de procesamiento de imágenes. El controlador de finalización
processClassifications(_:error:)
declassificationRequest
detecta errores específicos para procesar esa solicitud.print("Failed to perform classification.\n\(error.localizedDescription)") }
Próximos pasos
Ya completaste la explicación de una app de clasificación de flores para iOS con un modelo de Core ML exportado desde AutoML Vision Edge. Usaste un modelo de Core ML entrenado para probar una app de clasificación de imágenes general antes de modificarla y obtener anotaciones personalizadas de muestra de flores. Luego examinaste el código específico de Core ML para comprender la funcionalidad subyacente.
Los siguientes recursos pueden ayudarte a seguir aprendiendo sobre los modelos de Core ML y AutoML Vision Edge:
- Obtén más información sobre CoreML en la documentación oficial y el repositorio de códigos.
- Prueba la versión de la cámara de esta app de demostración, que usa una versión cuantizada del modelo. Esto proporciona la misma potencia en un paquete más pequeño y eficiente.
- Prueba otros modelos preparados para TFLite, como un detector de palabras clave por voz y una versión de respuesta inteligente en el dispositivo.