PaddlePaddle / PaddleVideo

Awesome video understanding toolkits based on PaddlePaddle. It supports video data annotation tools, lightweight RGB and skeleton based action recognition model, practical applications for video tagging and sport action detection.
Apache License 2.0
1.49k stars 375 forks source link

一段视频包含多组action如何训练呢? #220

Open bleakie opened 2 years ago

bleakie commented 2 years ago

ActivityNet是一段视频只有一个action,如果我想用一段视频包含多组action该如何训练&测试呢?

luyao-cv commented 5 months ago

针对一段视频包含多个动作(action)的情况,你的任务听起来更像是动作检测(action detection)或动作分割(action segmentation),而不仅仅是动作识别(action recognition)。在这种情况下,你不仅需要识别视频中存在的动作,还需要确定每个动作的开始和结束时间。以下是一些建议:

  1. 使用适合的数据集:选择或构建一个适合任务的数据集,这个数据集中的每个视频应该标注了多个动作及其对应的时间段。如THUMOS'14、Charades或AVA数据集。

  2. 采用适当的模型:针对这类任务,一些研究采用了Two-Stream ConvNets、3D ConvNets(如C3D、I3D)加上时间分割网络(如Temporal Segment Networks, TSN),或者是最近更为先进的时空动作检测模型,如SlowFast Networks、Graph Convolutional Networks(GCNs)结合非局部(non-local)操作等。

  3. 训练策略

    • 帧级标注:对于每个动作,你需要标注它开始和结束的时间(或帧),这样模型就可以学习到不同动作的时空特征。
    • 滑动窗口:使用滑动窗口的方法在视频上滑动,为模型提供局部视频片段进行学习。这种方法适用于动作检测任务,因为它可以帮助模型学习识别视频中不同时间段的动作。
    • 分段方法:类似于TSN的方法,将视频分成几段,然后在这些段上学习动作识别,最后结合段内的预测进行整个视频的动作检测。
  4. 损失函数:多任务学习框架通常在这类问题上表现良好,其中一个任务是动作分类,另一个任务是动作定位(即确定动作的开始和结束)。因此,损失函数可以设计为分类损失(如交叉熵)和定位损失(如IoU损失或L1/L2损失)的组合。

  5. 评估指标:采用动作检测的评估指标,如平均精度(mAP)等,这需要考虑到检测到的动作的时间精确度。

  6. 训练&测试过程

    • 训练时,输入是视频片段及其对应的动作标签和动作时间段,模型需要同时学习动作的分类和时空定位。
    • 测试时,模型需要在给定的视频中检测出所有动作及其对应的时间段,并与真实标注进行比较以计算性能指标。

使用适当的数据预处理、数据增强技术以及精心设计的训练流程,可以进一步提高模型的性能。