20

AWS AI 全面助力视频理解,GluonCV 0.6 轻松复现前沿模型

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzIwMTE1NjQxMQ%3D%3D&%3Bmid=2247490598&%3Bidx=1&%3Bsn=a8a62440b721422cc8d0157bd6aad2aa
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击 我爱计算机视觉 标星,更快获取CVML新技术

视频理解 是近几年非常流行的研究方向,因为视频是最接近于人眼的真实输入,分析时间序列上的图像变化有助于我们开发更强的计算机视觉。而在视频理解领域,最具代表性的研究方向就是 动作识别 。区别于以往的大部分图像任务,动作识别的主体是动作,而不是物体,比如唱,跳,rap,篮球。

UbENny2.gif

所以动作识别功能可以为我们做些什么呢?现在大部分手机相册都会自动标注照片,把图片分为家庭,自拍,庆祝等等类别,方便查找。可是拍的短视频怎么办?试试视频动作识别,不论是家居遛狗,还是家里遛娃,还是出门滑雪,这些全都属于动作识别的范畴。AI 模型给每个视频打上标签,然后生成一个年终精彩视频集锦,帮你留住今年的每一份美好。

JFRfqeZ.gif

动作识别还有很多实际的应用,比如 视频监控和人体行为分析 。而且,视频理解不仅仅是一个方向,它更是一种概念。所有的图像处理问题,加上时间这个维度后,就会变成新的问题,比如物体检测在时间轴上就变成了物体跟踪。正因为视频理解如此重要,近几年在学术和工业界都赚足了眼球。

然而有很多阻碍 限制 了视频从业者的步伐,比如庞大的数据集,缺乏易用可复现的代码库,找不到教程,没法部署到终端上等等。就以数据集为例,视频领域里一个比较流行的数据集 Kinetics400 的视频总帧数是 ImageNet 图片总数的 100 倍。有时候为了更好的理解时序信息,很多模型还需要提取光流。很早就有知乎小伙伴反映过,几百万的训练样本,光抽帧就抽的头疼,更别提抽光流了,头发都要被抽没了。

ryyQjme.jpg!web

即使准备好了数据,训练一个 SOTA 的模型也要数天之久,更别提复现、调参或者进行新的研究探索了。所以在这次 GluonCV release 0.6 中,我们一一解决以上提到的痛点。经过最近几个月的复现和优化,GluonCV 现在全面支持视频理解中的大量模型和常见数据集。我们还提供了易上手的教程,分布式的支持,快速的视频加载,好玩的应用实例和可复现的超参和结果,帮助大家分分钟上手视频理解,免去了重复造轮子的困扰。小伙伴们还不快快上车,赶上这波全民视频的热潮!

更多的模型和数据库支持

最近 Facebook 也刚刚开源了他们的视频理解库,PySlowFast。相比而言,我们提供更多更全的模型和数据库的支持。下面的表格列出了我们在 Kinetics400 数据集上提供的预训练模型,

aM3qqi3.jpg!web

模型的各种 backbone,各种变体,应有尽有。只需一行 net = get_model(model_name) , 即可享用训练好的模型。同时,我们还支持 UCF101, HMDB51 和 Something-Something-V2 数据集,对 ActivityNet,HACS,Moments in Time 和 AVA 的支持正在赶来的路上。所有的训练脚本,超参数,训练日志和测试方式全都提供,轻松复现基线模型。

快速的视频加载

视频数据的预处理非常繁琐,而且费时费力。以 Kinetics400 数据集为例,存储它所有的视频数据需要 450GB 的硬盘空间。如果我们全部抽成视频帧来训练,就要占 6.8T 的硬盘空间。如果再抽取光流,大部分机器表示吃不消。即使我们有足够的硬盘空间来储存这些数据,大量的数据会造成训练时候的 IO 瓶颈,GPU 利用率大部分时候是 0,导致训练极其缓慢还浪费资源。

所以我们需要一个全新的视频加载器 decord,可以直接读取视频,再也不用繁琐的预处理了, 想读哪帧读哪帧。

i6bYFrB.png!web

如下图所示,相比已有的视频加载器,OpenCV 和 PyAV, 我们的 decord 至少快两倍以上,尤其在随机取帧的时候,更是快八倍以上,导师再也不用担心我的实验被卡 IO 了。

RBryauq.png!web

强大的自定义功能

我们提供了两个自定义的功能,自定义 dataloader 和自定义模型,帮助用户写最少的代码,实现最多的功能。

首先是自定义的 dataloader,我们提供了一个 VideoClsCustom 的类,基本适用于大部分视频分类的任务。不论用户的数据是怎么存放,怎么命名, 什么格式的,只需要提供一个如下的文本文件就可以开始训练了。

uMfQz2n.png!web

每一行需要提供 3 个信息,分别是视频存放的路径,视频的长度以及视频的类别。如果用户已经将视频抽成了帧也不要紧, 只需要把对应视频路径换成视频帧文件夹的路径即可。比如我们现在要加载一个数据集,要随机从一段视频中抽取一个视频片段,长为 64 帧,隔帧取样,同时调整帧的大小为 224x224。

aEfMVfn.png!web

还有很多默认的参数可以调整,满足大部分模型训练的需求,想了解更多选择请参考源代码。

其次是自定义的模型,我们提供了几个常见模型的自定义版本,比如 slowfast_4x16_resnet50_custom。用户在根据自己的数据集建立模型的时候,可以直接调用这个函数,只需要提供数据集里有几类就可以了。比如用一个视频异常检测的数据集做一个二分类问题,

在有了这两个自定义的功能后,用户基本无需写代码就可以直接在自己的数据集上自由的玩耍了。

rUBj6zy.jpg!web

丰富的教程

过去的五年,视频理解与行为识别快速发展,可是直到最近才陆陆续续有稳定的开源代码库,比如 MMAction, PyVideoResearch, VMZ 和 PySlowFast。即便如此,简单易懂的教程依旧缺乏。我们 GluonCV 提供大量的 jupyter notebook 教程,用户可以直接本地体验,不论是在 Windows,Linux 还是 Mac 上。我们提供的教程包括如何复现 SOTA 模型,如何抽取特征,如何做推理,如何在自己的数据集上微调以及如何做分布式训练。

尤其值得一提的是分布式训练。鉴于视频领域训练太过耗时,训练一个 SOTA 模型动辄超过一周,最常见的方式就是使用分布式训练加速这个过程。可惜网上关于分布式训练的教程文档都非常少,更不要提专门针对视频模型讲解分布式训练的文档了。我们的教程包括如何设置集群通信,如何准备数据,如何启动分布式训练,一步步带你上手视频理解。我们的分布式训练扩展性能也很好,无需复杂的优化,两台机器即可提速 1.6 倍,四台机器可提速 3.2 倍, 八台机器可提速 6 倍。分布式训练可以帮助你快速迭代,是发论文做产品不可或缺的利器。

INT8 量化,部署更快

GluonCV 继续与英特尔携手带来更多的 INT8 量化模型。受益于 Intel Deep Learning Boost(VNNI) 的加持,用 INT8 量化后的视频理解模型比它们原本的 32 位浮点数版本要快许多。因为是快速部署,我们只提供了部分 2D 模型的量化模型。下表是基于 AWS EC2 C5 实例的结果,在保持原有精度的情况下, 量化过的模型可以达到 5 倍的提速。

BVbMnav.jpg!web

对于想要尝试的小伙伴, INT8 量化版本的使用和标准的 GluonCV 模型一样,仅需在模型名称后加上 _int8 后缀,就可以体验性能起飞的感觉!同时, 为了方便用户在自有数据集上进行 INT8 量化,我们还提供了量化校准工具。目前本校准工具仅支持 Hybridized 后的 Gluon 模型,用户可以使用 quantize_net 接口来量化他们自己的模型, 方便各种部署。

相关链接

  • GluonCV 网站  (gluon-cv.mxnet.io)

  • GluonCV Github (github.com/dmlc/gluon-cv)

  • 论坛讨论 (discuss.gluon.ai)

喜欢我们的工作并且希望支持更多的更新,欢迎点赞加星 Fork!

视频理解学习群

学习交流视频理解、视频分类技术,扫码添加CV君拉你入群,如已为CV君其他账号好友请直接私信,

请务必注明:视频 ):

jauQfyb.jpg!web

喜欢在QQ交流的童鞋可以加52CV官方QQ群: 805388940

(不会时时在线,如果没能及时通过还请见谅)

UbiEbaU.png!web

长按关注 我爱计算机视觉


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK