纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Deepsort Yolo 行人检测 Deepsort + Yolo 实现行人检测和轨迹追踪的方法

AI科技大本营   2021-09-10 我要评论
想了解Deepsort + Yolo 实现行人检测和轨迹追踪的方法的相关内容吗AI科技大本营在本文为您仔细讲解Deepsort Yolo 行人检测的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Deepsort,Yolo,行人检测,Yolo,轨迹追踪下面大家一起来学习吧

引言

行人检测是近年来计算机视觉领域的研究热点同时也是目标检测领域中的难点其目的是识别和定位图像中存在的行人在许多领域中都有广泛的应用交通安全方面无人驾驶汽车通过提前检测到行人及时避让来避免交通事故的发生安防保护方面通过行人检测来防止可疑人员进入公共场所管理方面通过行人检测统计人流量数据优化人力物力等资源的分配

对于目标检测的方法从2013年Ross Girshick提出R-CNN开始人们在短短几年内相继提出Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO等算法其中两步检测的目标检测方法(R-CNN系列算法)需要先产生大量候选框之后再用卷积神经网络对候选框进行分类和回归处理单步检测的方法(SSD、YOLO系列算法)则直接在卷积神经网络中使用回归的方法一步就预测出目标的位置以及目标的类别虽然两步检测的目标检测方法在大多数的场景下精确率更高但是它需要分两个步骤进行因此这种方法将耗费大量的时间成本和昂贵的硬件成本不适合对视频文件进行实时的检测而YOLO系列的网络速度更快可以适应实时视频的检测泛化能力更强

对于人员跟踪2016年Alex Bewley提出了简单在线实时跟踪算法这种算法把传统的卡尔曼滤波和匈牙利算法结合到一起 能在视频帧序列中很好地进行跨检测结果的关联 而且它的速度比传统的算法快20倍左右可以快速地对目标检测反馈的数据进行处理

故本项目通过采用深度学习方法实现YOLO算法行人检测和deepsort算法对人员定位的和轨迹跟踪其最终实现效果如下图可见:

图片

基本介绍

1.1 环境要求

本次环境使用的是python3.6.5+windows平台主要用的库有:

opencv模块在计算机视觉项目的开发中opencv作为较大众的开源库拥有了丰富的常用图像处理函数库采用C/C++语言编写可以运行在Linux/Windows/Mac等操作系统上能够快速的实现一些图像处理和识别的任务

pillow模块PIL是理想的图像存档和批处理应用程序您可以使用库创建缩略图在文件格式、打印图像等之间进行转换它提供了广泛的文件格式支持、高效的内部表示和相当强大的图像处理功能核心图像库是为快速访问以几种基本像素格式存储的数据而设计的为通用图像处理工具提供了坚实的基础

Scipy库Scipy是一个用于数学、科学、工程领域的常用软件包可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题它用于有效计算Numpy矩阵使Numpy和Scipy协同工作高效解决问题

keras模块Keras是一个由Python编写的开源人工神经网络库可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口进行深度学习模型的设计、调试、评估、应用和可视化 

1.2 算法设计

使用卷积神经网络对视频中的行人进行检测和跟踪视频帧输入之后首先进入YOLOv3目标检测的网络经过Darknet-53提取特征其次进行上采样和特征融合再进行回归分析再次把得出的预测框信息输入SORT算法进行目标特征建模匹配和跟踪最后输出结果下图为算法流程设计图:

图片

行人检测

2.1 YOLO行人检测

常见的两阶段检测首先是使用候选区域生成器生成的候选区集合并从每个候选区中提取特征然后使用区域分类器预测候选区域的类别而YOLO作为单阶段检测器则不用生成候选区域直接对特征图的每个位置上的对象进行分类预测效率更高

在这里使用labelme标注行人数据集然后通过搭建好的YOLO算法产生模型并进行训练即可

def yolo_body(inputs, num_anchors, num_classes):
    """Create YOLO_V3 model CNN body in Keras."""
    darknet = Model(inputs, darknet_body(inputs))
    x, y1 = make_last_layers(darknet.output, 512, num_anchors*(num_classes+5))
    x = compose(
            DarknetConv2D_BN_Leaky(256, (1,1)),
            UpSampling2D(2))(x)
    x = Concatenate()([x,darknet.layers[152].output])
    x, y2 = make_last_layers(x, 256, num_anchors*(num_classes+5))
    x = compose(
            DarknetConv2D_BN_Leaky(128, (1,1)),
            UpSampling2D(2))(x)
    x = Concatenate()([x,darknet.layers[92].output])
    x, y3 = make_last_layers(x, 128, num_anchors*(num_classes+5))
    return Model(inputs, [y1,y2,y3])

图片

2.2 Deepsort行人跟踪

行人多目标跟踪算法设计的步骤如下:

(1) 检测阶段:目标检测算法会分析每一个输入帧并识别属于特定类别的对象给出分类和坐标

(2) 特征提取/运动轨迹预测阶段:采用一种或者多种特征提取算法用来提取表观特征运动或者交互特征此外还可以使用轨迹预测器预测该目标的下一个位置

(3) 相似度计算阶段:表观特征和运动特征可以用来计算两个目标之间的相似性

(4) 关联阶段:使用计算得到的相似性作为依据将属于同一目标的检测对象和轨迹关联起来并给检测对象分配和轨迹相同的 ID

使用卡尔曼滤波类跟踪的估计状态系统和估计的方差或不确定性用于预测

这里dist_thresh为距离阈值当超过阈值时轨道将被删除并创建新的轨道Max_frames_to_skip为允许跳过的最大帧数对于跟踪对象未被检测到max_trace_length为跟踪路径历史长度trackIdCount为每个轨道对象的标识

def Update(self, detections):
    if (len(self.tracks) == 0):
        for i in range(len(detections)):
            track = Track(detections[i], self.trackIdCount)
            self.trackIdCount += 1
            self.tracks.append(track)
    N = len(self.tracks)
    M = len(detections)
    cost = np.zeros(shape=(N, M)) 
    for i in range(len(self.tracks)):
        for j in range(len(detections)):
            try:
                diff = self.tracks[i].prediction - detections[j]
                distance = np.sqrt(diff[0][0]*diff[0][0] +
                                   diff[1][0]*diff[1][0])
                cost[i][j] = distance
            except:
                pass
    cost = (0.5) * cost
    assignment = []
    for _ in range(N):
        assignment.append(-1)
    row_ind, col_ind = linear_sum_assignment(cost)
    for i in range(len(row_ind)):
        assignment[row_ind[i]] = col_ind[i]
    un_assigned_tracks = []
    for i in range(len(assignment)):
        if (assignment[i] != -1):
            if (cost[i][assignment[i]] > self.dist_thresh):
                assignment[i] = -1
                un_assigned_tracks.append(i)
            pass
        else:
            self.tracks[i].skipped_frames += 1
    del_tracks = []

综合结果显示

将YOLO行人检测和deepsort算法结合并通过设置基本阈值参数控制轨迹预测的欧式距离通过搭建本项目可应用于城市商业街道、人行道、校园道路场景使用其得出的人员流动数据帮助公共交通和安全管理最终得到的使用效果如下:

track_colors = get_colors_for_classes(max_colors)
result = np.asarray(image)
font = cv2.FONT_HERSHEY_SIMPLEX
result0 = result.copy()
result1=result.copy()
img_position=np.zeros([result.shape[0],result.shape[1],3])
if (len(centers) > 0):
    tracker.Update(centers)
    for i in range(len(tracker.tracks)):
        if (len(tracker.tracks[i].trace) > 1):
            x0, y0 = tracker.tracks[i].trace[-1][0][0], tracker.tracks[i].trace[-1][1][0]
            cv2.putText(result0, "ID: "+str(tracker.tracks[i].track_id-99), (int(x0), int(y0)), font, track_id_size,
                        (255, 255, 255), 2)
            cv2.putText(result1, "ID: " + str(tracker.tracks[i].track_id - 99), (int(x0), int(y0)), font,
                        track_id_size,
                        (255, 255, 255), 2)
            color_random = tracker.tracks[i].track_id % 9
            cv2.circle(img_position, (int(x0), int(y0)), 1, track_colors[color_random], 8)
            cv2.putText(img_position, str(tracker.tracks[i].track_id - 99), (int(x0), int(y0)), font,
                        track_id_size,
                        (255, 255, 255), 2)
            result0=result0.copy()
            for j in range(len(tracker.tracks[i].trace) - 1):
                x1 = tracker.tracks[i].trace[j][0][0]
                y1 = tracker.tracks[i].trace[j][1][0]
                x2 = tracker.tracks[i].trace[j + 1][0][0]
                y2 = tracker.tracks[i].trace[j + 1][1][0]
                clr = tracker.tracks[i].track_id % 9
                distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
                if distance < max_point_distance:
                    cv2.line(result1, (int(x1), int(y1)), (int(x2), int(y2)),
                             track_colors[clr], 4)
            result1=result1.copy()

图片

完整代码:

链接: https://pan.baidu.com/s/1cJ6dgcEHOVGXvfg-ON3IrQ

提取码: f5y9


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式