Tutorial de detección de objetos con Torchvision
Tutorial de detección de objetos con Torchvision
Torchvision, una biblioteca en Pytorch, ayuda a explotar rápidamente los modelos preconfigurados para su uso en aplicaciones de visión por computadora. Esto es particularmente conveniente al emplear un modelo básico previamente capacitado para inferenciar y encontrar los mismos objetos objetivo que los que se utilizan en el conjunto de datos utilizados para la capacitación previa. Sin embargo, al usar un conjunto de datos personalizado, el modelo a menudo necesita ser re-capacitado y adaptado para aquellos casos de uso más especializados.
Por ejemplo, un caso de uso puede requerir solo un detector de una sola clase con una baja incidencia de objetos por imagen. La modificación de R-CNN más rápida de Multi-Clase a un modo de una sola clase puede otorgar un rendimiento más alto y un tiempo de entrenamiento más rápido para este escenario. Nuestro equipo encontró estos casos de uso y desea compartir cómo logramos esta conversión, incluido el marco conceptual y los cambios de parámetros API.
Dataset
El primer paso está construyendo un conjunto de datos personalizado para que se use DataAoder de Torch. El código de ejemplo en este tutorial proporciona una buena referencia para esta tarea. Para realizar el mejor desempeño de un detector de una sola clase, el conjunto de datos de entrenamiento debe incluir muestras negativas desafiantes. Esto le ayuda a aprender a diferenciar entre casos verdaderos y similares pero falsos. Por ejemplo, un detector Pikachu puede incluir imágenes de Ditto, Mimikyu y el verdadero Pikachu en el conjunto de datos de entrenamiento.
Las muestras negativas no necesitan anotaciones de la caja de límite, por lo que TorchVision puede prepararlas fácilmente. Esta capacidad, sin embargo, solo es compatible con la versión 0.6.0 o más nueva. El método __GETOTEM __ () en la clase de conjunto de datos debe parecerse a este fragmento:
Modelo
Publicaciones como esta y esto ya explica cómo funciona R-CNN más rápido, por lo que no volveremos ahascar ese tema. En su lugar, siguiendo un breve examen de las estructuras generales de R-CNN más rápido, se centremos en los cambios necesarios para alterar el modelo pre-capacitado para su uso con un detector de una sola clase.
Descripción general de la estructura
R-CNN más rápido contiene un CNN para extraer mapas de características de las imágenes de entrada. Estos mapas de características se utilizan para proponer regiones candidatas, así como predecir la puntuación y refinar el cuadro delimitador en cada región propuesta. Uno de los modelos de extracción de características disponibles en TorchVision se basa en RESNET-50, capacitado con el conjunto de datos COCO TREN2017, que puede identificar alrededor de 90 categorías. Los mapas de características extraídas se envían a una red de propuestas de la región (RPN) para predecir las regiones (cuadros de límite) que posiblemente contienen objetos objetivo, y cada región propuesta incluye una puntuación de objetivación prevista. Finalmente, las regiones y los mapas de características propuestos anteriores se pasan al clasificador para decidir si contienen un objeto de destino y para refinar sus cajas delimitadoras.
Estructura general de más rápido-RCNN. Fuente: R-CNN más rápida: hacia la detección de objetos en tiempo real con las redes de propuestas de la región
Red de propuestas de la región (RPN)
El RPN es una red pequeña y especializada que se desliza sobre los mapas de características y predice qué regiones contienen objetos objetivo. Luego, asigna las predicciones una puntuación de "objetividad", lo que indica la probabilidad de que contengan un objeto dirigido. Los objetos tendrán diferentes formas y escalas, por lo que el RPN debe proporcionar regiones propuestas con diferentes tamaños y formas para capturar estos diversos objetos. Las combinaciones de escala y proporción para regiones se denominan anclajes.
En Torchvision, la inicialización de estos anclajes se define en el anclaje. Para el caso de uso propuesto, la RPN solo necesita considerar un solo objeto, por lo que el tamaño y las proporciones de anclajes se pueden definir de acuerdo con el objeto de destino. Por ejemplo, la caja delimitadora de Pikachu con su cola generalmente necesita un rectángulo con relaciones de altura y anchura cerca de 1. Por lo tanto, los aspect_ratios pueden modificarse desde el valor predeterminado (0.5, 1.0, 2.0) hasta (0.75, 1.0, 1.5). O incluso solo (1.0), que muestra resultados similares en el documento con el conjunto de datos de COCO.
Durante la capacitación, no todos los anclajes se utilizarán para calcular la función de pérdida del RPN. Solo aquellos con IOU (intersección-sobre-sindical) con una caja de verdad de tierra más grande% 2Fsmaller que el umbral FG_IOU_THRESHOLD% 2fbg_iou_threshold se considera como Positive% 2Fnegative Anchors y tiene posible contribución en la función de pérdida. Los anclajes que no son ni positivos ni negativos no tienen influencia en la capacitación.
Para evitar que los anclajes negativos sean demasiado dominantes, solo se muestrean un cierto número de anclajes para calcular su pérdida. Este número está definido por el parámetro BATCH_SIZE_PER_IMAGE, y el grupo de muestra está limitado adicionalmente por el parámetro Positive_fraction para solicitar un cierto número mínimo de muestras positivas. Según el código fuente, cuando no se encuentran anclajes positivos (como con muestras negativas agregadas intencionalmente), el número de propuestas utilizadas en la función de pérdida será el BATCH_SIPE_PER_IMAGE.
El RPN R-CNN más rápido generan frecuentemente propuestas superpuestas. Para reducir la redundancia, aplica una operación de supresión no máxima (NMS) para conservar solo las propuestas con una puntuación de objetividad superior a 0.7. Después de NMS, las principales propuestas de N (2,000 en el trabajo original) se pasan al clasificador final, R-CNN rápido. Todos los parámetros predeterminados para el número de anclajes y propuestas están sintonizados para detectar múltiples objetos. Sin embargo, el escenario propuesto incluye solo uno o unos pocos objetivos en una sola imagen, por lo que estos parámetros pueden reducirse para reducir el número de regiones propuestas y acelerar la capacitación. El fragmento de código a continuación muestra un RPN sugerido para lograr esto.
R-CNN rápido
Después de obtener las propuestas de la región del RPN, el Clasificador (RAST R-CNN) opera con los mapas de características extraídas para inspeccionar las características en estas regiones. Su objetivo es predecir las puntuaciones de objetivos finales y refinar los cuadros delimitadores en los objetos objetivo. Este clasificador necesita una capa de agrupación ROI, propuesta en el trabajo R-CNN rápido anterior, para extraer características con diferentes tamaños de la región de entrada y luego emitir mapas de características de tamaño fijo. El clasificador se llama roi_heads en la API.
El siguiente fragmento ilustra cómo reemplazar el clasificador predeterminado con uno dedicado a un escenario específico. Con un escenario de una sola clase, se puede reducir el número de regiones, y el fragmento ilustra cómo lograr esto también.
Entrenando el modelo
Después de construir el modelo y el conjunto de datos, el siguiente paso es entrenarlo correctamente. El tutorial oficial emplea funciones de ayuda que envuelven todos los pasos de entrenamiento en cada época, incluido el calentamiento de la tasa de aprendizaje (solo en la primera época), la actualización de los pesos del modelo y la tala de pérdidas. Las funciones del ayudante imprimen la pérdida de cada iteración PRINT_FREQ. El Metric_Logger de cada época se puede usar para trazar la pérdida a lo largo de las iteraciones de capacitación, lo que ayuda a visualizar si el modelo está convergiendo bien.
La cifra anterior demuestra que la pérdida se está rebotando y no bajando, lo que sugiere que la tasa de aprendizaje predeterminada de 0.005 podría ser demasiado grande. Esto lleva al modelo que tiene dificultades para encontrar el mínimo de la función de pérdida. Cambiar este valor a 0.0005 con la antorcha Optimizer proporciona una convergencia mucho mejor, como se ilustra a continuación.
Todo el proceso de entrenamiento podría parecerse al siguiente fragmento.
Conclusión
Este artículo demuestra un método para cambiar un modelo R-CNN más rápido disponible en un detector de una sola clase con TorchVision. Simplificar el objetivo de la tarea permite la introducción de datos negativos duros bien definidos en el conjunto de datos de capacitación, afinando la configuración de hiper-parámetros del anclaje y un proceso de capacitación revisado para mejorar el rendimiento del modelo. Sin embargo, este enfoque no siempre funcionará cuando los objetivos de una sola clase sean pequeños y borrosos como la aplicación de un detector peatonal debido a las limitaciones de R-CNN más rápido. Sin embargo, este enfoque debe ayudar a capacitar a otros detectores de objetos con tanta flexibilidad que se desee sin necesidad de construir una nueva capa de modelo por capa.