这次的UCF101视频数据预处理部分,我花了半个月学习了网上的方法和代码,在此真是万分感谢大佬们 !!!然后再和项目组组长讨论并修改了代码hhh,就基本完成任务辣~
今天心血来潮,立下从今天起坚持写代码笔记的flag。故用这篇博客开启我的程序媛笔记之旅hhh
这是数据预处理部分大概的总结:
一、首先,从官网上下载UCF101视频训练集和训练数据和测试数据的列表文件ucfTrainTestlist 。其次根据ucfTrainTestlist中的信息将UCF101训练集的视频分成train 和test 两部分,即将全部的视频对应地移到新建的train文件夹和test文件夹中。
二、下载安装ffmpeg工具,用ffmpeg 提取所有小视频的帧并存放在原相应小视频的目录下。同时,记录下每个小视频所提取的帧数,并按照train_or_test, classname, filename_no_ext, nb_frames 一行四列的格式存入与train文件夹和test文件夹同目录下的新建的名为data_file的csv文件中。
三、完成了上述视频转化为帧之后,接着就是对帧进行数据处理。
首先我们创建一个继承抽象类torch.utils.data.Dataset的子类UCF101。
我们对数据的处理有这四个函数:ClipSubstractMean()的作用是减去RGB的平均值;Rescale()的作用是重新调整图像大小;RandomCrop()的作用是裁剪图片, 随机从图像中截取一部分;ToTensor()的作用是将numpy类型表示的图像转换成torch表示的图像,即将图片转成Tensor,归一化至[0, 1]。我们将这四种处理图像的功能组合成transform。之后将transform=transforms.Compose([ClipSubstractMean(), Rescale(), RandomCrop(), ToTensor()])作为参数传入类UCF101,实例化一个类UCF101的对象myUCF101,再将myUCF101作为参数传入DataLoader,然后实例化一个DataLoader的对象dataloader。
大概的方法就酱~