注意
点击此处下载完整的示例代码
8. 从预训练模型中提取视频特征¶
特征提取是一个非常有用的工具,当您没有大型标注数据集或没有足够的计算资源来从头开始训练适用于您用例的模型时。它也有助于可视化模型学习到的内容。在本教程中,我们提供了一个简单的统一解决方案。您唯一需要准备的是一个包含视频信息(例如,视频路径)的文本文件,剩下的事情我们会处理。您可以使用单个命令行从许多流行的预训练模型(例如,I3D、I3D-nonlocal、SlowFast)中提取强大的视频特征。
注意
您可以随时跳过本教程,因为特征提取脚本是完整的且可以直接运行。
下载 完整 Python 脚本: feat_extract.py
有关更多命令选项,请运行 python feat_extract.py -h
请查阅模型库以选择您偏好的预训练模型。
准备数据¶
您的数据可以存储在任何层级结构中。您唯一需要准备的是一个文本文件,video.txt
,其内容应类似于
/home/ubuntu/your_data/video_001.mp4
/home/ubuntu/your_data/video_001.mp4
/home/ubuntu/your_data/video_002.mp4
/home/ubuntu/your_data/video_003.mp4
/home/ubuntu/your_data/video_004.mp4
......
/home/ubuntu/your_data/video_100.mp4
每一行是您想要提取特征的每个视频的路径。
或者您也可以使用我们在其他教程中用于训练模型的格式,
/home/ubuntu/your_data/video_001.mp4 200 0
/home/ubuntu/your_data/video_001.mp4 300 1
/home/ubuntu/your_data/video_002.mp4 100 2
/home/ubuntu/your_data/video_003.mp4 400 2
/home/ubuntu/your_data/video_004.mp4 200 1
......
/home/ubuntu/your_data/video_100.mp4.100 3
每一行包含三项:每个视频的路径、视频帧数和视频标签。但是,第二项和第三项在代码中不会被使用,它们只是占位符。因此,您可以在这两个位置放置任何正数。
请注意,目前我们只支持直接从视频中提取特征。
一旦您准备好 video.txt
,您可以通过以下方式开始提取特征
python feat_extract.py --data-list video.txt --model i3d_resnet50_v1_kinetics400 --save-dir ./features
提取的特征将保存到 features
目录中。每个视频将有一个特征文件。例如,video_001.mp4
将有一个名为 i3d_resnet50_v1_kinetics400_video_001.mp4_feat.npy
的特征文件。特征是从视频中心通过使用 32 帧片段提取的。
如果您想通过覆盖更多时间信息来获得更强的特征。例如,您想从视频的 10 个片段中提取特征并将其组合。您可以执行以下操作:
python feat_extract.py --data-list video.txt --model i3d_resnet50_v1_kinetics400 --save-dir ./features --num-segments 10
如果您想从视频的 10 个片段中提取特征,从每个片段中选择 64 帧片段,并将它们组合。您可以执行以下操作:
python feat_extract.py --data-list video.txt --model i3d_resnet50_v1_kinetics400 --save-dir ./features --num-segments 10 --new-length 64
如果您想从视频的 10 个片段中提取特征,从每个片段中选择 64 帧片段,执行三次裁剪技术,并将它们组合。您可以执行以下操作:
python feat_extract.py --data-list video.txt --model i3d_resnet50_v1_kinetics400 --save-dir ./features --num-segments 10 --new-length 64 --three-crop
我们还提供了预训练的 SlowFast 模型供您提取视频特征。SlowFast 是最近最先进的视频模型,在准确性和效率之间取得了最佳平衡。例如,如果您想从模型 slowfast_4x16_resnet50_kinetics400
中提取特征,
python feat_extract.py --data-list video.txt --model slowfast_4x16_resnet50_kinetics400 --save-dir ./features --slowfast --slow-temporal-stride 16 --fast-temporal-stride 2
该模型要求输入是一个 64 帧的视频片段。我们为慢分支选择 4 帧(时间步长 = 16),为快分支选择 32 帧(时间步长 = 2)。
类似地,您可以指定 num_segments、new_length 等参数以获得更强的特征。还有许多其他选项和模型可供选择,请查阅 feat_extract.py
以获取更多使用信息。
脚本总运行时间: ( 0 分钟 0.000 秒)