仅供学习使用,不保证精度,请不要用于商业或其他营利活动!
本README只提供命令行方式运行样例的指导。
YOLOV4_Pedestrian_Tracking_and_Social_Distance_Judgment_video
功能介绍:使用YOLOv4模型对视频进行预测推理,输出带有推理结果的视频文件。这里提供两种功能:
- 对输入视频中的行人进行检测、跟踪,绘制运行轨迹和判断行人间的社交距离,并给予风险提示,此外,还提供当前画面行人数量,通过视频指定位置的行人数量和总计行人数量的统计;
- 对输入视频进行目标检测(支持COCO数据集的80类目标检测)。
样例输入:视频文件。
样例输出:带推理结果的视频文件。
前置条件
请检查以下条件要求是否满足,如不满足请按照备注进行相应处理。如果CANN版本升级,请同步检查第三方依赖是否需要重新安装(5.0.4及以上版本第三方依赖和5.0.4以下版本有差异,需要重新安装)。
条件 |
要求 |
备注 |
CANN版本 |
>=5.0.4 |
请参考CANN样例仓介绍中的安装步骤完成CANN安装,如果CANN低于要求版本请根据版本说明切换samples仓到对应CANN版本 |
硬件要求 |
Atlas200DK/Atlas300(ai1s) |
当前已在Atlas200DK和Atlas300测试通过,产品说明请参考硬件平台 ,其他产品可能需要另做适配 |
第三方依赖 |
opencv,python-acllite |
请参考第三方依赖安装指导(python样例)选择需要的依赖完成安装 |
说明:本样例是华为云ECS上测试的,ECS规格为AI加速型 | ai1s.large.4 | 2vCPUs | 8GiB,系统版本:Ubuntu 18.04 server 64bit,使用的是官方活动分享的镜像,镜像名称为300-5.1.RC2.alpha005。
样例结构
.
├── common
│ ├── acllite
│ │ ├── acllite_imageproc.py
│ │ ├── acllite_image.py
│ │ ├── acllite_logger.py
│ │ ├── acllite_model.py
│ │ ├── acllite_resource.py
│ │ ├── acllite_utils.py
│ │ ├── cameracapture.py
│ │ ├── constants.py
│ │ ├── dvpp_vdec.py
│ │ ├── __init__.py
│ │ ├── lib
│ │ │ ├── acllite_so.py
│ │ │ ├── atlas200dk
│ │ │ │ └── libpython_acllite.so
│ │ │ ├── __init__.py
│ │ │ └── src
│ │ │ ├── acllite_utils.h
│ │ │ ├── camera.cpp
│ │ │ ├── camera.h
│ │ │ └── Makefile
│ │ ├── presenteragent
│ │ │ ├── __init__.py
│ │ │ ├── presenter_agent.py
│ │ │ ├── presenter_channel.py
│ │ │ ├── presenter_datatype.py
│ │ │ ├── presenter_message_pb2.py
│ │ │ ├── presenter_message.proto
│ │ │ ├── presenter_message.py
│ │ │ └── socket_client.py
│ │ ├── README_CN.md
│ │ ├── README.md
│ │ └── videocapture.py
│ ├── README_CN.md
│ └── README.md
├── data
│ └── camera0.mp4 # 这里应该放置测试视频,名称固定为camera0.mp4
├── LICENSE
├── model
│ └── yolov4_bs1.om # 这里应该放置转换好的om模型
├── README_CN.md
├── README.md
├── requirements.txt
└── src
├── helpers.py
├── kalman_filter.py
├── linear_assignment__.py
├── log_utils.py
├── MySort.py
├── sort.py
├── stats.py
├── utils.py
├── yolov4.py
└── yolov4_utils.py
样例准备
运行样例,请在CANN运行用户下操作,一般安装用户是HwHiAiUser
。
-
获取源码包。
-
命令行方式下载。
# 开发环境,非root用户命令行中执行以下命令下载源码仓。
cd ${HOME}
git clone https://git.openi.org.cn/tjulitianyi/YOLOV4_Pedestrian_Tracking_and_Social_Distance_Judgment_video.git
-
OBS下载。下载链接为:
暂未提供
-
百度网盘方式下载。下载链接为:
暂未提供
-
ModelArts AI Gallery下载链接
https://developer.huaweicloud.com/develop/aigallery/dataset/detail?id=d95a909a-b998-4553-97c0-eff7de2a6034
特别说明:建议采用 命令行方式下载,这样可以获取最新的更新。
-
获取此应用中所需要的原始网络模型。
# 为了方便下载,在这里直接给出原始模型下载及模型转换命令,可以直接拷贝执行。也可以参照上表在modelzoo中下载并手工转换,以了解更多细节。
cd ${HOME}/YOLOV4_Pedestrian_Tracking_and_Social_Distance_Judgment_video/model
wget https://temp-dataset.obs.cn-north-4.myhuaweicloud.com:443/cann/temp/yolov4_dynamic_bs.onnx
atc --model=./yolov4_dynamic_bs.onnx --framework=5 --output=yolov4_bs1 --input_format=NCHW --soc_version=Ascend310 --input_shape="input:1,3,608,608" --out_nodes="Conv_434:0;Conv_418:0;Conv_402:0"
若上述方法无法下载,可到百度网盘下载。下载链接为:
链接:https://pan.baidu.com/s/1zFrrbOwK0_EKRZva2RIhRQ?pwd=a3bl
提取码:a3bl
模型转换较为耗时,资源消耗也较大,本模型大约占用了4GB内存,耗时4分钟转换完成,若想直接体验,可以直接下载转换好的om模型,下载链接为:
链接: https://pan.baidu.com/s/1Fp8KyDp_SN4lk5hdXSht7A?pwd=pmme
提取码: pmme
-
获取样例需要的测试视频。
# 执行以下命令,进入样例的data文件夹中,下载对应的测试图片。
cd $HOME/YOLOV4_Pedestrian_Tracking_and_Social_Distance_Judgment_video/data
wget https://temp-dataset.obs.cn-north-4.myhuaweicloud.com:443/cann/temp/camera0.mp4
cd ../src
若上述方法无法下载,可到百度网盘下载。下载链接为:
链接:https://pan.baidu.com/s/1mzEjAAkEqIsuwVBPGtUbTA?pwd=xcft
提取码:xcft
样例运行
说明 如果您已有Python
环境,可以尝试直接运行,根据报错,安装相应的库即可;如果您没有环境,可以考虑按照 requirements.txt 配置好相关库,虽然已经尽量减少依赖,但是还有有些第三方库,因此这一步还是很有必要的。
注:开发环境与运行环境合一部署,请跳过步骤1,直接执行步骤2即可。
-
执行以下命令,将开发环境的 YOLOV4_Pedestrian_Tracking_and_Social_Distance_Judgment_video 目录上传到运行环境中,例如 /home/HwHiAiUser,并以HwHiAiUser(运行用户)登录运行环境(Host)。
# 【xxx.xxx.xxx.xxx】为运行环境ip,200DK在USB连接时一般为192.168.1.2,300(ai1s)为对应的公网ip。
scp -r $HOME/YOLOV4_Pedestrian_Tracking_and_Social_Distance_Judgment_video HwHiAiUser@xxx.xxx.xxx.xxx:/home/HwHiAiUser
ssh HwHiAiUser@xxx.xxx.xxx.xxx
cd ${HOME}/YOLOV4_Pedestrian_Tracking_and_Social_Distance_Judgment_video/src
-
运行工程,请务必使用python3.6
运行,不要使用其他版本。
(1)对输入视频进行目标检测(支持COCO数据集的80类目标检测)。
python3.6 yolov4.py ../data/camera0.mp4 0
运行期间,AI Core利用率在38%左右,运行耗时近3分钟,这应该是Python效率较低,导致AI Core的利用率较低,耗时也较长,如果用C++实现,性能应该能提升很大。最终输出视频约117M。
(2)对输入视频中的行人进行检测、跟踪,绘制运行轨迹和判断行人间的社交距离,并给予风险提示,此外,还提供当前画面行人数量,通过视频指定位置的行人数量和总计行人数量的统计。
python3.6 yolov4.py ../data/camera0.mp4 1
运行期间,AI Core利用率在22%左右,且CPU利用率明显提升,在68%左右,应该是跟踪算法对CPU依赖较大,运行耗时近4分钟,这应该还是Python效率较低,导致AI Core的利用率较低,耗时也较长,看来部署推理,还是应该选择效率高的C/C++。最终输出视频约113.82M。
这里使用OpenCV保存下来的视频很大,接近原来输入视频的4倍大小,推测可能是视频压缩的不够,或者是输出视频的数据速率、总比特率远大于原视频,具体原因暂不知,查阅资料得知imageio保存视频文件会小一些,如有需要可自行测试。
查看结果
运行完成后,输出视频存在out目录下(注意输出视频默认与输入视频名称一致,若多次运行或运行不同功能会覆盖之前结果)。
对输入视频进行目标检测(支持COCO数据集的80类目标检测)的演示视频
对输入视频进行目标检测,支持COCO数据集的80类目标检测,会对检测目标绘制矩形框并在框的左上角显示类别。
对输入视频中的行人进行检测、跟踪,绘制运行轨迹和判断行人间的社交距离,并给予风险提示,此外,还提供当前画面行人数量,通过视频指定位置的行人数量和总计行人数量的统计的演示视频
对输入视频中的行人进行检测、跟踪,绘制运行轨迹和判断行人间的社交距离,并给予风险提示,如果行人距离过近,会提示“High Risk",远离后会显示“Low Risk”,此外,还在视频左上角提供当前画面行人数量,通过视频指定位置(默认设定为视频中间,颜色为绿色)的行人数量和总计行人数量的统计;
常见错误
请参考常见问题定位对遇到的错误进行排查。如果wiki中不包含,请在samples仓提issue反馈。
联系方式
联系邮箱:tjulitianyi@163.com