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:
- Prediccion Hkxk con matriz de covarianza HkPkHkT
- 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:
- Representación de imagen.
- Modelo de movimiento.
- 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.