lunes, 21 de agosto de 2017

Modulo 8 Seguimiento de Objetos



Module 8.1
Introduction to Object Tracking
Table of Contents
What is Object Tracking ? 2
Tracking versus Detection 3
Tracking is faster than Detection 3
Tracking can help when detection fails 4
Tracking preserves identity of objects 4

En este modulo, Se presenta el tema de seguimiento de objetos. Se mencionan de forma sucinta los métodos principales usados para hacer el seguimiento de objetos:
1. Dense Optical flow : Flujo óptico denso
2. Sparse optical flow : Flujo óptico disperso
3. Kalman Filtering : Filtro Kalman
4. Meanshift and Camshift : Meanshift  y  Camshift
5. Single object trackers : Seguimiento de objetos únicos
6. Multiple object track finding algorithms : Algoritmos para encontrar y seguir múltiples objetos.

Comparativa “Seguimiento”  versus  “Detección”
.- El Seguimiento es más rápido que la Detección
.- El Seguimiento puede ayudar cuando falla la Detección.
.- El Seguimiento preserva la identidad de los objetos.

Module 8.2
Kalman Filtering
Table of Contents
Overview 2
What is a Kalman Filter? 3
State Transition Equation 3
Modeling Uncertainties 5
Control Input 6
Uncontrolled uncertainties 6
Measurements 7
Fusing information 8
Summary 10
Code and Tutorial 10
Results 22
References and Further Reading 22

En este modulo, se explica lo que es un filtro Kalman y su funcionamiento como herramienta de seguimiento.

Para hacer el seguimiento, el Filtro Kalman adopta la siguiente estrategia:
1.- Predecir: Hacer predicciones sobre el estado interno del sistema (por ejemplo la posición y la velocidad de un drone) basado en un estado interno previo y cualquier entrada de control (por ejemplo la fuerza de propulsión).
2.- Actualización: Cuando nuevas medidas (por ejemplo información de GPS) sobre parte del estado interno están disponibles, las usa para actualizar la predicción hecha en el paso uno.

La ecuación de transición de estado
La etapa de predecir del filtro de Kalman, supone que no hay aceleración, luego la posición actual es la posición previa mas la velocidad por el tiempo transcurrido. Esto se puede representar matricialmente así:

Modelado de las incertidumbres:
Las incertidumbres se modelan usualmente usando una distribución Gaussiana con una media y una varianza. Eso significa un vector de 6x1 para la media y una matriz de 6x6 para la covarianza.

La entrada de control:
Esta se representa por la llamada matriz de control. Muestra el mecanismo por el cual uk influencia el estado de xk, si uk  fuese el vector aceleración en 3D, la matriz de control seria:
Hay además cosas que están más allá de nuestro control y que afectan al estado del drone. Por ejemplo la navegación del drone podría verse afectada por una racha de viento. Estas incertidumbres son modeladas como un ruido Gaussiano de media cero y con covarianza Qk.
Resumiendo la etapa de predicción del filtro Kalman.
.- Un estado previo donde conocemos posiciones y velocidades.
.- Una entrada de control conocida.
.- Unas incertidumbres aleatorias que modelamos como ruido.
Las ecuaciones de la etapa de predicción del filtro Kalman serán:
Xk = Fkxk-1 + Bkuk
Pk = FkPk-1FkT+Qk

Vamos a tratar ahora de la etapa de actualización basándonos por ejemplo en un GPS.
Sea el vector de posición zk y las incertidumbres las modelamos con la matriz de covarianza Rk. Deberíamos combinar esta información con el estimado logrado en la sección previa. Para ello necesitamos variables compatibles y usamos una matriz de observación (Hk) que hace un mapeado del estado actual al espacio de observación. Así Hkzk  y zk son cantidades que podemos comparar.

Fundiendo la información:
Aquí nos encontramos dos informaciones probabilísticas que tienen diferente media y varianza. Resulta que podemos combinar las dos fuentes de información simplemente multiplicando las dos distribuciones Gaussianas y normalizando para que el área sea uno.
Tenemos:

  1. Prediccion Hkxk con matriz de covarianza HkPkHkT
  2. Medida zk con matriz de covarianza Rk

Podemos combinar las dos fuentes de información de exactamente la misma manera que dijimos antes.
OpenCV, implementa el filtro Kalman como la clase KalmanFilter.

Module 8.3
Object Tracking using
Meanshift and CAMshift
Table of Contents
Overview 2
Object Tracking using Meanshift 2
What is Meanshift? 2
A simple example 2
The equations 3
What about Object tracking 4
What is Histogram Backprojection? 5
Object Tracking using Meanshift in OpenCV 6
Step 1 : Find the histogram of the face region 6
Step 2 : Find Back Projected image 6
Step 3 : Apply Meanshift 6
Meanshift Tracking Code and Tutorial 8
Discussion on performance 14
Object Tracking using CAMshift 15
Object Tracking using CAMshift in OpenCV 16
Improvements over Meanshift 17
CAMshift Tracking Code and Tutorial 17
References and Further Reading 24

En este modulo, se abordan los seguidores de objetos Meanshift y Camshift.
Meanshift es un método no paramétrico para encontrar la moda de un conjunto de puntos, dicho de otra forma, encuentra el máximo de una función de densidad. Su funcionamiento es iterativo, supongamos que tenemos un conjunto de puntos con alguna masa y elegimos un área circular con centro en el punto Pci que los encierra, calculamos el centro de masas de los puntos Pmi, lo normal es que Pci y Pmi sean diferentes, entonces consideramos un nuevo recinto circular con centro desplazado en Pci=Pmi y repetimos el cálculo del centro de masas para los puntos encerrados en el nuevo recinto y así sucesivamente hasta que converja y Pci==pmi.
El parámetro más importante de este algoritmo es el radio del circulo, si es muy pequeño, obtenemos un máximo local y si es muy grande so permite encontrar el máximo verdadero. Un método de cálculo mejorado es uno que da más importancia a los puntos que están más cercanos a x  y disminuyen al apartarse. Esto se consigue con un kernel Gaussiano (KG) o un kernel de Epanechnikov (KE).

¿Cómo se usa esto para el seguimiento de objetos?
1.- Encontrar el histograma del objeto de interés.
2.- Para cada nuevo fotograma, encontrar una imagen de probabilidad (que es similar a una función de densidad). Esta imagen de probabilidad puede ser obtenida mediante la retro proyección del histograma.
3.- Use Meanshift para encontrar el máximo de esta función de densidad acumulativa de imagen de probabilidad.

¿Qué es retro proyección de histograma?
Es una manera de encontrar la similitud entre dos imágenes. Puede ser definido vagamente como un método de re aplicar un histograma pre calculado a una nueva imagen para encontrar la similitud entre la distribución de color de la nueva imagen y el objeto de interés. Digamos que tenemos un histograma del objeto de interés dado por H. Entonces, por cada pixel en la nueva imagen, encuentra el “bin” en H al que él debería pertenecer y crea una imagen nueva con el valor del pixel siendo el valor de conteo del bin.

Seguimiento de objetos usando Meanshift en OpenCV
Paso 1: Encontrar el histograma de la región de la cara.
.- Detectar la cara usando Dlib.
.- Computar el histograma de la región de la cara usando el canal H del espacio de color HSV, usamos la función calcHist() de OpenCV para computarlo y normalizarlo al rango [0,255].
.- Encontrar la imagen retro-proyectada usando la función calcBackProject() de OpenCV
.- Aplicar Meanshift para encontrar el máximo en la imagen retro-proyectada en el vecindario de la nueva posición. Usamos meanShift() de OpenCV.

Seguimiento de objetos usando CAMshift (Continuamente Adaptable Meanshift)
1.- Se especifica la ventana inicial de seguimiento de altura h y ancho w centrada en (xc,yc).
2.- Usar Meanshift para obtener la localización actualizada de (xc,yc) y almacene el momento cero que es la suma de todos los pixeles en la ventana de la imagen retro proyectada.
3.- Mover el centro de la ventana al nuevo centro de masas e incremente el ancho de la ventana y la altura a valores pautados.
4.- Repita los pasos 2 y 3 hasta la convergencia.
Module 8.4
OpenCV Object Tracking API
Table of Contents
OpenCV 3 Tracking API 2
Object Tracking Algorithms 2
BOOSTING Tracker 4
MIL Tracker 4
KCF Tracker 5
TLD Tracker 5
MEDIANFLOW Tracker 6
GOTURN tracker 6
Code and Tutorial 7
Combining Detection and Tracking 11
Reference and Further Reading 12

En este modulo, se da cobertura a la nueva API de seguimiento que viene con OpenCV 3. De hecho 6 “seguidores” diferentes disponibles en OpenCV 3.2.
El principio general de todos es encontrar en el fotograma presente el objeto seguido a partir de los datos de seguimiento obtenidos en fotogramas anteriores. Asia tenemos:
.- Un modelo de movimiento, donde sabemos la localización y la velocidad en fotogramas anteriores y con esos datos podemos predecir donde estará localizado el objeto.
.- Un modelo de apariencia que codifica como luce el modelo, esto puede usarse para buscar en un pequeño entorno de la localización predicha para predecir con más precisión la localización del objeto. Dado que la apariencia de un objeto puede cambiar de forma significativa, en muchos de los “seguidores” modernos, este modelo de apariencia es un “clasificador” que ha sido entrenado “online”.
Veamos los “seguidores” que vienen con OpenCV 3.2:
 1.- Seguidor BOOSTING
Está basado en una versión online de AdaBoost. Este clasificador necesita ser entrenado en tiempo de ejecución con ejemplos positivos y negativos del objeto. El rectángulo envolvente suministrado por el usuario o por otro algoritmo de detección, es tomado como el ejemplo positivo para el objeto y muchos recortes de imagen externos al rectángulo envolvente son tratados como “fondo”. Recibido un fotograma nuevo, se ejecuta el clasificador sobre cada pixel en el vecindario de la localización previa y se guarda la puntuación del clasificador. La nueva localización del objeto es aquella donde la puntuación es máxima, Aportándonos un ejemplo positivo nuevo para el clasificador. Cada nuevo fotograma actualiza el clasificador.
Pros: Ninguno. Trabaja bien pero tiene una década de antigüedad y hay disponible seguidores más avanzados.
Cons: El rendimiento del seguimiento es mediocre y no sabe cuando falla el seguimiento.

2.- Seguidor MIL
Similar al seguidor BOOSTING con la diferencia de que en lugar de solo considerar la localización actual del objeto como un ejemplo positivo, mira en un pequeño entorno alrededor de la localización actual para generar varios ejemplos positivos. Es obvio que estos ejemplos estarán desplazados, pero aquí es donde actúa MIL (Múltiple Instance Learning) Aprendizaje de Instancias Múltiples donde no especificas ejemplos positivos y negativos, sino “bolsas” positivas y negativas y la “bolsa” es etiquetada como positiva si cualquier instancia en la bolsa esta etiquetada como positiva por el clasificador. En caso contrario la “bolsa” es etiquetada como negativa.
Pros: El rendimiento es muy bueno. No tiene tanta deriva como el seguidor BOOSTING y es razonable bajo oclusión parcial. Lo supera el KCF.
Cons: El fallo de seguimiento no es reportado con confianza. No se recupera de la oclusión total.

Seguidor KCF
Significa Filtros de Correlación Kernelizada. Esta construido sobre las ideas de los dos seguidores anteriores. Este seguidor usa el hecho de que múltiples muestras positivas usadas en el seguidor MIL tienen regiones de solapamiento mayores. Este data solapado es aprovechado por este seguidor para hacer un seguimiento más rápido y más preciso al mismo tiempo.
Pros: Precisión y velocidad son mejores que el MIL y reporta el fallo en el seguimiento mejor que BOOSTING y MIL.
Cons: No se recupera de oclusión total.

Seguidor TLD
TLD (Tracking, learning and detection). Como su nombre sugiere, descompone el seguimiento en tres componentes. El seguidor sigue al objeto de fotograma a fotograma. El detector localiza todas las apariencias que han sido observadas hasta el momento y corrige el seguidor si es necesario. El aprendizaje estima los errores del detector y los actualiza para evitar estos errores en el futuro.
Pros: Es el mejor cuando hay oclusión sobre múltiples fotogramas. También hace el mejor seguimiento sobre cambios de escala.
Cons: Muchos falsos positivos haciéndolo casi inusable.

Seguidor MEDIANFLOW
Internamente, este seguidor sigue el objeto en ambas direcciones temporales, hacia adelante y hacia atrás y mide las discrepancias entre estas dos trayectorias. Minimizando ese error “Adelante/Atrás” lo capacita a detectar los fallos de seguimiento y seleccionar trayectorias confiables en secuencias de video. Este seguidor “sabe” cuando ha fallado el seguimiento.
Pros: Excelente reporte de fallo de seguimiento. Trabaja muy bien cuando el movimiento es predecible y no hay oclusión.
Cons: Falla cuando gran movimiento.

Seguidor GOTURN
Es el único de los presentes basado en CNN (Convolutional Neural Network) y también es el único que usa un modelo entrenado “offline” por lo cual es más rápido que otros seguidores. Por la documentación de OpenCV, conocemos que es robusto a cambios de punto de vista, cambios de iluminación, y a las deformaciones. Pero no maneja la oclusión muy bien. Hay un fallo en la implementación actual que hace “CRASH” cuando se usa.

Combinando Detección y Seguimiento
En la implementación actual, no hay manera de actualizar los métodos init para indicarle al seguidor los datos procedentes de un detector. La única manera es empezar un nuevo seguidor usando el método create.

Module 8.5
Object Tracking using Multiple Instance Learning
Table of Contents
Overview 2
Object Tracking using MIL 2
Image representation 2
Motion model 2
Appearance Model 3
Multiple Instance Learning -- In words 3
Training data creation 3
Multiple Instance Learning -- In equations 5
Online Boosting 5
References and Further Reading 6

En este modulo, se habla sobre el seguimiento de objetos usando MIL (Múltiple Instance Learning).
Los métodos tradicionales basados en aprendizaje supervisado entrenan un clasificador discriminativo para separar los objetos del fondo. Al primer fotograma de la secuencia se le dota con el rectángulo envolvente del objeto que será seguido. A continuación, ejemplos positivos y negativos son extraídos de esta ventana del objeto. Errores en la posición de la ventana seleccionada pueden conducir a ejemplos de entrenamiento etiquetados incorrectamente. Si los ejemplos de entrenamiento no son buenos en un montaje de aprendizaje supervisado, el clasificador entrenado no funcionara como es esperado. Más aun, data que este bien “anotada” puede ser costosa de obtener.
Teniendo esto presente. Una aproximación de aprendizaje supervisado débilmente llamado “Múltiple Instance Learning” es usado donde no tenemos confianza plena en los datos de entrenamiento. El sistema propuesto consiste de tres componentes:
  1. Representación de imagen.
  2. Modelo de movimiento.
  3. Modelo de apariencia.

Representación de imagen
Para cada recorte de imagen, características de tipo Haar son computadas lo cual ha sido discutido en gran detalle en el modulo previo. Estas características también son usadas como clasificadores débiles para el algoritmo “en línea” como se discutirá mas tarde.

Modelo de movimiento
Un modelo simplista es usado, donde la localización de la ventana de seguimiento en el tiempo t es igualmente probable que aparezca dentro de un radio s de la localización del seguidor en el tiempo t-1.

Modelo de Apariencia
Un clasificador discriminativo basado en “Múltiple Instance Learning” es usado como modelo de apariencia.

“Múltiple Instance Learning” – En palabras.
En MIL, no especificamos ejemplos positivos y negativos, sino conjuntos positivos y negativos llamados bolsas (“bags”). La colección de imágenes en la bolsa positiva no son ejemplos estrictamente positivos. En su lugar, una bolsa es etiquetada positiva si al menos una imagen en la bolsa es un ejemplo positivo y negativa si todos los ejemplos en la bolsa son negativos.

Creación de datos de entrenamiento

Module 8.6
Tracking Multiple Objects
Table of Contents
Multi-object Tracking 2
Code and Tutorial - MultiTracker 2
References 6

En este modulo, se presenta la implementación de un seguidor de varios objetos por OpenCV. Este seguidor procesa los objetos seguidos independientemente sin ninguna optimización. Un ejemplo de construcción en OpenCV seria:
cv::MultiTraker trackers(algoritmo de seguimiento)
Los algoritmos de seguimiento disponibles son: BOOSTING, MIL, TLD, KCF, MEDIANFLOW.
El algoritmo de seguimiento por defecto es KCF.

No hay comentarios:

Publicar un comentario