El marco de detección de objetos Viola-Jones es un marco de detección de objetos propuesto en 2001 por Paul Viola y Michael Jones . [1] [2] Aunque se puede entrenar para detectar una variedad de clases de objetos, fue motivado principalmente por el problema de la detección de rostros .
Descripción del problema
El problema a resolver es la detección de rostros en una imagen. Un humano puede hacer esto fácilmente, pero una computadora necesita instrucciones y restricciones precisas. Para que la tarea sea más manejable, Viola – Jones requiere caras verticales frontales con vista completa. Por lo tanto, para ser detectado, todo el rostro debe apuntar hacia la cámara y no debe inclinarse hacia ningún lado. Si bien parece que estas restricciones podrían disminuir un poco la utilidad del algoritmo, debido a que el paso de detección suele ir seguido de un paso de reconocimiento, en la práctica estos límites de pose son bastante aceptables.
Componentes del marco
Tipos de funciones y evaluación
Las características del algoritmo Viola-Jones que lo convierten en un buen algoritmo de detección son:
- Robusto: tasa de detección muy alta (tasa de verdaderos positivos) y tasa muy baja de falsos positivos siempre.
- Tiempo real: para aplicaciones prácticas, se deben procesar al menos 2 fotogramas por segundo.
- Solo detección de rostros (no reconocimiento): el objetivo es distinguir rostros de no rostros (la detección es el primer paso en el proceso de reconocimiento).
El algoritmo tiene cuatro etapas:
- Selección de características de Haar
- Creando una imagen integral
- Entrenamiento Adaboost
- Clasificadores en cascada
Las características buscadas por el marco de detección involucran universalmente las sumas de píxeles de imagen dentro de áreas rectangulares. Como tales, guardan cierta semejanza con las funciones básicas de Haar , que se han utilizado anteriormente en el ámbito de la detección de objetos basada en imágenes. [3] Sin embargo, dado que las características utilizadas por Viola y Jones se basan en más de un área rectangular, generalmente son más complejas. La figura de la derecha ilustra los cuatro tipos diferentes de características que se utilizan en el marco. El valor de cualquier característica dada es la suma de los píxeles dentro de los rectángulos claros restados de la suma de los píxeles dentro de los rectángulos sombreados. Las características rectangulares de este tipo son primitivas en comparación con alternativas como los filtros orientables . Aunque son sensibles a las características verticales y horizontales, su retroalimentación es considerablemente más burda.
Características de Haar
Todos los rostros humanos comparten algunas propiedades similares. Estas regularidades se pueden combinar con las funciones de Haar .
Algunas propiedades comunes a los rostros humanos:
- La región de los ojos es más oscura que la parte superior de las mejillas.
- La región del puente de la nariz es más brillante que los ojos.
Composición de propiedades que forman rasgos faciales equiparables:
- Ubicación y tamaño: ojos, boca, puente de la nariz
- Valor: gradientes orientados de intensidades de píxeles
Las cuatro características combinadas por este algoritmo se buscan luego en la imagen de una cara (mostrada a la derecha).
Características del rectángulo:
- Valor = Σ (píxeles en el área negra) - Σ (píxeles en el área blanca)
- Tres tipos: dos, tres, cuatro rectángulos, Viola & Jones usaban características de dos rectángulos
- Por ejemplo: la diferencia de brillo entre los rectángulos blanco y negro sobre un área específica
- Cada característica está relacionada con una ubicación especial en la subventana
Tabla de áreas sumadas
Una representación de imagen llamada imagen integral evalúa las características rectangulares en tiempo constante , lo que les da una ventaja de velocidad considerable sobre las características alternativas más sofisticadas. Debido a que el área rectangular de cada entidad siempre es adyacente a al menos otro rectángulo, se deduce que cualquier entidad de dos rectángulos se puede calcular en seis referencias de matriz, cualquier entidad de tres rectángulos en ocho y cualquier entidad de cuatro rectángulos en nueve.
Algoritmo de aprendizaje
Sin embargo, la velocidad con la que se pueden evaluar las características no compensa adecuadamente su número. Por ejemplo, en una subventana estándar de 24x24 píxeles, hay un total de M = 162,336 [4] características posibles, y sería prohibitivamente caro evaluarlas todas al probar una imagen. Por lo tanto, el marco de detección de objetos emplea una variante del algoritmo de aprendizaje AdaBoost para seleccionar las mejores funciones y entrenar a los clasificadores que las utilizan. Este algoritmo construye un clasificador "fuerte" como una combinación lineal de clasificadores "débiles" simples ponderados.
Cada clasificador débil es una función de umbral basada en la característica .
El valor umbral y la polaridad se determinan en el entrenamiento, así como los coeficientes .
Aquí se informa una versión simplificada del algoritmo de aprendizaje: [5]
Entrada: conjunto de N imágenes de entrenamiento positivas y negativas con sus etiquetas. Si la imagen i es una cara, si no .
- Inicialización: asignar un peso a cada imagen i .
- Para cada característica con
- Renormalice los pesos de manera que sumen uno.
- Aplique la función a cada imagen en el conjunto de entrenamiento, luego encuentre el umbral y la polaridad óptimos que minimiza el error de clasificación ponderado. Es decir dónde
- Asignar un peso a que es inversamente proporcional a la tasa de error. De esta forma se consideran más los mejores clasificadores.
- Los pesos para la siguiente iteración, es decir , se reducen para las imágenes i que se clasificaron correctamente.
- Establezca el clasificador final en
Arquitectura en cascada
- En promedio, solo el 0.01% de todas las subventanas son positivas (caras)
- Se invierte el mismo tiempo de cálculo en todas las subventanas
- Debe dedicar la mayor parte del tiempo solo a subventanas potencialmente positivas.
- Un clasificador simple de 2 funciones puede alcanzar una tasa de detección de casi el 100% con una tasa de FP del 50%.
- Ese clasificador puede actuar como una primera capa de una serie para filtrar la mayoría de las ventanas negativas.
- La segunda capa con 10 características puede abordar ventanas negativas "más duras" que sobrevivieron a la primera capa, y así sucesivamente ...
- Una cascada de clasificadores gradualmente más complejos logra tasas de detección aún mejores. La evaluación de los clasificadores fuertes generados por el proceso de aprendizaje se puede realizar rápidamente, pero no es lo suficientemente rápido para ejecutarse en tiempo real. Por esta razón, los clasificadores fuertes están dispuestos en cascada en orden de complejidad, donde cada clasificador sucesivo se entrena solo en aquellas muestras seleccionadas que pasan por los clasificadores anteriores. Si en cualquier etapa de la cascada un clasificador rechaza la subventana bajo inspección, no se realiza ningún procesamiento adicional y continúa buscando la siguiente subventana. Por tanto, la cascada tiene la forma de un árbol degenerado. En el caso de las caras, el primer clasificador de la cascada, llamado operador de atención, utiliza solo dos características para lograr una tasa de falsos negativos de aproximadamente 0% y una tasa de falsos positivos del 40%. [6] El efecto de este clasificador único es reducir aproximadamente a la mitad el número de veces que se evalúa toda la cascada.
En cascada, cada etapa consta de un clasificador fuerte. Entonces, todas las características se agrupan en varias etapas donde cada etapa tiene un cierto número de características.
El trabajo de cada etapa es determinar si una subventana determinada definitivamente no es una cara o puede ser una cara. Una subventana determinada se descarta inmediatamente como no una cara si falla en alguna de las etapas.
A continuación se proporciona un marco simple para el entrenamiento en cascada:
- f = la tasa máxima aceptable de falsos positivos por capa.
- d = la tasa de detección mínima aceptable por capa.
- Ftarget = tasa global de falsos positivos objetivo.
- P = conjunto de ejemplos positivos.
- N = conjunto de ejemplos negativos.
F (0) = 1,0; D (0) = 1,0; i = 0mientras que F (i)> F objetivo aumentar i n (i) = 0; F (i) = F (i-1) mientras que F (i)> f × F (i-1) aumenta n (i) use P y N para entrenar un clasificador con n (i) características usando AdaBoost Evaluar el clasificador en cascada actual en el conjunto de validación para determinar F (i) y D (i) disminuir el umbral para el i-ésimo clasificador (es decir, cuántos clasificadores débiles deben aceptar para que el clasificador fuerte acepte) hasta que el clasificador en cascada actual tenga una tasa de detección de al menos d × D (i-1) (esto también afecta a F (i)) N = ∅ si F (i)> F objetivo entonces evaluar el detector en cascada actual en el conjunto de imágenes sin rostro y coloque las detecciones falsas en el conjunto N.
La arquitectura en cascada tiene implicaciones interesantes para el rendimiento de los clasificadores individuales. Debido a que la activación de cada clasificador depende completamente del comportamiento de su predecesor, la tasa de falsos positivos para una cascada completa es:
Del mismo modo, la tasa de detección es:
Por lo tanto, para igualar las tasas de falsos positivos que suelen lograr otros detectores, cada clasificador puede salirse con la suya con un rendimiento sorprendentemente bajo. Por ejemplo, para una cascada de 32 etapas para lograr una tasa de falsos positivos del 10 - 6 , cada clasificador sólo necesita lograr una tasa de falsos positivos de alrededor de 65%. Sin embargo, al mismo tiempo, cada clasificador debe tener una capacidad excepcional para lograr tasas de detección adecuadas. Por ejemplo, para lograr una tasa de detección de aproximadamente el 90%, cada clasificador en la cascada antes mencionada necesita lograr una tasa de detección de aproximadamente el 99,7%. [7]
Uso de Viola – Jones para el seguimiento de objetos
En videos de objetos en movimiento, no es necesario aplicar la detección de objetos a cada cuadro. En su lugar, se pueden utilizar algoritmos de seguimiento como el algoritmo KLT para detectar características destacadas dentro de los cuadros delimitadores de detección y realizar un seguimiento de su movimiento entre fotogramas. Esto no solo mejora la velocidad de seguimiento al eliminar la necesidad de volver a detectar objetos en cada cuadro, sino que también mejora la robustez, ya que las características destacadas son más resistentes que el marco de detección Viola-Jones a la rotación y los cambios fotométricos. [8]
Referencias
- ^ Detección rápida de objetos mediante una cascada mejorada de funciones simples
- ^ Viola, Jones: Detección robusta de objetos en tiempo real, IJCV 2001 Consulte las páginas 1, 3.
- ^ C. Papageorgiou, M. Oren y T. Poggio. Un marco general para la detección de objetos. Congreso Internacional de Visión por Computador , 1998
- ^ "La detección de rostros de Viola-Jones afirma características de 180k" . stackoverflow.com . Consultado el 27 de junio de 2017 .
- ^ R. Szeliski, Computer Vision, algoritmos y aplicaciones , Springer
- ^ Viola, Jones: Detección robusta de objetos en tiempo real, IJCV 2001 Consulte la página 11.
- ^ Torbert, Shane (2016). Ciencias de la Computación Aplicadas (2ª ed.). Saltador. págs. 122-131.
- ^ Detección y seguimiento de rostros mediante el algoritmo KLT
enlaces externos
- Diapositivas que presentan el marco
- Información sobre las funciones básicas de Haar
- Extensión de la estructura Viola-Jones usando la función SURF
- IMMI - Extensión de minería de imágenes Rapidminer - herramienta de código abierto para minería de imágenes
- Detección de rostros robusta en tiempo real
- Un algoritmo mejorado en el detector de objetos Viola-Jones
- Citas del algoritmo Viola-Jones en Google Scholar
- Video conferencia sobre el algoritmo Viola-Jones en YouTube - Explicación de Adaboost de ppt por Qing Chen, Discovery Labs, Universidad de Ottawa y video conferencia por Ramsri Goutham.
Implementaciones
- Implementación del algoritmo de detección de rostros Viola – Jones por Ole Helvig Jensen
- MATLAB: [1] , [2]
- OpenCV: implementado como
cvHaarDetectObjects()
.