Image Classification - MXNet
El algoritmo de clasificación de imágenes de Amazon SageMaker es un algoritmo de aprendizaje supervisado compatible con la clasificación multietiqueta. Toma una imagen como entrada y genera una o varias etiquetas asignadas a esa imagen. Utiliza una red neuronal convolucional que puede entrenarse desde cero o mediante un aprendizaje por transferencia cuando no hay disponible un gran número de imágenes de entrenamiento.
El formato de entrada recomendado para los algoritmos de clasificación de imágenes de Amazon SageMaker AI es Apache MXNet RecordIO
nota
Para conservar una mejor interoperabilidad con los marcos de trabajo de aprendizaje profundo existentes, esto difiere de los formatos de datos protobuf utilizados comúnmente por otros algoritmos de Amazon SageMaker AI.
Para obtener más información sobre redes convolucionales, consulte:
-
Deep residual learning for image recognition
Kaiming He, et al., 2016 IEEE Conference on Computer Vision and Pattern Recognition
Temas
Interfaz de entrada/salida para el algoritmo de clasificación de imágenes
El algoritmo de clasificación de imágenes de SageMaker AI admite RecordIO (application/x-recordio) y tipos de contenido de imágenes (image/png, image/jpeg y application/x-image) para el entrenamiento en modo de archivo y admite el tipo de contenido RecordIO (application/x-recordio) para el entrenamiento en modo de canalización. Sin embargo también puede entrenar en modo de canalización con los archivos de imágenes (image/png, image/jpeg y application/x-image), sin necesidad de crear archivos RecordIO, mediante el formato de manifiesto aumentado.
El entrenamiento distribuido es compatible con el modo de archivo y el modo de canalización. Si utiliza el tipo de contenido RecordIO en el modo de canalización, debe establecer el S3DataDistributionType del S3DataSource en FullyReplicated. El algoritmo admite un modelo totalmente replicado en el que los datos se copian en cada máquina.
El algoritmo admite image/png, image/jpeg y application/x-image para la inferencia.
Capacitación con el formato RecordIO
Si utiliza el formato RecordIO para la capacitación, especifique ambos canales train y validation como valores para el parámetro InputDataConfig de la solicitud CreateTrainingJob. Especifique un archivo RecordIO (.rec) en el canal train y un archivo RecordIO en el canal validation. Establezca el tipo de canal para ambos canales en application/x-recordio.
Capacitación con formato de imagen
Si utiliza el formato de imagen para la capacitación, especifique los canales train, validation, train_lst y validation_lst como valores para el parámetro InputDataConfig de la solicitud CreateTrainingJob. Especifique los datos de imagen individuales (archivos .jpg o .png) para los canales train y validation. Especifique un archivo .lst en cada uno de los canales train_lst y validation_lst. Establezca el tipo de canal para los cuatro canales en application/x-image.
nota
SageMaker AI lee los datos de entrenamiento y validación por separado desde diferentes canales, por lo que debe almacenar los datos de entrenamiento y validación en carpetas diferentes.
Un archivo .lst es un archivo separado por tabulaciones con tres columnas que contiene una lista de archivos de imagen. La primera columna especifica el índice de imagen, la segunda columna el índice de la etiqueta de clase para la imagen y la tercera columna la ruta relativa del archivo de imagen. El índice de imagen de la primera columna debe ser único en todas las imágenes. El conjunto de índices de etiqueta de clase se numeran sucesivamente y el la numeración debe comenzar por 0. Por ejemplo, 0 para la clase de gatos, 1 para la clase de perros, y así sucesivamente en las clases adicionales.
A continuación se muestra un ejemplo de un archivo .lst:
5 1 your_image_directory/train_img_dog1.jpg
1000 0 your_image_directory/train_img_cat1.jpg
22 1 your_image_directory/train_img_dog2.jpg
Por ejemplo, si sus imágenes de capacitación se almacenan en s3://<your_bucket>/train/class_dog, s3://<your_bucket>/train/class_cat, y así sucesivamente, especifique la ruta de su canal train como s3://<your_bucket>/train, que es el directorio de nivel superior de sus datos. En el archivo .lst, especifique la ruta relativa de un archivo individual denominado train_image_dog1.jpg en el directorio de clase class_dog como class_dog/train_image_dog1.jpg. También puede almacenar todos los archivos de imagen en un subdirectorio dentro del directorio train. En ese caso, utilice ese subdirectorio para la ruta relativa. Por ejemplo, s3://<your_bucket>/train/your_image_directory.
Capacitación con formato de imagen de manifiesto aumentado
El formato de manifiesto aumentado le permite realizar la capacitación en modo de canalización mediante los archivos de imágenes sin necesidad de crear archivos RecordIO. Debe especificar los canales de capacitación y de validación como valores para el parámetro InputDataConfig de la solicitud CreateTrainingJob. Cuando utilice el formato, es necesario generar un archivo de manifiesto de S3 que contenga la lista de imágenes y sus comentarios correspondientes. El formato del archivo de manifiesto debe tener el formato líneas de JSON'source-ref' que apunta a la ubicación de S3 de la imagen. Los comentarios se proporcionan bajo el valor del parámetro "AttributeNames" tal y como se especifica en la solicitud CreateTrainingJob. También puede contener metadatos adicionales en la etiqueta de metadata pero el algoritmo los omite. En el siguiente ejemplo, los "AttributeNames" se incluyen en la lista de referencias de imágenes y anotaciones ["source-ref", "class"]. El valor de etiqueta correspondiente es "0" para la primera imagen y “1” para la segunda imagen:
{"source-ref":"s3://image/filename1.jpg", "class":"0"} {"source-ref":"s3://image/filename2.jpg", "class":"1", "class-metadata": {"class-name": "cat", "type" : "groundtruth/image-classification"}}
El orden de "AttributeNames" en los archivos de entrada importa a la hora de capacitar el algoritmo ImageClassification. Acepta datos canalizados en un orden específico, con image primero, seguido de label. Por tanto "AttributeNames" en este ejemplo se facilitan con "source-ref" primero, seguido de "class". Cuando se utiliza el algoritmo ImageClassification con manifiesto aumentado, el valor del parámetro RecordWrapperType debe ser "RecordIO".
El entrenamiento de etiquetas múltiples también se admite mediante la especificación de una matriz de JSON de valores. El hiperparámetro num_classes debe establecerse para que coincida con el número total de clases. Hay dos formatos de etiqueta válidos: multi-hot y class-id.
En el formato multi-hot, cada etiqueta es un vector codificado multi-hot de todas las clases, donde cada clase toma el valor de 0 o 1. En el siguiente ejemplo, existen tres clases. La primera imagen se etiqueta con las clases 0 y 2, mientras que la segunda imagen se etiqueta solo con la clase 2:
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[1, 0, 1]"} {"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[0, 0, 1]"}
En el formato class-id, cada etiqueta es una lista de los identificadores de clase, de [0, num_classes), que se aplican al punto de datos. En su lugar, el ejemplo anterior se vería así:
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[0, 2]"} {"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[2]"}
El formato multi-hot es el predeterminado, pero se puede establecer explícitamente en el tipo de contenido con el parámetro label-format: "application/x-recordio;
label-format=multi-hot". El formato class-id, que es el formato que emite GroundTruth, debe establecerse explícitamente: "application/x-recordio;
label-format=class-id".
Para obtener más información sobre archivos de manifiesto aumentado, consulte Archivos de manifiesto aumentados para trabajos de entrenamiento.
Entrenamiento incremental
También puede iniciar el entrenamiento de un nuevo modelo con los artefactos de un modelo entrenado anteriormente con SageMaker AI. El entrenamiento incremental supone un ahorro de tiempo cuando queremos entrenar un nuevo modelo con datos idénticos o similares. Los modelos de clasificación de imágenes de SageMaker AI solo se pueden combinar con otro modelo de clasificación de imágenes integrado y entrenado en SageMaker AI.
Para utilizar un modelo capacitado previamente, en la solicitud CreateTrainingJob, especifique el ChannelName como el "modelo" en el parámetro InputDataConfig. Establezca ContentType para el canal de modelo en application/x-sagemaker-model Los hiperparámetros de entrada del modelo nuevo y del modelo capacitado previamente cargado al canal de modelos tienen que tener la misma configuración para los parámetros de entrada num_layers, image_shape y num_classes. Estos parámetros definen la arquitectura de red. Para el archivo de modelo previamente entrenado, utilice los artefactos de modelos comprimidos (en formato .tar y .gz) generados por SageMaker AI. Puede usar los formatos RecordIO o de imagen para los datos de entrada.
Inferencia con el algoritmo Image Classification
Los modelos generados pueden alojarse para la inferencia y admiten formatos de imagen .jpg y .png codificados como tipo de contenido image/png,
image/jpeg y application/x-image. El tamaño de la imagen de entrada se redimensiona automáticamente. La salida corresponde a los valores de probabilidad para todas las clases codificadas en formato JSON o en formato de texto de líneas JSON
accept: application/jsonlines {"prediction": [prob_0, prob_1, prob_2, prob_3, ...]}
Para obtener más información sobre la capacitación y la inferencia, consulte las instancias de bloc de notas de muestra de clasificaciones de imágenes a las que se hace referencia en la introducción.
Recomendación de instancias EC2 para el algoritmo de clasificación de imágenes
Para la clasificación de imágenes, admitimos instancias P2, P3, G4dn y G5. Recomendamos utilizar instancias de GPU con más memoria para la capacitación con tamaños grandes de lotes. También puede ejecutar el algoritmo en configuraciones de varias máquinas o varias GPU para la capacitación distribuida. Para la inferencia, se pueden usar instancias de CPU (como C4) o de GPU (P2, P3, G4dn o G5).
Cuadernos de ejemplo de clasificación de imágenes
Para ver un cuaderno de ejemplo con el algoritmo de clasificación de imágenes de SageMaker AI, consulte Build and Register an MXNet Image Classification Model via SageMaker Pipelines