实战 | keras-yolov3 + Kalman-Filter 进行人体多目标追踪(含代码)

2020 年 1 月 14 日 计算机视觉life

点击上方“计算机视觉life”,选择“星标”

快速获得最新干货


概述


作者:https://github.com/mattzheng/keras-yolov3-KF-objectTracking

整理:AI算法与图像处理

今天给大家分享一个非常棒非常炫酷的github项目,基于yolov3+Kalman-Filter 的人体多目标跟踪算法。

先看一些效果图,先睹为快,亲测简单好用,大家可以基于这个项目进行优化。

蓝色的框为检测到的人,每个框后面的线为移动轨迹。

原理大概就是 先定位到人,然后对人进行跟踪。

其中一种简单的多目标跟踪方式:detector+tracker,两者其实是相对独立的。

大致原理图如下所示:

这是原作者画的一个草图,这里的流程就是,图片经过detector,得到人体坐标框,然后计算中心点位置centers(x0,y0),将该centers(x0,y0)输入给追踪器,追踪器去学习(Update)并给出预测。

其中每一帧的图,tracker都会给出多条轨迹,每条轨迹都可能由若干个点组成。


新的一帧物体中心点centers给入之后,tracker与给出预测值prediction ,同时预测值与实际detections的距离去迭代匈牙利算法匹配(linear_sum_assignment)。

好处:可以任意组合比较好的detector/tracker算法

但是这一整套方法论有非常多的问题:

问题一:
在刚刚检测到新人的时候,第一次轨迹预测的时候容易飘逸(如上面白色框所示)

问题二:

one-stage算法的缺陷是不够稳定,笔者本项目尝试的是keras-yolov3,在开阔场景没问题,但是在一切人密度较大,遮挡物较多,像素不够高清的视频上发现检测器容易遗漏物体,前两帧可以检测,后面几帧断了,然后又续上了。这个时候,detector都出现问题,tracker当然会出现loss丢失掉之前的物体。


一些网友也提出过很多解决方案:

  • (1)多帧融合;

  • (2)在第一帧有物体的时候就用快速跟踪的手段取代检测器,雷达与物体bbox匹配。


keras-yolov3 + kalman filter的一些微调

那先从该项目的KF算法Tracker开始,项目中预设了几个调节选项:

  • dist_thresh: distance threshold. When exceeds the threshold, track will be deleted and new track is created,距离阈值:超过阈值时,将删除轨迹并创建新轨迹

  • max_frames_to_skip: maximum allowed frames to be skipped forthe track object undetected,超过多少帧没有识别,就放弃该物体,未检测到的跟踪对象允许跳过的最大帧数,可以设置小一些

  • max_trace_lenght: trace path history length

  • trackIdCount: identification of each track object,每个跟踪对象的标识基数(在此之上累加)


来看看修复问题的点是,红框标出的,首次检测的飘逸轨迹,那么飘逸轨迹的特点是首尾两点距离较远,那么通过计算两个端点欧式距离,并通过设定阈值来屏蔽掉一些飘逸轨迹。一开始可能使用简单些的方法,诸如使用Harris Corners之类的算法提取关键点。然后,我们可以尝试根据欧几里德距离之类的相似度量来匹配相应的关键点。我们知道,角点(corner)有一个很好的属性:它们对旋转是不变的。 这意味着,一旦我们检测到一个角点,如果我们旋转图像,那个角点仍将存在。


keras-yolov3的detector微调

用keras-yolov3训练yolov3模型,该项目也是有预训练模型,但是分类有80分类,不仅仅是定位到人的。所以,简单的只挑出人物框,计算中心值给入tracker即可。
当然,这里其他物体框还是保留的,只是对图像中的人物进行多目标跟踪。


详细代码和参考链接如下:

https://blog.csdn.net/sinat_26917383/article/details/86557399 https://github.com/mattzheng/keras-yolov3-KF-objectTracking https://github.com/Smorodov/Multitarget-tracker https://github.com/srianant/kalman_filter_multi_object_tracking


注意点


如果仅对人体检测,只需修改 yolo_matt.py中的 第134行部分修改成如下内容即可:

for i, c in reversed(list(enumerate(out_classes))):            predicted_class = self.class_names[c]            # 修改内容,添加一个label的判断,只显示人            if predicted_class != 'person':                continue
box = out_boxes[i] score = out_scores[i]


如果有用希望能转发或点个在看支持一下小编


推荐本文主要是因为首先作者的工作确实非常的棒(整体效果很棒),同时作者发现问题并解决问题的方法能给我们在日常工作和学习中一定的启发。

最后再次感谢原作者无私将自己的成果分享出来!


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、检测分割识别、三维视觉、医学影像、GAN、自动驾驶、计算摄影、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


投稿、合作也欢迎联系:simiter@126.com

长按关注计算机视觉life


推荐阅读

实战 | 相机标定

实战 | 图像矫正技术

实战 | Unity下ARKit与OpenCV的结晶

实战 | 基于SegNet和U-Net的遥感图像语义分割

实战 | 文字定位与切割

实战 | 源码入门之Faster RCNN

实战 | 自己实现扫描全能王

实战 | 用OpenCV轻松生成微信国庆版头像

实战 | OpenCV 实现多张图像拼接

实战 | OpenCV相机标定与畸变校正

实战 | 教你自动查找拍糊的图

实战 | 用 Python 给照片换色

我用MATLAB撸了一个2D LiDAR SLAM

实战 | 哪个瞬间让你突然觉得CV技术真有用?

干货 | 史上最全 OpenCV 活体检测教程

解决方案 | 如何用普通手机准确测量物体体积?

Mask-RCNN模型的实现自定义对象(无人机)检测

scikit-image图像处理入门

还在用肉眼找不同吗?这个技术轻松搞定

OpenCV测量物体的尺寸技能 get~

超详讲解图像拼接/全景图原理和应用 | 附源码

如何在实际中计划和执行一个机器/深度学习项目

8个计算机视觉深度学习中常见的Bug

最新AI干货,我在看  

登录查看更多
1

相关内容

YOLO是快速的端到端的目标检测深度网络

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
深度学习目标检测方法及其主流框架综述
专知会员服务
147+阅读 · 2020年6月26日
【人大】图实现算法综述与评测分析
专知会员服务
37+阅读 · 2020年4月28日
近期必读的9篇 CVPR 2019【视觉目标跟踪】相关论文和代码
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
119+阅读 · 2019年12月31日
【GitHub实战】Pytorch实现的小样本逼真的视频到视频转换
专知会员服务
35+阅读 · 2019年12月15日
用PyTorch做物体检测和追踪
AI研习社
12+阅读 · 2019年1月6日
用OpenCV实现八种不同的目标跟踪算法
极市平台
6+阅读 · 2018年8月13日
期待已久的—YOLO V3
计算机视觉战队
20+阅读 · 2018年4月13日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
深度学习的快速目标跟踪
AI研习社
13+阅读 · 2018年1月8日
keras实战︱人脸表情分类与识别:人脸检测+情绪分类
数据挖掘入门与实战
21+阅读 · 2017年12月16日
深度学习CTPN算法的解读与tensorflow实现
数据挖掘入门与实战
5+阅读 · 2017年11月30日
开发 | Keras版faster-rcnn算法详解(RPN计算)
AI科技评论
4+阅读 · 2017年9月23日
深度学习实战(二)——基于Keras 的深度学习
乐享数据DataScientists
15+阅读 · 2017年7月13日
Deep Learning in Video Multi-Object Tracking: A Survey
Arxiv
57+阅读 · 2019年7月31日
Mesh R-CNN
Arxiv
4+阅读 · 2019年6月6日
DPOD: Dense 6D Pose Object Detector in RGB images
Arxiv
5+阅读 · 2019年2月28日
Arxiv
8+阅读 · 2018年6月19日
VIP会员
相关资讯
用PyTorch做物体检测和追踪
AI研习社
12+阅读 · 2019年1月6日
用OpenCV实现八种不同的目标跟踪算法
极市平台
6+阅读 · 2018年8月13日
期待已久的—YOLO V3
计算机视觉战队
20+阅读 · 2018年4月13日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
深度学习的快速目标跟踪
AI研习社
13+阅读 · 2018年1月8日
keras实战︱人脸表情分类与识别:人脸检测+情绪分类
数据挖掘入门与实战
21+阅读 · 2017年12月16日
深度学习CTPN算法的解读与tensorflow实现
数据挖掘入门与实战
5+阅读 · 2017年11月30日
开发 | Keras版faster-rcnn算法详解(RPN计算)
AI科技评论
4+阅读 · 2017年9月23日
深度学习实战(二)——基于Keras 的深度学习
乐享数据DataScientists
15+阅读 · 2017年7月13日
Top
微信扫码咨询专知VIP会员