开启辅助访问
 找回密码
 立即注册

使用P3D(pseudo-3d)进行视频场景的分类

zero263 回答数15 浏览数547002
P3D models 是在论文 Learning Spatio-Temporal Representation with Pseudo-3D Residual Networks 中提出来的。
1,下载P3D的代码
  1. [/code][b]2,下载C3D的代码[/b]
  2. 因为训练P3D需要C3D中的input data layer的支撑。
  3. [code]
复制代码
3,合并P3D的代码到C3D仓库里
P3D新增的代码如下所示:
  1. [/code]合并proto文件
  2. [code]
复制代码
再删掉该proto文件中之前的message Pooling3DParameter ;
然后在该proto文件的message LayerParameter块中加入
  1. [/code]合并头文件
  2. [code]
复制代码
合并源文件
  1. [/code]删掉C3D本来存在的src/caffe/layers/pool3d_layer.cpp 、pool3d_layer.cu、pool3d_layer.hpp(因为proto中删掉了)。
  2. [b]4, 编译P3D[/b]
  3. P3D在caffe的基础上添加了额外的layer,但是编译P3D所需的依赖和caffe一模一样,编译的步骤和caffe一模一样,修改Makefile.config(注意,打开cudnn后fine-tune C3D会出现loss不下降的问题,目前Gemfield是关闭的cudnn。P3D上还没有实验),然后开始make:
  4. [code]
复制代码
编译pycaffe
  1. [/code][b]5, 下载预训练模型[/b]
  2. gemfield下载的是在Kinetics dataset上预训练的P3D模型。
  3. [code]
复制代码
6,训练
1,准备好预训练数据集、trAIn prototxt、solver prototxt,像C3D那样。
2,开始训练:
  1. [/code]下面是一些P3D的训练Log
  2. [code]
复制代码
下面是top-1的变化:
[code][/code]7,end2end
yin14506 | 未知
感谢博主的分享!
您好,在源码的github中并没有发现有关训练的train.prototxt 和 solver.prototxt, 请问您时自己写的prototxt文件吗?
用Deepseek满血版问问看
回复
使用道具 举报
yikingkay | 未知
train的话,input和c3d一样
回复
使用道具 举报
winwaysh | 未知
因为训练P3D需要C3D中的input data layer的支撑。
git clone https://github.com/BVLC/caffe.git不是caffe.git 吧,应该是c3d.git
回复
使用道具 举报
素约坊 | 未知
感谢博主的分享,求教一下,C3D的训练输入数据就是整个视频加label,p3d也是这样么,想要用作者提供的网络结构来训练,是要先在data层加上source和放均值文件的地方吗?
回复
使用道具 举报
corol | 未知
p3d复用了c3d的input layer,所以,输入是一样的
回复
使用道具 举报
飞鱼传说 | 未知
那c3d的输入数据是如何处理的呢?每16帧图片处理为一个二进制文件吗?在c3d1.1的example/c3d_ucf101_training中,lst文件的给定方式是 视频文件夹  帧索引(%16=1的帧) 类别号,p3d的lst文件也是处理成这个样子吗?
回复
使用道具 举报
nfeng11 | 未知
c3d支持输入为图片或者视频,这个在input layer对应的Caffe class中有实现,通过layer的参数来控制,比如image:True。P3D复用的同一个input layer的class,所以一样
回复
使用道具 举报
波子寿司 | 未知
还有一个问题想请教一下您,我最后采用的设置是,batch size为10,一次传入8帧,因此输入数据的维度为10*3*8*160*160,到了pool5层的输出为10*2048*1*1,目测10仍旧是batch size,2048是channels,后面的两个1是代表着什么呢?
回复
使用道具 举报
贲鹰杂牢 | 未知
跟 160*160 一样,是特征图的大小变成了 1*1 的。忽略掉 batch_size 这个维度,2048*1*1 实际上等价于长度是 2048 的一维向量, pooling 层后面接着的是 fc 层, fc 作用可以理解为把长度为 1*M 的向量 通过 M*N 的矩阵 变成 N*1 的向量(N 是分类的类别数),只是实际操作的时候都是在 4 维的空间里进行 2 维的运算,原理还是一样的。
回复
使用道具 举报
12下一页
快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影