【2020华为云AI实战营】第六章视频分析课程打卡及作业打卡分享
本文首次发表于华为云社区ModelArts版块,主要是作者在学习使用AI开发平台ModelArts过程中的一些经验产出。大家好,我是Copy攻城狮胡琦!此次要和大家分享的是学习过程中的一些小的心得及作业分享。感觉我又有很久没有活跃在社区了,也很久没有产出文章了。回顾AI实战营过去五章的学习,我们已经掌握了图像分类、物体检测、图像分割、人脸识别、OCR等常用的算法和技巧,应该对ModelArts也是能够熟练使用了。第六章视频分析将是AI实战营视觉领域的最后一个章节。
准备
请新建一个Python3、GPU环境的NoteBook,开始我们第六章的课程学习和打卡!本章我们又会学习Pytorch、TensorFlow等框架的知识。如果您有购买3元资源包的话,建议您使用付费版本的且硬盘增大到20G,我遇到因为磁盘空间不足导致tools目录等文件无法正常解压出来,如果您恰好也遇到了can't open file 'tools/video_inpaint.py: No such file or directory的错误,那么基本上是磁盘空间不足的锅了。
拉取代码
import os import pathlib if "ModelArts-Lab" in pathlib.Path.cwd().parts: while "ModelArts-Lab" in pathlib.Path.cwd().parts: os.chdir('..') elif not pathlib.Path('ModelArts-Lab').exists(): !git clone --depth 1 https://gitee.com/hu-qi/ModelArts-Lab print('代码下载完成,撸起袖子就是干!')
复制文件
%%bash cp //home/ma-user/work/ModelArts-Lab/notebook/DL_video_object_segmentation/object_segmentation.ipynb /home/ma-user/work/huqi88.ipynb cp //home/ma-user/work/ModelArts-Lab/notebook/DL_video_action_recognition/action_recognition.ipynb /home/ma-user/work/huqi88-action.ipynb
第六章我们学习视频分析,学习资料在ModelArts-Lab/notebook/DL_video_object_segmentation/object_segmentation.ipynb和ModelArts-Lab/notebook/DL_video_action_recognition/action_recognition.ipynb,就是我们要学习的使用OSVOS算法实现视频物体分割和使用C3D和I3D模型实现视频动作识别。其实,通过对打卡文档的分析,不难看出这种的打卡任务依旧只需简单的复制粘贴就能完成,当然这对号称Copy攻城狮的我来说,小菜一碟,更多地是想跟大家分享课程背后的心得,比如排错技巧。废话不多说,撸起袖子就是干!
课程打卡
课程要点: 环境
课程打卡的任务就是跑一遍OSVOS算法实现视频抠图,对应的文件是我们刚下载的ModelArts-Lab/notebook/DL_video_object_segmentation/object_segmentation.ipynb。别忘了按照打卡要求,我们需要将文件重命名成自己的华为云账号,按照老师的文档进行操作应该是没太大问题。不过我还是遇到了坑,自己给自己挖的:一是没有选用Pytorch的格式运行代码,二是由于磁盘不足导致视频物体分割应用的时候,拉取OBS的代码进行解压时无法正常解压导致部分文件丢失。还有一个特别要注意的点,也是老师重点标注的:注意!安装完以上模块后,会有一些c++库的更新,因此需要点击本页面顶部菜单栏的 Kernel,再点 Restart。当然,如果不听老人言强行一次执行所有代码是会导致进程死掉的,然后就会有熟悉的core-xxx文件夹生成,不过也不用慌,用命令行rm -rf core-xxx删除这个大文件就行。课程打卡其实分为两部分:OSVOS算法训练和预测、视频物体分割的应用之一--视频抠图。我这里提到的关键词是环境,上文两个坑其实都反应了环境的重要性, 为什么同一份代码别人能运行成功我就各种报错呢?重要的一点就是环境不同,比如,一开始我没注意是用的Pytorch框架,那我的环境就不对了,运行的结果肯定也会不同;其次,本次实践依赖的torch版本又比较特殊,而且还涉及到C++库的更新,如果不执行Restart操作就会导致进程die;还有一个环境影响的因素就是磁盘空间不足的问题,在视频分割应用之前我们需要下载一些代码和数据,而解压是通过os.system去执行一些命令行操作,操作过程是没有日志输出的。当我们发现一大串代码执行结果与预期不一致时,可以将代码拆分一步一步排查。
自己挖坑之一:没有使用Pytorch框架
如图所示,最终导致cannot import name '_version',这是因为代码采用的Pytorch,而我设置的格式不对。解决方法就是严格按照教程使用Pytorch。
自己挖坑之二
如图所示,导致The kernel appears to have died. It will restart automatically.,原因是没有按照教程进行Restart操作,一些依赖的c++库没更新到,导致的异常。解决方法就是严格按照教程在安装完依赖模块后点击页面顶部菜单栏的 Kernel,再点 Restart。
自己挖坑之三
import osimport moxing as moxprint('Downloading datasets and code ...')if not os.path.exists('./video_object_segmention/Deep-Flow-Guided-Video-Inpainting'): mox.file.copy('s3://modelarts-labs-bj4/notebook/DL_video_object_segmentation/Deep-Flow-Guided-Video-Inpainting.zip', './video_object_segmention/Deep-Flow-Guided-Video-Inpainting.zip') os.system('cd ./video_object_segmention/;unzip Deep-Flow-Guided-Video-Inpainting.zip;rm Deep-Flow-Guided-Video-Inpainting.zip') if os.path.exists('./video_object_segmention/Deep-Flow-Guided-Video-Inpainting'): print('Download success') else: raise Exception('Download failed')else: print('Download success')
以上这段代码就是获取视频物体分割应用相关代码、数据、模型的,但是我执行完代码发现有些文件目录缺失,如tools目录;通过README.md发现其实Deep-Flow-Guided-Video-Inpainting就是一个开源项目,在github上能看到完整的代码。回到文件缺失的问题,从代码的来看有两种可能:一是官方提供分润OBS中本身就缺失相关的文件,不过可能性比较小;二是os.system执行的脚本出了差错。按照这两种可能,我们先验证一下:先把Deep-Flow-Guided-Video-Inpainting删除再重新执行文件下载操作(不执行解压代码)。然后通过Terminal来进行解压。运行结果如下:
write error (disk full?)提示磁盘已满,我滴乖乖,二话不说转手就重建了一个20G的实例,继续实践,结果一把过!
作业打卡
本章的作业打卡依旧比较简单,只需简单的修改或者复制即可完成。作业一实现对另一段视频进行动作识别预测,运用的是TensorFlow,作业二是在课程作业的基础上对另一个数据集进行训练和应用。废话不多说,直接开干:
作业一要点:获取numpy矩阵
I3D模型的输入是视频流的numpy矩阵文件,在对新的视频进行动作识别预测的时候,我们先要拿到视频的rgb.npy和flow.npy这两个文件以及视频总帧数。好在老师又提供了代码,先看看怎么拿到视频的*.npy文件:
通过脚本拿到compute_rgb_flow.py
%%bash wget https://ai-course-common-26-bj4.obs.cn-north-4.myhuaweicloud.com/video/compute_rgb_flow.py
打开compute_rgb_flow.py找到TODO补充视频路径:
视频在dataset_subset目录下,我这里以dataset_subset/Bowling/v_Bowling_g03_c03.avi为例
# ……video_path = 'dataset_subset/Bowling/v_Bowling_g03_c03.avi' # TODO,填写视频所在的路径save_dir = os.path.dirname(video_path) + '_out'if not os.path.exists(save_dir): os.mkdir(save_dir)# ……
执行compute_rgb_flow.py
!python compute_rgb_flow.py
稍等片刻我们能拿到视频的总帧数、rgb npy路径、flow npy 路径;
替换参数
# ……# 视频的帧数_SAMPLE_VIDEO_FRAMES = 137# 输入数据包括两部分:RGB和光流# RGB和光流数据已经经过提前计算_SAMPLE_PATHS = { 'rgb': 'dataset_subset/Bowling_out/v_Bowling_g03_c03_rgb.npy', 'flow': 'dataset_subset/Bowling_out/v_Bowling_g03_c03_flow.npy',}# ……
依次执行即可完成新视频的动作识别预测。
作业二要点:数据集替换
作业二主要是将课程中用到的flamingo数据集替换为breakdance,最终达到剔除视频中跳舞的对象。踩过课程作业的坑之后,再来完成作业二真的简单了许多,大概有6处需要替换的。
替换
# 第一处:定义模型和训练超参# Setting of parametersif 'SEQ_NAME' not in os.environ.keys(): seq_name = 'breakdance'
# 第二、三处:查看视频分割结果# Setting of parameterssrc_dir = './video_object_segmention/OSVOS-PyTorch/DAVIS_2016/JPEGImages/480p/breakdance'result_dir = './video_object_segmention/OSVOS-PyTorch/./models/Results/breakdance'
# 第四、五处:运行算法Demo(在Terminal中执行)source activate /home/ma-user/anaconda3/envs/Pytorch-1.0.0cd `find ~/work/ -name "Deep-Flow-Guided-Video-Inpainting"` bash install_scripts.sh python tools/video_inpaint.py --frame_dir ../OSVOS-PyTorch/DAVIS_2016/JPEGImages/480p/breakdance --MASK_ROOT ../OSVOS-PyTorch/DAVIS_2016/Annotations/480p/breakdance --img_size 512 832 --FlowNet2 --DFC --ResNet101 --Propagation --enlarge_mask
# 第六处:查看视频抠图结果src_dir = './video_object_segmention/OSVOS-PyTorch/DAVIS_2016/JPEGImages/480p/breakdance'
基本一遍过。此次分享就到这,希望对大家有所帮助,赶紧完成打卡吧!
加入组织
MDG 是 ModelArts Developer Groups 的缩写。是由 ModelArts 开发者发起的开放、创新、多元的开发者社区组织。致力于帮助开发者学习提升、互动交流、挖掘机会,推动 AI、互联网等产业生态的建立和发展。MDG 是面向人工智能、AI 技术、开源项目及 ModelArts 平台技术感兴趣的公益性开发者社区,相关开发者、软件工程师、创业者、运营人、产品人、大学生、老师等都可以参加到 MDG 社区。
MDG 秉承开放、创新、多元的社区文化,完全由各地志愿者自发组织和建立。目前,我们已在北京、上海、杭州、重庆建立了社区组织。自 2019 年12月起陆续开展了多次线上、线下活动。许多小伙伴正是参与了华为云 ModelArts 的相关活动后,申请加入MDG志愿者组织,从而更深入地了解ModelArts平台。
关于作者
新晋华为云云享专家Copy攻城狮,我是胡琦,近期有幸参与【2020华为云AI实战营】,学习ModelArts并加入【MDG社区】,期待在这里与你相遇!
- 点赞
- 收藏
- 关注作者
评论(0)