Directorio de artículos de la serie Fast-Reid
Directorio de artículos
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:
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
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.
# 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
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!