C3D用户指导

英文原文链接

有关C3D源代码和预训练模型的信息,请访问http://vlg.cs.dartmouth.edu/c3d。

最新修订:2017,5.20

C3D-v1.1是用新模型发布的(2017,5.1)

-还没有对于V1.1的文档,但是对特征提取,训练和微调的例子已经提供。

目录

I.C3D特征提取

I.A 对你的视频或帧提取C3D特征

a. 准备你的输入文件

b.准备你的设定文件

c.提取C3D特征

I.B 使用更小或更大的batch-size提取C3D特征

II.训练3D卷积网络

A、从列表中计算体积平均值

B、从0开始训练你自己的网络

C、一个从零开始在UCF101上训练的例子

III、微调C3D

问答:


下面的指导是为C3D-v1.0写的

I.C3D特征提取

译者注:这个是一个作者告诉我们如何提取特征的一个举例,需要自己再下载预训练模型之后就可以运行了,因为用于提取特征的视频和图片作者已经为我们准备了。

如果你已经成功安装C3D(或者安装了caffe和它的依赖),接下来使用如下步骤:

  1. 下载预训练模型(这个模型有在文章开头的预训练模型信息那个网址里面给出,但是下载需要科学上网),然后将它保存到 "你的C3D目录/examples/c3d_feature_extraction"
  2. 改变当前目录到 "你的C3D目录/examples/c3d_feature_extraction"
  3. 运行(这个是图片作为输入)
sh c3d_sport1m_feature_extraction_frm.sh

或者(这个是视频作为输入)

c3d_sport1m_feature_extraction_video.sh

如果你可以成功运行例子,然后你就可以在输出文件夹下发现已经提取到的特征。

如果你运行时出现:out of memory错误,那么你应该考虑减少Batch-size(see section I.B)

如果你可以成功运行从帧中提取特征,但是在视频输入时候失败了。可能的原因是视频编码的问题。请确保你已经编译了你的OpenCV和Ffmpeg并打开了共享标志。

  • 当你使用C3D当做特征提取器时,请确保 ‘shuffle: false’ 在你的数据层。这有助于我们保持输入剪辑和输出特征之间的对应关系。

I.A 对你的视频或帧提取C3D特征

a. 准备你的输入文件

  • -C3D允许你使用视频输入当做帧序列或视频文件。在使用视频文件的情况下(.mp4, .avi, .mov),请确保你的机器上有适当的解码器,opencv和ffmpeg。在使用帧的情况下,C3D假设每个视频都是一个包含帧数从1到N(帧数)的文件夹。帧的格式如下:“video_folder/%06d.jpg”.

注意:对于使用帧当做输入,帧序号从1开始(例如1至N);对于使用视频当做输入,从0开始。

b.准备你的设定文件

  • 你需要准备两个设定文件:input-list(输入列表)和output prefix。在提供的例子中,他们是:"你的C3D目录/examples/c3d_feature_extraction/prototxt"目录下的input_list_frm.txt(用于图片当作输入), input_list_video.txt(用于视频当作输入), 和 output_list_prefix。

输入列表文件使一个文本文件,其中每一行包含用于输入C3D中提取特征的剪辑的信息。每一行的格式如下:

<string_path> <starting_frame> <label><路径字符串><开始帧><标签>

其中,<标签>值用于训练、测试或者微调,但不用于提取特征,于是可以被忽略(在提供的例子中,他们都被0填充,因为所给的例子是用于教其他人如何使用C3D提取特征的)。对于<路径字符串>(<string_path>),有两种情况。

  • 对于视频输入文件的设定,<路径字符串>是完整路径和视频的文件名。(例如,input/avi/v_ApplyEyeMakeup_g01_c01.avi);
  • 对于使用帧作为输入的设定,<路径字符串>是对包含视频的帧的文件夹的完整路径,(例如input/frm/v_ApplyEyeMakeup_g01_c01/)。

最后<开始帧>被用于指定剪辑的开始帧。我们注意到C3D是提取16帧长度的剪辑的特征。例如,如果开始帧是1,那么你正在为从帧1到帧16的剪辑(从<路径字符串>指定的)提取特征。如果开始帧是17,那么感兴趣的剪辑是从17到32。

注意:在所给出的例子中,我们已经使用16帧的步长从视频中采样了一些剪辑。你可以使用不同的采样大小(步长):例如密集到每一帧或者稀疏到每32帧。

- 输出前缀文件使用于指定正在提取的特征将被保存到的位置,每一行的格式如下:

<output_prefix><输出前缀>

前缀文件中的每一行对对应于输入列表文件中的一行(顺序相同,例如,前缀文件中的第一行是对于列表文件中的第一行的剪辑的输出前缀)。C3D将会将特征保存为:output_prefix.[feature_name](例如: prefix.fc6,即输出前缀为prefix,是fc6层的特征)。建议给每个视频创建一个输出文件夹,并将前缀格式化为sprintf(“output_folder/%06d”, starting_frame). 这意味着每个剪辑都有自己的起始帧作为标识符,文件拓展名用于不同的特征。记住要创建输出文件夹,因为C3D不会创建他们。

c.提取C3D特征

  • 假设您已经准备好了设置文件,那么您需要修改prototxt文件来指向输入列表文件。在prototxt文件中,查找行:
source: "prototxt/input_list_frm.txt"

并且记住要设定use_image,如果你使用了图片当做输入,那么设置为true;如果使用视频作为输入那么设置为false。

  • 使用extract_image_features工具来提取特征。使用工具的命令如下:

extract_image_features.bin <feature_extractor_prototxt_file> <c3d_pre_trained_model> <gpu_id> <mini_batch_size> <number_of_mini_batches> <output_prefix_file> <feature_name1> <feature_name2> ...

其中:

  • <feature_extractor_prototxt_file>:是prototxt文件(示例是给出了),指向了你的输入列表文件。
  • <c3d_pre_trained_model>:是你下载的C3D预训练模型。
  • <gpu_id>:你想运行的GPU iD,从0开始,如果被设置为-1,那么将会使用CPU
  • <mini_batch_size>:你的mini batch size大小。默认值是50,但你可以修改这个数字,取决于你的GPU内存。
  • <number_of_mini_batches>:你想要提取特征的的mini-batches的数量。例如,如果您有100个剪辑来提取特性,并且您使用的mini-batch大小为50,那么应该将该参数设置为2。但是,如果您有101个剪辑要提取特征,那么这个数字应该设置为3。
  • <output_prefix_file>:你的输出前缀文件。
  • <feature_name1>:你可以列出尽可能多的特征名称,只要他在网络输出块的名称中。(可以查看所有层的prototxt文件,他们看起来像fc6-1, fc7-1, fc8-1, pool5, conv5b, prob,...)

你可以发现在例子中给出的命令行如下:

GLOG_logtosterr=1 ../../build/tools/extract_image_features.bin prototxt/c3d_sport1m_feature_extractor_frm.prototxt conv3d_deepnetA_sport1m_iter_1900000 0 50 1 prototxt/output_list_prefix.txt fc7-1 fc6-1 prob

I.B 使用更小或更大的batch-size提取C3D特征

假如你有更多或更少的内存,你可以调整mini-batch size(大于或小于50)。为了那么做,你需要调整网络的prototext文件中的参数(找到行,例如 batch_size:50)。你还需要在命令行中输入<mini_batch_size>和<number_of_mini_batch>的新调整参数。

在提取C3D特征之后,你看一下使用提供的MATLAB脚本(read_binary_blob.m)阅读特征以进行进一步分析。

II.训练3D卷积网络

A、从列表中计算体积平均值

该工具允许您计算您自己的数据集的体积平均值,这对于从零开始培训或在您自己的数据集上微调C3D都很有用。

用法

GLOG_logtostderr=1 compute_volume_mean_from_list input_chunk_list length height width sampling_rate output_file [dropping rate]

参数

  • <input_chunk_list>:与特征提取中用到的列表文件相同。
  • <length>:用于训练中的剪辑的长度(例如 16)
  • <height>, <width> :帧的大小,例如128, 171
  • <sampling_rate>:用于调整你的剪辑中的帧率。(例如, 剪辑长度(clip length)为:16, sampling (采样值)= 1,那么你的剪辑就是一个连续16帧的视频块。或者剪辑长度为16,而采样率(sampling rate)为2,那么你剪辑的是32帧的长剪辑,但是你每2帧采样1帧)
  • <output_file>:输出平均文件
  • <dropping_rate>:如果你的数据集太大(例如1M),你可能从剪辑的自己计算平均值。设此为n,表示下降速率为1:n,没n个剪辑中选择1个样本进行均值计算。

如果你更喜欢mean_value,代替volume_mean文件,那么你可以在你的数据层中设置man_value这个字段。这等价于所有值得体积平均都设置为mean_value。

B、从0开始训练你自己的网络

假设您有您的input_data_list、您的train/test prototxt和您的求解程序prototxt,您可以使用train_net来训练网络。

C、一个从零开始在UCF101上训练的例子

1.将目录改变到YOUR_C3D_HOME/examples/c3d_train_ucf101/

2.运行 sh create_volume_mean.sh 来计算平均卷积文件?

3.运行sh train_ucf101.sh 来训练,预计几天后完成

4.运行sh test_ucf101.sh 进行测试,预计大约15'完成。你的准确率应该在45%左右。(这是剪辑准确率)

III、微调C3D

确保你已经下载了C3D预训练模型,你可以尝试微调例子,通过以下步骤:

1.更改目录里到 YOUR_C3D_HOME/examples/c3d_finetuning

2.运行: ucf101_finetuning.sh

3.当微调完成,你可以通过运行下面的命令来测试你的微调模型:

sh ucf101_testing.sh

4.【2016/5/10添加】如果你没有时间去在UCF101上微调C3D,在这里我们提供了一个已经在UCF101上微调好的C3D模型。

https://www.dropbox.com/s/mkc9q7g4wnqnmcv/c3d_ucf101_finetune_whole_iter_20000

下载这个模型到 YOUR_C3D_HOME/examples/c3d_finetuning, 并且运行:

sh ucf101_testing.sh

注意:请确保你已经将test_01.lst文件指向你的UCF101帧。

这将给出一个80.19%的准确率(clip accuracy)

注意:这个模型是在UCF101“训练分割1”上微调的,因此他只对在“test split 1”上有效。

问答:

1.有对于提取C3D特征的MATLAB或Python封装吗?

答:并没有。

2.我可以在CPU上使用C3D吗?

答:C3D的版本是在老的Caffe上构建的,所以在Makefile中没有“CPU_ONLY”模式。但是你可以通过以下来达到目的:

  • 按照常规编译C3D(它需要CUDA驱动来编译,但是如果你没有GPU,你仍然可以在一个CPU上运行)。
  • 为了使用CPU训练,你可以修改solver文件改到solver_mode:CPU(查看:https://github.com/facebook/C3D/blob/master/examples/c3d_train_ucf101/conv3d_ucf101_solver.prototxt#L19)
  • 为了使用CPU测试,在命令行中使用CPU代替GPU(https://github.com/facebook/C3D/blob/master/examples/c3d_train_ucf101/test_ucf101.sh),并且不需要GUP_ID。
  • 为了使用CPU提取特征,使用GPU_ID = -1,取代例子中的0:(https://github.com/facebook/C3D/blob/master/examples/c3d_feature_extraction/c3d_sport1m_feature_extraction_frm.sh)

参考资料:

[1] D. Tran, L. Bourdev, R. Fergus, L. Torresani, and M. Paluri, Learning Spatiotemporal Features with 3D Convolutional Networks, ICCV 2015

C3D官方指南翻译完整版相关推荐

  1. 新世纪计算机专业英语,新世纪研究生公共英语教材阅读A课文翻译完整版.pdf

    新世纪研究生公共英语教材阅读A课文翻译完整版 Unit 1 一个小男孩的梦想 马克 吐温 1 我小的时候,我们那密西西比河西岸的村镇上,玩伴们都只有一个水恒的志愿.那就 是当轮船上的水手.我们也有其他 ...

  2. 计算机英语教程第五版答案解析,计算机专业英语教程(第5版)翻译完整版

    本人经过多次整理,将很多翻译的文档综合成目前我认为 是比较全的文档贡献给大家,同时我提醒各位在课本上也附录了许多翻译,不要忘记查看呀 图3-1 为建立对象而组合的数据域和方法 典型地,一个对象的描述是 ...

  3. C# SolidWorks 二次开发 API --- 2018版 中文翻译-完整版共享

    这是2018的api帮助文档看了一下翻译版,我把之前翻译的文件免费共享下,希望能对大家有所帮助. 如果大家想查找快速了解某个功能,可以直接在Excel表中查找全部. 之前有两篇共享了官方示例与Mode ...

  4. 毕业设计计算机文献翻译,(完整版)计算机类_毕业设计英文文献及翻译_

    毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,课程设计,硕士论文,研究生论文 外貌 在环境面板上的共同标签部分包括光,云,太阳和月亮的控制器. 启用灯光--当设置后,环境面板被点亮并且物 ...

  5. [转] [翻译]C# Object Initialization[完整版]

    [翻译]C# Object Initialization[完整版] 原文地址:http://www.csharp411.com/c-object-initialization/ 译者:star6522 ...

  6. Google内部流传的反多样性文章(10页完整版中文翻译)

    Google内部流传的反多样性文章(10页完整版中文翻译) 更新于8/5/17 7:25pm ET: Google 新上任的多样性和管理副主席 Danielle Brown 向谷歌员工发布了她最新的备 ...

  7. QSplat: 基于多分辨率处理大规模网格的点绘制系统(完整版翻译)

    QSplat: 基于多分辨率处理大规模网格的点绘制系统(完整版翻译) Szymon Rusinkiewicz Mark Levoy 斯坦福大学计算机图形学实验室 Rusinkiewicz,S. and ...

  8. couple和double的区别_韩剧大力女都奉顺OST MAMAMOO Double Trouble Couple完整版MV歌词翻译...

    妈妈木的甜甜曲来了!大力女都奉顺OST5MAMAMOO演唱的Double Trouble Couple完整版MV公开. 甜蜜吟唱无法避开的"Trouble"恋人,充满宠溺感令人心动 ...

  9. 图解GPT-2(完整版)!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 译者:张贤, 哈尔滨工程大学,Datawhale原创作者 干货长文,建议 ...

最新文章

  1. Leetcode题库 598.N叉树的前序遍历(递归迭代 C实现)
  2. k 最近邻_k最近邻与维数的诅咒
  3. SQL基础知识:DDL、DML、DQL
  4. python子类继承父类属性实例_Python实现子类调用父类的初始化实例
  5. Python代码—测试
  6. QtDesigner如何添加工具栏toolBar
  7. oracle数据库 bug,Oracle bug之vipca无法执行问题的解决
  8. 能ping通,TCP就一定能连通吗?
  9. cs231n-svm作业
  10. 湖北工业大学计算机学院考研资料,湖北工业大学计算机学院836数据结构历年考研真题汇编.pdf...
  11. WPS 删除线快捷键
  12. 测试开发工程师必备软硬能力高级测试开发工程师需要具备什么能力?
  13. magedu.N45019第一周作业
  14. 100个精彩的开源游戏
  15. 为什么总是封板又打开涨停_股票涨停板被反复打开,收盘又封住涨停,其实主力是这个目的...
  16. 迪赛智慧数——其他图表(盒须图):员工离职率分析
  17. java put方法_java 实现Put request
  18. Unity 事件中心
  19. Win10系统卸载照片应用程序详细介绍
  20. ORACLE中添加删除主键

热门文章

  1. YGG SEA 和 The Wasted Lands 将合作发展 P2E 游戏
  2. 动画演绎分布式共识算法Raft
  3. ip68级防水可以泡多久_IP68级防水防尘到底是什么概念
  4. c语言电梯调度算法源代码,电梯调度算法(源代码)
  5. simulink仿真,提供MBSE的无人机开发解决方案及仿真模型
  6. 如何在不同Activity或Fragment中共享数据(普通数据或ViewModel)
  7. 计算机在小学语文教学中的应用的现状,多媒体在小学低年级语文教学中的应用...
  8. 开通阿里云code,新建项目,和本地编辑器中的项目关联
  9. PowerPoint 设置横坐标日期的起止值
  10. 信息学奥赛一本通(c++):1120:同行列对角线的格