C3D网络笔记

article/2025/10/14 15:04:15

C3D网络

论文链接
论文翻译

该论文发现:

1、3D ConvNets比2D ConvNets更适用于时空特征的学习;

2、对于3D ConvNet而言,在所有层使用3×3×3的小卷积核效果最好;

3、我们通过简单的线性分类器学到的特征名为C3D(Convolutional 3D),在4个不同的基准上优于现有的方法,并在其他2个基准上与目前最好的方法相当。

论文的主要贡献

  • 我们的实验表明3D卷积深度网络是好的学习器,可以对外观和运动同时建模。

  • 我们的经验发现,在有限的探究框架中,所有层使用3×3×3卷积核效果最好。

  • 在4个任务和4个基准上,提出的特征通过简单的线性模型可以超过或接近目前最好的方法(见下表)。这些特征紧凑、计算高效。
    image

该方法我们将整个视频作为输入。

3D卷积联和3D池化

与2D ConvNet相比,3DConvNet能够通过3D卷积和3D池化操作更好地建模时间信息。在3D ConvNets中,卷积和池化操作在时空上执行,而在2DConvNets中,它们仅在空间上完成。所以在第一次使用2D卷积和池化后,就失去其时间信息。下图为2D卷积和3D卷积的对比:
image

由经验和大量的实验发现3*3的卷积产生较好的效果,所以论文中都使用用3*3大小的卷积核,而后面对卷积核大小的研究主要集中在不同的深度上。

为了简单起见,从现在开始,我们将视频片段尺寸定义为c×l×h×w,其中c是通道数,l是帧数的长度,h和w分别是帧的高度和宽度。我们还将3D卷积和池化核大小指向d×k×k,其中d是核的时间深度,k是核的空间大小。

网络设置:将视频分割成非重叠的16帧作为网络的输入,将视频帧的大小调整为128×171,所以输入尺寸为:3×16×128×171。在训练期间用输入大小为3×16×112×112的随机裁剪来模拟抖动。网络具有5个卷积层和5个池化层(每个卷积层紧随其后的是池化层),2个完全连接的层和softmax损耗层以预测动作标签(ucf101数据集的101个类别)。对于5个卷积层,从1到5卷积层的滤波器数量分别为64,128,256,256,256。
所有卷积层都使用padding和步长为1,所以从卷积层的输入到输出特征图的大小没有改变。所有的池化层(除第一层)都是用2×2×2、步长为1的最大池化。。第一个池化核大小为1×2×2,其意图是不能太早地合并时间信号,并且也能够满足16帧的片段长度,两个全连接层有2048个输出。我们从头开始使用30个片段的小批量训练网络,初始学习率为0.003。学习率在每4个周期之后除以10。训练在16个周期之后停止。

为寻找一个好的3D卷积核,我们保持上面的通用策略,只改变卷积核的深度,我们尝试了两种策略:1)均匀时间深度:所有卷积核具有相同的时间深度;2)变化的时间深度:不同层的卷积核时间深度不同。对于均匀设置,我们试验了具有d=1,3,5,7的时间深度的4个网络。我们将这些网络命名为depth-d,其中d是其均匀时间深度。请注意,depth-1网络相当于在单独的帧上应用2D卷积。对于变化的时间深度设置,我们分别从第一到第五卷积层试验了两个网络,时间深度增加的:3-3-5-5-7和时间深度增加减少的:7-5-5-3-3。

下图为两种策略的实验结构:image
可以看出在均匀的策略中Depth-3表现最好。将Depth-3与变换的策略对比发现还是Depth-3效果更好。我们把它应用于视频分类中效果也要好于二维卷积,我们还验证了3D ConvNet在大规模内部数据集(即I380K)上的性能优于2D ConvNet。

时空特征学习

上一节的发现表明,3×3×3卷积核的均匀设置是3DConvNets的最佳选择,所以我们设计了C3D网络,他具有8个卷积层、5个池化层、两个全连接层,以及一个softmax输出层。所有3D卷积滤波器均为3×3×3,步长为1×1×1。为了保持早期的时间信息设置pool1核大小为1×2×2、步长1×2×2,其余所有3D池化层均为2×2×2,步长为2×2×2。每个全连接层有4096个输出单元。其结构图为:image

数据集:在Sports-1M数据集上训练C3D,学习时空特征。

训练:在Sports-1M训练集上进行训练。由于Sports-1M有许多长视频,我们从每个训练视频中随机提取出2秒长的五个片段。片段调整帧大小为128×171。在训练中,我们随机将输入片段裁剪成16×112×112片段,对于空间和时间抖动。 我们也以50%的概率水平翻转它们。训练由SGD完成,batch size为30。初始学习率为0.003,每150K次迭代除以2。优化在1.9M迭代(约13epochs)停止。除了从头开始训练C3D外,我们还从在I380K上预先训练的模型中对C3D网进行了微调。

分类结果:下图是C3D与DeepVideo和Convolutiopooling的比较结果。我们每个片段只使用一个中心裁剪,然后放入网络进行片段预测。整个视频的预测,由对视频中随机提取的10个片段的预测进行平均得到。DeepVideo和C3D使用短片段,而Convolution pooling使用更长的片段。
image

C3D描述符:将输入视频分成若干16帧的片段,相邻片段之间由8帧重叠,将这些片段输入到训练好的网络中,将得到的若干组fc6层的输出平均形成4096维视频描述符。

动作识别

分类模型:我们使用3个不同网络的C3D描述符进行试验:在I380K上训练的C3D,在Sports-1M上训练的C3D,以及在I380K上训练并在Sports-1M上进行微调的C3D。,然后将3个网络得到的描述符分别放入SVM中。

基准:我们将我们网络的描述符和IDT和imagenet网络得到的描述符分别放入SVM中比较各自效果。下图显示了与两个基准相比较的C3D的动作识别准确度和当前最佳方法。上面部分显示了两个基准的结果。中间部分显示了仅使用RGB帧作为输入的方法。而下面部分报告了使用所有可能的特征组合(例如光流,iDT)的所有当前最佳方法。
image

C3D提取的特征是紧凑的 :我们将imageenet、idt、c3d网络提取的特征用pca进行降维,然后将这些特征放入svm进行识别,分别得到各个维度的识别精度,如下图所示,可以看出,C3D是紧凑的。

image

下图为从UCF101随机选择100K个片段,然后分别通过imagenet和C3D的特征来提取这些片段的fc6特征,然后通过t-SNE将特征投影到二维空间的图片,而且我们并没对这两个网络进行微调,以此来看他们的跨数据集的泛化能力。

image

运动时间分析

我们比较C3D和iDT和时间流网络的运行时间,如下图所示。

image

结论

论文进行了系统的研究,以找到3DConvNets的最佳时间核长度。展示了C3D可以同时对外观和运动信息进行建模,在各种视频分析任务上优于2DConvNet特征。展示了具有线性分类器的C3D特征可以在不同的视频分析基准上胜过或接近现行的最佳方法。最后,提出的C3D特征是高效的、紧凑的、使用非常简单的。


http://chatgpt.dhexx.cn/article/Z71Uu4og.shtml

相关文章

《Action Recognition》-Learning Spatiotemporal Features with 3D Convolutional Networks(C3D)

《Action Recognition》-Learning Spatiotemporal Features with 3D Convolutional Networks(C3D) 目录 《Action Recognition》-Learning Spatiotemporal Features with 3D Convolutional Networks(C3D)ContributionsFrameworkResultConclusion Contributions We experimenta…

使用C3D的一些问题(2)

使用C3D的resume功能时,报错RuntimeError: expected device cpu but got device cuda:0 报错位置在optimizer.step()。原因是optimizer加载参数时,tensor默认在CPU上,故需将所有的tensor都放到GPU上。 解决方案: 在这一段代码后面加入 for st…

3D卷积入门 | 多论文笔记 | R2D C3D P3D MCx R(2+1)D

文章转自微信公众号:【机器学习炼丹术】。有问题或者需要加入粉丝交流群可以私信作者~ 文章目录 0 前言1 R2D2 C3D2.1 R3D 3 P3D4 MCx5 R(21)D 【前前沿】:某一次和粉丝交流的时候,收获一句话: 人点亮技能书,不是一次…

基于pytorch实现的视频分类——C3D模型论文复现

最近在学习视频分类任务,想要跑通一个更换数据集用到自己的课题上。 看到了这篇文章及代码 论文链接:http://vlg.cs.dartmouth.edu/c3d/c3d_video.pdf 代码链接:https://github.com/jfzhang95/pytorch-video-recognition 贴一下学习这个代…

我的一些视觉工具(1)之动作预测--逐行详解C3D代码(Pytorch)

该博客主要参考这个工程提供的代码 我们在他们代码的基础之上进行魔改 当然了,既然要魔改人家的数据,肯定要先把人家的思路看明白。 对于3D神经网络来讲,好多小伙伴最关心的肯定还是数据的喂入方法和数据集的格式喽。 下第一个部分就是详细第…

C3D-network论文笔记

前几天一直在看Faster-Rcnn源码和YOLOv3(C语言)源码,感觉时间浪费了不少,但是一个都没有看懂,总结出一句话就是:这TM写的是个啥?我为啥一个都看不懂,原理理解是一回事,看…

c3d代码

##c3d代码 原文链接:https://blog.csdn.net/ZJRN1027/article/details/80199248 cross_entropy_mean tf.reduce_mean( tf.nn.sparse_softmax_cross_entropy_with_logits(labelslabels,logitslogit) ) tf.summary.scalar( name_scope ‘_cross_entropy’, cross_en…

【C3D代码运行步骤】

1. 克隆或者下载项目 方法一:在github上直接下载项目:项目地址 方法二:使用git克隆(推荐),相关内容参考Git的安装及github远程仓库ssh连接 git clone https://github.com/Niki173/C3D.git https://github.com/jfzhan…

行为识别C3D代码(pytorch)实现过程及常见错误

行为识别C3D代码(pytorch)实现过程及常见错误 1.C3D网络代码 C3D(pytorch)实现代码链接: C3D代码 2.C3D代码复现过程 (1)环境版本要求 pytorch:3.5及以上 opencv:3.4.2(我是这样…

C3D的视频分类

很久之前做了C3D的视频分类,现在详细把整个项目的细节描述一下。 首先介绍一下C3D:对于一段视频来说,它是连续的帧图像叠加起来的,所以可以考虑在生成通道图像的时候,把多帧图像叠加的特性讨论进去。 一个视频段输入&…

C3D源码解读(基于3D卷积的动作识别)

UCF数据集下载地址:https://www.crcv.ucf.edu/data/UCF101.php 1.推理效果与项目配置 执行inference.py,需要指定3个参数,第一个是标签文件地址,存储了各个标签的含义,第二个是权重文件地址,第三个是要进行推理的视频…

C3D代码总结(Pytorch)

C3D代码总结(Pytorch) github:https://github.com/Niki173/C3D 介绍数据介绍文件介绍具体操作流程运行结果 介绍: 本次C3D模型用的是pytorch框架,我们在UCF101和HMDB51数据集上训练这些模型,本次实验以U…

C3D论文笔记

论文链接:http://vlg.cs.dartmouth.edu/c3d/c3d_video.pdf 代码链接:https://github.com/jfzhang95/pytorch-video-recognition 1. C3D是什么? C3D,全称Convolutional 3D,即3D卷积。3D卷积方法是把视频划分成很多固定…

C3D网络介绍

1. 模型简介 C3D模型广泛用于3D视觉任务。C3D网络的构造类似于常见的2D卷积网,主要区别在于C3D使用像卷积3D这样的3D操作,而2D卷积网则是通常的2D架构。要了解有关C3D网络的更多信息,您可以阅读原始论文学习3D卷积网络的时空特征。 3D卷积图…

视频分析模型(行为识别):C3D

C3D 文章目录 C3D1. 简介1.1 背景1.2 C3D特点1.3 视频描述符1.4 C3D的结果 2. 架构2.1 工作流程2.2 网络结构2.3 3D卷积和池化2.4 kernel 的时间深度 3. 可视化3.1 特征图3.2 特征嵌入 4. 应用场景4.1 动作识别4.2 动作相似度标注4.3 场景和目标识别4.4 运行时间分析 1. 简介 …

C3D论文精读

论文地址:https://vlg.cs.dartmouth.edu/c3d/c3d_video.pdf Abstract 作者的研究结果有三个方面: 1)与二维相比,三维卷积网更适合时空特征学习;2)所有层具有333的小卷积核的同构架构是3D卷积网的最佳架构之一;3)学习到的特征&am…

基于C3D网络的视频分析与动作识别

卷积神经网络(CNN)被广泛应用于计算机视觉中,包括分类、检测、分割等任务。这些任务一般都是针对图像进行的,使用的是二维卷积(即卷积核的维度为二维)。而对于基于视频分析的问题,2D convolutio…

《QDebug 2022年12月》

一、Qt Widgets 问题交流 二、Qt Quick 问题交流 1、在 C 中关联 QQuickWindow 的 closing 信号提示 "使用了未定义类型QQuickCloseEvent" 因为 closing 信号中的参数类型是 private 模块中定义的,但是通过第二句提示我们知道找到了完整定义才能使用 Q_…

4.4 案例8 用qDebug()输出信息

本案例对应的源代码目录:src/chapter04/ks04_04。 在开发C/S(Client/Server,客户端/服务端)模式的软件时,服务端程序(有时也称作服务)经常运行在两种模式下。 (1)终端模…

Qt扫盲-QDebug理论总结

QDebug理论使用总结 一、概述二、使用1. 基础使用2. 格式化选项3.将自定义类型写入流 一、概述 每当开发人员需要将调试或跟踪信息写入设备、文件、字符串或控制台时,都会使用QDebug。这个就可以方便我们调试,基本上Qt所有的内容都能通过调试打印出来&a…