in

Comprensión de la región de interés (agrupación de RoI)

0lbtiFIOBUetVXsZt

Entendiendo el AA

Comprensión de la región de interés (agrupación de RoI)

Explicación rápida y sencilla de qué es RoI Pooling y cómo funciona. ¿Por qué lo usamos en Fast R-CNNs?

Kemal Erdem (burnpiro)

6 de febrero de 2020·6 min de lectura

Arquitectura original Fast R-CNN. Fuente: https://arxiv.org/pdf/1504.08083.pdf

Vamos a discutir la agrupación de RoI original descrita en R-CNN rápido papel (rectángulo azul claro en la imagen de arriba). Hay una segunda y una tercera versión de ese proceso llamada RoIAlign y RoIWarp.

Si está interesado en esos dos, consulte Este artículo

¿Qué es RoI?

RoI (Región de interés) es una región propuesta de la imagen original. No vamos a describir cómo extraer esas regiones porque existen múltiples métodos para hacer solo eso. Lo único que debemos saber en este momento es que hay varias regiones como esa y todas deben probarse al final.

¿Qué tan rápido funciona R-CNN?

Extracción de características

R-CNN rápido es diferente del básico R-CNN la red. Tiene solo una extracción de característica convolucional (en nuestro ejemplo usaremos VGG16).

Tamaño de salida de extracción de características VGG16

Nuestro modelo lleva una imetroentrada de edad del tamaño 512x512x3 (ancho x alto x RGB) y VGG16 lo está mapeando en un 16x16x512 mapa de características. Puede usar diferentes tamaños de entrada (generalmente es más pequeño, el tamaño de entrada predeterminado para VGG16 en Keras es 224×224).

Si observa la matriz de salida, debería notar que es ancho y altura es exactamente 32 veces más pequeño que la imagen de entrada (512/32 = 16). Eso es importante porque todos los RoI deben reducirse según este factor.

RoI de muestra

Aquí tenemos 4 RoI diferentes. En el Fast R-CNN real, es posible que tenga miles de ellos, pero imprimirlos todos haría que la imagen sea ilegible.

Regiones de interés, fuente de la imagen: Stephanie Booth https://www.flickr.com/photos/bunny/

Es importante recordar que RoI NO es un cuadro delimitador. Puede parecer uno, pero es solo una propuesta para un procesamiento posterior. Mucha gente asume eso porque la mayoría de los artículos y publicaciones de blogs están creando propuestas en lugar de objetos reales. Es más conveniente de esa manera, lo hice también en mi imagen. A continuación se muestra un ejemplo de un área de propuesta diferente que también será verificada por Fast R-CNN (recuadro verde).

Región de interés que no tiene sentido 🙂

Hay métodos para limitar el número de RoI y tal vez escriba sobre ello en el futuro.

¿Cómo obtener RoIs del mapa de características?

Ahora, cuando sepamos qué es RoI, debemos poder mapearlos en el mapa de características de salida de VGG16.

Asignación de nuestros RoI a la salida de VGG16

Cada RoI tiene sus coordenadas y tamaño originales. A partir de ahora nos vamos a centrar solo en uno de ellos:

Nuestro objetivo de RoI

Su tamaño original es 145×200 y la esquina superior izquierda está configurada para estar en (192,296). Como probablemente sabrá, no podemos dividir la mayoría de esos números por 32 (factor de escala).

  • ancho: 200/32 = 6.25
  • altura: 145/32 = ~ 4.53
  • x: 296/32 = 9,25
  • y: 192/32 = 6

Solo el último número (coordenada Y de la esquina superior izquierda) tiene sentido. Eso es porque estamos trabajando en un 16×16 cuadrícula en este momento y solo los números que nos interesan son enteros (para ser más precisos: Números naturales).

Cuantización de coordenadas en el mapa de características

Cuantización es un proceso de restringir una entrada de un gran conjunto de valores (como numeros reales) a un conjunto discreto (como enteros)

Si ponemos nuestro RoI original en el mapa de características, se vería así:

RoI original en el mapa de características

Realmente no podemos aplicar la capa de agrupación porque algunas de las «células» están divididas. Lo que hace la cuantificación es que cada resultado se redondea hacia abajo antes de colocarlo en la matriz. 9.25 se convierte en 9, 4.53 se convierte en 4etc.

RoI cuantificado

Puede notar que acabamos de perder un montón de datos (azul oscuro) y obtenemos nuevos datos (verde):

Pérdidas de cuantificación

No tenemos que lidiar con eso porque todavía va a funcionar, pero hay una versión diferente de este proceso llamada RoIAlign que arregla eso.

Agrupación de RoI

Ahora, cuando tenemos nuestro RoI mapeado en el mapa de características, podemos aplicar la agrupación en él. Una vez más vamos a elegir el tamaño de Agrupación de RoI capa solo para nuestra conveniencia, pero recuerde que el tamaño puede ser diferente. Podría preguntar «¿Por qué incluso aplicamos RoI Pooling?» y esa es una buena pregunta. Si observa el diseño original de Fast R-CNN:

Arquitectura original Fast R-CNN. Fuente: https://arxiv.org/pdf/1504.08083.pdf

Después Capa de agrupación de RoI hay un Capa completamente conectada con un tamaño fijo. Debido a que nuestros RoI tienen diferentes tamaños, tenemos que agruparlos en el mismo tamaño ( 3x3x512 en nuestro ejemplo). En este momento, nuestro RoI mapeado tiene un tamaño de 4x6x512 y como puedes imaginar nosotros no se puede dividir 4 entre 3 :(. Ahí es donde la cuantificación vuelve a atacar.

RoI mapeado y capa de agrupación

Esta vez no tenemos que ocuparnos de las coordenadas, solo del tamaño. Tenemos suerte (o simplemente el tamaño conveniente de la capa de agrupación) de que 6 podría ser dividido por 3 y da 2, pero cuando te divides 4 por 3 nos quedamos con 1,33. Después de aplicar el mismo método (redondear a la baja) tenemos una 1×2 vector. Nuestro mapeo se ve así:

Mapeo de agrupación de datos

Debido a la cuantificación, estamos perdiendo toda la fila inferior una vez más:

Mapeo de agrupación de datos

Ahora podemos agrupar datos en una matriz de 3x3x512

Proceso de agrupación de datos

En este caso, hemos aplicado Agrupación máxima pero puede ser diferente en su modelo. De c. este proceso se realiza en toda la matriz de RoI, no solo en la capa superior. Entonces, el resultado final se ve así:

0*PV3fmXrcohjrGFo

Salida de agrupación de tamaño completo

El mismo proceso se aplica a cada RoI de nuestra imagen original, por lo que al final, podríamos tener cientos o incluso miles de matrices de 3x3x512. Cada una de esas matrices debe enviarse a través del resto de la red (comenzando desde la capa FC). Para cada uno de ellos, el modelo genera bbox y class por separado.

¿Qué sigue?

Una vez finalizada la agrupación, estamos seguros de que nuestra entrada tiene un tamaño de 3x3x512 para que podamos alimentarlo en capas de FC para su posterior procesamiento. Hay una cosa más que discutir. Hemos perdido muchos datos debido al proceso de cuantificación. Para ser precisos, tanto:

Datos perdidos en cuantificación (azul oscuro y claro), ganancia de datos (verde)

Esto podría ser un problema porque cada «celda» contiene una gran cantidad de datos (1x1x512 en el mapa de características que se traduce libremente a 32x32x3 en una imagen original, pero no use esa referencia, porque no es así como funciona la capa convolucional). Hay una forma de solucionarlo (RoIAlign) y pronto escribiré un segundo artículo al respecto.

Editar: Aquí hay un segundo artículo sobre RoIAlign y RoIWarp https://medium.com/@kemalpiro/understanding-region-of-interest-part-2-roi-align-and-roi-warp-f795196fc193

Referencias:

  1. R-CNN rápido https://arxiv.org/pdf/1504.08083.pdf

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

apple touch icon@2

sorting – ¿Por qué no hay SortedList en Java?

gfg 200x200 min

Clasificación topológica – GeeksforGeeks