【Interpretación en papel】CLASIFICACIÓN híbrida: las señales débiles son importantes para el seguimiento de múltiples objetos en línea

Debido a que la línea base de Hybrid-SORT se mejora en función de OCSORT, se recomienda comprender los conocimientos relevantes de byteTrack y [] antes de hacer esto.

1. Introducción

1.1 Marco básico

El seguimiento de objetos múltiples (MOT) divide el problema en dos subtareas. La primera tarea es detectar objetos en cada cuadro. La segunda tarea es conectarlos en diferentes marcos. Las tareas de asociación se resuelven principalmente explotando señales fuertes, ya sea explícita o implícitamente, incluida información espacial y de apariencia.

1.2 Limitaciones de los métodos actuales

Cuando dos objetos se superponen mucho en el cuadro actual, la intersección (IoU) entre las posiciones de la trayectoria detectada y estimada se vuelve borrosa, y las características de apariencia de ambos objetos están dominadas por las características de primer plano.

2. CLASIFICACIÓN híbrida

El actual algoritmo de última generación tipo SORT, OCSORT, se modifica como nuestra base sólida. Primero, se modifica el modelado de la dirección de la velocidad en OC-SORT, es decir, el impulso centrado en la observación (OCM), extendiendo el centro de la caja a cuatro esquinas de la caja y extendiendo el intervalo de tiempo fijo a múltiples intervalos de tiempo; en segundo lugar, agregamos un bajo adicional -Etapa de correlación de detección de confianza después de ByteTrack.

2.1 Modelado de condiciones débiles

2.1.1 Modelado de confianza del tracklet

 Se agregan dos estados adicionales: confianza de la trayectoria c y su componente de velocidad\punto{c}

Como se muestra en la siguiente figura, el filtro de Kalman muestra un retraso obvio al intentar estimar cambios repentinos en el estado de confianza, y la tendencia de cambio del estado de confianza muestra una direccionalidad

 Con base en las características anteriores, este artículo utiliza una predicción lineal simple basada en el historial de trayectorias para estimar la confianza de la trayectoria .

El costo de confianza se calcula como la diferencia absoluta entre  la confianza de la trayectoria estimada según la Ecuación 4 \widehat{c}_{trk}y la confianza de detección.c_ {it}

2.1.2 IoU modulada en altura (HMIOU)

Introducir el estado de altura ayuda a mejorar la asociación:

(1) La altura de un objeto refleja información de profundidad hasta cierto punto , lo que hace que el estado de altura sea una pista eficaz para distinguir objetos muy superpuestos.

(2) En segundo lugar, el estado de altura es muy robusto para diferentes posturas, es un estado estimado con precisión y es una representación de alta calidad del objeto.

La fórmula se expresa como:

HIoU representa el estado de altura, que es una pista débil, mientras que IoU representa información espacial, que es una pista fuerte. Usamos HIoU para modular IoU para lograr un mejor reconocimiento de objetos ocluidos o agrupados.

2.2 CLASIFICACIÓN Híbrida

2.2.1 OCM robusto

2.2.1.1 Limitaciones del OCM original

 El modelado del OCM original es susceptible al ruido causado por intervalos de tiempo fijos y estados dispersos (es decir, solo centros objetivo).

2.2.1.2 OCM robusto
  • Primero, extienda el intervalo de tiempo fijo de 3 fotogramas a la superposición de múltiples intervalos de tiempo del 1 al 3;
  • En segundo lugar, utilizamos las cuatro esquinas del objeto en lugar de su punto central para calcular la dirección de la velocidad.

Evite que debido a cambios repentinos de actitud, la trayectoria y la dirección de la velocidad desde la trayectoria hasta el centro de detección puedan ser completamente opuestas, dando lugar a errores de coincidencia.

 

2.2.2 Modelado de apariencia

 Los objetos se detectan primero y luego los parches recortados resultantes se introducen en el modelo ReID. Usamos el promedio móvil exponencial (EMA) para modelar la información de apariencia del mapa de trayectoria y usamos la distancia del coseno como métrica para calcular la similitud entre las características de apariencia del mapa de trayectoria y las características de apariencia detectadas.

2.2.3 Arquitectura del algoritmo

La etapa de asociación incluye principalmente tres etapas: la primera etapa es la etapa de asociación de objetos de alta confianza, la segunda etapa es la etapa de asociación de objetos de baja confianza (BYTE en ByteTrack) y la tercera etapa es utilizar la última detección para restaurar la pista perdida (OCR en OC-SORT).

3.Código

3.1 Modelado KalmanBoxTracker del filtro Kalman

3.1.1 Introducción a la confianza de la trayectoria c y su componente de velocidad \punto{c}·

        if not orig:
          from .kalmanfilter_score_new import KalmanFilterNew_score_new as KalmanFilter_score_new
          self.kf = KalmanFilter_score_new(dim_x=9, dim_z=5)

3.1.2 Predicción de la confianza de la trayectoria

Predicción lineal simple para estimar la confianza de la trayectoria

        if not self.confidence_pre:
            return self.history[-1], np.clip(self.kf.x[3], self.args.track_thresh, 1.0),
                    np.clip(self.confidence, 0.1, self.args.track_thresh)
        else:
            return self.history[-1], np.clip(self.kf.x[3], self.args.track_thresh, 1.0), 
                   np.clip(self.confidence - (self.confidence_pre - self.confidence), 0.1, self.args.track_thresh)

Los valores de retorno son la cantidad de predicción de nueve bits, el valor de predicción de confianza y el componente de velocidad de la confianza \punto{c}.

3.2 OCM robusto

3.2.1 Las cuatro esquinas reemplazan su punto central.

 lt, rt, lb, rb: representan la velocidad de los cuatro puntos de las esquinas del bbox

    Y1, X1 = speed_direction_batch_lt(detections, previous_obs)
    Y2, X2 = speed_direction_batch_rt(detections, previous_obs)
    Y3, X3 = speed_direction_batch_lb(detections, previous_obs)
    Y4, X4 = speed_direction_batch_rb(detections, previous_obs)
    cost_lt = cost_vel(Y1, X1, trackers, lt, detections, previous_obs, vdc_weight)
    cost_rt = cost_vel(Y2, X2, trackers, rt, detections, previous_obs, vdc_weight)
    cost_lb = cost_vel(Y3, X3, trackers, lb, detections, previous_obs, vdc_weight)
    cost_rb = cost_vel(Y4, X4, trackers, rb, detections, previous_obs, vdc_weight)

    angle_diff_cost = cost_lt + cost_rt + cost_lb + cost_rb

speed_direction_batch_XX se utiliza para calcular la velocidad de cuatro puntos de esquina

cost_vel se utiliza para calcular el costo de una determinada velocidad de intersección

3.3 IoU modulada en altura (HMIOU)

def hmiou(bboxes1, bboxes2):
    """
    Height_Modulated_IoU
    """
    bboxes2 = np.expand_dims(bboxes2, 0)
    bboxes1 = np.expand_dims(bboxes1, 1)

    yy11 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])
    yy12 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])

    yy21 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])
    yy22 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])
    o = (yy12 - yy11) / (yy22 - yy21)

    xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])
    yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])
    xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])
    yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])
    w = np.maximum(0., xx2 - xx1)
    h = np.maximum(0., yy2 - yy1)
    wh = w * h
    o *= wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])
        + (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh)
    return (o)

Supongo que te gusta

Origin blog.csdn.net/weixin_50862344/article/details/132176269
Recomendado
Clasificación