← Volver al blog

¿Qué había antes de las redes neuronales convolucionales? | Parte 2

Una introducción rápida a Haar Cascades. Publicado originalmente en The Deep Hub.

Imagen creada por el autor con DALL-E 3 Imagen creada por el autor con DALL-E 3

Si conoces la visión artificial, seguramente has oído hablar de las redes neuronales convolucionales (CNN).

Las CNN han sustentado gran parte del desarrollo del campo: clasifican imágenes, detectan objetos y crean máscaras.

Redes neuronales convolucionales: una guía completa El poder de las CNN en el análisis de imágenes.

Pero ¿hay otra forma de clasificar imágenes? En detección de objetos, dos algoritmos forman una parte importante de la historia de la visión artificial:

  • Haar Cascades.
  • Histogramas de gradientes.

Aquí veremos Haar Cascades. La primera parte explicaba los histogramas de gradientes.

¿Qué había antes de las CNN? | Parte 1 Introducción a los histogramas de gradientes orientados.

Haar Cascades

Las Haar Cascades reciben su nombre de Alfréd Haar, el matemático que introdujo las características tipo Haar.

Paul Viola y Michael Jones desarrollaron la técnica en su paper de 2001, donde propusieron un método de detección facial en tiempo real.

¿Cómo funciona?

Haar Cascades Haar Cascades | Fuente

Puede parecerse a una CNN porque recorre una imagen con un kernel para capturar características. En Haar Cascades, ese kernel es una característica tipo Haar.

Al desplazarla por la imagen, el algoritmo suma valores de píxel en sus regiones blancas y negras.

Tipos de características tipo Haar Tipos de características tipo Haar | Fuente

Estas características son patrones rectangulares simples de dos, tres o cuatro rectángulos negros o blancos. Cada rectángulo tiene un peso:

  • Positivo en los rectángulos blancos.
  • Negativo en los rectángulos negros.

El algoritmo suma las intensidades de cada rectángulo, las multiplica por sus pesos y resta la suma de las zonas negras a la de las blancas.

Características Haar y ventana deslizante Características Haar y ventana deslizante | Fuente

Los rectángulos de la ventana representan las zonas blancas y negras de cada característica:

  • A: detecta bordes, como la separación entre frente y pelo.
  • B: detecta líneas, como los ojos: piel clara arriba y abajo de pestañas e iris oscuros.
  • C: detecta puntos, como la punta de la nariz o una mejilla.
  • D: detecta diagonales, como reflejos de luz en mejillas o puente nasal.

Características tipo Haar en detección facial Características tipo Haar en detección facial | Fuente

El algoritmo es ingenioso y puede detectar características eficazmente, pero resulta costoso. Viola y Jones resolvieron este problema con:

  • Imágenes integrales.
  • Clasificadores AdaBoost.
  • Cascadas.

1. Imagen integral

La imagen integral —o tabla de áreas acumuladas— permite calcular rápidamente la suma de valores de píxel de zonas rectangulares. Es clave para evaluar características Haar, que dependen de diferencias de intensidad entre rectángulos adyacentes.

Cómo se crea

  1. Se inicializa con un borde de ceros alrededor de la imagen.
  2. Para cada píxel se suma el valor que queda a su izquierda en la imagen integral.
  3. También se suma el valor del píxel de arriba.
  4. El valor en (x, y) equivale a la suma de todos los píxeles por encima y a la izquierda de (x, y), incluido el propio píxel.

Proceso de imagen integral Proceso de imagen integral | Fuente

Ejemplo

Ejemplo de imagen integral Ejemplo de imagen integral | Fuente

Para sumar la región 2 × 2 inferior derecha: toma el valor azul (59), resta los valores verde (32) y naranja (42) y suma el marrón (15), ya que se restó dos veces. El resultado es 59 − 32 − 42 + 15 = 0.

2. AdaBoost para seleccionar características

Usar todas las características Haar posibles es inviable. AdaBoost (Adaptive Boosting) selecciona unas pocas características críticas de un conjunto enorme.

Construye un clasificador fuerte como combinación lineal de clasificadores débiles, cada uno asociado con una característica Haar.

Clasificador AdaBoost Clasificador AdaBoost | Fuente

Se centra en los ejemplos difíciles de clasificar y da más peso a los clasificadores que funcionan bien sobre ellos.

Más información: AdaBoost Classifier Example In Python.

3. Cascadas o etapas

Un clasificador en cascada es un proceso de varias etapas: cada una decide si una región de la imagen puede contener el objeto buscado.

Las etapas posteriores son más complejas y solo se evalúan si las anteriores han identificado positivamente la región.

Cascadas en características Haar Cascadas en características Haar | Fuente

Cada etapa descarta muchos ejemplos negativos —fondo— con pocas características, reduciendo el cálculo para la mayor parte de la imagen.

Las primeras etapas eliminan rápidamente regiones que no contienen el objeto. Conforme una región supera más etapas, aumentan las características usadas y el criterio se vuelve más estricto. Solo las regiones que superan todas las etapas se clasifican como objeto.

Resumen

El proceso empieza con características tipo Haar, patrones de zonas claras y oscuras que distinguen partes de un objeto. Una ventana deslizante las busca en toda la imagen a distintas escalas.

La imagen integral acelera el cálculo de valores de píxel. AdaBoost elige las características más informativas, mejorando precisión y velocidad. Por último, las cascadas eliminan zonas irrelevantes con clasificadores simples antes de aplicar otros más complejos a las regiones prometedoras.

Bibliografía

¡Gracias por leer! Si te ha gustado el artículo, puedes dejar hasta 50 aplausos y seguirme en Medium para estar al día de los próximos artículos.

También puedes seguir mi nueva publicación:

The Deep Hub Tu espacio sobre ciencia de datos: una publicación de Medium dedicada a intercambiar ideas y ampliar conocimientos.