Aprenda el algoritmo de seguimiento de objetivos de clasificación profunda desde cero: explicación detallada de los principios y el código

Tabla de contenido

1. Pasos principales del seguimiento de objetivos

2. El proceso del algoritmo de clasificación tradicional.

3.Proceso de algoritmo de clasificación profunda

4. Código general de seguimiento de objetivos

4.1 En el directorio de archivos de configuración:

4.2 En el directorio deep_sort/deep_sort/deep:

4.3 En el directorio deep_sort/deep_sort/sort:

Ejecute la demostración:


DeepSORT (SORT basado en aprendizaje profundo) es un algoritmo de seguimiento visual de objetivos basado en aprendizaje profundo, que combina el aprendizaje profundo y el algoritmo de seguimiento de objetivos tradicional SORT (Seguimiento simple en línea y en tiempo real).

DeepSORT detecta el objetivo en cada cuadro de la imagen basándose en detectores de objetivos (como YOLO, Faster R-CNN, etc.), utiliza tecnología de fusión de múltiples funciones (Muti-feature Fusion) para representar y describir el objetivo, y luego usa el Algoritmo SORT para detectar el objetivo. Sobre la base del algoritmo SORT, DeepSORT introduce el modelo de Re-IDentificación (Re-ID) para resolver el problema de determinar la ID del objetivo. El modelo Re-ID determina la ID única del objetivo calculando la similitud del objetivo en imágenes de múltiples fotogramas.

Las ventajas del algoritmo DeepSORT son: alta precisión, gran robustez y buena adaptabilidad a la oclusión y deformación del objetivo. Ha sido ampliamente utilizado en campos como el seguimiento de peatones, vehículos y otros objetivos y la videovigilancia inteligente.

1. Pasos principales del seguimiento de objetivos

  1. Obtenga fotogramas de vídeo originales
  2. Utilice un detector de objetos para detectar objetos en fotogramas de vídeo
  3. Extraiga las características en el marco del objetivo detectado, que incluyen características de apariencia (conveniente para la comparación de características para evitar el cambio de ID) y características de movimiento (las características de movimiento son convenientes para la predicción mediante el filtro de Kalman)
  4. Calcule el grado de coincidencia del objetivo en los dos fotogramas antes y después (utilizando el algoritmo húngaro y la coincidencia en cascada) y asigne una ID a cada objetivo rastreado.

2. El proceso del algoritmo de clasificación tradicional.

        El predecesor de Deepsort es el algoritmo de clasificación, cuyo núcleo es el algoritmo de filtro de Kalman y el algoritmo húngaro.

        Función del algoritmo del filtro de Kalman: la función principal de este algoritmo es utilizar la serie actual de variables de movimiento para predecir las variables de movimiento del siguiente momento, pero el primer resultado de la detección se utiliza para inicializar las variables de movimiento del filtro de Kalman.

        El papel del algoritmo húngaro: en pocas palabras, resuelve el problema de asignación, que consiste en asignar un grupo de cuadros de detección y los cuadros predichos por Kalman, de modo que los cuadros predichos por Kalman puedan encontrar el cuadro de detección que mejor se adapte a sí mismo para lograr el efecto de seguimiento.

        El flujo de trabajo de clasificación se muestra en la siguiente figura:

 Las detecciones son fotogramas detectados por el objetivo. Tracks es información de seguimiento.

(1) Cree las pistas correspondientes en función de los resultados detectados del primer cuadro. Inicialice las variables de movimiento del filtro de Kalman y prediga sus fotogramas correspondientes a través del filtro de Kalman.

(2) Haga coincidir el cuadro detectado por el objetivo en este cuadro con el cuadro predicho por Tracks en el cuadro anterior uno por uno, y luego calcule la matriz de costos (matriz de costos, el método de cálculo es 1-IOU) a través del resultado de coincidencia del IOU .

(3) Utilice todas las matrices de costos obtenidas en (2) como entrada del algoritmo húngaro para obtener resultados de coincidencia lineal. En este momento, obtenemos tres tipos de resultados. El primero es Pistas no coincidentes (Pistas no coincidentes). Eliminamos directamente las Pistas no coincidentes; la segunda es Detecciones no coincidentes (Detecciones no coincidentes), inicializamos dichas Detecciones en nuevas Pistas (nuevas Pistas); la tercera es que el cuadro de detección y el cuadro predicho se emparejan exitosamente, lo que significa que rastreamos el anterior. fotograma y el siguiente fotograma con éxito, y actualizaron sus variables de Pistas correspondientes a través del filtrado de Kalman.

(4) Repita los pasos (2)-(3) hasta que finalice el fotograma del vídeo.

3.Proceso de algoritmo de clasificación profunda

Dado que el algoritmo de clasificación sigue siendo un algoritmo de seguimiento relativamente aproximado, es particularmente fácil perder su ID cuando se ocluye un objeto. El algoritmo Deepsort agrega cascada de coincidencias y confirmación de nuevas trayectorias al algoritmo de clasificación. Las pistas se dividen en estado confirmado (confirmado) y estado no confirmado (sin confirmar). Las pistas recién generadas están en estado no confirmado; las pistas no confirmadas deben coincidir con las detecciones una cierta cantidad de veces (el valor predeterminado es 3) antes de que puedan convertirse al estado de Confirmación. Las pistas confirmadas deben no coincidir con las detecciones una determinada cantidad de veces (por defecto, 30 veces) antes de que se eliminen.

        El flujo de trabajo del algoritmo Deepsort se muestra en la siguiente figura:

El flujo de trabajo de todo el algoritmo es el siguiente:

(1) Cree las pistas correspondientes en función de los resultados de detección del primer cuadro. Inicialice las variables de movimiento del filtro de Kalman y prediga sus fotogramas correspondientes a través del filtro de Kalman. Los Tracks en este momento deben estar sin confirmar.

(2) Haga coincidir el cuadro detectado por el objetivo en este cuadro con el cuadro predicho por Tracks en el cuadro anterior uno por uno, y luego calcule la matriz de costos (matriz de costos, el método de cálculo es 1-IOU) a través del resultado de coincidencia del IOU .

(3) Utilice todas las matrices de costos obtenidas en (2) como entrada del algoritmo húngaro para obtener resultados de coincidencia lineal. En este momento, obtenemos tres tipos de resultados. El primero es Pistas no coincidentes (Pistas no coincidentes). Eliminamos directamente las Pistas no coincidentes (porque estas Pistas están en un estado incierto. Si está en un estado determinado, debe eliminarse después de alcanzar un cierto número de veces (predeterminado 30 veces)); el segundo tipo son Detecciones no coincidentes. Inicializamos dichas Detecciones en nuevas Pistas (nuevas Pistas); el tercero es que el cuadro de detección y el cuadro predicho se emparejan con éxito, lo que significa que hemos rastreado con éxito el cuadro anterior y el siguiente, y las Detecciones correspondientes se pasan a través del Filtro Kalman y se actualizan. su correspondiente variable Tracks.

(4) Repita los pasos (2)-(3) hasta que aparezcan las pistas confirmadas o finalice el fotograma del vídeo.

(5) Utilice el filtrado de Kalman para predecir los fotogramas correspondientes a las Pistas en el estado confirmado y las Pistas en el estado no confirmado. Emparejar en cascada los fotogramas de las pistas y detecciones confirmadas (anteriormente, cada vez que se emparejaban las pistas, se guardaban las funciones de apariencia y la información de movimiento de las detecciones. Los primeros 100 fotogramas se guardaban de forma predeterminada y las funciones de apariencia y la información de movimiento se usaban para realizar la cascada con Detecciones. Coincidencia, esto se hace porque es más probable que los Tracks y Detecciones confirmados coincidan).

(6) Hay tres resultados posibles después de realizar la comparación en cascada. La primera es la coincidencia de pistas, que actualizan sus variables de pistas correspondientes mediante el filtrado de Kalman. El segundo y tercer tipo son las discrepancias entre las detecciones y las pistas. En este momento, las pistas no confirmadas previamente y las pistas no coincidentes se comparan con las detecciones no coincidentes una por una mediante IOU, y luego la matriz de costos se calcula en función de los resultados coincidentes de IOU. ., su método de cálculo es 1-IOU).

(7) Utilice todas las matrices de costos obtenidas en (6) como entrada del algoritmo húngaro para obtener resultados de coincidencia lineal. En este momento, obtenemos tres tipos de resultados. El primero es Pistas no coincidentes (Pistas no coincidentes). Eliminamos directamente las Pistas no coincidentes (porque estas Pistas están en un estado incierto. Si está en un estado determinado, debe eliminarse después de alcanzar un cierto número de veces (predeterminado 30 veces)); el segundo tipo son Detecciones no coincidentes. Inicializamos dichas Detecciones en nuevas Pistas (nuevas Pistas); el tercero es que el cuadro de detección y el cuadro predicho se emparejan con éxito, lo que significa que hemos rastreado con éxito el cuadro anterior y el siguiente, y las Detecciones correspondientes se pasan a través del Filtro Kalman y se actualizan. su correspondiente variable Tracks.

(8) Repita los pasos (5)-(7) hasta el final del cuadro de video.
 

4. Código general de seguimiento de objetivos

La siguiente es una explicación de las funciones del código importante para el seguimiento de objetivos.

        Primero el código se divide en tres partes:

  1. Códigos y pesos relacionados para el seguimiento de objetivos.
  2. Códigos y pesos relacionados con la detección de objetivos, aquí se utiliza el algoritmo de detección de objetivos yolov5.5
  3. Archivos py relacionados con código de seguimiento y detección de llamadas

Para conocer el contenido de la detección de objetivos, puede leer otros artículos.

Aquí explicamos principalmente la parte del código relacionada con el seguimiento de objetivos. El archivo py principal se muestra en la siguiente figura: Las funciones principales de cada archivo py se explicarán una por una.

La función principal

4.1 En el directorio de archivos de configuración:

 deep_sort.yaml: este archivo yaml guarda principalmente algunos parámetros.

(1) La ruta del directorio que contiene los pesos de extracción de características;

(2) Distancia máxima del coseno, utilizada para la coincidencia en cascada; si es mayor que el umbral, se ignora.

(3) Umbral de confianza del resultado de la detección

(4) Umbral de supresión no máximo, establecido en 1 para indicar que no hay supresión

(5) Umbral máximo de pagaré

(6) Vida útil máxima, es decir, si el objeto no se rastrea después del cuadro MAX_AGE, la trayectoria cambiará a un estado eliminado.

(7) El mayor número de aciertos. Si se alcanza el número de aciertos, el estado se convertirá de incierto a determinado.

(8) El número máximo de fotogramas para guardar funciones. Si se excede el número de fotogramas, se realizará el guardado continuo.

4.2 En el directorio deep_sort/deep_sort/deep:

ckpt.t7: este es un archivo de peso de la red de extracción de características. Este archivo de peso se generará después de que se entrene la red de extracción de características, lo cual es conveniente para extraer características en el marco de destino durante el seguimiento de objetivos y evitar el cambio de ID durante el seguimiento de objetivos.
evaluar.py: calcula la precisión del modelo de extracción de características.

feature_extractor.py: extrae las características en el cuadro delimitador correspondiente y obtiene una característica de dimensión fija como representante del cuadro delimitador para usarla en el cálculo de similitud.

model.py: modelo de red de extracción de características, que se utiliza para extraer pesos de red de extracción de características de entrenamiento.

train.py: archivo Python para la red de extracción de funciones de entrenamiento

test.py: prueba el rendimiento de la red de extracción de características entrenada

4.3 En el directorio deep_sort/deep_sort/sort:

detect.py: guarda un cuadro de detección que pasa la detección del objetivo, así como la confianza del cuadro y las características adquiridas; también proporciona métodos de conversión para varios formatos del cuadro.

iou_matching.py: calcula el pagaré entre dos cuadros.

kalman_filter.py: el código relevante del filtro de Kalman, que utiliza principalmente el filtro de Kalman para predecir la información de trayectoria del cuadro de detección.

linear_assignment.py: utilice el algoritmo húngaro para hacer coincidir el marco de trayectoria predicha y el marco de detección para obtener el mejor efecto de coincidencia.

nn_matching.py: calcula la distancia del collar más cercano calculando la distancia euclidiana, la distancia del coseno y otras distancias.

preprocessing.py: código de supresión no máxima, que utiliza el algoritmo de supresión no máxima para generar el marco de detección óptimo.

track.py: almacena principalmente información de trayectoria, incluida la información de posición y velocidad del marco de trayectoria, la identificación y el estado del marco de trayectoria, de los cuales hay tres estados, uno es el estado determinado, el estado incierto y el estado eliminado. .

tracker.py: guarda toda la información de la trayectoria, es responsable de inicializar el primer cuadro, predecir y actualizar el filtro de Kalman, y es responsable de la coincidencia en cascada y la coincidencia de pagarés.

deep_sort/deep_sort/deep_sort.py: la encapsulación general de deepsort, logrando un efecto general de seguimiento de deepsort.

deep_sort/utils: los principales aquí incluyen códigos Python para varias herramientas, como herramientas de marcos de imágenes, herramientas para guardar registros, etc.

Enlace: https://pan.baidu.com/s/1uORzJIav2z2SXMqaBfJ5pQ 
Código de extracción: ztaw

Ejecute la demostración:

resultado

 El siguiente capítulo explica cómo entrenar su propia red de extracción de características.

Supongo que te gusta

Origin blog.csdn.net/weixin_45303602/article/details/132721845
Recomendado
Clasificación