自动驾驶:车道线检测、车速检测、实时通行跟踪、基于视频的车辆跟踪及流量统计
日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN
自动驾驶:车道线检测、车速检测、实时通行跟踪、基于视频的车辆跟踪及流量统计
车流量检测实现:多目标追踪、卡尔曼滤波器、匈牙利算法、SORT/DeepSORT、yoloV3、虚拟线圈法、交并比IOU计算
多目标追踪:DBT、DFT、基于Kalman和KM算法的后端优化算法、SORT/DeepSORT、基于多线程的单目标跟踪的多目标跟踪算法KCF
计算交并比IOU、候选框不同表示方式之间的转换
卡尔曼滤波器
卡尔曼滤波器实践
目标估计模型-卡尔曼滤波
匈牙利算法
数据关联:利用匈牙利算法对目标框和检测框进行关联
SORT、DeepSORT
多目标追踪
yoloV3模型
基于yoloV3的目标检测
叉乘:基于虚拟线圈法的车流量统计
视频中的车流量统计
车道线检测
相机校正、张氏标定法、极大似然估计/极大似然参数估计、牛顿法、高斯牛顿法、LM算法、sin/cos/tan/cot
相机校正和图像校正:图像去畸变
车道线提取:Sobel边缘提取算法
透视变换
车道线定位及拟合:直方图确定车道线位置
车道曲率和中心点偏离距离计算
在视频中检测车道线
汽车的日益普及在给人们带来极大便利的同时,也导致了拥堵的交通路况,以及更为频发的交通事故。智能交通技术已成为推动现代技术交通技术发展的重要力量,智能交通不仅能够提供实时的交通路况信息,帮助交通管理者规划管理策略,而且还能优化出行者的出行策略。还可以减轻交通道路的堵塞情况,降低交通事故的发生概率,提高道路运行的安全系数。
本项目分两个模块:
一个是基于视频的车辆跟踪及流量统计,是一个可跟踪路面实时车辆通行状况,并逐帧记录不同行车道车流量数目的深度学习项目,在视频中可看出每个车辆的连续帧路径,该项目可拓展性强,可根据企业业务外接计费结算系统、LED显示系统、语音播报系统、供电防雷系统等,
另一个是车道线检测项目,是实现自动驾驶的首要任务,广泛应用于自动驾驶厂家,能够根据车载摄像头的输入,对安全驾驶区域进行预判,提醒驾驶员进行安全驾驶,减少交通事故的发生。
该项目的架构图如下所示:
- 用户层:通过摄像头或人工选择视频送入服务层中进行处理,处理完成后可输出经渲染后的视频,或触发报警装置
- 服务层:主要包含两个模块,
- 一是车辆追踪及计数,该模块模块一对输入的视频进行处理,使用yoloV3模型进行目标检测,然后使用SORT进行目标追踪,使用卡尔曼滤波器进行目标位置预测,并利用匈牙利算法对比目标的相似度,完成车辆目标追踪,利用虚拟线圈的思想实现车辆目标的计数,并根据计数完成车道拥堵的判断;
- 另一个是车道线的检测,该模块使用张氏较正法对相机进行较正,利用较正结果对图像去畸变,然后利用边缘与颜色提取车道线,利用仿射变换转换成鸟瞰图,并利用直方图和滑动窗口的算法精确定位车道线,利用最小二乘法进行拟合,实现车道线的检测,并计算车辆偏离车道中心的距离,触发报警装置。
- 效果展示:
2.环境安装
该项目中使用的工具包包含以下:
NumPy 是使用 Python 进行科学计算的基础包。
Numba 是一个开源 JIT 编译器,它将 Python 和 NumPy 代码的子集转换为快速机器码。
SciPy 是数学、科学和工程的开源软件。SciPy 库依赖于 NumPy,它提供方便快捷的 N 维数组操作。
h5py 从 Python 读取和写入 HDF5文件。
pandas 用于数据分析、时间序列和统计的强大的数据结构。
opencv-python 用于 Python 的预构建 OpenCV 包。
moviepy 用于进行视频处理的工具包
Filterpy 实现了卡尔曼滤波器和粒子滤波器等
具体版本见requirements文件中。
安装方法:
# 创建虚拟环境
conda create -n dlcv python
# 激活虚拟环境
source activate dlcv
# 安装对应的工具包
pip install -r requirements.txt
总结
项目中包含两个模块:多目标车辆跟踪及流量统计和车道线检测
项目分为用户层和服务层,用户层进行视频或摄像头的操作,服务层对视频进行处理,完成多目标车辆的跟踪及车流量的统计和车道线检测
1.SORT核心是卡尔曼滤波和匈牙利算法。流程图如下所示,可以看到整体可以拆分为两个部分,分别是匈牙利匹配过程和卡尔曼预测加更新过程,都用灰色框标出来了。关键步骤:--> 卡尔曼滤波预测出预测框--> 使用匈牙利算法将卡尔曼滤波的预测框和yolo的检测框进行IOU匹配来计算相似度 --> 卡尔曼滤波使用yolo的检测框更新卡尔曼滤波的预测框2.卡尔曼滤波分为两个过程:预测过程和更新过程。SORT引入了线性速度模型与卡尔曼滤波来进行位置预测,先进行位置预测然后再进行匹配。运动模型的结果可以用来预测物体的位置。匈牙利算法解决的是一个分配问题,用IOU距离作为权重(也即cost代价矩阵),并且当IOU小于一定数值(IOU阈值)时,不认为是同一个目标,理论基础是视频中两帧之间物体移动不会过多。在代码中选取的IOU阈值是0.3。scipy库的linear_sum_assignment实现了匈牙利算法,只需要输入cost_matrix代价矩阵(全部预测框和全部检测框两两IOU计算结果)到linear_sum_assignment中就能得到预测框和检测框两两最优匹配的组合。
1.跟踪器链(列表):实际就是多个的卡尔曼滤波KalmanBoxTracker自定义类的实例对象组成的列表。每个目标框都有对应的一个卡尔曼滤波器(KalmanBoxTracker实例对象),KalmanBoxTracker类中的实例属性专门负责记录其对应的一个目标框中各种统计参数,并且使用类属性负责记录卡尔曼滤波器的创建个数,增加一个目标框就增加一个卡尔曼滤波器(KalmanBoxTracker实例对象)。把每个卡尔曼滤波器(KalmanBoxTracker实例对象)都存储到跟踪器链(列表)中。2.unmatched_detections(列表):检测框中出现新目标,但此时预测框(跟踪框)中仍不不存在该目标,那么就需要在创建新目标对应的预测框/跟踪框(KalmanBoxTracker类的实例对象),然后把新目标对应的KalmanBoxTracker类的实例对象放到跟踪器链(列表)中。3.unmatched_trackers(列表):当跟踪目标失败或目标离开了画面时,也即目标从检测框中消失了,就应把目标对应的跟踪框(预测框)从跟踪器链中删除。unmatched_trackers列表中保存的正是跟踪失败即离开画面的目标,但该目标对应的预测框/跟踪框(KalmanBoxTracker类的实例对象)此时仍然存在于跟踪器链(列表)中,因此就需要把该目标对应的预测框/跟踪框(KalmanBoxTracker类的实例对象)从跟踪器链(列表)中删除出去。
DeepSORT是SORT的续作,整体框架没有大改,还是延续了卡尔曼滤波加匈牙利算法的思路,并且在这个基础上增加了鉴别网络Deep Association Metric。
下图是deepSORT流程图,和SORT基本一样,就多了级联匹配(Matching Cascade)和新轨迹的确认(confirmed)。
关键步骤:--> 卡尔曼滤波预测出预测框--> 使用匈牙利算法将卡尔曼滤波的预测框和yolo的检测框进行级联匹配加IOU匹配两者分别来计算相似度 --> 卡尔曼滤波使用yolo的检测框更新卡尔曼滤波的预测框级联匹配计算相似度的流程图如下所示:上半部分为相似度估计,也就是计算这个分配问题的代价矩阵。下半部分依旧是使用匈牙利算法进行检测框和预测框的匹配。
自动驾驶:车道线检测、车速检测、实时通行跟踪、基于视频的车辆跟踪及流量统计相关推荐
- 自动驾驶——车道线检测相关数据集整理
自动驾驶视觉方向的分支车道线检测需要的相关数据集 暂时没有好好整理,先作个记录: 1.KITTI KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办,主要于算法评测. KITTI数据 ...
- 深度学习方法实现车道线分割之二(自动驾驶车道线分割)
看这篇文章需要大家先了解下 卷积.转置卷积与空洞卷积的区别,更有助于理解文中代码以及为何我会这么去实施我的project 1 原理 之前我曾采用传统方法实现了一下车道线检测, https://blog ...
- 自动驾驶系统进阶与项目实战(九)基于行锚框和全局信息的深度学习车道线检测方法
自动驾驶系统进阶与项目实战(九)基于行锚框和全局信息的深度学习车道线检测方法 目前多数基于深度学习的车道线检测方法通常把车道线的识别问题处理为车道线像素分割问题,单纯的像素级语义分割模型的推理的实时性 ...
- 3D车道线单目检测方法ONCE-3DLanes
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨黄浴 来源丨计算机视觉深度学习和自动驾驶 3D车道线检测论文"ONCE-3DLanes ...
- 自动驾驶领域常用的数据集(检测,分割,定位)
原文链接:https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA==&mid=2649030409&idx=1&sn=2202eba9d ...
- VPGNet—用于车道线和道路标志检测和识别的消失点引导网络
用于车道线和道路标志检测和识别的消失点引导网络(VPGNet: Vanishing Point Guided Network for Lane and Road Marking Detection a ...
- 自动驾驶系统进阶与项目实战(三)基于全卷积神经网络的点云三维目标检测和ROS实战
自动驾驶系统进阶与项目实战(三)基于全卷积神经网络的点云三维目标检测和ROS实战 前面入门系列的文章中我介绍了几种点云三维分割/目标检测模型,在做点云预处理上,有通过球面投射(SqueezeNet)得 ...
- 自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)
自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1) 发表于CVPR2019的PointPillars是目前比较受业内认可的激光雷达三维检测算法, ...
- halcon边缘检测-autobahn车道线的快速检测
基本思路: 先获得主要感兴趣区域,去除车的干扰 然后通过sobel_amp算子检测边缘明显变化的图像,得到原始图像边缘位置的图像数据 然后通过阈值获取目标边缘. 通过膨胀目标边缘获得感兴趣区域,再次通 ...
- MPC和PID实现自动驾驶车道保持原理
MPC和PID实现自动驾驶车道保持原理 前言 本文主要通过一个自行车的动力学模型讨论车辆的加速.刹车和转向的模型预测控制.目的不仅在于尽可能地控制车辆轨迹,同时也还要尽可能使速度平滑以避免晕车和频繁的 ...
最新文章
- Python2.7连接MySQL5.7 附demo
- Canvas动画 位图缓存提高效率和对应的内存问题
- [css] 使用rem时应该注意什么?
- Python_装饰器Decorator
- redis+lua实现分布式限流
- 2017.3.27 生成魔咒 思考记录(有史以来最不容易)
- php简易微博系统,基于html、css、PHP开发一个简单的微型博客系统(微博)
- 电子计算机与多谋种,2011—2012学年度第一学期七年级上册语文期末测试AB卷(2套)(含答案)...
- Windows10 V2004 正式版发布
- 【毕业设计_课程设计】手写数字识别系统的设计实现(源码+论文)
- 量化交易5-backtrader编写均线策略
- 【调剂】北京语言大学 SAIT 智能语音习得技术实验室
- windows 中 vpn连接提示, 虚拟专用网络 由于RAS/虚拟专用网络,服务器上配置的某个策略,服务器用于验证用户名和密码的身份验证方法可能与连接配置文件中的身份证验证方法不匹配
- 移动端游戏开发:差异、挑战,以及全新的解决方案
- 系统安全博客3-windowsserver安全加固
- 利用validation对Java接口入参进行基础校验
- Python-Django毕业设计JAVA高校田径运动会管理(程序+Lw)
- PCNN 脉冲耦合神经网络整理
- 转账到支付宝账户(企业支付宝)
- java jai create 方法,b用JAI扩大Java的图象处理本领/b[Java编程]
热门文章
- 评选最佳文本编辑器-UltraEdit From善用佳软
- extjs表格编辑、EditorGridPanel
- 2008 r2 server sql 中文版补丁_Microsoft SQL Server 2008 R2 SP3补丁 32位 官方免费版
- CloudCompare 软件手册
- 百度文库会员制度悄然上线
- android自定义日历代码,Android自定义日历Calender代码实现
- 数据中心与灾备中心建设总结
- 开源免费录屏和直播软件OBS Studio教程
- android Google Advertising ID 如何重置
- ios 开发证书导出p12文件_IOS开发 把cer证书转为p12证书