Modelo de clasificación de imágenes de práctica de capacitación práctica de base cero basado en el alcance del modelo de Dharma Academy

Práctica de formación práctica de base cero: modelo de clasificación de imágenes

-Basado en el modelo de Dharma Academy.

Introducción: el modelo de clasificación de imágenes es la tarea de visión por computadora más simple y básica y se utiliza ampliamente. Este artículo presentará paso a paso el proceso práctico del modelo de clasificación de imágenes de entrenamiento de base cero. El artículo presenta principalmente cómo ajustar el modelo en función del conjunto de datos etiquetados, de modo que el modelo pueda readaptar una nueva tarea de clasificación en los nuevos datos.

Después de leer este artículo, comprenderá cómo utilizar el modelo ViT para realizar un entrenamiento de ajuste fino para la clasificación en 14 conjuntos de datos de flores y luego comprenderá el proceso de ajuste fino para la mayoría de las tareas de clasificación.

Primero, abra el sitio web oficial de ModelScope ( https://www.modelscope.cn/home ) e ingrese a la biblioteca de modelos.

En la página de la biblioteca de modelos, puede ver que hay muchos modelos diferentes, elegimos: Visión por computadora - Clasificación visual - Clasificación general. Hay muchos modelos de uso general en la biblioteca de modelos. Estos modelos son relativamente clásicos y algunos son modelos de código abierto actualmente populares y todos pueden probarlos. Este artículo utiliza principalmente el modelo de clasificación de imágenes ViT (objetos diarios chinos) como ejemplo para demostrar cómo ajustar la tarea de clasificación. ​​​​​​​​

Primero abra esta tarea. Debido a que el cuaderno se utilizará para la capacitación más adelante, es necesario iniciar sesión. El registro de nuevos usuarios proporcionará 100 horas de potencia informática de GPU.

La tarea primero presenta los conceptos básicos de todo el modelo: una descripción general del modelo de clasificación de objetos diarios, una breve descripción del modelo y un código de ejemplo para el razonamiento.

El uso del código de muestra es muy simple: además de citar el paquete de dependencia, solo se necesitan dos líneas de código para llamar al modelo y probar la tarea de clasificación. También hay una experiencia modelo en línea en la parte superior derecha de la página, que visualiza el proceso de razonamiento. Puede optar por cargar imágenes usted mismo o probar con imágenes de muestra, y puede ver los resultados haciendo clic en Ejecutar prueba. Será un poco lento al comienzo de la ejecución, porque es necesario descargar el modelo, y luego será más rápido.

En segundo lugar, hay algunas introducciones a los datos del modelo, el proceso de capacitación del modelo, la evaluación de datos y los resultados.

El siguiente es el código de muestra para el entrenamiento de modelos, que también es el tema central de este artículo. El código de muestra utiliza un conjunto de datos ligeramente más pequeño mini_imagenet100, un ejemplo de 100 categorías para un entrenamiento de ajuste fino, que todavía es relativamente grande para la demostración. Por lo tanto, modificaremos este código para adaptarlo a un conjunto de datos más pequeño y explicaremos los parámetros del modelo con más detalle más adelante.

Aquí está el código de muestra para la evaluación del modelo, que muestra cómo el modelo evalúa el conjunto de validación en el conjunto de datos, que se explicará en detalle más adelante. Este es el contenido general de toda la página de tareas.

La experiencia en línea anterior obtuvo un resultado de prueba, aquí está el resultado top 5, y el número uno es Shiba Inu, por lo que el resultado de clasificación de esta imagen es Shiba Inu.

Para facilitar el experimento, primero abrimos el cuaderno. Notebook tiene dos opciones, una es PAI-DSW y la otra es Alibaba Cloud Elastic Computing. Elegimos la segunda opción, utilizando recursos gratuitos de GPU para el cálculo. Después de seleccionar, haga clic en Inicio rápido. Este inicio tardará un poco más, puedes dejar que se inicie en segundo plano.

A continuación, explicaremos algunos datos básicos sobre el modelo. El modelo es una aplicación del modelo transformador en visión, lo llamamos ViT para abreviar. El modelo ViT es un trabajo pionero del modelo transformador en el campo del lenguaje natural en visión por computadora. El modelo en ModelScope adopta la estructura ViT-Base basada en transformador y, sobre esta base, se agregan tokens de destilación para la destilación del conocimiento, es decir, se adopta el método de entrenamiento de destilación del conocimiento DeiT.

Nuestros datos de entrenamiento se buscan y organizan a partir de una gran cantidad de datos de código abierto, y se conservan algunos objetos comunes con alta frecuencia, incluidos más de 1300 tipos de objetos cotidianos, como algunos animales, plantas, muebles y alimentos comunes, etc. En la actualidad, el modelo puede reconocer más de 1300 tipos de objetos cotidianos, puede ver el código fuente abierto a través del enlace del modelo y también puede ver el artículo en detalle a través del enlace del artículo.

También puede encontrar el modelo que configuramos en el Centro de documentación en nuestro sitio web oficial - Explicación del modelo - Modelo de visión por computadora Aquí hay una introducción muy detallada, incluida la explicación detallada del documento. Esta es una breve introducción al modelo ViT que usaremos hoy para los experimentos, por lo que no lo presentaré en detalle aquí.

Además, con respecto a los conjuntos de datos que queremos usar, puede hacer clic en Conjunto de datos-Imagen-Clasificación de imágenes en la barra de menú superior y verá muchos conjuntos de datos que se pueden usar para experimentos.

 El conjunto de datos que utilizamos aquí es el conjunto de datos de clasificación de flores. Este conjunto de datos contiene 14 tipos de imágenes de flores, como tipos de flores comunes como hierba eólica, diente de león y crisantemo. Los datos completos son solo 200 MB, relativamente pequeños, adecuados para la demostración de nuestro proceso de ajuste de capacitación en línea. Utilice un pequeño conjunto de datos de 14 tipos de flores para perfeccionar el modelo ViT que acaba de presentar, de modo que el modelo pueda reconocer estos 14 tipos de flores.

El formato del conjunto de datos se divide principalmente en conjunto de entrenamiento y conjunto de verificación. Aquí está la descripción del formato relacionado: está clasificado según el tren y las carpetas válidas. Hay 2 carpetas en total. Las imágenes con la misma etiqueta de categoría están en la misma carpeta y el formato de la imagen es Ambos están en formato JPG y hay un archivo de etiqueta classname.txt.

En la vista previa de datos, puede ver el etiquetado de los datos. Por ejemplo, en el conjunto de verificación, el lado izquierdo es la imagen de datos y el lado derecho es la etiqueta correspondiente. Lo mismo ocurre con el conjunto de entrenamiento.

 El archivo del conjunto de datos es el archivo de todo el conjunto de datos, que incluye el archivo de etiqueta del conjunto de validación en formato csv, el archivo de etiqueta del conjunto de entrenamiento y flores14.json.

 El archivo Flowers14.json describe la relación entre todos los datos. Por ejemplo, en el conjunto de entrenamiento, meta es el archivo de etiqueta y archivo es el archivo comprimido de la imagen utilizada para el entrenamiento. Lo mismo ocurre con el conjunto de verificación. En el archivo classname.txt, los nombres de clase correspondientes a las etiquetas se enumeran en orden.

 Dentro del archivo de datos hay un archivo de datos comprimido.

 La carga del conjunto de datos también es muy sencilla, solo una línea de código. Después de presentar el paquete de dependencia, cargue el conjunto de datos. Para cargar un conjunto de datos, debe completar el nombre del conjunto de entrenamiento y el espacio de nombres, que son los caracteres pequeños debajo del nombre de los datos correspondiente.

 flores14 corresponde al nombre del conjunto de datos y tany0699 corresponde al espacio de nombres. Al cargar el conjunto de entrenamiento, dividir selecciona entrenar y al cargar el conjunto de verificación, dividir selecciona validación. A continuación se presentan algunos datos básicos sobre el conjunto de datos.

Vuelva a la página de capacitación del modelo y abra el cuaderno que inició anteriormente. ​​​​​​​​

 Después del salto, debe iniciar sesión en la cuenta vinculada a ModelScope y Alibaba Cloud.

 Abra un archivo Python3 y puede optar por cambiar el nombre del archivo. Principalmente vamos a volver a entrenar el nuevo conjunto de datos. Vuelva a la interfaz del modelo ahora y copie el código de muestra de ajuste.

 Una vez copiado el código, modificamos estos parámetros. Primero, importe los paquetes de dependencia dentro de ModelScope. Si tiene una GPU local, también puede realizar el entrenamiento localmente. Para la capacitación local, la biblioteca ModelScope debe estar preinstalada y el documento oficial describe cómo instalarla.

Después de la instalación, podemos experimentar con el cuaderno en línea gratuito. En primer lugar, model_id corresponde a la dirección del modelo en Model Hub , que no ha cambiado para nuestra tarea. Después de eso, se carga el conjunto de datos, que consiste en cargar el conjunto de entrenamiento y el conjunto de verificación respectivamente. El método de carga de datos se introdujo anteriormente. Simplemente copie y reemplace el código de muestra del método de carga de datos de nuestro nuevo conjunto de datos.

El siguiente paso es modificar el archivo de configuración del modelo. El archivo de configuración contendrá una variedad de contenidos de configuración y solo hay unos pocos elementos que deben modificarse. La primera es el tamaño del lote, que se establece principalmente de acuerdo con el tamaño de los datos de entrenamiento y el tamaño de la memoria de la GPU; la segunda línea es la cantidad de trabajadores para cargar el conjunto de datos; la cantidad máxima de entrenamiento épocas es el número de iteraciones para todo el conjunto de datos, que se establece aquí. Es 1, principalmente debido a la relación de tiempo, solo se entrena una iteración. Las siguientes tres líneas son el número de categorías, que deben cambiarse al número de categorías correspondientes al conjunto de datos, así que cámbielos a 14 aquí. La tasa de aprendizaje aquí, debido a que solo iteramos una vez, para una convergencia mejor y más rápida, podemos cambiarla a un valor ligeramente mayor. Puedes modificar este hiperparámetro según tus tiempos de entrenamiento reales. El número de entrenamiento previo también se establece en 1; el índice de evaluación, para la tarea de clasificación, ahora usamos la precisión para evaluar, y la precisión incluye top1 y top5, y estos dos índices deben reevaluarse.

Luego construye el entrenador. El entrenador usa la interfaz de build_trainer; el nombre es el tipo de clasificación, aquí está image_classification, que significa clasificación de imágenes. Lo principal que debemos cambiar es el parámetro kwargs. Los parámetros incluyen principalmente model_id, que es la dirección del modelo mencionada anteriormente; word_dir, el directorio de trabajo, es el directorio donde se guardan los pesos del modelo generados después del entrenamiento. El ejemplo utiliza un directorio temporal, que se puede cambiar a un directorio real, como vit_base_flower; train_dataset establece el conjunto de entrenamiento cargado; eval_dataset establece el conjunto de validación cargado; cfg_modify_fn es la función de devolución de llamada del archivo de configuración; model_revision La versión del modelo puede corresponder al archivo del modelo (botón maestro), puede elegir una versión a voluntad, como 1.0.2, para que se construya el entrenador del modelo.

Luego usa trainer.train() para entrenar. Una vez completada la capacitación, puede usar trainer.evaluate() para evaluar e imprimir el resultado después de la evaluación. Luego presione shift + enter para ejecutar el código y dejar que el modelo comience a entrenar.

 Al principio será lento, porque primero es necesario descargar el conjunto de datos y los pesos previamente entrenados del modelo.

 Miremos el archivo del modelo nuevamente. El archivo del modelo también es relativamente simple: consta de dos partes principales: una es el peso previamente entrenado con un nombre fijo (pytorch_model.pt), la otra es el archivo de configuración de todo el modelo (configuration.json), que define principalmente cómo configurar todo el modelo, cómo entrenar y cómo evaluar.

 En el archivo de configuración, debido a que la capacitación se basa en pytorch, la arquitectura permanece sin cambios. La tarea es la clasificación de imágenes, el nombre de la tubería también sigue siendo el mismo y el tipo de modelo de definición sigue siendo el mismo. mm_model es el archivo de configuración del modelo compatible con la clasificación mm, la columna vertebral define VisionTransformer, la estructura es deit-base, el tamaño de la imagen de entrada es 224, el tamaño del patch_size es 16, etc. Estos parámetros permanecen sin cambios. Head es VisionTransformerClsHead. El número predeterminado de categorías num_classes es 1296, que es el número de categorías de objetos diarios. Aquí debemos cambiarlo a 14, porque el nuevo conjunto de datos tiene 14 categorías. La pérdida utiliza LabelSmoothLoss. También hay algunos parámetros de inicialización que se pueden modificar. Los métodos de entrenamiento y mejora utilizan Mixup y CutMix, y estos parámetros también se pueden configurar.

Volviendo al proceso de entrenamiento, se pueden imprimir el número de épocas, la tasa de aprendizaje actual, el tiempo restante estimado, la memoria de video utilizada y la pérdida.

 Volver al archivo de configuración.

El tipo en el preprocesador permanece sin cambios; el proceso de entrenamiento, como la carga de imágenes, el escalado aleatorio y el tamaño de recorte 224, el volteo aleatorio y la mejora de datos, etc., se pueden configurar en el archivo y, finalmente, la normalización; lo mismo ocurre con la verificación. configurar, recortar la imagen, cambiar el tamaño a 256, luego recortar a 224 y finalmente normalizar.

La cantidad de tamaño de lote utilizado en el proceso de capacitación, la cantidad de trabajadores, la cantidad máxima de iteraciones y la evaluación se realizan cada pocas iteraciones durante la evaluación (aquí es 1 vez), utilizando la precisión para la evaluación y guardando el peso del modelo una vez. En cada iteración, el número máximo de pesos guardados es 20 y la configuración del optimizador, incluido el tipo de optimización, la tasa de aprendizaje y otros parámetros, se pueden modificar en el archivo. La estrategia de tasa de aprendizaje se puede utilizar CosineAnnealing y también se pueden definir algunos parámetros relacionados. Finalmente, también se puede establecer la configuración de evaluación, como el tamaño de lote_size durante la evaluación, el número de trabajadores, el método de precisión utilizado para la evaluación y el método de evaluación de top1 o top5.

 Se completó el entrenamiento y puede ver que los resultados se han impreso: la precisión de top1 es 87,75 y la precisión de top5 es 98,97. Se necesitan unos 3 minutos para entrenar una vez.

 Los pesos recién entrenados se han guardado en el directorio de trabajo. Hay dos archivos de registro en el directorio, que son los registros del proceso de capacitación, que son exactamente iguales a los resultados que se acaban de imprimir. Hay un archivo de configuración del modelo, que es exactamente el mismo que el archivo de configuración que acabamos de mencionar. Por ejemplo, la cantidad de categorías que acabamos de cambiar se ha cambiado a 14, porque la función de devolución de llamada se usó hace un momento y los parámetros modificados directamente también se guardan en el archivo. También está el peso guardado para cada época, que ahora solo se entrena una vez, por lo que solo hay una época_1. También hay conexiones suaves con los últimos pesos guardados y un conjunto de validación para guardar los mejores pesos del modelo durante el entrenamiento.

Una vez entrenado el modelo, es necesario evaluarlo. Se puede evaluar el rendimiento del modelo entrenado en el conjunto de validación. Podemos copiar directamente el código de muestra para la evaluación del modelo. De manera similar, el conjunto de datos se puede modificar al conjunto de verificación cargado en el experimento en este momento, que es la evaluación del nuevo conjunto de verificación. El model_id anterior es el modelo en Model Hub y ahora se cambia al directorio de trabajo donde se guarda la capacitación. Pero tenga en cuenta que el nombre del archivo de peso del modelo en el directorio del modelo es pytorch_model.pt fijo, por lo que debe cambiar el nombre del archivo de peso a pytorch_model.pt. El directorio de trabajo puede utilizar un directorio de trabajo temporal y el conjunto de verificación es el conjunto de datos que debe evaluarse. Una vez creado el entrenador, llame a trainer.evaluate() para evaluar e imprima el resultado después de la evaluación. Ejecute el código presionando shift+enter para iniciar la evaluación.

El proceso de evaluación es relativamente rápido, de los resultados impresos se puede ver que el resultado de top1 es 87.75 y el resultado de top5 es 98.97, que es exactamente el mismo que el resultado del entrenamiento.

 Una vez entrenado el modelo, se puede realizar la inferencia y el código de inferencia se puede copiar directamente desde la página de tareas del modelo.

Para usar el modelo entrenado, primero cargue el paquete de dependencia y luego use la tubería para construir la tubería de inferencia. El tipo de tarea ingresado aquí permanece sin cambios y el modelo se cambia a la ruta del modelo recién entrenado: vit_base_flower. La dirección de la imagen puede ser una URL accesible o una ruta de imagen local. Ahora puede descargar una imagen a voluntad, como una imagen de girasol, llamada test.webp. Después de descargarla localmente, puede arrastrar la imagen directamente a la interfaz para cargarla y luego copiar el nombre de la imagen. Cambie la dirección de la imagen a la ruta local ./test.webp y podrá clasificar y probar esta imagen.

Los 5 resultados principales se muestran en los resultados de inferencia, y el girasol ocupa el primer lugar, por lo que el resultado de clasificar y predecir esta imagen es el girasol. Sin embargo, las probabilidades correspondientes son muy bajas, lo que indica que la formación no es especialmente suficiente. Dado que solo se entrena una iteración, todavía hay mucho margen de mejora. Puede ajustar los hiperparámetros e intentar entrenar. Por ejemplo, se puede aumentar el número máximo de épocas y disminuir la tasa de aprendizaje. Más entrenamiento puede tener mejores resultados.

Esto concluye el proceso de preentrenamiento de todo el modelo de clasificación.

Hay muchos otros modelos de clasificación en ModelScope y el proceso de capacitación de otros modelos es similar al proceso de tareas del entrenamiento actual. Por ejemplo, el modelo general de clasificación de imágenes de ViT es exactamente el mismo que el modelo recién entrenado, pero el conjunto de datos previamente entrenado es diferente. El modelo de objetos diario utiliza nuestro conjunto de datos de creación propia y el modelo general utiliza el conjunto de datos público ImageNet 1k. Además, existe un modelo NextViT de clasificación en tiempo real más práctico, que es más adecuado para la industria debido a su rápida velocidad y buen efecto de clasificación. También puedes echar un vistazo a otros modelos, como el de clasificación de basura. También está el recientemente popular BEiT, que es la versión v2, y también puedes ajustarlo. Cada tarea tendrá una introducción al modelo, una descripción del modelo y algunos enlaces, así como código de inferencia, código de entrenamiento de ajuste y código de evaluación, que se pueden copiar y ejecutar directamente.

Este es el final del tutorial de capacitación de ajuste fino para la clasificación de imágenes. Si está interesado, puede ir al sitio web oficial de ModelScope ( https://www.modelscope.cn/home ) para obtener más información e intentarlo.

Nota: Si se trata de una aplicación de modelo público/espacio de creación pública, no se requiere el siguiente código de autorización en el código:

from modelscope.hub.api import HubApi

YOUR_ACCESS_TOKEN = '请从ModelScope个人中心->访问令牌获取'
api = HubApi()
api.login(YOUR_ACCESS_TOKEN)

Supongo que te gusta

Origin blog.csdn.net/tantanweiwei/article/details/130139458
Recomendado
Clasificación