请选择 进入手机版 | 继续访问电脑版

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

[复制链接]
查看114 | 回复15 | 2021-9-13 12:04:21 | 显示全部楼层 |阅读模式
目次

弁言

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

对于目标 检测的方法,从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算法举行 目标 特性 建模,匹配和跟踪;末了 ,输出效果 。下图为算法流程计划 图:

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

图片

行人检测

2.1 YOLO行人检测

常见的两阶段检测起首 是使用 候选地区 天生 器天生 的候选区集合,并从每个候选区中提取特性 ,然后使用 地区 分类器猜测 候选地区 的种别 。而YOLO作为单阶段检测器,则不用天生 候选地区 ,直接对特性 图的每个位置上的对象举行 分类猜测 ,服从 更高。

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

  1. def yolo_body(inputs, num_anchors, num_classes):
  2. """Create YOLO_V3 model CNN body in Keras."""
  3. darknet = Model(inputs, darknet_body(inputs))
  4. x, y1 = make_last_layers(darknet.output, 512, num_anchors*(num_classes+5))
  5. x = compose(
  6. DarknetConv2D_BN_Leaky(256, (1,1)),
  7. UpSampling2D(2))(x)
  8. x = Concatenate()([x,darknet.layers[152].output])
  9. x, y2 = make_last_layers(x, 256, num_anchors*(num_classes+5))
  10. x = compose(
  11. DarknetConv2D_BN_Leaky(128, (1,1)),
  12. UpSampling2D(2))(x)
  13. x = Concatenate()([x,darknet.layers[92].output])
  14. x, y3 = make_last_layers(x, 128, num_anchors*(num_classes+5))
  15. return Model(inputs, [y1,y2,y3])
复制代码

图片

2.2 Deepsort行人跟踪

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

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

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

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

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

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

这里dist_thresh为间隔 阈值。当超过阈值时,轨道将被删除,并创建新的轨道;Max_frames_to_skip为答应 跳过的最大帧数对于跟踪对象未被检测到;max_trace_length为跟踪路径汗青 长度;trackIdCount为每个轨道对象的标识。

  1. def Update(self, detections):
  2. if (len(self.tracks) == 0):
  3. for i in range(len(detections)):
  4. track = Track(detections[i], self.trackIdCount)
  5. self.trackIdCount += 1
  6. self.tracks.append(track)
  7. N = len(self.tracks)
  8. M = len(detections)
  9. cost = np.zeros(shape=(N, M))
  10. for i in range(len(self.tracks)):
  11. for j in range(len(detections)):
  12. try:
  13. diff = self.tracks[i].prediction - detections[j]
  14. distance = np.sqrt(diff[0][0]*diff[0][0] +
  15. diff[1][0]*diff[1][0])
  16. cost[i][j] = distance
  17. except:
  18. pass
  19. cost = (0.5) * cost
  20. assignment = []
  21. for _ in range(N):
  22. assignment.append(-1)
  23. row_ind, col_ind = linear_sum_assignment(cost)
  24. for i in range(len(row_ind)):
  25. assignment[row_ind[i]] = col_ind[i]
  26. un_assigned_tracks = []
  27. for i in range(len(assignment)):
  28. if (assignment[i] != -1):
  29. if (cost[i][assignment[i]] > self.dist_thresh):
  30. assignment[i] = -1
  31. un_assigned_tracks.append(i)
  32. pass
  33. else:
  34. self.tracks[i].skipped_frames += 1
  35. del_tracks = []
复制代码

综合效果 表现

将YOLO行人检测和deepsort算法联合 ,并通过设置基本阈值参数控制轨迹猜测 的欧式间隔 。通过搭建本项目可应用于城市贸易 街道、人行道、校园道路场景,使用 其得出的职员 活动 数据,帮助公共交通和安全管理。终极 得到的使用 效果 如下:

  1. track_colors = get_colors_for_classes(max_colors)
  2. result = np.asarray(image)
  3. font = cv2.FONT_HERSHEY_SIMPLEX
  4. result0 = result.copy()
  5. result1=result.copy()
  6. img_position=np.zeros([result.shape[0],result.shape[1],3])
  7. if (len(centers) > 0):
  8. tracker.Update(centers)
  9. for i in range(len(tracker.tracks)):
  10. if (len(tracker.tracks[i].trace) > 1):
  11. x0, y0 = tracker.tracks[i].trace[-1][0][0], tracker.tracks[i].trace[-1][1][0]
  12. cv2.putText(result0, "ID: "+str(tracker.tracks[i].track_id-99), (int(x0), int(y0)), font, track_id_size,
  13. (255, 255, 255), 2)
  14. cv2.putText(result1, "ID: " + str(tracker.tracks[i].track_id - 99), (int(x0), int(y0)), font,
  15. track_id_size,
  16. (255, 255, 255), 2)
  17. color_random = tracker.tracks[i].track_id % 9
  18. cv2.circle(img_position, (int(x0), int(y0)), 1, track_colors[color_random], 8)
  19. cv2.putText(img_position, str(tracker.tracks[i].track_id - 99), (int(x0), int(y0)), font,
  20. track_id_size,
  21. (255, 255, 255), 2)
  22. result0=result0.copy()
  23. for j in range(len(tracker.tracks[i].trace) - 1):
  24. x1 = tracker.tracks[i].trace[j][0][0]
  25. y1 = tracker.tracks[i].trace[j][1][0]
  26. x2 = tracker.tracks[i].trace[j + 1][0][0]
  27. y2 = tracker.tracks[i].trace[j + 1][1][0]
  28. clr = tracker.tracks[i].track_id % 9
  29. distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
  30. if distance < max_point_distance:
  31. cv2.line(result1, (int(x1), int(y1)), (int(x2), int(y2)),
  32. track_colors[clr], 4)
  33. result1=result1.copy()
复制代码

图片

完备 代码:

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

提取码: f5y9

到此这篇关于Deepsort + Yolo 实现行人检测和轨迹追踪的文章就先容 到这了,更多相干 Deepsort Yolo 行人检测内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的相干 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar caymkda949764 | 2021-9-19 08:58:39 | 显示全部楼层
不错哦,admin楼主这是要火的节奏啊!
回复

使用道具 举报

avatar dgx3529361 | 2021-9-20 09:32:39 | 显示全部楼层
admin楼主很有激情啊!
回复

使用道具 举报

avatar 和你相伴1 | 2021-9-21 15:06:06 | 显示全部楼层
这个帖子好无聊啊!
回复

使用道具 举报

avatar 绣绣仙女酌 | 2021-9-26 21:19:40 | 显示全部楼层
我回帖admin楼主给加积分吗?
回复

使用道具 举报

avatar 冷艳林壳 | 2021-10-4 09:53:33 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

avatar 无奈的剑侠站 | 2021-10-5 21:02:48 | 显示全部楼层
admin楼主病的不轻啊!
回复

使用道具 举报

avatar 潘多拉945 | 2021-10-6 08:56:42 | 显示全部楼层
admin楼主内心很强大!
回复

使用道具 举报

avatar 陌上人如玉__ | 2021-10-9 01:35:59 | 显示全部楼层
顶一个!
回复

使用道具 举报

avatar 123457557 | 2021-10-11 09:54:32 | 显示全部楼层
最近压力山大啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则