摘要:
合集:AI案例-NLP-广告传媒
赛题:腾讯2021广告算法大赛赛道二-多模态视频广告标签
数据集:以视频、音频、文本三个模态作为输入数据集
数据发布方:腾讯
数据集价值:针对测试视频样本预测出视频在呈现形式、场景、风格等三个维度上的标签。
解决方案:利用视频ViT-Large、图像EfficientNet、文本BERT等预训练模型,结合了视觉、音频和文本信息进行多模态视频处理AI建模。
一、赛题描述
这个赛道中的赛题是以视频、音频、文本三个模态作为输入,要求选手针对测试视频样本预测出视频在呈现形式、场景、风格等三个维度上的标签。
二、目录结构
源码目录结构包括:数据集、预训练模型、模型保存地址、源码等信息:
├── dataset 数据集存放位置,运行init.sh会自动生成
│ ├── test_2nd 测试集存放位置
│ └── train 训练集存放位置
├── taac2021-tagging-lmbjzs 代码主文件夹
│ ├── checkpoint 模型保存地址
│ ├── config 配置文件
│ ├── inference.py 推理代码
│ ├── inference.sh 推理脚本 接收两个参数,第一个参数是操作,第二个参数是数据集路径,用于视频特征提取
│ ├── __init__.py
│ ├── init.sh 初始化脚本 包括环境配置、数据集目录生成以及数据拷贝,接收一个参数,即原始数据集路径
│ ├── post-processing 后处理代码
│ ├── pre 预处理代码 主要是视频特征提取代码
│ ├── pretrain_models 预训练模型存位置
│ ├── readme.md
│ ├── requirement.txt 环境要求
│ ├── src 模型以及数据集代码
│ ├── train.py 训练代码
│ ├── train.sh 训练脚本 接收两个参数,第一个参数是操作,第二个参数是数据集路径,用于视频特征提取
│ └── utils 工具类
数据集中的video_npy目录存放的是提取好的视频特征。视频特征 .npy 文件是使用 NumPy 库保存的二进制文件,存储了从视频中提取的预计算特征向量(如视觉、运动、音频等特征)。这些文件通常用于高效存储和加载机器学习任务中的视频特征数据。使用 ViT(Vision Transformer)提取的视频帧特征 是指通过基于Transformer架构的视觉模型(如ViT、TimeSformer等)从视频的每一帧或片段中提取的高维语义向量。这些特征能够捕捉视频帧中的全局上下文信息(如物体、场景、动作等),替代传统CNN(如ResNet)的局部卷积特征,尤其擅长建模长距离依赖关系。
- dataset/train/video_npy/effcient :*.npy
- dataset/train/video_npy/vit:*.npy
预训练模型存位置pretrain_models包括:
- vit-large存放的是提取视频特征的预训练模型。ViT-Large(Vision Transformer Large)是一种基于 Transformer 架构的大规模视觉模型,由 Google Research 在 2020 年提出,首次将自然语言处理(NLP)中的 Transformer 成功迁移到计算机视觉(CV)领域,并在图像分类、目标检测等任务上达到媲美 CNN(如 ResNet)的性能。
- efficient-b7存放的是提取视频特征的预训练模型。EfficientNet-B7 是 Google Research 提出的 EfficientNet 系列中最大的模型,基于 复合缩放(Compound Scaling) 方法,在计算资源、参数量和准确率之间达到高效平衡。它在 ImageNet 等图像分类任务上表现优异,同时适用于目标检测、语义分割等下游任务。
- bert-base存放的是文本预训练模型。BERT-Base(Bidirectional Encoder Representations from Transformers)是由 Google AI 于 2018 年提出的 预训练语言模型,基于 Transformer 架构,通过双向上下文理解文本语义,成为自然语言处理(NLP)领域的里程碑式模型。
训练模型保存地址为:checkpoint。若要该预训练模型进行预测,将已训练的20个模型下载到checkpoint下,之后参照测试流程。
三、解决方案样例
以下为排名第6的解决方案。
建模工作原理
这是一个多模态视频处理AI模型,结合了视觉、音频和文本信息进行建模。
核心架构
- 多模态输入处理:
- 视频特征:通过Self-Attention机制提取视觉特征
- 音频特征:单独提取音频特征
- 文本特征:使用BERT模型处理文本输入
- 双模态交互:
- 模型使用Bi-modal Attention(双模态注意力)机制在不同模态间建立联系
- 通过多个Bi-modal Transformer层实现视频-音频特征的深度融合
- 特征融合与输出:
- 各模态特征经过多层Transformer处理后
- 通过Output Layer产生最终输出
关键技术
- 注意力机制:
- Self-Attention用于单模态内部特征提取
- Bi-modal Attention用于跨模态特征交互
- BERT集成:
- 使用预训练的BERT模型处理文本
- 采用冻结前九层和词嵌入对抗训练的策略
- 训练优化:
- 使用BertAdam优化器
- 学习率设为2e-5
- 采用10折交叉验证
工作流程
- 视频和音频特征分别被提取并通过各自的Self-Attention层
- 通过Bi-modal Transformer实现视听特征的交互融合
- 文本特征由BERT单独处理
- 所有模态信息在深层网络中进行整合
- 最终输出层产生预测结果
这种架构特别适合需要结合视觉、听觉和文本信息的复杂多模态任务,如视频内容理解、情感分析或多模态翻译等应用场景。
安装开发包
conda activate pytorch_py3
cd taac2021-tagging-lmbjzs
sudo apt-get install ffmpeg
pip install -r requirement.txt
训练
如果下载使用ViT提取的视频帧的特征,可以直接从第三步开始
- 训练集视频帧抽取 直接运行train.sh 脚本 接收两个参数,第一个参数是frame代表抽帧,第二个是训练集视频路径, 视频路径最后需要有/ sudo chmod a+x ./train.sh && ./train.sh frame ../../algo-2021/dataset/videos/video_5k/train_5k/
- 训练集视频特征提取 直接运行train.sh 脚本 接收一个参数 extract sudo chmod a+x ./train.sh && ./train.sh extract
- 训练集训练csv生成 直接运行train.sh 脚本 接收一个参数,generate sudo chmod a+x ./train.sh && ./train.sh generate
- 训练 直接运行train.sh 脚本 接收一个参数,train sudo chmod a+x ./train.sh && ./train.sh train 抽帧,特征提取以及训练总体时间大概30个小时
测试
- 测试集视频帧抽取 直接运行train.sh 脚本 接收两个参数,第一个是frame 代表抽帧,第二个是训练集视频路径, 视频路径最后需要有/ sudo chmod a+x ./inference.sh && ./inference.sh frame ../../algo-2021/dataset/videos/test_5k_2nd/
- 测试集视频特征提取 直接运行inference.sh 脚本 接收一个参数 extract sudo chmod a+x ./inference.sh && ./inference.sh extract
- 测试集数据集生成 直接运行inference.sh 脚本 接收一个参数 generate sudo chmod a+x ./inference.sh && ./inference.sh generate
- 推理 直接运行inference.sh 脚本 接收一个参数inference sudo chmod a+x ./inference.sh && ./inference.sh inference
运行之后会在当前目录生成out.json,这个便是最后的结果。
源码开源协议
作者:南方科技大学 ChenJiashuo
The MIT License – Open Source Initiative
四、参考资料
五、获取案例套装
文件大小:约 4.63 GB