Una introducción rápida a Haar Cascades. Publicado originalmente en The Deep Hub.
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 | 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 | 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 | 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 | 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
- Se inicializa con un borde de ceros alrededor de la imagen.
- Para cada píxel se suma el valor que queda a su izquierda en la imagen integral.
- También se suma el valor del píxel de arriba.
- 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 | Fuente
Ejemplo
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 | 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 | 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
- https://pyimagesearch.com/2021/04/12/opencv-haar-cascades/
- Haar Cascades, Explained
- Tutorial de AdaBoost en Kaggle
¡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.