手把手教你在Modelarts平台上进行视频推理
摘要:为了方便小伙伴们进行视频场景的AI应用开发,Modelarts推理平台将视频推理场景中一些通用的流程抽取出来预置在基础镜像中,小伙伴们只需要简单地编写预处理及后处理脚本,便可以像开发图片类型的AI服务一样开发视频类型的AI服务了。
本文分享自华为云社区《在Modelarts平台上进行视频推理》,原文作者:HW007。
熟悉Modelarts推理的小伙伴都知道,在Modelarts平台上可以通过简单地定制模型的预处理、推理及后处理脚本,就可以轻松的部署一个AI服务,对图片、文本、音视频等输入进行推理。但是对于视频类型的推理,之前需要用户在自己的脚本中进行视频文件下载、视频解码、并自己将处理后的文件传到OBS中。为了方便小伙伴们进行视频场景的AI应用开发,Modelarts推理平台将视频推理场景中一些通用的流程抽取出来预置在基础镜像中,小伙伴们只需要简单地编写预处理及后处理脚本,便可以像开发图片类型的AI服务一样开发视频类型的AI服务了。
一、总体设计说明
提取视频场景的通用推理流程如下:

如上图,视频处理场景的流程可分为“视频源输入”、“视频解码”、“预处理”、“模型推理”、“后处理”、“推理结果输出”六个部分。其中“视频源输入”、“视频解码”、“推理结果输出”三个灰色的部分Modelarts已经提前准备好。“预处理”、“模型推理”、“后处理”三个部分可由用户自由定制,具体定制方法如下:
1)定制模型:Modelarts已经提供好模型加载的方法,用户只需要将自己“saved_model”格式的模型放置到指定的model目录即可。
2)定制预处理:Modelarts会将解码后的视频帧数据提供给用户,用户只需通过重写“customize_service.py”中“VideoService”类的静态方法“_preprocess”便好,“_preprocess”函数的入参以及对出参的约束如下:

3)定制后处理:Modelarts会将模型推理后的输出及解码后的视频帧数据提供给用户,用户只需通过重写“customize_service.py”中“VideoService”类的静态方法“_postprocess”便好,“_postprocess”函数的入参以及对出参的约束如下:

二、Demo体验
1)下载本文附件,如下图,附件提供了一个已调试OK的视频推理模型包“model”文件夹,同时也提供了基于tox框架写好的验证用例,供用户线下调试自己模型包是否OK。

2)将附件包中的“model”文件夹传到华为云OBS中。
将附件包中的“test/test_data/input”、“test/test_data/output”文件夹放到华为云OBS与之前“model”文件夹放置同级的目录下。

3)导入模型:在Modelarts导入模型界面,选择从OBS导入,选择刚才传到OBS中的model目录。如下图所示:

按下面操作配置好模型的各个配置后点击创建模型:

可以看到模型创建成功:

4).部署服务,将上述模型部署为在线服务,部署中要选择有GPU的资源节点(公共池和专属池都可以):

可以看到服务已经部署成功:

5)创建作业:在服务界面选择创建作业

选择输入视频,选到步骤2)中上传到OBS中的input文件夹中的视频文件如下:

选择输出路径,选到步骤2)中上传到OBS中的output文件夹如下:

6)等待视频处理完成:

查看OBS中的output文件夹,可看到视频已被拆成图片后的推理结果了。

7)用户根据自己需要,更换model文件夹下的“saved_model”格式的模型文件,并修改“customize_service.py”中的“_preprocess”和“_postprocess”函数来完成自己的业务逻辑。修改完后可以先运行“test/run_test.sh”来提前验证下修改后的模型包是否能正常推理,待线下调试好,可正常推理后再按上述步骤将模型包提交到OBS中部署成Modelarts服务。
其中,视频推理的模型包要求如下:
模型包结构要求:
└── model
├── config.json (必须,Modelarts推理相关的配置文件)
├── customize_service.py (必须,推理文件)
├── saved_model.pb (必须,SavedModel格式的模型文件)
└── variables (必须,SavedModel格式的模型文件)
├── variables.data-00000-of-00001
└── variables.index
其中config.json 文件的格式遵循Modelarts的规范,https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0092.html
目前,只有tensorflow的“tf1.13-python3.7-gpu-async”runtime支持视频推理,即config.json文件中的"model_type"字段必须为"TensorFlow", "runtime"字段必须为 "tf1.13-python3.7-gpu-async"。
“customize_service.py”文中必须有一个“VideoService”类,“VideoService”类必须有两个静态方法“_preprocess”和“_postprocess”,相应的函数签名约束如下:


手把手教你在Modelarts平台上进行视频推理的更多相关文章
- 手把手教你 在Pytorch框架上部署和测试 关键点人脸检测项目DBFace,成功实现人脸检测效果
这期教向大家介绍仅仅 1.3M 的轻量级高精度的关键点人脸检测模型DBFace,并手把手教你如何在自己的电脑端进行部署和测试运行,运行时bug解决. 01. 前言 前段时间DBFace人脸检测库横空出 ...
- 手把手教popupWindow从下往上,以达到流行效果
效果如图所看到的,点击開始button,popWindow从下往上出来,再点击popWindow外面,popWindow又从上往下消失 能够看出来,上面的popupWindow是半透明的,后面我会细说 ...
- 手把手教你轻松实现listview上拉加载
上篇讲了如何简单快速的的实现listview下拉刷新,那么本篇将讲解如何简单快速的实现上拉加载更多.其实,如果你已经理解了下拉刷新的实现过程,那么实现上拉加载更多将变得轻松起来,原理完全一致,甚至实现 ...
- 手把手教你实现Android RecyclerView上拉加载功能
摘要 一直在用到RecyclerView时都会微微一颤,因为一直都没去了解怎么实现上拉加载,受够了每次去Github找开源引入,因为感觉就为了一个上拉加载功能而去引入一大堆你不知道有多少BUG的代码, ...
- 手把手教你将本地项目文件上传至github
相信大家都听过Git(分布式版本号控制系统)和github吧.没听过也没关系(Google一下),反正以后要去公司肯定会听过. 我是在今年年初才接触Git.之后就一发不可收拾.仅仅要有比較好的项目就G ...
- 手把手教你用原始方式上传项目至GitHub
小编GitHub:https://github.com/ds1889 首先你得注册一个自己的GitHub账号,注册网址:https://github.com/join 有了自己的账号以后,就可以进行登 ...
- 2020年,手把手教你如何在CentOS7上一步一步搭建LDAP服务器的最新教程
同步滚动:关 什么是LDAP 什么是LDAP? 要想知道一个概念,最简单的办法就是wikipedia,当然也可以百科. LDAP全称是轻型目录访问协议(Lightweight Directory Ac ...
- 手把手教你用 Python 下载手机小视频
今天为大家介绍使用 mitmproxy 这个抓包工具如何监控手机上网,并且通过抓包,把我们想要的数据下载下来. 启动 mitmproxy 首先我们通过执行命令 mitmweb 启动mitmproxy, ...
- 美女 Committer 手把手教你部署 Apache DolphinScheduler 单机版
还在为如何部署Apache DolphinScheduler 发愁么?自上篇<美女 Committer 手把手教你使用海豚调度>的视频发布后,受到社区伙伴们的热烈欢迎.但个别小伙伴在部署这 ...
随机推荐
- cmodel模拟器开发
cmodel模拟器开发 对于一个公司来说,产品的设计周期就是生命线,一般来说都会在设计功能级仿真的c-model后直接转向RTL设计. 在目前的技术下,做cycle-by-cycle的设计和直接RTL ...
- postman之将获取响应数据-创建环境变量,用于不同的接口调用
应用场景: token的获取,用于不同接口的取值 在test中进行如下设置: var jd = pm.response.json(); var access_token = jd.access_tok ...
- 使用ElementTree解析,操作xml
一.最近在实际工作中需要对一部分接口进行测试,接口的入参与出参都是xml格式的数据,所以用到了python内部模块ElementTree对xml进行解析,并根据实际需求操作xml数据 二.代码示例 # ...
- 一、安装Tomcat服务器
[root@ web1 ~]# yum -y install java-1.8.0-openjdk #安装jdk [root@web1 ~]# yum -y install java-1.8.0- ...
- 一篇文章带你搞懂 etcd 3.5 的核心特性
作者 唐聪,腾讯云资深工程师,极客时间专栏<etcd实战课>作者,etcd活跃贡献者,主要负责腾讯云大规模k8s/etcd平台.有状态服务容器化.在离线混部等产品研发设计工作. etcd ...
- SpringBoot数据访问(二) SpringBoot整合JPA
JPA简介 Spring Data JPA是Spring Data大家族的一部分,它可以轻松实现基于JPA的存储库.该模块用于增强支持基于JPA的数据访问层,它使我们可以更加容易地构建使用数据访问技术 ...
- leetcode动态规划题目总结
Hello everyone, I am a Chinese noob programmer. I have practiced questions on leetcode.com for 2 yea ...
- Custom Controller CollectionQT样式自定义 001 :SliderLineEdit 滑动输入框
主要是继承QLineEdit类重新实现其鼠标事件,建议禁用输入框默认的菜单项. SliderLineEdit 滑动输入框 参照图形平台 Adobe系列中属性输入框 做的样式,支持点击编辑和长按鼠标拖动 ...
- Vue3全家桶升级指南二ref、toRef、toRefs的区别
ref是对原始数据的拷贝,当修改ref数据时,模板中的视图会发生改变,但是原始数据并不会改变. toRef是对原始数据的引用,修改toRef数据时,原始数据也会发生改变,但是视图并不会更新. 在vue ...
- (C++)戳西瓜
写在前面的话: 请不要吝啬你的点赞!!! 题目描述 有 n 个西瓜,编号为0 到 n-1,每个西瓜上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的西瓜.每当你戳破一个西瓜 i ...