Crea ML en iOS



La inteligencia artificial se está acercando cada año, solo ayer estaba disponible solo para un número limitado de personas. Hoy en día, podemos crear modelos de aprendizaje automático nosotros mismos y usarlos en nuestros proyectos. En este artículo, presentaremos las herramientas Crear ML e intentaremos entrenar el modelo para clasificar imágenes.

Pero antes de comenzar, un poco de historia y explicación. En la conferencia anual para desarrolladores WWDC2018, Apple presentó las herramientas para trabajar con el aprendizaje automático Create ML. El modelo entrenado en Create ML es el resultado de aplicar un algoritmo de aprendizaje automático a un conjunto de datos de entrenamiento. Los modelos no ocupan mucho espacio (aproximadamente 3Mb), por lo que pueden almacenarse en el proyecto. Inicialmente, se propuso entrenar modelos usando Playgrounds en Xcode 10 y se admitió el trabajo con imágenes, texto y tablas. Al iniciar los parques infantiles del proyecto, era necesario importar la biblioteca CreateML y ejecutar MLImageClassifierBuilder (en caso de que hayamos entrenado el modelo para clasificar imágenes).

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLineView()

En 2019, Apple presentó una herramienta completamente nueva para trabajar con modelos de aprendizaje automático, separándolo de Playgrounds. Se hizo posible entrenar modelos sin una sola línea de código. La lista de tipos de datos se ha rellenado con sonidos y actividad. En total, se presentan 5 tipos de datos y 9 plantillas de modelos. Veamos cada tipo de datos y qué modelos podemos obtener como resultado.

Imágenes


imagen

Al entrenar con imágenes, hay dos plantillas disponibles: Clasificador de imágenes (clasificador de imágenes) y Detector de objetos (detector de objetos).

Image Classifier se usa para clasificar imágenes en función de su contenido. Una vez entrenado el modelo, podemos identificar un objeto en la imagen y atribuirlo a algún tipo. Por ejemplo, para identificar animales en imágenes e incluso distinguir qué flor se representa en la fotografía. En Create ML, la plantilla del clasificador de imágenes utiliza la capacitación de transferencia . La capacitación de transferencia es la capacidad de combinar un modelo previamente entrenado con los datos del usuario, lo que le permite entrenar modelos en una pequeña cantidad de imágenes.

Object Detector es un modelo de aprendizaje profundo. Le permite identificar varios objetos en la imagen, como personas, edificios, automóviles. Y todo esto en una imagen. También se debe agregar que al entrenar modelos de Detector de objetos, se usa la GPU de la computadora.

Suena


imagen

Cuando se trabaja con sonidos, solo hay una plantilla disponible para crear un modelo: Sound Classifier (clasificador de sonido). Sound Classifier es una nueva plantilla y le permite determinar el sonido más dominante en la transmisión de audio. Por ejemplo, puede determinar qué instrumento suena en audio. Sound Classifier, como Image Classifier, utiliza el entrenamiento de transferencia.

Actividad


imagen
La actividad está representada por una sola plantilla: Clasificador de actividad. Activity Classifier es una nueva plantilla en Create ML y se usa para clasificar datos de movimiento de un acelerómetro y un giroscopio.

Dichos modelos son modelos de aprendizaje profundo y se entrenan con la GPU de una computadora.

Texto


imagen

El texto está representado por dos plantillas: Clasificador de texto (clasificador de texto) y Etiquetador de palabras (marcador de palabras).

El clasificador de texto se usa para identificar oraciones, párrafos e incluso artículos completos basados ​​en su contenido. Word Tagger se usa para marcar palabras o reconocer cualquier nombre en el texto.

Mesas


imagen

Las tablas están representadas por tres plantillas: Regulador tabular (regresor de tabla), Clasificador tabular (clasificador de tabla) y Recomendador (recomendador).

El Regulador tabular es un modelo que puede predecir un valor numérico basado en algunos datos. Por ejemplo, puede entrenar a un modelo que predecirá el clima.

Clasificador tabular clasifica los objetos en función de sus características. Por ejemplo, puede entrenar a un modelo para determinar el tamaño de la ropa en una tienda en línea en función de varios parámetros de usuario. Un modelo funciona con tipos como entero, doble, cadena y largo si el objetivo es un valor discreto.

El Recomendador le permite recomendar contenido basado en el comportamiento del usuario, y todos los cálculos se realizan directamente en el dispositivo.

Ahora que nos hemos familiarizado con todas las plantillas disponibles, podemos comenzar a crear nuestro primer modelo de aprendizaje automático. Comencemos con Image Classifier.

Clasificador de imagen


¿Has visto la serie HBO Silicon Valley? En una de las series de la cuarta temporada, mostraron una aplicación que reconoce "hot dogs" y "no hot dogs" en las imágenes. Con el clasificador de imágenes, puede crear un análogo de esta aplicación. Pero primero debe preparar los datos para entrenar el modelo. Archivo con imágenes aquí .

Algunos requisitos para entrenar el modelo Image Classifier. Las imágenes no deben tener menos de 299 por 299 píxeles. Los kits de entrenamiento deben contener al menos 10 imágenes, pero cuanto más mejor. Ahora sabemos que al entrenar Image Classifier, se usa el entrenamiento de transferencia, que le permite entrenar modelos en una pequeña cantidad de imágenes. El número de imágenes para cada conjunto debe ser igual, de lo contrario habrá un cambio hacia una de las categorías. Aproximadamente el 80% de las imágenes se utilizan para entrenar el modelo y el 20% restante para las pruebas. Además, las imágenes no deben repetirse, es decir, en la carpeta con imágenes para capacitación, no debe haber imágenes que se utilizarán más para las pruebas. Los nombres de las carpetas para capacitación se utilizarán como identificadores para las clases respectivas,cuando se usan modelos. Mi ejemplo usa los nombres HotDog o NotHotDog. Los nombres de las imágenes en sí no juegan ningún papel, pueden llamarse como desee. Los designé con números de serie.

Ahora que nuestros datos están listos, podemos comenzar a entrenar el modelo. Para trabajar con Create ML, necesitamos Xcode 11 o superior. Usaré Xcode 11.3.1. Para ejecutar la herramienta Crear ML, debe ir a Xcode -> Abrir herramienta de desarrollador -> Crear ML. Aparecerá una ventana donde puede seleccionar uno existente o crear un nuevo proyecto. Seleccione nuevo documento. A continuación, debe seleccionar una plantilla, en nuestro caso usaremos Image Classifier. Dé un nombre a nuestro proyecto, haga clic en Siguiente y seleccione el lugar donde se almacenará el proyecto. Se abre un entorno de trabajo para trabajar con el modelo.

imagen

Como podemos ver, este es un proyecto completamente separado donde puedes crear y entrenar varios modelos. El nombre del proyecto (Proyecto) se muestra en el inspector a la izquierda, al hacer clic en él se muestra información sobre el proyecto y le permite editarlo. Más abajo, Fuentes del modelo contiene todos los modelos utilizados en nuestro proyecto. Veamos ahora la sección Entradas de datos en la ventana principal de herramientas.

Datos de entrenamiento: aquí debe agregar imágenes para los modelos de entrenamiento. Datos de validación: aquí puede agregar un conjunto de imágenes para probar el entrenamiento del modelo (en mi caso, dejé Auto). Datos de prueba: aquí debe agregar imágenes para probar el modelo que no participó en la capacitación del modelo.

En la sección Parámetros, puede especificar el número máximo de iteraciones realizadas en una sola imagen durante el entrenamiento del modelo. Y en la sección Aumentos, puede seleccionar los efectos que se superponen a las imágenes.

Ahora que nos hemos familiarizado con Create ML, podemos comenzar a entrenar a nuestro primer modelo. Simplemente arrastramos la carpeta Datos de entrenamiento (el nombre puede ser cualquiera) a la pestaña Datos de entrenamiento. Ahora haz clic en Tren. El proceso de aprendizaje comienza.

imagen

Entonces, me tomó unos 27 segundos entrenar, y el modelo está casi listo. Después del entrenamiento, puede evaluar qué tan bien el modelo clasifica las imágenes del conjunto de Datos de entrenamiento. Como el modelo está entrenado en estas imágenes, las clasifica bien. En mi caso, el modelo identificó todas las imágenes del conjunto de entrenamiento y el 97% de las imágenes del conjunto de prueba. Ha llegado el momento de las pruebas.

imagen

Vaya a la pestaña Pruebas. Al igual que con los datos para entrenar el modelo, simplemente arrastre la carpeta Datos de prueba a la ventana Datos de prueba. De hecho, podríamos configurar una carpeta con imágenes para probar antes de comenzar la capacitación. Pero por la linealidad del proceso, lo haremos de manera diferente. Haz clic en Probar modelo. Según los resultados de la prueba, el modelo se enfrentó en un 98%.

imagen

Al ir a Salida, puede verificar el rendimiento del modelo sin agregarlo a su proyecto. Para hacer esto, agregue imágenes de un hot dog y no un hot dog y verifique el resultado. Agregué una imagen de una ensalada y un hot dog y, en ambos casos, el modelo funcionó bien. Por supuesto, los proyectos serios pueden requerir más datos para la capacitación, más iteraciones, etc. Pero para un proyecto de prueba esto será suficiente. Para guardar el modelo, simplemente transfiéralo desde Salida a la carpeta deseada.

imagen

Ahora sugiero tratar de integrar el modelo en un proyecto de prueba, que está disponible aquí.. Ya se ha agregado un modelo al proyecto, pero puede usar cualquier otro clasificador. Esto no interrumpirá la aplicación, ya que los modelos son intercambiables y puede usar varios modelos en el proyecto. Simplemente transfiera el modelo terminado al proyecto.

imagen

En la sección Modelo de aprendizaje automático, puede encontrar información sobre el modelo. Esta información se puede especificar en el proyecto de herramienta Crear ML. Tenga en cuenta que el modelo que entrenamos toma solo 17 KB. Además, en la sección Clase de modelo se nos advierte que se creará una clase Swift con el nombre MyImageClassifier, no recomiendo tocar nada allí, ya que esto puede afectar la aplicación. La sección de Predicción describe los parámetros de entrada y lo que obtenemos como resultado. En caso de que esté utilizando un modelo que no enseñó, en la sección Experimentación puede verificar el modelo, simplemente transfiera la imagen.

imagen

Vaya a la clase ImageClassifierService, aquí puede ver cómo se inicializa el modelo.

private func makeImageClassifierModel() -> VNCoreMLModel? {
  return try? VNCoreMLModel(for: MyImageClassifier().model)
}

Bastante simple, ¿verdad? A continuación, debe crear, procesar y ejecutar una solicitud de clasificación.

private func makeClassifierRequest(for model: VNCoreMLModel, ciImage: CIImage) {
    let request = VNCoreMLRequest(model: model) { [weak self] request, error in
      self?.handleClassifierResults(request.results)
    }
    
    let handler = VNImageRequestHandler(ciImage: ciImage)
    DispatchQueue.global(qos: .userInteractive).async {
      do {
        try handler.perform([request])
      } catch {
        self.onDidUpdateState?(.requestFailed)
      }
    }
  }

Solo queda procesar el resultado.

  private func handleClassifierResults(_ results: [Any]?) {
    guard let results = results as? [VNClassificationObservation],
      let firstResult = results.first else {
      onDidUpdateState?(.requestFailed)
      return
    }
    
    DispatchQueue.main.async { [weak self] in
      let confidence = (firstResult.confidence * 100).rounded()
      let resultModel = ClassifierResultModel(identifier: firstResult.identifier, confidence: Int(confidence))
      self?.onDidUpdateState?(.receiveResult(resultModel: resultModel))
    }
  }

Ahora podemos ejecutar la aplicación y verificar la precisión del modelo.

imagen

Como podemos ver, el modelo está funcionando bien. Ahora intentemos mostrarle a nuestra modelo una imagen de no un hot dog y ver cómo se las arregla.

imagen

Como podemos ver, el modelo define la imagen de la hamburguesa como "no un hot dog". Propongo confundir un poco al modelo y agregar una imagen de un perro disfrazado de perrito caliente.

imagen

Y aquí, nuestro modelo capacitado hace un excelente trabajo.

Conclusión


En este breve artículo, presentamos la herramienta Crear ML. Aprendí con qué tipos funciona y qué patrones usa la herramienta. También intentaron entrenar a su modelo. La parte más difícil en la creación de un modelo de aprendizaje automático es encontrar y preparar datos para el aprendizaje. No puedes entrenar modelos, pero usa modelos ya entrenados. Por ejemplo, ya hay modelos preparados que funcionan con imágenes y texto. Hay muchos modelos personalizados en github.
Las imágenes para modelos de entrenamiento también son fáciles de encontrar, por ejemplo, archivos de Google . Pero si necesita entrenar un modelo para tareas específicas, debe recopilar imágenes y crear sus archivos.

All Articles