5个课时,落地AI应用!
欢迎大家来到AidLux零基础边缘端智慧安防训练营~
上节课,我们学习了在云服务器上,使用Yolov5算法,训练人体检测模型。
而越界识别功能,是由人体检测+人体追踪+业务功能(监测区域判断是否有人体进入)来综合评判。
在本节课,我们重点学习智慧城市AI项目中,非常重要的一个算法,目标追踪。本节课内容框架如下:
1 目标追踪算法的场景应用
2 讲解常见的目标追踪算法
3 常用的多目标追踪算法
4 PC端检测追踪代码测试
5 AidLux端追踪代码测试
1. 目标追踪算法的场景应用
为什么要进行目标追踪?
第一节课时,给大家介绍了不同AI算法模型,支撑不同算法功能,进行不同场景应用的架构图。
通常情况下,算法人员训练的算法模型,主要集中在最下面,AI算法模型层。
而业务场景中,用到的主要是AI算法功能。
比如智慧园区项目,会用到越界识别、烟火报警两个功能,而目标追踪算法对这两个功能十分重要:
(1)越界识别
越界识别,在lesson1的算法难易程度中,属于中等型的算法功能。
从图片上可以看出,当某个时间内,发现人体目标从监测区域外,进入监测区域内,就算人体越界识别。
当然很多情况下,为了实现业务功能,需要区分这个人是从哪个方向进来的,是从外面到里面,还是从里面到外面等等,这个时候通常需要判断人体越界初始时的位置关系。
也就是说需要跟踪某个人体在某个时间段类的位置关系,那么如何跟踪呢?这里就会用到目标跟踪算法。
当然,有的同学可能会说,不使用追踪的方案,直接针对一张图片,判断在监测区域内是否有人体,不就可以了吗?当非正常时间,监测区域内有人体的时候,判断是越界行为。
这种方式在有些简单功能场景,且人体比较大的时候,是可以的。但是也会有些问题:
a.当监测区域内,有误检的时候,不好过滤掉;而人体跟踪时,可以通过移动轨迹判断是否误检;
b.有些功能场景,需要统计越界人员是从哪个方向来的,这时候用单帧去检测就不行了。
(2)烟火报警
烟火报警,在前面lesson1的算法难易程度中,属于简单型的算法功能。
一般烟火检测,会对整张图片进行检测,其中并不会出现目标移动的情况,所以属于简单型算法。
从中可以看出,在AI场景应用中,针对单帧图像进行分析,比如检测某张图像是否有人,检测某张图像的人体是否戴安全帽,是可以的。
但是如果想要结合视频前后帧进行分析,比如判断某个人是否从外面走到区域内,车辆的行驶轨迹、人体的行动轨迹,则需要多帧图像结合分析。这时就需要用到物体的目标追踪。
2. 讲解常见的目标追踪的算法
了解了前面说的目标追踪的场景应用,我们再介绍下目标追踪的功能划分。
通常来说,目标追踪主要分成两个类别:一种是多目标追踪,一种是单目标追踪。
两者的区别很好理解,多目标追踪主要是针对视频中所有的目标都进行检测+追踪分析。比如以下的视频分析效果:
而单目标追踪,则是在视频分析的过程中,选定某一个物体,针对他的整个运动轨迹进行分析。比如以下的视频分析效果:
两种追踪算法应用的场景各不相同,两者应用的产品功能,也各不相同。
多目标追踪,多用于人流统计、人员逗留识别等,对于全图的多个目标在做算法功能分析:
而单目标追踪,可以用于直播摄像头追踪等。
难度更加高一些的应用也有,例如枪球联动中,用到的也是单目标追踪。
枪机是固定不动的,球机是可以移动的,枪机可以对摄像头上的监控区域,进行实时监测。
当发生告警行为时,由球机对于告警人员进行实时跟踪抓取。
本节课讲的越界识别,主要是判断监测视频画面中,某一个区域是否有人越界的情况,这时的相机角度是不变的,监测的目标是多个人,因此采用多目标检测的方法。
tips:在实际情况下,也可以利用多目标检测和单目标检测结合的方式。比如某一个枪机摄像头,抓取到越界的某个人后,因为枪机无法转动,所以可以在球机摄像头上再集成单目标追踪,不断跟踪人体的运动轨迹,进而控制相机的转动方向。
3. 常用的多目标追踪算法
了解完目标跟踪的应用,我们再看下常用的多目标追踪算法。
因为多目标追踪算法涉及的东西比较复杂,我们这里简单的介绍一下其中的一些原理。
多目标跟踪,即MOT(Multi-Object Tracking)。顾名思义,就是在一段视频中同时跟踪多个目标。
MOT主要应用在安防监控和自动驾驶等需要对众多目标同时进行追踪的场景,这是仅用目标检测算法或单目标跟踪算法都无法做到的。
多目标跟踪算法,在业内应用的比较广的发展路径是:sort->deepsort->bytetrack。
(1)sort
在视频监控中,每个人体都是在往不同的方向移动的,因此会产生两个方面的信息。
比如在10帧连续的图像中,有很多个人体,其中有一个路人甲和路人乙。
在10帧的图像中,比如前三帧的图像,多目标追踪算法会初始化两个track_id,路人甲是track_id=1,路人乙是track_id=2。
那么在第四帧以后,我们想从图片上的多个人体中,也还是把路人甲和路人乙找出来。
但是此时我们只有之前几帧两人的轨迹信息,因此会采用卡尔曼预测的方法,判断两人的运动轨迹,在第四帧图像中可能处于哪个位置,预测出可能是两人的预测框。
而在第四帧图像中,通过目标检测已经得出很多的人体检测框,这时再采用匈牙利算法,从多个人体的检测框中,匹配找到路人甲和路人乙的框,并赋予两个track_id的值。
这就是sort算法的大致思路,但是其中也会存在一个问题,即两个人遮挡交错的时候,卡尔曼预测就会有问题,因此后续的匹配,都是通过位置信息来构建的。
(2)deepsort
在sort的基础上,为了区分出不同的行人,增加人体的外观信息Appearance Information。
而在上面新的图片中,找到之前track_id人体的时候,通过两个方面来综合匹配,一个是距离,另一个是人体的reid外观特征信息,两者进行加权来匹配。
(3)bytetrack
在遮挡交错比较多的时候,还是会出现track_id交错比较多的情况。
有研究发现,在遮挡的时候,人体的检测框信息预测分数会相对较低。
例如下方图中,第一张图中的0.8,由于遮挡变成了0.4->0.1。
比如下方的红色框,在正常的追踪过程,可能很容易丢失。
因此作者将deepsort中的外观特征舍弃掉,通过bytrack的方式进行多目标追踪。
不过这时设置高分和低分框,当预测运动轨迹的框,分数降低时,说明可能产生了遮挡的现象,就再多匹配一些。
以上就是对于三者多目标追踪的简单描述,其中涉及了大量的逻辑方式,大家感兴趣也可以好好研究下,我们也找了一些不错的文章,大家可以进入AidLux AI开发者交流群获取。
客观来说,多目标追踪在遮挡情况下,还存在很多的交错丢失问题,这也是业内目前的一个研究瓶颈。
针对deeposrt和bytetrack的使用选择,有一些心得分享给大家:
(1)不同的目标:上面说的是对于人体的检测,其实在现场项目中,会用到各种目标的追踪,比如车辆追踪、飞机追踪等。
当有目标的reid模型的时候,可以选择deepsort;当没有的时候,可以选择bytetrack,因此特征权重不好的时候,对于多目标匹配是个干扰项。
(2)遮挡的目标:人员交错,遮挡严重的时候,多目标追踪是个业内的难题,因此在摄像头角度角度选择的时候,尽量选择从上往下的视角,可以减少遮挡的情况。
4. PC端检测追踪代码测试
4.1 Anaconda安装调试
tips:这里主要演示windows版本的安装,如果已经安装好可忽略。
Anaconda:Python的一个集成安装,为了方便管理环境和包。
官网:https://www.anaconda.com/prod...
选择对应的版本进行下载。
4.2 新建Conda环境
安装完成后,可以点击系统左下角的 Windows 图标,找到 Anaconda3 文件夹,选择点击Anaconda Prompt选项。
如果想要我们新建一个自带Python3.8的Conda环境,输入:conda create -n jiangdabai python=3.8,即可新建一个名为jiangdabai的Conda环境,里面内置的Python版本为3.8。
开始下载一个个库文件,如果不动的话,按一下Enter。
Conda环境新建完成,再输入conda env list,可以看到又多了一个jiangdabai的conda环境,安装结束。
tips:在进入Conda环境前,我们需要知道Conda中,常用的几个命令。
conda list :查看安装了哪些包;
conda env list 或 conda info -e :查看当前存在哪些虚拟环境;
conda activate jiangdabai: 进入名称叫jiangdabai的conda环境,名称这里大家也可以填写自己对应的名称;
conda deactivate: 退出conda环境。
其他的一些命令大家可以自行查找,关键词:aconda使用。
进入Conda环境
(1)输入:conda activate jiangdabai,进入名为jiangdabai的conda环境。
可以看到命令行前面的“base”变为“jiangdabai”。
(2)输入:python,可以看到,当前conda环境的python版本为3.8.0,按ctrl+z,再按回车,即可跳出命令。
4.3 vscode设置anaconda
按ctrl+s,进行保存。
`"python.autoComplete.extraPaths": [
"C:\\Users\\86151\\anaconda3\\envs\\jiangdabai\\python"
],
"python.analysis.extraPaths": [
]`
点击选择一下源。
重新开一下终端。
4.4 下载lap
输入python。
5. AidLux端检测追踪代码测试
人体检测追踪的代码,放在Lesson4_codes/aidlux/yolov5_bytetrack.py中。
5.1 Lesson4_codes代码上传
首先通过AidLux网页端,将lesson4_codes代码文件夹上传到home文件夹下面。
5.2 Vscode和Aidlux连接
在lesson2的时候,我们使用SSH的方式,将PC端的Vscode连接到AidLux端代码的方式,我们再进行连接一下。
5.3 基础库安装
(1)lap安装
直接跑yolov5_bytetrack.py的时候,会显示缺少lap。
需要注意一下,这里需要进行几步:
先sudo apt-get update。
再输入sudo apt-get install -y cmake build-essential python3-dev
最后pip install lap -i https://pypi.tuna.tsinghua.ed...
(2)cython_bbox安装
此外,cython_bbox也需要再安装。
先安装cython:
pip install cython -i https://pypi.tuna.tsinghua.ed...
再安装cython_bbox:
pip install cython_bbox -i https://pypi.tuna.tsinghua.ed...
(3)torch安装
因为里面也用到一些torch相关的函数,所以我们也输入:
pip install torch -i https://pypi.tuna.tsinghua.ed...
(4)torchvision安装
除了torch外,还要安装torchvision,所以我们输入:
pip install torchvision -i https://pypi.tuna.tsinghua.ed...
(5)thop安装
输入:pip install thop -i https://pypi.tuna.tsinghua.ed...
4.4 运行代码
运行代码后,可以看到效果的视频:
好了,本节课的内容到这里就结束,大家可以好好尝试一下。
大家可以加入AidLux AI开发者交流群,群内有AidLux工程师和江大白等众多AI行业专家,可以给予技术指导以及进行交流互动。
本节课所需的数据集、资料包,大家可以在AidLux AI交流群内获取呦~