概述
一、介绍
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时序动作定位框架 | 数据准备与训练指南 (上)一、介绍二、PP-TSM的全部内容,希望文章能够帮你解决百度飞将BMN时序动作定位框架 | 数据准备与训练指南 (上)一、介绍二、PP-TSM所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复