C3D-network论文笔记

article/2025/10/14 15:32:20

       前几天一直在看Faster-Rcnn源码和YOLOv3(C语言)源码,感觉时间浪费了不少,但是一个都没有看懂,总结出一句话就是:这TM写的是个啥?我为啥一个都看不懂,原理理解是一回事,看懂代码是一回事,至于自己上手敲更是另外一回事了,后来想想,我没看懂也是有道理的,因为我没有花那么多的时间去看,只看了两三天,有些代码真的不懂,也没有去深究,所有以至于整个都没有看懂,问了一个看完Faster-Rcnn的学长是怎么看完的,他说他花了将近一个月的时候。也难怪,只要花时间查,应该是能看懂的,但是我现在好像没有这么多时间去从一个比较难的网络开始,我还是从一个比较简单而又实用的网络开始我的课题吧-C3D网络。


Let's Open this paper

****************************************************************************************************************

        花了一晚上加一上午看了C3D网络的paper,说实话这个网络现在对于行为识别已经有点过时了,只是里面的3D卷积成为了经典,没有花里胡哨的连接,只有传统网络的一条路,卷积,池化,分类。我用这个网络的主要目的是用来3D医学图像分类的。

论文地址:http://vlg.cs.dartmouth.edu/c3d/c3d_video.pdf 


常用数据库

行为识别的数据库比较多,这里主要介绍两个最常用的数据库,也是近年这个方向的论文必做的数据库。

  • UCF101:来源为YouTube视频,共计101类动作,13320段视频。共有5个大类的动作:1)人-物交互;2)肢体运动;3)人-人交互;4)弹奏乐器;5)运动。数据库主页
  • HMDB51:来源为YouTube视频,共计51类动作,约7000段视频。数据库主页

在Actioin Recognition中,实际上还有一类骨架数据库,比如MSR Action 3D,HDM05,SBU Kinect Interaction Dataset等。这些数据库已经提取了每帧视频中人的骨架信息,基于骨架信息判断运动类型。不做详细介绍



1.基本介绍

本文网络设计主要是用来Action Recognition,之前有用2D-CNN网络来识别的,但是2D的不能很好的提取时间特性,所以效果也不是很好,现在我们看一下3D-CNN和2D-CNN的区别:



        首先简要介绍一下2D与3D卷积之间的区别。a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图。

      如果输入一段视频,其大小是,其中C是通道数(一般是3),,h和w分别是每帧的高和宽,3D卷积的卷积核和池化核也是3D的,很容易想象得到,就是比2D的往里扩展一个维度,所以核大小是d是核的时间深度,K*K是空间上的大小。



2.网络结构

    网络结构也特别的简单:



   8个卷几层,5个池化层,2个全连接层,然后是一个softmax(我习惯叫它"软max",怎么样,是不是很形象),这里值得注意的是作者通过大量实验证明,作者多次用到了“empirically”这个词,证明卷积大小统一是3*3*3的时候性能是最牛*的,然后给出了几个说服观众的图(好吧,我信!):

                            

        还有一个要注意的点就是池化层,作者说,池化层除了第一个是1*2*2,其余的都是2*2*2,为什么呢?我解释一下,池化层的第一个数是时间深度,如果设置成1的话,也就是在单独的每帧上面进行池化,如果大于1的话,那么就是在时间轴上,也就是多帧之间进行池化,前者是有利于在初始阶段保留时间特征,作者也用了一句话解释:


然后,后面的全连接层用了4096个输出单元。

其他信息:卷积核步长是1,输入尺寸是:,16是帧的长度,也就是一次输入16帧。

  • 数据准备: 
    • 提取片段:对于每一个训练视频,我们随机提取5个时长为2s的视频片段。
    • resized: 调整大小为128×171128×171
  • 训练阶段: 
    • 裁切(crop):将输入视频片段随机剪切为16×112×11216×112×112
    • 水平翻转:50%的概率
    • SGD with mini-batch size = 30;
    • 初始学习速率为0.003,每150K次迭代除以2.
    • 最优化过程在1.9M次 (13个周期)
    • 除了用C3D网络从头开始训练,我们同样使用在I380K上预训练的模型进行微调。



3.结果

      通过一系列操作之后,作者得到结论:


                          

在UCF101上行为识别达到85.2%,据说能达到目前已经达到96.4%


动作相似度标注-Action Similarity Labeling

                                                 

动作相似度标注问题的任务是判断给出的两段视频是否属于相同的动作。文章中使用的数据库为ASLAN。C3D的效果超过了当时的state of the art 不少。


场景识别-Scene Recognition

                                          

场景识别问题主要使用了Maryland和YUPENN,也都达到了不错的效果。


运行时间分析

下表中是C3D与其他一些算法的速度比较。其中iDT是行为识别领域的非深度学习方法中效果最好的方法,Brox指Brox提出的光流计算方法[3].

                                    

其中光流计算(GPU版本)现在的速度可以达到20-25fps,表中C3D的速度应该是在视频帧无重叠的情况下获得的。将一段16帧的视频作为一个输入,则C3D一秒可以处理约42个输入(显卡为1080, batch size选为50),换算成无重叠情况下的fps为672。可见C3D的速度还是非常快的。


4.结论

主要的研究有3点:

  1. 3D卷积网络相对于3D卷积神经网络更加适合学习时域空域(spatiotemporal)特征学习。
  2. 所有层采用3×3×33×3×3卷积核大小的网络结构能够获得最好的表现。
  3. 3D网络学习到的特征输入到简单的线性分类器(多分类线性SVM)相对于其它方法能够获得比较好的表现。

其中我认为最好的还是他的快,以及简洁的网络,很适合做成特征提取网络,对于我的3维图像的分类有很大帮助。

                                                                   谢谢大家!

参考文献:

1.微信公众号


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

相关文章

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…

Qt重定向QDebug,自定义一个简易的日志管理类

0.前言 相对于第三方的日志库,在 Qt 中使用 QDebug 打印更便捷,有时候也需要对 QDebug 输出进行重定向,如写入文件等。 在 Qt4 中使用 qInstallMsgHandler 函数设置重定向的函数指针: typedef void (*QtMsgHandler)(QtMsgType,…

qDebug 控制台输出

做个小笔记:qDebug 控制台输出 Ⅰ&#xff1a;*.pro文件中添加 win32:CONFIG console Ⅱ&#xff1a;配置项目运行设置&#xff0c;将Run in terminal 复选框打勾 Ⅲ&#xff1a;添加头文件 #include <QDebug> Ⅳ&#xff1a;用qDebug()<<"xxxx";输…

Qt ——debug调试

程序调试&#xff1a; 方法一&#xff1a;断点调试法方法二&#xff1a;使用qDebug()函数 方法一&#xff1a;断点调试法 我们可以在程序加断点&#xff0c;然后再利用单步调试查看变量的值是否异常。 1. 设置断点。 可以左击相应的代码行前的区域&#xff08;下图用红色框标…

jadx反编译—下载和使用(傻瓜教程,非常详细)

原文地址 一、在GitHub上直接下载 下载地址 可以下这个版本&#xff1a; 二、运行图形化界面 1、将zip文件解压后定位到在lib文件夹中&#xff0c;在此处打开命令行 2、运行jadx-gui-0.7.1.jar&#xff08;前提是已经装好了JDK1.8&#xff09; 命令如下&#xff1a; <sp…

Android APK 反编译工具 JADX

文章目录 JADX 介绍JADX 安装JADX 使用补充APK 目录结构含义APK 打包流程 JADX 介绍 GitHub 地址&#xff1a;https://github.com/skylot/jadx JADX 支持将 APK, dex, aar, zip 中的 dalvik 字节码反编译为 Java 代码&#xff0c;也支持反编译 AndroidManifest.xml 和 resource…

jadx-gui 重命名功能

jad-gui 是大家常用的一款反编译工具&#xff0c;其中有些小使用技巧可以帮助大家更快的“学习”知识。 安装 方法参考项目GitHub主页 重命名 最新的 1.2.0 版本支持了方法、类、字段的重命名&#xff0c;这是一个非常有用的功能&#xff0c;之前反编译出来的都是混淆后的名…