Path: blob/master/site/es-419/lite/tutorials/pose_classification.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Clasificación de poses humanas con MoveNet y TensorFlow Lite
Este bloc de notas le enseña a usar MoveNet y TensorFlow Lite para entrenar un modelo de clasificación de poses. El resultado es un nuevo modelo TensorFlow Lite que acepta la salida del modelo MoveNet como entrada y da como salida una clasificación de poses, como el nombre de una pose de yoga.
El procedimiento de este bloc consta de 3 partes:
Parte 1: Preprocese los datos de entrenamiento de clasificación de poses en un archivo CSV que especifique los puntos de referencia (puntos clave del cuerpo) detectados por el modelo MoveNet, junto con las etiquetas de pose de la verdad del suelo.
Parte 2: Compile y entrene un modelo de clasificación de poses que tome como entrada las coordenadas de los puntos de referencia del archivo CSV y obtenga como salida las etiquetas predichas.
Parte 3: Convierta el modelo de clasificación de poses a TFLite.
De forma predeterminada, este bloc utiliza un conjunto de datos de imágenes con poses de yoga etiquetadas, pero también hemos incluido una sección en la Parte 1 en la que puede cargar su propio conjunto de datos de imágenes de poses.
Preparación
En esta sección, importará las bibliotecas necesarias y definirá varias funciones para preprocesar las imágenes de entrenamiento en un archivo CSV que contenga las coordenadas de los puntos de referencia y las etiquetas de la verdad del suelo.
Aquí no ocurre nada observable, pero puede ampliar las celdas de código ocultas para ver la implementación de algunas de las funciones a las que llamaremos más adelante.
Si sólo desea crear el archivo CSV sin conocer todos los detalles, simplemente ejecute esta sección y continúe con la Parte 1.
Código para ejecutar la estimación de poses usando MoveNet
Parte 1: Preprocese las imágenes de entrada
Dado que la entrada para nuestro clasificador de poses son los puntos de referencia de salida del modelo MoveNet, necesitamos generar nuestro conjunto de datos de entrenamiento ejecutando imágenes etiquetadas a través de MoveNet y, a continuación, capturando todos los datos de los puntos de referencia y las etiquetas de verdad sobre el suelo en un archivo CSV.
El conjunto de datos que hemos proporcionado para este tutorial es un conjunto de datos de poses de yoga generado por CG. Contiene imágenes de varios modelos generados por CG haciendo 5 posturas de yoga diferentes. El directorio ya está dividido en un conjunto de datos entrenamiento
y un conjunto de datos prueba
.
Así que en esta sección, descargaremos el conjunto de datos de yoga y lo pasaremos por MoveNet para poder capturar todos los puntos de referencia en un archivo CSV... Sin embargo, se tarda unos 15 minutos en alimentar nuestro conjunto de datos de yoga a MoveNet y generar este archivo CSV. Así que, como alternativa, puede descargar un archivo CSV preexistente para el conjunto de datos de yoga ajustando el parámetro is_skip_step_1
a continuación como True. De este modo, se saltará este paso y, en su lugar, descargará el mismo archivo CSV que se creará en este paso de preprocesamiento.
Por otro lado, si desea entrenar el clasificador de poses con su propio conjunto de datos de imágenes, deberá cargar sus imágenes y ejecutar este paso de preprocesamiento (deje is_skip_step_1
como False)-siga las siguientes instrucciones para cargar su propio conjunto de datos de poses.
(Opcional) Cargue su propio conjunto de datos de poses
Si desea entrenar al clasificador de poses con sus propias poses etiquetadas (pueden ser poses cualesquiera, no sólo poses de yoga), siga estos pasos:
Configure la opción
use_custom_dataset
anterior como True.Prepare un archivo comprimido (ZIP, TAR u otro) que incluya una carpeta con su conjunto de datos de imágenes. La carpeta debe incluir imágenes ordenadas de sus poses como se indica a continuación.
Si ya ha dividido su conjunto de datos en conjuntos de entrenamiento y de prueba, ajuste dataset_is_split
a True. Es decir, su carpeta de imágenes debe incluir los directorios "entrenamiento" y "prueba" de la siguiente manera:
yoga_poses/ |__ train/ |__ downdog/ |______ 00000128.jpg |______ ... |__ test/ |__ downdog/ |______ 00000181.jpg |______ ...
yoga_poses/ |__ downdog/ |______ 00000128.jpg |______ 00000181.jpg |______ ... |__ goddess/ |______ 00000243.jpg |______ 00000306.jpg |______ ...
Haga clic en la pestaña Archivos de la izquierda (icono de carpeta) y, a continuación, haga clic en Cargar en almacenamiento de sesión (icono de archivo).
Seleccione su archivo y espere a que termine de cargarse antes de continuar.
Edite el siguiente bloque de código para especificar el nombre de su archivo y el directorio de imágenes (de forma predeterminada, esperamos un archivo ZIP, por lo que también tendrá que modificar esa parte si su archivo tiene otro formato).
Ahora ejecute el resto del bloc.
Nota: Si está usando split_into_train_test()
para dividir el conjunto de datos, éste espera que todas las imágenes sean PNG, JPEG o BMP; ignora otros tipos de archivo.
Descargar el conjunto de datos de yoga
Preprocese el conjunto de datos TRAIN
.
Preprocese el conjunto de datos TEST
.
Parte 2: Entrene un modelo de clasificación de poses que tome como entrada las coordenadas de los puntos de referencia y obtenga como salida las etiquetas predichas.
Compilará un modelo TensorFlow que toma las coordenadas del punto de referencia y predice la clase de pose que realiza la persona de la imagen de entrada. El modelo consta de dos submodelos:
El submodelo 1 calcula una pose incorporada (también denominada vector de características) a partir de las coordenadas de los puntos de referencia detectados.
El submodelo 2 incorpora la pose a través de varias capas
Dense
para predecir la clase de pose.
A continuación, entrenará el modelo basándose en el conjunto de datos preprocesados en la parte 1.
(Opcional) Descargue el conjunto de datos preprocesados si no ejecutó la parte 1
Cargue los CSV preprocesados en los conjuntos de datos TRAIN
y TEST
.
Cargue y divida el conjunto de datos original TRAIN
en TRAIN
(85% de los datos) y VALIDATE
(el 15% restante).
Defina funciones para convertir los puntos de referencia de la pose en una pose incorporada (también conocida como vector de características) para la clasificación de la pose.
Después, convierta las coordenadas del punto de referencia en un vector de características de la siguiente forma:
Mueva el centro de la pose al origen.
Escale la pose para que el tamaño de la pose sea 1
Aplane estas coordenadas en un vector de características
Luego use este vector de características para entrenar un clasificador de poses basado en una red neuronal.
Defina un modelo Keras para la clasificación de poses
Nuestro modelo Keras toma los puntos de referencia de la pose detectados, luego calcula la pose incorporada y predice la clase de pose.
Dibuje la matriz de confusión para comprender mejor el rendimiento del modelo
(Opcional) Investigue las predicciones incorrectas
Puede consultar las poses del conjunto de datos TEST
que se predijeron incorrectamente para ver si se puede mejorar la precisión del modelo.
Nota: Esto sólo funciona si ha ejecutado el paso 1 porque necesita los archivos de imagen de pose en su máquina local para visualizarlos.
Parte 3: Convierta el modelo de clasificación de poses a TensorFlow Lite
Convertirá el modelo Keras de clasificación de poses al formato TensorFlow Lite para que pueda implementarlo en apps móviles, navegadores web y dispositivos Edge. Al convertir el modelo, aplicará la cuantización de rango dinámico para reducir el tamaño del modelo TensorFlow Lite de clasificación de poses unas 4 veces con una pérdida de precisión insignificante.
Nota: TensorFlow Lite admite múltiples esquemas de cuantización. Consulte la documentación si está interesado en saber más.
Luego escribirá el archivo de etiquetas que contiene el mapeado de los índices de clase a los nombres de clase legibles por humanos.
Como ha aplicado la cuantización para reducir el tamaño del modelo, evaluemos el modelo cuantizado de TFLite para revisar si la disminución de precisión es aceptable.
Ahora puede descargar el modelo TFLite (pose_classifier.tflite
) y el archivo de etiquetas (pose_labels.txt
) para clasificar poses personalizadas. Consulte la app de muestra Android y Python/Raspberry Pi para ver un ejemplo completo de cómo usar el modelo de clasificación de poses TFLite.