Articles

#021 Localización de Objetos CNN

Localización de objetos

La detección de objetos es una de las áreas de la visión por computadora que está explotando y funciona mucho mejor que hace un par de años. Para desarrollar la detección de objetos, primero aprendemos sobre la localización de objetos. Comencemos definiendo lo que eso significa.

Ya hemos dicho que la tarea de clasificación de imágenes es mirar una imagen y decir si hay un automóvil o no. La clasificación con localización no solo significa que tenemos que etiquetar un objeto como un automóvil, sino también poner un cuadro delimitador o dibujar un rectángulo alrededor de la posición del automóvil en la imagen. En el término clasificación con problema de localización, localización se refiere a averiguar en qué parte de la imagen está el coche que hemos detectado.

Aprenderemos sobre el problema de detección donde puede haber varios objetos en la imagen y tenemos que detectarlos todos y localizarlos todos. Si hacemos esto para una aplicación de conducción autónoma, es posible que necesitemos detectar no solo otros automóviles, sino tal vez otros peatones y motocicletas o incluso otros objetos. La clasificación y la clasificación con problemas de localización suelen tener un objeto grande en el centro de la imagen que intentamos reconocer o reconocer y localizar. En contraste con el problema de detección, puede haber varios objetos, y de hecho, tal vez incluso varios objetos de diferentes categorías dentro de una sola imagen. Las ideas que aprendamos sobre la clasificación de imágenes serán útiles para la clasificación con localización y luego las ideas que aprendamos para la localización resultarán útiles para la detección.

¿Qué son la localización y la detección ?

Clasificación de imágenes con localización, localización de objetos

Clasificación de imágenes (izquierda); Clasificación con localización (centro); Detección de múltiples objetos (derecha)

Comencemos hablando de Clasificación con localización. Ya estamos familiarizados con el problema de clasificación de imágenes en el que podríamos introducir una imagen en una \(convnet \) con varias capas, y esto da como resultado un vector de entidades que se alimenta tal vez a una unidad \(softmax \) que produce la clase predicha.

 Red Neuronal Convolucional con salida softmax

A \(convnet\) con salida \(softmax\)

Si estamos construyendo un automóvil autónomo, tal vez nuestras categorías de objetos sean un peatón, un automóvil, una motocicleta y un fondo (esto significa que ninguna de las anteriores). Así que, si no hay peatón, ni coche, ni moto, entonces podemos tener un fondo de salida. Estas son nuestras cuatro clases, por lo que necesitamos un \(softmax \) con \(4 \) posibles salidas.

¿Qué tal si queremos localizar el coche en la imagen también ? Para hacer eso, podemos cambiar nuestra red neuronal para tener algunas unidades de salida más que generen un cuadro delimitador. En particular, podemos tener la salida de red neuronal \(4 \) más números, y esos números serán \(b_x \), \(b_y \), \(b_h\), \(b_w \). Estos números \(4 \) parametrizan el cuadro delimitador del objeto detectado.

CNN que emite la posición de una caja delimitadora

Red neuronal convolucional que emite la posición de una caja delimitadora

Clasificación con localización

Aquí se usa la notación de que el punto superior izquierdo de la imagen es \((0,0) \), la parte inferior derecha es \((1,1) \).

 Cuadro delimitador en coche,, localización de objetos

Cuadro delimitador y sus coordenadas

Especificar el cuadro delimitador el rectángulo rojo requiere especificar el punto medio, de modo que es el punto \(b_x \), \(b_y\), así como la altura que sería \(b_h\), así como el ancho \(b_w \) de este cuadro delimitador. Ahora, si nuestro conjunto de entrenamiento contiene no solo la etiqueta de clase de objeto, que nuestra red neuronal está tratando de predecir aquí, sino que también contiene números \(4 \) adicionales que dan el cuadro delimitador, entonces podemos usar el aprendizaje supervisado para hacer que nuestro algoritmo produzca no solo una etiqueta de clase, sino también los parámetros \(4 \) para decirnos dónde está el cuadro delimitador del objeto que detectamos. En este ejemplo, \(b_x \) podría ser aproximadamente \(0.5\) porque esto está a mitad de camino a la derecha de la imagen, \(b_y\) podría ser aproximadamente \(0.7 \) dado que es aproximadamente el \(70\) % del camino hacia la imagen, \(b_h\) puede ser aproximadamente el \(0.3\) porque la altura de este cuadrado rojo es aproximadamente el \(30\) % de la altura total de la imagen, y \(b_w\) puede ser aproximadamente el \(0.4\) porque el ancho de la caja roja es aproximadamente el \(0.4\) del ancho total de toda la imagen.

Definir la etiqueta de destino \(y\)

Formalicemos esto un poco más en términos de cómo definimos la etiqueta de destino \(Y\) para esto como una tarea de aprendizaje supervisada. Definamos la etiqueta de destino \(Y\). Va a ser un vector donde el primer componente \(p_c \) va a mostrar si hay un objeto. Si el objeto es un peatón, un automóvil o una motocicleta, \(p_c \) será igual a 1, y si es la clase de fondo (si no es ninguno de los objetos que se detectan ), entonces \(p_c \) será \(0 \). Podemos pensar que \(p_c \) representa la probabilidad de que haya un objeto, probabilidad de que una de las clases que estamos tratando de detectar esté allí, algo que no sea la clase de fondo.

Nuestro vector \(y \) sería el siguiente:

$$ $ y=\begin{bmatrix} p_{c}\\ b_{x}\\b_{y}\\b_{h}\\b_{w}\\c_{1}\\c_{2}\\c_{3}\end{bmatrix} $$

Siguiente, si hay un objeto, a continuación, queremos que la salida de \(b_x \),\(b_y \),\(b_h\) y \(b_w \), el cuadro delimitador del objeto que hemos detectado. Y finalmente, si hay un objeto, por lo que si \(p_c =1\), también queremos mostrar \(C1\), \(C2 \) y \(C3 \) que indica si es el \(class1\), \(class 2 \) o \(class 3\), en otras palabras, si es un peatón, un automóvil o una motocicleta. Asumimos que nuestra imagen tiene solo un objeto y que la mayoría de estos objetos aparece en la imagen en esta clasificación con problema de localización. Veamos un par de ejemplos.

Si \(x\) es una imagen de conjunto de entrenamiento, entonces \(y\) tendrá el primer componente \(p_c =1\) porque hay un objeto, entonces \(b_x\), \(b_y\), \(b_h\) y \(b_w\) especificarán el cuadro delimitador. Por lo tanto, nuestro conjunto de formación de etiquetas, necesitaremos cajas delimitadoras en las etiquetas.

Y finalmente este es un coche, por lo que es \(clase 2\). \(C_1=0 \), porque no es un peatón, \(C_2=1 \) porque es un coche, \(C_3=0 \) ya que no es una moto. Entre \(C_1,C_2, C_3\), como máximo, uno de ellos debe ser igual a \(1 \).

$$ $ y= \begin{bmatrix}1\\b_{x}\\b_{y}\\b_{h}\\b_{w}\\0\\1\\0 \end{bmatrix} $$

¿Qué pasa si no hay un objeto en la imagen? En este caso \(p_c=0 \) y el resto de los elementos de este vector pueden ser cualquier número, porque si no hay ningún objeto en esta imagen,no nos importa qué caja delimitadora de las salidas de la red neuronal,así como cuál de los tres objetos \(C_1, C_2, C_3 \) piensa en esto.

$ $ y=\begin{bmatrix}0\\?\\?\\?\\?\\?\\?\\? \end {bmatrix}  Imagen de coche (izquierda) - imagen de la naturaleza(derecha)

Ejemplos de imágenes en un conjunto de entrenamiento

Dado un conjunto de ejemplos de entrenamiento etiquetados, así es como lo construimos: \(x \) la imagen de entrada, así como \(y \) la etiqueta de clase, tanto para imágenes donde hay un objeto como para imágenes donde no hay ningún objeto, y el conjunto de estos definirá nuestro conjunto de entrenamiento.

Función de pérdida

Finalmente describamos la función de pérdida que usamos para entrenar la red neuronal. La etiqueta de verdad de tierra era \(y\), y la red neuronal produce algo de \(\hat{y}\) lo que debería ser la abeja de pérdida.

$$ L\left ( \hat{y},y \right )=\left ( \hat{y}_{1}-y_{1} \derecho )^{2}+\left ( \hat{y}_{2}-y_{2} \right )^{2}+…+\left ( \hat{y}_{8}-y_{8} \derecho )^{2}, y_{1}=1 $$

$$ L\left ( \hat{y},y \right )= \left ( \hat{y}_{1}-y_{1} \derecho )^{2}, y_{1}=0 $$

Observe que \(y \) aquí tiene \(8 \) componentes (la primera fila de la función de pérdida), así que va de la suma de los cuadrados de la diferencia de los elementos, y que la pérdida de si \(y_1 =1 \). Ese es el caso donde hay un objeto so \(y_1\) = \(p_c\). Por lo tanto, si hay un objeto en la imagen, entonces la pérdida puede ser la suma de cuadrados sobre todos los diferentes elementos.

El otro caso es if \(y_1 = 0.\ ) Esto es si este \(p_c=0\), en ese caso la pérdida puede ser simplemente \(\hat{y_1}\) menos \(y_1\) al cuadrado porque en ese segundo caso el resto de los componentes no son importantes. Todo lo que nos importa es la precisión con la que la red neuronal produce \(p_c \) en ese caso.

Solo un resumen If

If \(y_1 = 1\), entonces podemos usar el error cuadrado para penalizar la desviación cuadrada del predictor que las salidas reales para los ocho componentes, mientras que if \(y_1 =0\) entonces no nos importan los siete valores restantes. Todo lo que nos importa es la precisión con la que nuestra estimación de red neuronal \(y_1 \) es igual a \(p_c \). Solo como un comentario secundario para aquellos de ustedes que quieren saber todos los detalles. Hemos usado el error cuadrado solo para simplificar la descripción aquí, en la práctica probablemente podríamos usar una pérdida de probabilidad para la salida \(C1 \enspace ,C2 \enspace ,C3\enspace \) a la salida \(softmax \) pero, al calcular los loos, el error cuadrado funcionará bien.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.