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

article/2025/10/14 17:02:12

C3D

文章目录

    • C3D
      • 1. 简介
        • 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. 简介

论文:https://arxiv.org/abs/1412.0767v4

github

原代码:https://github.com/facebook/C3D

TensorFlow:https://github.com/hx173149/C3D-tensorflow

1.1 背景

卷积神经网络(CNN)被广泛应用于计算机视觉中,包括分类、检测、分割等任务。

这些任务一般都是针对图像进行的,使用的是二维卷积(即卷积核的维度为二维)。而对于基于视频分析的问题,2D convolution不能很好得捕获时序上的信息,因此3D卷积就被提出来了。

3D卷积 最早应该是在 《3D convolutional neural networks for human action recognition》 这片论文中被提出并用于行为识别的,而C3D是作为一个通用的网络提出的,论文中将其用于行为识别,场景识别,视频相似度分析等领域。

1.2 C3D特点

  1. 3D ConvNets比2D ConvNets更适用于时空特征的学习
  2. 对于3D ConvNet而言,在所有层使用3×3×3的小卷积核效果最好
  3. 通过简单的线性分类器学到的特征名为C3D(Convolutional 3D),在4个不同的任务和6个基准上表现优秀,在2015年达到SOTA
  4. 特征紧凑:在UCF101数据集上得到52.8%的准确率只用了10维(PCA+SVM)
  5. 推断快,计算效率非常高,在论文中实验时就有300帧以上的FPS,使用 NVIDIA 1080 GPU 能达到600帧以上
  6. 概念简单,易于训练和使用

1.3 视频描述符

一个有效的视频描述符有四个属性:

  1. 通用性。可以表示不同类型的视频,同时具有可区分性。例如,网络视频可以是自然风光、运动、电视节目、电影、宠物、食物等
  2. 描述符必须是紧凑的。由于我们需要处理数百万的视频,一个紧凑的描述符有助于处理,存储和检索任务,更具可扩展性;
  3. 计算高效。因为在现实世界中,每一分钟都需要处理成千上万的视频;
  4. 实现简单。不使用复杂的特征编码方法和分类器,一个好的描述符即使是一个简单的模型(如线性分类器)也能很好地工作。

而C3D是好的描述符:通用、紧凑、简单、高效

C3D描述符,就是C3D网络第一个全连接层(fc6)输出的特征经过L2标准化后的结果。

1.4 C3D的结果



比较C3D与最好的公开结果。在一系列的基准上,C3D优于所有先前最好的报告方法,除了Sports-1M和UCF101。

在UCF101中,有2组方法:

  1. 只使用了RGB帧作为输入
  2. (括号里)使用了可能的特征(如:光流、改进的密集轨迹)

2. 架构

2.1 工作流程

数据集:Sports-1M

训练

  1. 从每个训练视频中随机取出2秒长的5个片段,调整帧大小为128*171(大约为UCF-101一半分辨率)
  2. 随机裁剪成 16x112x112 的片段(shape:[ N, C, nframe, H, W ] -> [ N, 3, 16, 112, 112 ],16帧片段非重叠),形成抖动,以 50%的概率随机翻转
  3. 使用SGD优化器,batch size为30,初始学习率为0.003,每150K次迭代除以2,优化在1.9M迭代(约13epochs)停止

2.2 网络结构



基于不强的算力而设计的网络(C3D):8个卷积层、5个池化层、两个全连接层,以及一个softmax输出层

  1. 所有3D卷积核均为3×3×3(d x k x k ,d为时间深度),步长为1×1×1
  2. 为了在早期阶段保留更多的时间信息,设置pool1核大小为1×2×2、步长1×2×2(时间深度为1时,会单独在每帧上进行池化,大于1时,会在时间轴上,也就是多帧之间进行池化)
  3. 其余所有3D池化层均为2×2×2,步长为2×2×2
  4. 每个全连接层有4096个输出单元

2.3 3D卷积和池化



3D卷积和池化更适合学习时空特征,通过3D卷积和3D池化,可以对时间信息建模,而2D卷积只能在空间上学习特征。

2D卷积输入图像和视频时,输出的都是图像,而3D卷积输入视频后,输出的也是一个视频(3D特征图),保留了输入的时间信息。

C3D网络将完整的视频作为输入,不依赖于任何处理,可以轻松扩展到大数据集。

2.4 kernel 的时间深度



设计实验对比:

设置了4种固定尺寸的3D卷积核(左图),分别为1×3×3 、3×3×3、5x3x3、7x3x3,表明 3×3×3结果最优。

设置3种对比的网络结构,不同层的3D卷积核的时间深度分别为:

  1. 时间深度不变: 3−3−3−3−3
  2. 时间深度递增:3−3−5−5−7
  3. 时间深度递减:7−5−5−3−3

表明当卷积网络中所有的3D卷积核的时间深度一致,都为3×3×3时,效果最优。

综上:3x3x3 卷积核效果最优。

3. 可视化

3.1 特征图



使用反卷积的方法来了解C3D内部的学习,上图为conv5b特征映射图的反卷积,最大的激活投射回图像空间的图像。

第一个例子中,特征集中在整个人身上,然后跟踪其余帧上撑杆跳表演的运动。

第二个例子中,它首先关注眼睛,然后在化妆的同时跟踪眼睛周围发生的运动。

也就是说,C3D在跟踪图像的外观特征,和视频中的运动特征,论文中有更多可视化的例子。

3.2 特征嵌入



这张图上,每一个clip为一个点,同一类别具有相同颜色。

通过从UCF-101中随机取100k个视频片段,再分别取ImageNet和C3D的特征提取片段的fc6特征,用 t-SNE 降维到2维空间进行可视化。

可以看到C3D的各类别之间更有区分度、更紧凑,并且这里没有做微调,表明其有良好的泛化能力。

4. 应用场景

4.1 动作识别

数据集:UCF-101

模型:使用C3D提取特征输入多类线性SVM

结果:C3D达到SOTA,表中为网络的一些组合和比较:

C3D (3 nets) + linear SVM 表示三组C3D的fc6同时并联,与SVM结合后能提高预测精度



4.2 动作相似度标注

动作相似度标注问题的任务是判断给出的两段视频是否属于相同的动作。

数据集:ASLAN(432个动作类的3,631个视频组成)

特征:将视频分为重叠8帧的16帧片段,提取每个片段的C3D特征,分别平均每个种类的片段特征,再L2归一化



结果:在ASLAN上,C3D做到了SOTA,在ROC曲线(AUC)下显著优于最先进的方法

4.3 场景和目标识别

数据集:Maryland(14个场景类别的420个视频) 和 YUPENN(13个场景类别的130个视频)

模型:相同的特征提取体系和线性SVM进行分类

结果:同样优于其他方法,在当时做到SOTA



4.4 运行时间分析



如表所示,在推理速度上,C3D显著优于其他算法,iDT是行为识别领域的非深度学习方法中效果最好的方法,Brox指Brox提出的光流计算方法。

表中C3D的速度应该是在视频帧无重叠的情况下获得的,在NVIDIA 1080 的GPU上,可以达到600帧以上的速度。


http://chatgpt.dhexx.cn/article/9Ti2GmOR.shtml

相关文章

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;之前反编译出来的都是混淆后的名…

Android 反编译神器jadx的使用

一、前言 今天介绍一个非常好用的反编译的工具 jadx 。jadx 的功能非常的强大&#xff0c;对我而言&#xff0c;基本上满足日常反编译需求。 jadx 优点&#xff1a; 图形化的界面。拖拽式的操作。反编译输出 Java 代码。导出 Gradle 工程。 这些优点都让 jadx 成为我反编译…

jadx工具windows下载

Release v1.2.0 skylot/jadx GitHubDex to Java decompiler. Contribute to skylot/jadx development by creating an account on GitHub.https://github.com/skylot/jadx/releases/tag/v1.2.0选择第三个jadx-gui-1.2.0-with-jre-win.zip解压exe可正常使用

jadx反编译—下载和使用

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

jadx初识

一.jadx介绍 一款相对流行的反编译工具 下载&#xff1a;https://github.com/skylot/jadx/releases/tag/v1.0.0 解压后得到这么几个文件&#xff1a; 启动&#xff1a;&#xff08;以下来两个文件都可以&#xff09; 启动后的界面&#xff1a; 二.使用 打开之后&#xff0c;你可…

反编译工具之jadx

反编译神器之 - jadx git网址&#xff1a; https://github.com/skylot/jadx简介 首先推荐功能强大的jadx&#xff0c;官方网站为&#xff1a;https://github.com/skylot/jadx&#xff0c;可以直接在releases页面下载其最新版&#xff0c;解压即可使用。 安装 Windows下安装 …

Android 反编译工具 jadx-gui

jadx-gui 是一种基于 jadx 项目的图形界面工具&#xff0c;用于反编译 Android 应用程序的工具。通过使用jadx-gui&#xff0c;开发人员可以打开 APK&#xff08;Android应用程序包&#xff09;文件&#xff0c;并查看其反编译的源代码。这对于分析、理解和调试 Android 应用程…

jadx工具介绍及使用

往期推荐 签名校验之“xx银行” Jeb调试ctf(破解密码 Crack the key) ”川报观察“协议分析(抓不到包) 实战分析43XX的HTTPS协议 需要相关资料的朋友&#xff0c;可以【加入此处即可打包获取】 jadx工具是一款反编译利器&#xff0c;同时支持命令行和图形界面&#xff0c…

Java jar反编译工具 jadx

jadx 支持 Windows、Linux、 macOS 项目下载地址 https://github.com/skylot/jadx/releases 按需下载 1.下载zip解压后&#xff0c;进入 bin 目录即可找到执行脚本 jadx&#xff1a;命令行版本 jadx-gui&#xff1a;图形操作界面版本2.下载exe本地双击运行&#xff0c;将…

kali Linux 逆向环境pyenv、Frida、objection、jadx、的安装

目录 1.pyenv安装和使用 1.1pyenv 简介 1.2pyenv 常用命令 1.3pyenv安装和使用 2.Frida安装 2.1Fraida简介 2.1Fraida安装 2.2objection安装 2.3objection常用命令 查看日志 查看包含Frida的日志信息 查看objection的帮助命令 2.3.0进入objection REPL环境 2.3.1直接…