Clasificación de imágenes - TensorFlow - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Clasificación de imágenes - TensorFlow

El algoritmo de clasificación de SageMaker imágenes de Amazon es un TensorFlow algoritmo de aprendizaje supervisado que admite el aprendizaje por transferencia con muchos modelos previamente entrenados desde el TensorFlow Hub. Utilice el aprendizaje por transferencia para ajustar uno de los modelos previamente entrenados disponibles en su propio conjunto de datos, aunque no haya una gran cantidad de datos de imagen disponibles. El algoritmo de clasificación de imágenes toma una imagen como entrada y genera una probabilidad para cada etiqueta de clase suministrada. Los conjuntos de datos de entrenamiento deben estar compuestos por imágenes en formato .jpg, .jpeg o .png.

Cómo utilizar el algoritmo de clasificación de SageMaker imágenes TensorFlow

Puede utilizar la clasificación de imágenes, TensorFlow como un algoritmo SageMaker integrado en Amazon. La siguiente sección describe cómo utilizar la clasificación de imágenes TensorFlow con el SDK de SageMaker Python. Para obtener información sobre cómo utilizar la clasificación de imágenes, TensorFlow desde la interfaz de usuario clásica de Amazon SageMaker Studio, consulteSageMaker JumpStart.

El TensorFlow algoritmo de clasificación de imágenes admite el aprendizaje por transferencia mediante cualquiera de los modelos TensorFlow Hub compatibles previamente entrenados. Para obtener una lista de todos los modelos prentrenados disponibles, consulte TensorFlow Modelos Hub. Cada modelo prentrenado tiene un model_id de modelo único. En el siguiente ejemplo, se utiliza MobileNet V2 1.00 224 (model_id:tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4) para realizar ajustes precisos en un conjunto de datos personalizado. Todos los modelos previamente entrenados se descargan previamente del TensorFlow Hub y se almacenan en buckets de Amazon S3 para que los trabajos de capacitación se puedan ejecutar de forma aislada en la red. Utilice estos artefactos de entrenamiento de modelos pregenerados para construir un estimador. SageMaker

En primer lugar, recupere el URI de la imagen de Docker, del script de entrenamiento y del modelo prentrenado. Luego, cambie los hiperparámetros como crea conveniente. Puede ver un diccionario de Python con todos los hiperparámetros disponibles y sus valores predeterminados con hyperparameters.retrieve_default. Para obtener más información, consulte Clasificación de imágenes: TensorFlow hiperparámetros. Utilice estos valores para construir un estimador. SageMaker

nota

Los valores de hiperparámetros predeterminados son diferentes para los distintos modelos. Para los modelos más grandes, el tamaño de lote predeterminado es menor y el hiperparámetro train_only_top_layer se establece en "True".

En este ejemplo, se utiliza el conjunto de datos tf_flowers, que contiene cinco clases de imágenes de flores. Descargamos previamente el conjunto de datos TensorFlow con la licencia Apache 2.0 y lo pusimos a disposición con Amazon S3. Para ajustar su modelo, llame a .fit utilizando la ubicación de Amazon S3 del conjunto de datos de entrenamiento.

from sagemaker import image_uris, model_uris, script_uris, hyperparameters from sagemaker.estimator import Estimator model_id, model_version = "tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4", "*" training_instance_type = "ml.p3.2xlarge" # Retrieve the Docker image train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None) # Retrieve the training script train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training") # Retrieve the pretrained model tarball for transfer learning train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training") # Retrieve the default hyper-parameters for fine-tuning the model hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version) # [Optional] Override default hyperparameters with custom values hyperparameters["epochs"] = "5" # The sample training data is available in the following S3 bucket training_data_bucket = f"jumpstart-cache-prod-{aws_region}" training_data_prefix = "training-datasets/tf_flowers/" training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}" output_bucket = sess.default_bucket() output_prefix = "jumpstart-example-ic-training" s3_output_location = f"s3://{output_bucket}/{output_prefix}/output" # Create SageMaker Estimator instance tf_ic_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location, ) # Use S3 path of the training data to launch SageMaker TrainingJob tf_ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Interfaz de entrada y salida para el algoritmo de clasificación de imágenes TensorFlow

Cada uno de los modelos previamente entrenados que aparecen en TensorFlow Hub Models se puede ajustar a cualquier conjunto de datos con cualquier número de clases de imágenes. Ten cuidado con el formato de los datos de entrenamiento para introducirlos en el modelo de clasificación de imágenes. TensorFlow

  • Formato de entrada de datos de entrenamiento: los datos de entrenamiento deben ser un directorio con el mismo número de subdirectorios que el número de clases. Cada subdirectorio debe contener imágenes que pertenezcan a esa clase en formato .jpg, .jpeg o .png.

A continuación se muestra un ejemplo con una estructura de directorios de entrada. Este conjunto de datos de ejemplo tiene dos clases: roses y dandelion. Los archivos de imagen de cada carpeta de clases pueden tener cualquier nombre. El directorio de entrada debe alojarse en un bucket de Amazon S3 con una ruta similar a s3://bucket_name/input_directory/. Tenga en cuenta que es obligatorio incluir / al final.

input_directory |--roses |--abc.jpg |--def.jpg |--dandelion |--ghi.jpg |--jkl.jpg

Los modelos entrenados generan archivos de asignación de etiquetas que asignan los nombres de las carpetas de clases a los índices en la lista de probabilidades de las clases de salida. Esta asignación está en orden alfabético. Por ejemplo, en el caso anterior, la clase “diente de león” es de índice 0 y la clase “rosas” es de índice 1.

Tras el entrenamiento, dispondrá de un modelo ajustado que podrá seguir entrenando de forma incremental; también podrá implementarlo para hacer inferencias. El TensorFlow algoritmo de clasificación de imágenes añade automáticamente una firma de preprocesamiento y posprocesamiento al modelo ajustado para que pueda tomar imágenes como probabilidades de entrada y devolver clases de probabilidades. El archivo que asigna los índices de clases en las etiquetas de las clases se guarda junto con los modelos.

Entrenamiento incremental

Puedes iniciar el entrenamiento de un nuevo modelo con artefactos de un modelo con el que te hayas entrenado anteriormente. SageMaker El entrenamiento incremental supone un ahorro de tiempo cuando queremos entrenar un nuevo modelo con datos idénticos o similares.

nota

Solo puedes combinar un modelo de clasificación de SageMaker imágenes con otro TensorFlow modelo de clasificación de imágenes con el que hayas entrenado SageMaker. TensorFlow

Para el entrenamiento incremental, puede utilizar cualquier conjunto de datos, siempre y cuando el conjunto de clases siga siendo el mismo. El paso de entrenamiento incremental es similar al paso de ajuste; la diferencia es que, en lugar de comenzar con un modelo previamente entrenado, se comienza con un modelo ajustado existente. Para ver un ejemplo de entrenamiento incremental con el TensorFlow algoritmo de clasificación de SageMaker imágenes, consulte el cuaderno de muestra Introducción a SageMaker TensorFlow la clasificación de imágenes.

Inferencia con el algoritmo de clasificación de imágenes TensorFlow

Puede alojar el modelo ajustado que resulta de su formación en clasificación de TensorFlow imágenes para realizar inferencias. Cualquier imagen de entrada para la inferencia debe estar en el formato .jpg, jpeg o .png y ser del tipo de contenido application/x-image. El TensorFlow algoritmo de clasificación de imágenes cambia el tamaño de las imágenes de entrada automáticamente.

Al ejecutar la inferencia, se obtienen valores de probabilidad, etiquetas de clase para todas las clases y la etiqueta pronosticada correspondiente al índice de clase con la probabilidad más alta, codificada en formato JSON. El TensorFlow modelo de clasificación de imágenes procesa una sola imagen por solicitud y genera solo una línea. Lo siguiente es un ejemplo de una respuesta en formato JSON:

accept: application/json;verbose {"probabilities": [prob_0, prob_1, prob_2, ...], "labels": [label_0, label_1, label_2, ...], "predicted_label": predicted_label}

Si accept se establece en application/json, el modelo solo genera probabilidades. Para obtener más información sobre el entrenamiento y la inferencia con el TensorFlow algoritmo de clasificación de imágenes, consulte el cuaderno de muestra Introducción a SageMaker TensorFlow la clasificación de imágenes.

Recomendación de instancia de Amazon EC2 para el algoritmo de clasificación de imágenes TensorFlow

El TensorFlow algoritmo de clasificación de imágenes es compatible con todas las instancias de CPU y GPU para el entrenamiento, incluidas las siguientes:

  • ml.p2.xlarge

  • ml.p2.16xlarge

  • ml.p3.2xlarge

  • ml.p3.16xlarge

  • ml.g4dn.xlarge

  • ml.g4dn.16.xlarge

  • ml.g5.xlarge

  • ml.g5.48xlarge

Para el entrenamiento con lotes grandes, recomendamos utilizar instancias de GPU con más memoria. Para la inferencia, se pueden usar instancias de CPU (como M5) o de GPU (P2, P3, G4dn o G5).

Clasificación de imágenes: TensorFlow ejemplos de cuadernos

Para obtener más información sobre cómo utilizar el TensorFlow algoritmo de clasificación de SageMaker imágenes para el aprendizaje por transferencia en un conjunto de datos personalizado, consulte la introducción al SageMaker TensorFlow cuaderno de clasificación de imágenes.

Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas en las que puede ejecutar el ejemplo SageMaker, consulte. Instancias de Amazon SageMaker Notebook Tras crear una instancia de bloc de notas y abrirla, seleccione la pestaña SageMakerEjemplos para ver una lista de todos los SageMaker ejemplos. Para abrir un bloc de notas, elija su pestaña Usar y elija Crear copia.