C3D Introduction

卷积神经网络(CNN)近年被广泛应用于计算机视觉中,包括分类、检测、分割等任务。这些任务一般都是针对图像进行的,使用的是二维卷积(即卷积核的维度为二维)。而基于视频的问题,提特征的方法主要分为双流和C3D两个分支,目前C3D衍生出P3D,I3D等等,这里只介绍最早的C3D caffe版提取特征的步骤以及遇到的问题。

C3D 用caffe实现
官网
github

C3D Installation

installation

C3D User Guide

官方User Guide

Du Tran (Last modified Mar , )
C3D-v1. is released with new models (Mar , ).
No documentation for v1. yet, but some examples for feature extraction, training, and fine-tuning are provided. 

文档介绍了C3D 1.0的用法,至于1.1,只有examples。

I.C3D Feature Extration

  1. 安装好C3D,下载预训练的模型,保存到

    YOUR_PATH_TO_C3D/C3D-master/C3D-v1./examples/c3d_feature_extraction
  2. change dir to

    YOUR_PATH_TO_C3D/C3D-master/C3D-v1./examples/c3d_feature_extraction
  3. Run:

    sh c3d_sport1m_feature_extraction_frm.sh
    or
    sh c3d_sport1m_feature_extraction_video.sh

运行成功将在output文件夹找到特征文件。

遇到“out of memeory”内存不足的错误,调整min_batch_size参数。参见章节 I.B。

如能使用图片输入,不能使用视频输入。请确保编译OpenCV和ffmpeg时”shared-flags”为”on”。

I.A Extract C3D features for your own videos or frames

a.准备输入文件

输入为视频或视频帧
对于视频文件,由于使用opencv获得帧,帧数从0开始。
对于视频帧,命名为“video_folder/%06d.jpg”,帧数从1开始。一个文件夹最多999999个帧,如果视频超出999999帧,需要分成多个文件夹。

b.准备配置文件(具体可以参考默认的两个例子修改)

两个设置选项:输入列表(input_list) 和 输出前缀(output_prefix)
在example中,输入列表的配置文件为: “prototxt/input_list_video.txt”和”prototxt/input_list_frm.txt”。

input_list文件需要制定输入的列表,格式为每行制定一个输入。每行的格式为

<string_path> <starting_frame> <label>

input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/
input/frm/v_ApplyEyeMakeup_g01_c01/

“string_path”: 为路径,对视频,为视频路径和文件名;对frames,是包含视频帧的目录路径。
“starting_frame”: C3D能从长为16帧的视频中提取特征。一个视频包含了大量的帧,我们需要指定C3D从哪一帧开始提取特征。例如上面例子中的视频一共有165帧,那么最后一行对应的145帧开始提取特征,取16帧,使用145帧-161帧的数据。在这里如果取用的帧的编号超过总帧数165,则会报错,要注意这一点。
“label”: 这个仅对训练、测试、调优起作用,提取特征的时候会被忽略,设置为0。

output_prefix文件要为每一个输入指定一个输出前缀。即行数与input_list一致。每行的格式为:
<output_prefix>

C3D将特征输出到 output_prefix.[feature_name]文件(例如prefix.fc6)。为了与输入对应,输出建议采用如下格式`sprintf(“output_folder/%06d”, starting_frame)。

c.提取特征

在prototxt中,通过后缀名为.prototxt的文档来指向你的输入列表文件。
主要修改这两行:

source: “prototxt/input_list_video.txt”

use_image: false
shuffle: false

source 修改为输入列表文件
如果使用图像文件,use_image修改为true。
提取特征时确保shuffle为false。
(.prototxt文件第一行是name,接下来是若干个layer,layer用json表示,我们只需要修改第一个输入layer。)

mean_file: "sport1m_train16_128_mean.binaryproto"

这里是使用的均值文件的路径,根据所使用的模型生成或选择均值文件即可

另外也可根据需求修改其他参数。

接下来使用extract_image_features工具来提取特征。

该工具使用的参数如下

  1. 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文件,指向input_list_file,如prototxt/c3d_sport1m_feature_extractor_video.prototxt是demo所使用的prototxt文档

  • c3d_pre_trained_model:

    下载的C3D预训练模型,如conv3d_deepnetA_sport1m_iter_1900000

  • gpu_id:

    GPU ID,从0开始。设为-1则使用CPU

  • mini_batch_size:

    批处理大小。默认值为50。根据GPU的性能修改。

  • number_of_mini_batches

    批处理数量。

    如果有100个clips,<mini_batch_size>设置为50,则<number_of_mini_batches>为2。

    如果有101个clips,<mini_batch_size>设置为50,则<number_of_mini_batches>为3。

    (就是ceil除法嘛)

  • output_prefix_file:

    输出前缀文件

  • feature_name1:

    特征名。(参见.prototxt文件的layers, 如 fc6-1, fc7-1, fc8-1, pool5, conv5b, prob,…)

example中的命令行如下:

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

其他注意事项

输出的特征文件所保存的路径必须自己生成,C3D不会创建文件夹

如果提示“out of memory” 可以尝试减小batch size

提取的特征是二进制文件,需要进行格式转换才能正常处理

其他的注意事项可以参考官方的用户指南

问题及解决方法:

1. 运行成功但无法得到输出特征

完全按demo的路径配置一遍即可

2. 使用多batch提大量视频的特征

F0914 17:45:44.359544 287137792 video_data_layer.cpp:123] Check failed: read_status Testing must not miss any example

暂时的解决办法是设batchsize为1,将input_list和output_prefix切分为batch大小,一次一batch跑

 frame_num=
for((i=;i<=frame_num;i=i+))
do
j=
num=$(($i+$j))
sed -n ''$i','$num'p' prototxt/input_list_frm.txt > prototxt/tmp_input_list_frm.txt
sed -n ''$i','$num'p' prototxt/output_list_prefix.txt > prototxt/tmp_output_list_prefix.txt
GLOG_logtosterr= ../../build/tools/extract_image_features.bin prototxt/c3d_sport1m_feature_extractor_frm.prototxt conv3d_deepnetA_sport1m_iter_1900000 prototxt/tmp_output_list_prefix.txt fc6-
done

参考:

https://annazhou.github.io/2015/12/09/c3d/

https://www.cnblogs.com/yaoyaoliu/p/6929234.html

提取C3D视频特征(官方文档&实践)的更多相关文章

  1. SolrJ API 官方文档最佳实践

    以下内容译自Solr Wiki官方文档,版权没有,随意转载. Solrj 是一个访问solr的Java客户端.它提供了一个java接口用于添加更新和查询solr索引.本页面介绍SolrJ最新版本1.4 ...

  2. hbase官方文档(转)

    FROM:http://www.just4e.com/hbase.html Apache HBase™ 参考指南  HBase 官方文档中文版 Copyright © 2012 Apache Soft ...

  3. HBase官方文档

    HBase官方文档 目录 序 1. 入门 1.1. 介绍 1.2. 快速开始 2. Apache HBase (TM)配置 2.1. 基础条件 2.2. HBase 运行模式: 独立和分布式 2.3. ...

  4. 一起学微软Power BI系列-官方文档-入门指南(4)Power BI的可视化

    在前面的系列文章中,我们介绍了官方有关获取数据,以及建模的原始文档和基本介绍.今天继续给大家介绍官方文档中,有关可视化的内容.实际上获获取数据和建模更注重业务关系的处理,而可视化则关注对数据的解读.这 ...

  5. spring官方文档中文版

    转 http://blog.csdn.net/tangtong1/article/details/51326887 spring官方文档:http://docs.spring.io/spring/do ...

  6. 《KAFKA官方文档》入门指南(转)

    1.入门指南 1.1简介 Apache的Kafka™是一个分布式流平台(a distributed streaming platform).这到底意味着什么? 我们认为,一个流处理平台应该具有三个关键 ...

  7. 《Apache Velocity用户指南》官方文档

    http://ifeve.com/apache-velocity-dev/ <Apache Velocity用户指南>官方文档 原文链接   译文连接 译者:小村长  校对:方腾飞 Qui ...

  8. 转 spring官方文档中文版

    转 http://blog.csdn.net/tangtong1/article/details/51326887另附码云地址 https://gitee.com/free/spring-framew ...

  9. 《Spring 5官方文档》 Spring AOP的经典用法

    原文链接 在本附录中,我们会讨论一些初级的Spring AOP接口,以及在Spring 1.2应用中所使用的AOP支持. 对于新的应用,我们推荐使用 Spring AOP 2.0来支持,在AOP章节有 ...

随机推荐

  1. [模板] 笛卡尔树 && RMQ

    话说我noip之前为什么要学这种东西... 简介 笛卡尔树(Cartesian Tree) 是一种二叉树, 且同时具有以下两种性质: 父亲节点的值大于/小于子节点的值; 中序遍历的结果为原序列. 笛卡 ...

  2. LOJ #2731. 「JOISC 2016 Day 1」棋盘游戏(dp)

    题意 JOI 君有一个棋盘,棋盘上有 \(N\) 行 \(3\) 列 的格子.JOI 君有若干棋子,并想用它们来玩一个游戏.初始状态棋盘上至少有一个棋子,也至少有一个空位. 游戏的目标是:在还没有放棋 ...

  3. Java多线程、线程池和线程安全整理

    多线程 1.1      多线程介绍 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 1.2      Thread类 通 ...

  4. GO 基础

    基本语法练习 打印 乘法表 package main import ("fmt") func main(){ for n:=1;n<=9;n++{ for m:=1;m< ...

  5. [家里蹲大学数学杂志]第057期图像复原中的改进 TV 模型

    $\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 6.2 节的详细论述. $\bf 关键词$: 图像复原; TV 模型; matlab 编程 1. 前言 图像在形 ...

  6. 调用腾讯、百度翻译API,实现游戏机翻通用程序

    最近玩了款steam独立游戏,没中文,只能自己汉化了,用腾讯跟百度的API实现了一个通用的机翻程序(只需要导入JSON文本), 同样,比较懒,还没写,先占坑

  7. updateXML 注入 python 脚本

    用SLQMAP来跑updateXML注入发现拦截关键字,然后内联注入能绕,最后修改halfversionedmorekeywords.py脚本,结果SQLMAP还是跑不出来.>_< hal ...

  8. laravel5.4 导出 Excel 表格

    1.执行 composer require maatwebsite/excel 2. composer.json 文件出现(或者手动添加) 3.在config目录下 app.php 添加参数 4.导出 ...

  9. crowdstrike提供的应急响应工具

    下载链接 https://www.crowdstrike.com/resources/community-tools/ CROWDSTRIKE防病毒资源监视器 CrowdStrike Antiviru ...

  10. if 语句中的判断

    经常写shell的朋友可能已经很熟了.有不同意见的同学请指出来,在这里多谢大家了. bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式: ...