百度飞将BMN时序动作定位框架 | 数据准备与训练指南 (上)
一、介绍
BMN模型是百度自研,2019年ActivityNet夺冠方案,为视频动作定位问题中proposal的生成提供高效的解决方案。
简单说,视频的时序动作定位就是给一段视频,分析出从xxx秒到xxx秒是一个什么动作,相比动作识别需要推断这个动作的起始时间和终止时间,指标主要涉及两个:(1)分类准确率(2)与GT的IoU。
项目地址:
GitHub - PaddlePaddle/PaddleVideo: 基于模块化的设计,提供丰富的视频算法实现、产业级的视频算法优化与应用,包括安防、体育、互联网、媒体等行业的动作定位与识别、行为分析、智能封面、视频标注、视频打标签等,涵盖动作识别与视频分类、动作定位、动作检测、多模态文本视频检索等技术。基于模块化的设计,提供丰富的视频算法实现、产业级的视频算法优化与应用,包括安防、体育、互联网、媒体等行业的动作定位与识别、行为分析、智能封面、视频标注、视频打标签等,涵盖动作识别与视频分类、动作定位、动作检测、多模态文本视频检索等技术。 - GitHub - PaddlePaddle/PaddleVideo: 基于模块化的设计,提供丰富的视频算法实现、产业级的视频算法优化与应用,包括安防、体育、互联网、媒体等行业的动作定位与识别、行为分析、智能封面、视频标注、视频打标签等,涵盖动作识别与视频分类、动作定位、动作检测、多模态文本视频检索等技术。https://github.com/PaddlePaddle/PaddleVideo这个项目需要的存储空间挺多的,大概200G左右,要放在一个充裕的空间
算法主要分为三个阶段:
(1)视频理解
PP-TSM,音频特征:VGGish
(2)时序提名
BMN
(3)动作分类与定位
AttentionLSTM
每个阶段都包含了数据准备、训练、验证和导出推理模型等环节。
准备环境主要是依赖requirements.txt里面的内容安装,基本没什么问题,paddlepaddle-gpu的话最好安装最新版。
二、PP-TSM
数据集使用的是FootballAction飞桨开源的足球动作数据集
数据集由EuroCup2012, EuroCup2016, WorldCup2014, WorldCup2018四个赛事的比赛视频组成,共计272个训练集、25个测试集,支持15种足球精彩动作定位与识别,动作类别分别为:射门、进球、进球有欢呼、角球、任意球、黄牌、红牌、点球、换人、界外球、球门球、开球、越位挥旗、回放空中对抗和回放进球。
在项目中飞桨并未全部开源全部数据,总共是开源了49个数据集。
(1)下载数据集
使用bash文件下载,下载脚本文件位置在PaddleVideo-develop/applications/FootballAction/datasets/EuroCup2016/download_dataset.sh,给该文件执行权限后直接运行即可,下载完成后会在PaddleVideo-develop/applications/FootballAction/datasets/EuroCup2016/mp4这个文件夹下面存放49个MP4视频,合计78.1GB大小。标注数据直接在项目文件里面给出:
datasets/EuroCup2016/label.json 为分类的标签列表
datasets/EuroCup2016/label_cls8_train.json 为训练数据标签
datasets/EuroCup2016/label_cls8_train.json 为验证数据标签
datasets/EuroCup2016/url.list 为训练数据文件列表
datasets/EuroCup2016/url_val.list 为验证数据文件列表
(2)准备数据
在第一阶段需要准备PP-TSM的训练数据,使用如下命令:
在此之前需要有ffmpeg环境,sudo apt install ffmpeg
cd PaddleVideo-develop/applications/FootballAction/datasets/script
python get_frames_pcm.py
这个步骤是将原始的视频文件做采样处理,图像采样是以每秒5帧的频率,音频采样是按照16000的频率。需要处理很久,处理完成后会生成两个新的文件夹:
|-- datasets # 训练数据集和处理脚本
|-- EuroCup2016 # 数据集
|-- mp4 # 原始视频.mp4
|-- frames # 图像帧(新的)
|-- pcm # 音频pcm(新的)
|-- url.list # 视频列表
|-- label.json # 视频原始gts
(3)处理采样
将上述采样数据处理为PP-TSM的训练数据集
cd PaddleVideo-develop/applications/FootballAction/datasets/script
python get_instance_for_pptsm.py
这个步骤是根据标注把运动区间作为正样本,区间内所有帧生成一个pkl文件,非运动区间作为负样本,随机抽取N个区间生成N个pkl文件
完成该步骤后:
|-- datasets # 训练数据集和处理脚本
|-- EuroCup2016 # 数据集
|-- input_for_pptsm # pptsm训练的数据(新的)
(4)训练PP-TSM
首先需要下载一个预训练权重:
cd PaddleVideo-develop/applications/FootballAction
wget https://videotag.bj.bcebos.com/PaddleVideo/PretrainModel/ResNet50_vd_ssld_v2_pretrained.pdparams
mkdir pretrain
mv ResNet50_vd_ssld_v2_pretrained.pdparams pretrain/ResNet50_vd_ssld_v2_pretrained.pdparams
打开训练配置文件:
PaddleVideo-develop/applications/FootballAction/train_proposal/configs/pptsm_football_v2.0.yaml
第5行:写入刚才下载的预训练模型位置,注意要写绝对路径
第17,18行:batchsize大小,我是2080Ti-8G,只能写4/4
第19行:改为1
第23行:找到PaddleVideo-develop/applications/FootballAction/datasets/EuroCup2016/input_for_pptsm/train.list这个文件,然后写他的绝对路径
第28行:找到PaddleVideo-develop/applications/FootballAction/datasets/EuroCup2016/input_for_pptsm/val.list,然后写他的绝对路径,这个其实就是刚才在(3)那个步骤里面生成出来的索引文件
第33行:和28行一样,写一样的东西就可以
单卡的话使用如下命令开始训练:
python -B -m paddle.distributed.launch --gpus="0" --log_dir=./football/logs_pptsm main.py --validate -c applications/FootballAction/train_proposal/configs/pptsm_football_v2.0.yaml -o output_dir=./football/pptsm
大概需要3天3夜训练完成,下面修改代码为推理模式:
在转为预测模式前,需要修改
PaddleVideo/paddlevideo/modeling/framework/recognizers/recognizer2d.py
文件,将 init 和 infer_step 函数分别更新为如下代码:
def __init__(self, backbone=None, head=None):super().__init__(backbone=backbone, head=head)self.avgpool2d = paddle.nn.AdaptiveAvgPool2D((1, 1), data_format='NCHW')def infer_step(self, data_batch):"""Define how the model is going to test, from input to output."""imgs = data_batch[0]imgs = paddle.reshape_(imgs, [-1] + list(imgs.shape[2:]))feature = self.backbone(imgs)feat = self.avgpool2d(feature)return feat
在PaddleVideo根目录执行
python tools/export_model.py -c applications/FootballAction/train_proposal/configs/pptsm_football_v2.0.yaml \-p ./football/pptsm/ppTSM_best.pdparams \-o ./football/inference_model
即可导出推理模型
(5)配置PP-TSM
将
PaddleVideo/applications/FootballAction/predict/action_detect/models/pptsm_infer.py
文件中41行的
self.output_tensor = self.predictor.get_output_handle(output_names[1])
替换为
self.output_tensor = self.predictor.get_output_handle(output_names[0])
进行图像和音频的特征提取,因为我们是用自己刚训练的权重进行特征提取,所以要修改配置文件:
在PaddleVideo-develop/applications/FootballAction/extractor/configs/configs.yaml这个文件里面,
第4行把index_label_football_8.json的路径配置为PaddleVideo-develop/applications/FootballAction/extractor/configs/index_label_football_8.json的绝对路径
第13行把默认的权重路劲改为PaddleVideo-develop/football/inference_model/ppTSM.pdmodel的绝对路径
第14行把默认参数文件改为PaddleVideo-develop/football/inference_model/ppTSM.pdiparams的绝对路径
第29行的音频模型权重路径改为PaddleVideo-develop/applications/FootballAction/checkpoints/AUDIO/__model__的绝对路径
第30行的音频模型参数文件路径改为PaddleVideo-develop/applications/FootballAction/checkpoints/AUDIO/__param__的绝对路径
第38行BMN模型的权重路径改为PaddleVideo-develop/applications/FootballAction/checkpoints/BMN/__model__的绝对路径
第39行BMN模型的参数文件路径改为PaddleVideo-develop/applications/FootballAction/checkpoints/BMN/__param__的绝对路径
第51行的LSTM模型权重路径改为PaddleVideo-develop/applications/FootballAction/checkpoints/LSTM/__model__的绝对路径
第52行的LSTM模型参数文件路径改为PaddleVideo-develop/applications/FootballAction/checkpoints/LSTM/__param__的绝对路径
再打开PaddleVideo-develop/applications/FootballAction/extractor/extract_feat.py
第83行路径改为EuroCup2016文件夹的路径:PaddleVideo-develop/applications/FootballAction/datasets/EuroCup2016
上述配置完成之后,进入到PaddleVideo-develop/applications/FootballAction目录下面运行
python extract_feat.py
完成该步骤后,数据存储位置
|-- datasets # 训练数据集和处理脚本
|-- EuroCup2016 # 数据集
|-- features # 视频的图像+音频特征
下一步用处理好的features训练BMN
百度飞将BMN时序动作定位框架 | 数据准备与训练指南 (上)相关推荐
- CVPR 2021 | 腾讯优图20篇论文入选,含人脸识别、时序动作定位、视频动作分割等领域...
编辑丨腾讯优图AI开放平台 计算机视觉世界三大顶会之一的CVPR 2021论文接收结果出炉!本次大会收到来自全球共7015篇有效投稿,最终有1663篇突出重围被录取,录用率约为23.7%.本次,腾讯优 ...
- ICCV2021 新增数据集汇总 | 含时序动作定位、时空行为检测、弱光目标检测等!...
点击下方"计算机视觉联盟",一起进步!重磅干货,第一时间送达 ICCV 2021 数据集汇总 https://github.com/DWCTOD/ICCV2021-Papers-w ...
- SCNN-用于时序动作定位的多阶段3D卷积网络
转自:http://blog.csdn.net/wzmsltw/article/details/65437295 注:本文首发在微信公众号-极市平台.如需转载,请联系微信Extreme-Vision ...
- 时序动作定位:Rethinking the Faster R-CNN Architecture for Temporal Action Localization(TAL-Net)
这篇是2018CVPR的文章,论文下载链接: http://cn.arxiv.org/pdf/1804.07667.pdf 1 背景 1.1 Faster R-CNN vs TAL-Net 得益于Fa ...
- 时序动作定位 | 面向时序行为定位任务的无监督预训练
论文链接:https://arxiv.org/abs/2203.13609 代码地址:https://github.com/zhang-can/UP-TAL 主要贡献: 首次面向时序行为定位任务进行 ...
- 时序动作定位 | ActionFormer: 使用Transformers动作时刻
目录 ActionFormer: Localizing Moments of Actions with Transformers 摘要 3 ActionFormer: A Simple Transfo ...
- 时序动作定位 | RSKP:基于代表片段知识传播的弱监督时间动作定位(CVPR 2022)
关于<Weakly Supervised Temporal Action Localization via Representative Snippet Knowledge Propagatio ...
- 时序动作定位|使用 ‘注意力机制’ 的弱监督时序动作定位顶会论文理解笔记(Weakly-Supervised Temporal Action Localization)
目录 Weakly Supervised Action Localization by Sparse Temporal Pooling Network(CVPR 2018) W-TALC: Weakl ...
- AAAI 2021 | 商汤提出BSN++: 时序动作提名生成网络
摘要 · 看点 在 AAAI 2021 上,商汤科技城市计算研发团队提出了基于互补边界回归和尺度平衡交互建模的时序动作提名生成网络(BSN++),针对现有方法存在大量边界噪声.缺乏提名之间的关系建模以 ...
最新文章
- Linux gcc 制作动/静态链接库
- 【SLAM后端】—— ceres优化相机位姿求解
- 做正确的事情和把事情做正确
- python pandas读取excel-python pandas 读取文件 写入文件excel
- 求有环单链表的环连接点位置
- MySQL relay log 详细参数解释
- [Leedcode][JAVA][第983题][最低票价][动态规划]
- 中print中加f_Python3中的格式化输出
- java中子类与父类中隐含的this引用的分析
- 迷宫问题(信息学奥赛一本通-T1255)
- mysql在文件里修改用户_mysql用户密码修改,用户添加、删除、设置权限及源文件恢复数据库...
- 【转载】 three.js 相机camera位置属性设置详解
- 趋势 | 或许,这就是大佬吧!——美国ETF产业三巨头格局浅谈
- php解析torrent文件格式,bittorrent 种子文件结构解析
- 又是DDoS,你玩的游戏被黑客攻击停服了吗?
- Django博客项目(一)—— 注册和登录页面
- thinkphp使用paypal进行支付的做法详细步骤
- 【数据库取证篇】阿里云RDS数据库简介
- 怎样做好邮箱安全,什么邮箱安全又好用,如何安全管理邮箱
- 身高体重排序-华为OD
热门文章
- Adobe Creative Suite 3 下载(包括MAC版) 和 收集的一些资料
- ZYNQ+NVMe 小型化全国产存储方案
- android 断点下载的实现,Android实现断点下载的方法
- 透明与不透明物体共存
- 【开发利器】中国国内可用API合集
- 18650圆柱锂电池comsol5.6模型 参数已配置,电化学生热研究,三种放电倍率,
- “相信美好,即将发生”——天泽智云
- VideoSolo Blu ray Player for Mac(mac蓝光播放器)
- java基于ssm的自助旅游管理系统
- DNS 服务器 清除缓存