Detección de objetos - MXNet - Amazon SageMaker

Detección de objetos - MXNet

El algoritmo de detección de objetos - MXNet de Amazon SageMaker detecta y clasifica objetos en las imágenes mediante una única red neuronal profunda. Es un algoritmo de aprendizaje supervisado que toma como entrada e identifica todas las instancias de objetos dentro de la escena de una imagen. El objeto es categorizado en una de las clases en una colección especificada con una puntuación de confianza que pertenece a la clase. Su ubicación y escala en la imagen se indican con un cuadro delimitador rectangular. Utiliza el marco Single Shot multibox Detector (SSD) y admite dos redes de base: VGG y ResNet. La red puede ser capacitada a partir de cero, o con modelos que se han capacitado previamente en el conjunto de datos ImageNet.

Interfaz de entrada/salida para el algoritmo de detección de objetos

El algoritmo de detección de objetos de SageMaker admite tipos de contenido RecordIO (application/x-recordio) e imagen (image/png, image/jpeg y application/x-image) para el entrenamiento en modo de archivo, y admite RecordIO (application/x-recordio) para el entrenamiento en modo de canalización. Sin embargo también puede realizar la capacitación en modo de canalización mediante 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 formato de entrada recomendado para los algoritmos de detección de objeto de Amazon SageMaker es Apache MXNet RecordIO. Sin embargo, también pueden utilizar imágenes sin procesar en formato .jpg o .png. El algoritmo solo admite application/x-image para la inferencia.

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.

Consulte Cuadernos de ejemplo de detección de objetos para más información sobre formatos de datos.

Capacitación con el formato RecordIO

Si utiliza el formato RecordIO para la capacitación, especifique los canales de capacitación y validación como valores para el parámetro InputDataConfig de la solicitud CreateTrainingJob. Especifique un archivo RecordIO (.rec) en el canal de capacitación y un archivo RecordIO en el canal de validación. Establezca el tipo de canal para ambos canales en application/x-recordio. Un ejemplo de cómo generar un archivo RecordIO se encuentra en el bloc de notas de muestras de detección de objetos. También puede utilizar herramientas de GluonCV de MXNet para generar archivos RecordIO para conjuntos de datos populares, como PASCAL Visual Object Classes y Common Objects in Context (COCO).

Capacitación con el formato de imagen

Si utiliza el formato de imagen para la capacitación, especifique los canales train, validation, train_annotation y validation_annotation como valores para el parámetro InputDataConfig de la solicitud CreateTrainingJob. Especifique los archivos de datos de imagen individuales (.jpg or .png) para los canales de capacitación y validación. Para los datos de comentario, puede utilizar el formato JSON. Especifique los archivos .json correspondientes en los canales train_annotation y validation_annotation. Establezca el tipo de contenido para los cuatro canales en image/png o image/jpeg en función del tipo de imagen. También puede utilizar el tipo de contenido application/x-image cuando su conjunto de datos contiene imágenes .jpg y .png. A continuación se muestra un ejemplo de un archivo .json.

{ "file": "your_image_directory/sample_image1.jpg", "image_size": [ { "width": 500, "height": 400, "depth": 3 } ], "annotations": [ { "class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128 }, { "class_id": 0, "left": 161, "top": 250, "width": 79, "height": 143 }, { "class_id": 1, "left": 101, "top": 185, "width": 42, "height": 130 } ], "categories": [ { "class_id": 0, "name": "dog" }, { "class_id": 1, "name": "cat" } ] }

Cada imagen necesita un archivo.json para comentarios y el archivo.json debe tener el mismo nombre que la imagen correspondiente. El nombre del archivo .json anterior debe ser "sample_image1.json". Existen cuatro propiedades en el archivo .json de comentarios. La propiedad "file" especifica la ruta relativa del archivo de imagen. Por ejemplo, si sus imágenes de capacitación y correspondientes archivos .json se almacenan en s3://your_bucket/train/sample_image y s3://your_bucket/train_annotation, especifique la ruta para sus canales de capacitación y train_annotation como s3://your_bucket/train y s3://your_bucket/train_annotation, respectivamente.

En el archivo .json, la ruta relativa para una imagen denominada sample_image1.jpg debe ser sample_image/sample_image1.jpg. La propiedad "image_size" especifica las dimensiones de la imagen global. El algoritmo de detección de objetos SageMaker actualmente solo es compatible con imágenes de 3 canales. La propiedad "annotations" especifica las categorías y cuadros delimitadores para los objetos dentro de la imagen. Cada objeto se comenta con un "class_id" índice y con cuatro coordenadas del cuadro delimitador ("left", "top", "width", "height"). Los "left" valores (coordenada x) y "top" (coordenada y) representan la esquina superior izquierda del cuadro delimitador. Los "width" valores (coordenada x) y "height" (coordenada y) representan las dimensiones del cuadro delimitador. El origen (0, 0) es la esquina superior izquierda de toda la imagen. Si tiene varios objetos dentro de una imagen, todos los comentarios deben incluirse en un solo archivo .json. La propiedad "categories" almacena el mapeo entre el índice de clase y el nombre de clase. Los índices de clase se deben numerar sucesivamente y la numeración debe comenzar por 0. La propiedad "categories" es opcional para el archivo .json de comentarios

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 en el que cada línea representa una muestra. Las imágenes se especifican utilizando la etiqueta '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 encuentran en la lista ["source-ref", "bounding-box"]:

{"source-ref": "s3://your_bucket/image1.jpg", "bounding-box":{"image_size":[{ "width": 500, "height": 400, "depth":3}], "annotations":[{"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 80, "height": 50}]}, "bounding-box-metadata":{"class-map":{"0": "dog", "5": "horse"}, "type": "groundtruth/object-detection"}} {"source-ref": "s3://your_bucket/image2.jpg", "bounding-box":{"image_size":[{ "width": 400, "height": 300, "depth":3}], "annotations":[{"class_id": 1, "left": 100, "top": 120, "width": 43, "height": 78}]}, "bounding-box-metadata":{"class-map":{"1": "cat"}, "type": "groundtruth/object-detection"}}

El orden de los "AttributeNames" en los archivos de entrada importa a la hora de capacitar el algoritmo de detección de objetos. Acepta datos canalizados en un orden específico, con image primero, seguido de annotations. Por tanto "AttributeNames" en este ejemplo se facilitan con "source-ref" primero, seguido de "bounding-box". Cuando se utiliza la detección de objetos con manifiesto aumentado, el valor del parámetro RecordWrapperType se debe establecer como "RecordIO".

Para obtener más información sobre archivos de manifiesto aumentado, consulte Proporcione metadatos del conjunto de datos a trabajos de capacitación con un archivo de manifiesto aumentado.

Entrenamiento incremental

También puede propagar el entrenamiento de un nuevo modelo con los artefactos de un modelo entrenado anteriormente con SageMaker. El entrenamiento incremental supone un ahorro de tiempo cuando queremos entrenar un nuevo modelo con datos idénticos o similares. Los modelos de detección de objetos de SageMaker solo se pueden iniciar con otro modelo de detección de objetos integrado y entrenado en SageMaker.

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 nuevo modelo y del modelo capacitado previamente cargado al canal de modelos tienen que tener la misma configuración para los parámetros de entrada base_network y num_classes. Estos parámetros definen la arquitectura de red. Para el archivo de modelo prentrenado, utilice los artefactos de modelos comprimidos (en formato .tar y .gz) generados por SageMaker. Puede usar los formatos RecordIO o de imagen para los datos de entrada.

Para obtener más información sobre la capacitación incremental e instrucciones sobre cómo usarla, consulte Uso del entrenamiento incremental en Amazon SageMaker.

Recomendación de instancias EC2 para el algoritmo de detección de objetos

El algoritmo de detección de objetos es compatible con las familias de instancias de GPU P2, P3, G4dn y G5. Recomendamos utilizar instancias de GPU con más memoria para la capacitación con tamaños grandes de lotes. Puede ejecutar el algoritmo de detección de objetos en configuraciones de varias máquinas o varias GPU para el entrenamiento distribuido.

Para la inferencia, puede usar instancias CPU (como C5 y M5) e instancias GPU (como P3 y G4dn).

Cuadernos de ejemplo de detección de objetos

Para ver un ejemplo de cuaderno que muestra cómo utilizar el algoritmo de detección de objetos de SageMaker para entrenar y alojar un modelo en el

conjunto de datos Caltech Birds (CUB 200 2011) usando el algoritmo Single Shot Multibox Detector, consulte Amazon SageMaker Object Detection for Bird Species. Para obtener instrucciones sobre cómo crear instancias de cuadernos de Jupyter que pueda utilizar para ejecutar el ejemplo en SageMaker, consulte Creación de una instancia de cuaderno de Amazon SageMaker. Una vez que haya creado una instancia de cuaderno y la haya abierto, seleccione la pestaña Ejemplos de SageMaker para ver una lista de todas las muestras de SageMaker. El bloc de notas de ejemplo de detección de objetos que utiliza el algoritmo de detección de objetos se encuentra en la sección Introducción a los algoritmos de Amazon. Para abrir un bloc de notas, haga clic en la pestaña Use (Usar) y seleccione Create copy (Crear copia).