Red neuronal convolucional y su integración en iOS (parte 2)



En la parte anterior, preparamos los datos y también examinamos las herramientas de implementación y la arquitectura de la red neuronal ( enlace ). Comencemos la siguiente etapa de desarrollo con el preprocesamiento de datos.

Actualizaciones

Keras proporciona una amplia gama de herramientas para el preprocesamiento de datos, especialmente para imágenes. El método ImageDataGenerator (Fig. 7) le permite expandir el conjunto de datos con transformaciones artificiales.


Fig.7. - Generador de datos.

El primer número rotacion_rango es un número aleatorio para rotar imágenes dentro del generador. Width_shift_range: muestra cuánto puede reducir los valores de píxeles en ancho. Height_shift_range: el coeficiente por el cual cada píxel se multiplicará para comprimirse en altura. Shear_range: velocidad de corte, ángulo de desplazamiento en sentido antihorario en grados. Zoom_range - rango para escalado aleatorio. Horizontal_flip: imagen aleatoria que se muestra horizontalmente. Vertical_flip: visualización de imagen vertical aleatoria. Fill_mode: los puntos fuera de los datos de entrada se rellenan de acuerdo con el modo especificado. Data_format: formato de datos de imagen. Por lo tanto, la red neuronal tendrá una mejor generalización, porque el conjunto de datos original básicamente tiene píxeles limpios, los números están en el centro.En fotografías reales, otras situaciones son posibles cuando el gesto está en una esquina o borroso. El proceso de aprendizaje se está reescribiendo con nuevos datos.

En la Fig. 8, el gráfico de prueba comenzó a disminuir, por lo que se detuvo el entrenamiento. Si la métrica val_acc no se usara para detenerse, el algoritmo continuaría funcionando, dando como resultado una red neuronal reentrenada.

En comparación con los resultados anteriores, el valor de la función de pérdida disminuyó y, por lo tanto, aumentó el grado de confianza del algoritmo en las predicciones. La precisión aumentó un poco más del 2% (Fig. 8, Fig. 9).


Fig. 8 - Programa de entrenamiento sobre nuevos datos.


Fig.9. - Métricas del modelo.

Conversión

Para la integración en la aplicación de iOS, necesita obtener una red neuronal de cierto formato. Esto le permite crear el marco CoreML. Le permite ejecutar modelos entrenados de aprendizaje automático en un formato. mlmodel en aplicaciones. Para trabajar con imágenes, el marco Vision funciona sobre la base de Core ML y ayuda con el seguimiento y el reconocimiento de caras, texto, objetos, códigos de barras. La determinación del horizonte y la adquisición de matrices para la alineación de imágenes también están disponibles.

Para convertir un modelo de .h5 a. mlmodel es utilizado por la biblioteca en Python Coremltools. Esta biblioteca admite la conversión al formato mlmodel.

Para la conclusión correcta del modelo, se especifica un diccionario que corresponderá a 10 dígitos. La siguiente línea declara, Model_check.h5 es el nombre del modelo, además se indica que recibirá imágenes en la capa de entrada de la red neuronal. El campo image_scale llevará a estandarizar la matriz de píxeles. (Fig.10) Fig.10


. - Conversión.

Aplicación movil. Trabaja con un modelo preparado.

Un ejemplo del sitio web oficial de desarrolladores de Apple se utiliza como base para el proyecto. El último entorno de desarrollo de Xcode, el lenguaje de programación es la quinta versión de Swift.

Se consideran los archivos (Fig. 11) que contienen el código en el proyecto. AppDelegate.swift inicia la ventana de inicio de la aplicación e inicializa todos los archivos conectados al proyecto.


Fig.11. - La estructura de la aplicación.

Se agrega un modelo preparado al proyecto después de la conversión de sign_lang.mlmodel (Fig. 12).


Fig. 12. - Modelo en Xcode.

La línea Tipo indica que el Modelo de aprendizaje automático agregado al proyecto es de hecho una red neuronal clasificatoria. Para predecir el modelo, se ingresarán imágenes en blanco y negro con elementos grises de dimensión 64x64, el programa las convertirá a este formato utilizando Vision. El resultado será un diccionario en el que los pares serán la línea con la etiqueta que se especificó durante la conversión, y la confianza (probabilidad) con la que el neural lo predice.

Los principales archivos de la aplicación.

Se considera el archivo principal: Image Classification View Controller.swift

ImageView: una ventana para mostrar la imagen actual en la pantalla del teléfono, enviada a la entrada del modelo.

CameraButton: un botón que, cuando se hace clic, mostrará un menú contextual que ofrece al usuario hacer lo siguiente: Tomar foto, Elegir foto. La primera acción abrirá la cámara del teléfono inteligente, en la que estará disponible el modo foto. (Fig. 13)

Al elegir una acción alternativa, Elegir foto, se abrirá una galería interna. Al presionar el botón Usar foto, el usuario volverá a la pantalla principal, donde la red neuronal analizará las imágenes y dará su predicción, como se muestra en la Fig. 14)

Después de la palabra Clasificación, vemos la conclusión de los dos resultados más probables que predijo el modelo. El número entre paréntesis es la confianza de la red neuronal de que su predicción es correcta. De la Fig. 14 se puede ver que el algoritmo con una confianza de 0.99 dice que se muestra el número 0. Y esto coincide con la realidad. Ningún algoritmo de aprendizaje automático puede dar una precisión del 100% en datos reales, y la red neuronal construida no es una excepción, y son posibles predicciones falsas, que se pueden ver en la Fig. 15.


Fig. 13. - Trabaja con la cámara.


Fig.14. - Predicción de la red neuronal.


Fig.15. - Falsa predicción.

Como resultado, diseñamos la arquitectura de una red neuronal convolucional para reconocer dígitos del lenguaje de señas. Se realizó el entrenamiento de la red neuronal y, como resultado de la expansión de los datos de entrenamiento y la selección de hiperparámetros, se obtuvo una precisión del 81% en un conjunto de datos de prueba. El algoritmo se ha convertido con éxito para portarlo a un teléfono inteligente. Se desarrolló una aplicación móvil en la que se integró una red neuronal.

Enlace de código

All Articles