Instructivo para la implementación de Edge en iOS (Core ML)

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.

Imagen de la app modificada

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

  1. Descarga una carpeta que contenga un modelo de Core ML previamente entrenado. En este instructivo, usarás ese modelo.

  2. Descomprime el archivo ZIP que se descargó.

  3. 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:

  1. Xcode
  2. 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:

  1. Para iniciar la app, selecciona el botón de reproducir Ícono de reproducción de Xcode en la esquina superior izquierda de la ventana de Xcode.
  2. 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:

Clasificaciones con la app original genérica: muebles, frutas, plantas

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

  1. 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 archivos model.mlmodel y dict.txt de la exportación del modelo de Core ML se encuentran en la ubicación de Google Cloud Storage que especificaste.

  2. Cambia el nombre de tu modelo personalizado a AutoML.mlmodel.

  3. Borra el modelo existente del proyecto (MobileNet.mlmodel).

  4. Agrega el modelo personalizado al proyecto en la carpeta Vision+ML Example.

    Imagen de arrastrar el modelo personalizado a Xcode

  5. 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 Ícono de reproducción de Xcode 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:

Imagen de la app modificada

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.

  1. 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
  2. Crea el VisionRequestHandler con la imagen de entrada mediante el siguiente código:

    let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
  3. 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:) de classificationRequest 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: