Sistema completo de reidentificación de peatones YoloV5 + deepsort + Fast-ReID (3)

Directorio de artículos de la serie Fast-Reid


prefacio

El entrenamiento fast-reid anterior usó el marco Fast-Reid para entrenar el modelo en su propio escenario de aplicación. La estrategia de entrenamiento fue integrar una gran cantidad de conjuntos de datos reid de código abierto y entrenar un total de más de 30 W de datos junto con sus propios datos.
El código es de código abierto:
Yolov5-Deepsort-Fastreid
yolov5-deepsort-pedestrian-counting

1. yolov5 + clasificación profunda

Usando yolov5 para realizar la detección de peatones y la clasificación profunda para rastrear, puede prevenir mejor la identificación errónea del modelo reid en caso de oclusión.
Encapsulé yolov5 y deepsort en clases respectivamente, que son fáciles de integrar en mi propio proyecto, para facilitar el reemplazo de algoritmos de detección o seguimiento.
Reemplacé el modelo de extracción de representación de deepsor con el modelo reid entrenado por fastreid. Puede mejorar el rendimiento del seguimiento.
Para obtener más información, consulte el código de person_search_reid.py de la siguiente manera (ejemplo):

class yolo_reid():
    def __init__(self, cfg, args, path):
        self.args = args
        self.video_path = path
        use_cuda = args.use_cuda and torch.cuda.is_available()
        if not use_cuda:
            warnings.warn("Running in cpu mode which maybe very slow!", UserWarning)
		# Person_detect行人检测类
        self.person_detect = Person_detect(self.args, self.video_path)
        # deepsort 类
        self.deepsort = build_tracker(cfg, args.sort, use_cuda=use_cuda)
        imgsz = check_img_size(args.img_size, s=32)  # self.model.stride.max())  # check img_size
        self.dataset = LoadImages(self.video_path, img_size=imgsz)
        self.query_feat = np.load(args.query)
        self.names = np.load(args.names)

    def deep_sort(self):
        idx_frame = 0
        results = []
        for video_path, img, ori_img, vid_cap in self.dataset:
            idx_frame += 1
            t1 = time_synchronized()

			# yolo detection
            bbox_xywh, cls_conf, cls_ids, xy = self.person_detect.detect(video_path, img, ori_img, vid_cap)
            
            # do tracking  # features:reid模型输出512dim特征
            outputs, features = self.deepsort.update(bbox_xywh, cls_conf, ori_img)
            print(len(outputs), len(bbox_xywh), features.shape)

2. Conteo de peatones

Por cierto, yolov5 + deepsort realiza la función de conteo de peatones, cuenta el número total de personas que han aparecido en la cámara y cuenta los peatones que cruzan la línea amarilla personalizada de la siguiente manera:
inserte la descripción de la imagen aquí
Consulte el código person_count.py para obtener más detalles.

2. Características de extracción de Reid

La reidentificación de peatones es similar al reconocimiento de rostros, el primer contacto puede considerarse como el reconocimiento de reemplazar rostros con peatones.

1. Intercepte el banco inferior de peatones que necesitan ser identificados
inserte la descripción de la imagen aquí
2. Ejecute person_bank.py para guardar las características y los nombres de los peatones, a fin de facilitar la comparación de características e identificar los nombres correspondientes.
inserte la descripción de la imagen aquí

# features:reid模型输出512dim特征
person_cossim = cosine_similarity(features, self.query_feat)
max_idx = np.argmax(person_cossim, axis=1)
maximum = np.max(person_cossim, axis=1)
max_idx[maximum < 0.6] = -1
score = maximum
reid_results = max_idx
draw_person(ori_img, xy, reid_results, self.names)  # draw_person name

La siguiente figura identifica a los peatones a1111 y b22222 en la biblioteca inferior . No reconocido es Ninguno
inserte la descripción de la imagen aquí

Resumir

Cuando la escena no es compleja y no hay oclusión, la precisión del reconocimiento sigue siendo posible. También se puede ejecutar en tiempo real usando una tarjeta gráfica. El siguiente paso es optimizar la combinación de seguimiento y reidentificación en términos de lógica empresarial, reducir la cantidad de cálculos y mejorar el rendimiento del reconocimiento. Si los estudiantes interesados ​​​​tienen una buena manera, bienvenidos a comunicarse conmigo, ¡gracias!

Supongo que te gusta

Origin blog.csdn.net/zengwubbb/article/details/113422048
Recomendado
Clasificación