本文作者:杨蕊1002
导读:飞桨(PaddlePaddle)致力于让深度学习技术的创新与应用更简单。7月初,随着Paddle Fluid 1.5版本的发布,国内业界首个视频识别与定位工具集PaddleVideo也迎来了重磅更新。PaddleVideo在实际工业界可以形成很多具体应用,包括:视频精彩片段预测、关键镜头定位、视频剪辑等任务,例如定位NBA篮球赛视频中扣篮镜头,电视剧中的武打镜头等。如下图所示:
本文末尾,为广大算法和开发同学准备了PaddleVideo模型实战的应用案例,视频剪辑、素材拼接和标题生成工作完全是程序模型自动完成的,极大地减轻了人力剪辑的工作量,效果也还不错。不过,在看具体模型具体应用之前,让我们可以先来了解一下PaddleVideo。
1. PaddleVideo是什么?
PaddleVideo是飞桨在计算机视觉领域为用户提供的模型库PaddleCV中的视频识别与定位部分的模型库。PaddleVideo的全部模型都是开源的,用户可以一键式快速配置模型完成训练和评测。
PaddleVideo目前视频分类和动作定位模型包括:
2. 重磅更新内容详解
本次重磅更新要点如下:
- 增加动作定位模型C-TCN,该模型是2018年ActivityNet夺冠方案。
- 增加已发布的模型骨干网络,Non-local模型增加ResNet101和l3d网络结构
- 优化已经发布的分类模型,NeXtVLAD训练速度提升60%,TSM训练速度领先同类框架39%
首先是动作定位模型C-TCN。在介绍模型前,需要了解一下ActivityNet。
ActivityNet 是目前视频理解领域影响力最大的赛事,与每年的顶级学术会议 CVPR 一起召开。在2019年的竞赛中,百度公司计算机视觉团队获得视频动作提名、视频动作检测两项任务的冠军,并在新增任务 EPIC-Kitchens 动作识别挑战赛中获两项测试集冠军(Seen kitchens 和 Unseen kitchens)。 这已是百度视觉团队连续三年在 ActivityNet 相关赛事中斩获冠军。
了解了ActivityNet比赛的含金量,我们快来看一下第1条更新:C-TCN模型。
2.1. 动作定位模型C-TCN
问题背景:定位视频中特定类别的时序动作片段的动作起始时间和终止时间点并正确识别动作类别。
研究现状:当前的主流做法是将视频特征(时间维度T*C单帧图像特征维度)沿着时间维度做一维卷积设计各种网络结构1D-TCN,我们实验发现随着网络加深之后网络的分类loss较浅层网络结构会差很多,也就是说类别信息在1D时序卷积网络中会随着网络变深而慢慢丢失,如下图所示。因此,我们设计了C-TCN,2D的保留类别信息的卷积,并且实验证明了C-TCN的有效性。
CTCN卷积的过程如下图:
用SSD+FPN框架加入了CTCN后,整个网络结构如下图:
在THUMOS14和ActivityNet1.3上都取得了较好的结果,如下图:
2.2. Non-local模型增加ResNet101和l3D网络结构
具体来说,开发者选Non-local这个模型,之前版本只提供了最简单的网络结构,Resnet50 + C2D,此次版本更新,增加了两个复杂一些的网络结构:Resnet50 + I3D, 和 Resnet101 + C2D。
这里给大家解释一下Non-local模型的意思。
在CVPR 2018收录的论文里有一篇叫《Non-local Neural Networks》。论文中,作者提出了 non-local operation 来解决 CNN 网络中的 long-range dependencies 问题。在论文中, 作者提出了 non-local operation 作为一种通用的神经网络的 building block 来捕捉基于 long-range 的依赖关系。受到经典的 non-local means 方法的启发, non-local operation 会将某一位置的响应当做是一种从特征图谱所有位置的加权和来计算。
该 building block 可以插入到现在计算机视觉的许多模型当中, 进而可以提升分类, 检测,分割等视觉任务的性能表现。
在PaddleVideo模型库中Non-local模型专门用于视频分类任务。
还有第3条更新: 优化已经发布的分类模型,NeXtVLAD训练速度提升60%,TSM训练速度领先同类框架39%。
2.3. NeXtVLAD训练速度提升60%,TSM训练速度领先同类框架39%
以上的速度提升是指在同样的硬件配置下,训练速度比之前有了很大的提升。经过此次更新,NeXtVLAD模型训练速度比TensorFlow快约1.88倍。采用的优化方法是将数据预处理部分浮点数相关的运算转移到GPU上使用Paddle Op进行计算,而CPU上则使用uint8数据类型,可以大幅减小从CPU到GPU数据拷贝的开销。
3. 模型训练、测试和推断
接下来,教大家如何使用PaddleVideo中模型,以本次重磅更新的模型C-TCN为例子。
首先进入GitHub的PaddleVideo相关页面,地址如下:
https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/PaddleVideo?fr=ai5。
通过gitclone命令下载代码到本地。
代码结构说明如下:
3.1. 数据准备
C-TCN模型使用ActivityNet 1.3数据集,具体下载方法请参考官方下载说明(http://activity-net.org/index.html
)。在训练此模型时,需要先对mp4源文件抽取RGB和Flow特征,然后再用训练好的TSN模型提取出抽象的特征数据,并存储为pickle文件格式。我们将会提供转化后的数据下载链接。转化后的数据文件目录结构为:
同时需要下载如下几个数据文件
Activity1.3_train_rgb.listformat,
Activity1.3_val_rgb.listformat,
labels.txt,est_val_label.list,val_duration_frame.list,并放到dataset/ctcn目录下。
3.2. 模型训练
数据准备完毕后,可以通过如下两种方式启动训练:
- 从头开始训练,使用上述启动脚本程序即可启动训练,不需要用到预训练模型。
- 可下载已发布模型通过--resume指定权重存放路径进行finetune等开发。
训练策略:
- 采用Momentum优化算法训练,momentum=0.9。
- 权重衰减系数为1e-4。
- 学习率在迭代次数达到9000的时候做一次衰减。
3.3. 模型评估
可以通过如下两种方式启动训练:
- 使用scripts/test/test_ctcn.sh进行评估时,需要修改脚本中的--weights参数指定需要评估的权重。
- 若未指定--weights参数,脚本会下载已发布模型进行评估。
- 运行上述程序会将测试结果保存在json文件中,使用ActivityNet官方提供的测试脚本,即可计算MAP。
3.4. 模型推断
可通过如下命令进行模型推断:
- 模型推断结果存储于pkl中,通过pickle格式存储。
- 若未指定--weights参数,脚本会下载已发布模型进行推断。
以上也是PaddleVideo中所有模型的具体使用方法。
4. 典型案例
PaddleVideo目前已经在典型领域有一些实际应用,我们来看一个实际的视频剪辑集锦;案例:《伤心镜头集锦:看谁最能打动人心》
值得一提的是,以上视频并不是人工剪辑的,完全是结合知识图谱做出的智能化视频生产。具体来说,首先运用知识图谱的能力,我们根据视频标题可以找到很多包含某些特殊动作类别的视频, 然后再运用localization的技术可以把每个视频中的这些片段剪辑出来,组合成一个新视频,然后用NLP的技术生成视频标题分发出去。如果你觉得很有趣,不妨点击文末的项目地址试了解一下。
好啦,本期飞桨PaddleVideo的介绍就告一段落啦。如果有兴趣的同学,可以加入官方QQ群,您将遇上大批志同道合的深度学习同学。
飞桨官方QQ群:432676488。
如果您想详细了解更多飞桨的相关内容,请参阅以下文档。
官网地址:
https://www.paddlepaddle.org.cn?fr=ai5
项目地址:
https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/PaddleVideo?fr=ai5
最后给大家推荐一个GPU福利 - Tesla V100免费算力!配合PaddleHub能让模型原地起飞~ 扫码下方二维码申请~
原文链接地址:https://developer.baidu.com/topic/show/290241
来源:oschina
链接:https://my.oschina.net/u/4299156/blog/3218535