开发教程 |基于ModelArts的视频全量目标分析和建模案例分析
项目介绍
本案例来自于第九届中国软件杯大赛A组赛题《视频全量目标分析和建模》。
项目场景
给出一段2分钟的高清视频,对视频中出现的物体进行目标检测和统计。视频通过行车记录仪采集,主要目标物为车辆,建筑,行人等。为了缩短模型推理时间,我们只使用了约30秒的视频进行测试。
基本要求
识别不同类型的目标;输出每种类型的图片;统计每个类别的物体数量。下图是一个参考示意图。
时间限制
在30分钟内完成推理结果。
算法构思
项目分析
一般对于图像的目标进行检测和统计,需要使用目标检测技术;而对于项目所给出的视频,考虑到前后图像的关联性,还需要使用目标跟踪技术。
参考代码
常用的目标检测方法有YOLO系列、SSD、R-CNN等。
常用的目标跟踪方法有SORT、 DeepSORT等。
本实例在YOLOv3和DeepSORT的基础上进行了改进,代码借鉴了Object-Detection-and-Tracking。
实际操作
注册华为云账号
进入华为云首页,单击页面右上角的“注册”。
设置手机号、短信验证码、账号名、密码并勾选“我已阅读并同意《华为云用户协议》和《隐私政策声明》”,单击“同意协议并注册”。
实名认证
账号注册成功后,登录华为云,单击界面右上角“用户名>实名认证”。账号类型选“个人”,个人认证类型推荐使用“扫码认证”(华为云app)。
服务授权
点此进入ModelArts 控制台页面,点击左下角的“全剧配置”,选择“访问授权”,按下图顺序操作:
下载代码、视频
从OBS桶下载代码、视频,点击下列链接即可下载。
创建OBS桶
OBS大家可以简单地理解成一个在线网盘,因为ModelArts本身目前没有数据存储的功能,所以需要从OBS里存储我们上传的数据进行训练。
点击进入华为云OBS控制台,进入后点击右上角的【创建桶】按钮(这里的桶可以理解成OBS进行存储的基本单位,所有的数据必须存储在某个桶里)。
进入新建桶界面, 按照如下示例进行填写:
区域:华北-北京四;数据冗余存储策略:单AZ存储;桶名称:自定义,需要全局唯一,即在整个华为云上的名字唯一;其它选项保持默认即可。
使用OBS桶上传代码、视频
在OBS首页,找到我们刚刚新建的桶,并点击桶名称进入桶内容管理界面。
进入后,点击左侧“对象”按钮,进入数据上传界面,点击“上传对象“按钮,弹出上传对象框,我们直接用鼠标将前面下载好的压缩包拖拽到到上传对象框内。
在文件夹中有code.tar,test.ipynb文件和data_process.ipynb文件三个文件,只需要上传code.tar即可。
创建开发环境
在ModelArts左侧导航栏选择“开发环境 > Notebook”,单击页面中“创建”。
在创建Notebook页面填写参数,可参考下图填写配置参数。
点击右侧的“打开”,打开 Notebook 环境。
上传脚本文件
进入Notebook 环境后,点击右侧的“Upload”,从百度云下载好的data_process.ipynb和test.ipynb文件上传。
运行data_process.ipynb文件
注意,要将第一个地址修改为你自己的OBS桶名称。
运行test.ipynb文件
我们需要切换到代码文件夹下,通过test.ipynb文件执行主文件main.py。
将代码运行所需要的依赖库都写到了requirements.txt文件里,可以一次性安装完毕。
执行主文件main.py
算法入口定义在main.py文件中,只需要执行这一个文件,就可以完成视频的目标检测及跟踪。
while True:
# 从视频中抽取一帧图像
ret, frame = video_capture.read() # frame shape 640*480*33
if ret != True:
break
image = Image.fromarray(frame[...,::-1]) #bgr to rgb
# 将抽取的图像传入YOLOv3进行目标检测,得到目标框和类别。
boxs,class_names = yolo.detect_image(image)
# 将抽取的图像和目标检测得到目标框传入DeepSORT进行目标跟踪。
features = encoder(frame, boxs)
# 设置置信度为1.0
detections = [Detection(bbox, 1.0, feature, cl) for bbox, feature, cl in zip(boxs, features, class_names)]
boxes = np.array([d.tlwh for d in detections])
scores = np.array([d.confidence for d in detections])
indices = preprocessing.non_max_suppression(boxes, nms_max_overlap, scores)
detections = [detections[i] for i in indices]
# 进行目标更新
tracker.predict()
tracker.update(detections)
-i参数表示输入视频的路径。
查看结果
将结果保存在output文件夹中,内容包括视频、图片和文本。
视频outputVideo.avi可运行test.ipynb文件中的代码查看,也可以到output文件夹下查看。
文本totalCount.txt截图。
图片imageSeg部分展示。
保存结果
运行data_process.ipynb文件中的代码,记得修改第二个地址为自己的OBS桶地址。
结语
好了,上述步骤就是使用ModelArts进行深度学习的一个应用实例。
- 点赞
- 收藏
- 关注作者
评论(0)