S3D算法详解

S3D算法详解S3D 论文详解论文地址 RethinkingSp Speed AccuracyTrad offsinVideoC 代码地址 pytorch 非官方 https github com kylemin S3D 文章是谷歌发表于 ECCV2018 为了平衡视频理解算法精度和速度 提出了 S3D 这个视频理解网络 文章首先提出了下列问题 是否需要 3D 卷积 如果是 哪些层需要是 3D 卷积哪些可以是 2D 卷积 这些操作会

S3D论文详解

论文地址:Rethinking Spatiotemporal Feature Learning: Speed-Accuracy Trade-offs in Video Classification

代码地址(pytorch非官方):https://github.com/kylemin/S3D

文章是谷歌发表于ECCV2018,为了平衡视频理解算法精度和速度,提出了S3D这个视频理解网络。

文章首先提出了下列问题:

  1. 是否需要3D卷积?如果是,哪些层需要是3D卷积哪些可以是2D卷积?这些操作会和测试的数据有关吗?
  2. 是否需要将时空信息同时进行卷积操作,或者说是否可以时间信息和空间信息分别提取?
  3. 如果在之前的工作上,增加模型的准确率和速度,同时减小显存占用?

对应上述问题,文章给出的做法:

  1. 文章在I3D模型的基础上,提出了两种I3D的变式。一种是Bottom-Heavy-I3D,这种模型就是保持低层卷积(靠近图片输入的层)为3D卷积,高层卷积为2D卷积。还有一种称为Top-Heavy-I3D,这种模型就是保持高层卷积(靠近模型输出的层)为3D卷积,低层卷积为3D卷积。如下图1所示。通过实验文章发现,虽然Top-Heavy-I3D模型忽略了低层运动信息但它却有更高的准确率,并且因为3D卷积是在高层,处理的feature相比于低层要小,所以速度也要快。至于是否需要3D卷积下面会进行说明。
  2. 为了回答上述第二个问题,文章将网络中的3D卷积使用时间和空间两种卷积来替换,例如将 k t × k × k k_t\times k\times k kt×k×k大小的3D卷积核采用一个空间卷积 1 × k × k 1\times k\times k 1×k×k紧跟一个时间卷积 k t × 1 × 1 k_t\times 1\times 1 kt×1×1来取代,其中 k t k_t kt表示时间维度的核大小, k k k为空间维度的核大小。文章实验发现这种模型修改方法在效率和准确率上都优于原始的I3D。本文的模型称为S3D,其实是 s e p a r a b l e   3 D   C N N separable\ 3D\ CNN separable 3D CNN的缩写。
  3. 第三问的答案其实前两问已经解决了差不多了,文章另外利用了时空门机制(spatio-temporal gating mechanism)设计了一个新的模型结构称为S3D-G网络提高了最终的模型识别率。

在这里插入图片描述

下面来看一下文章的实验来对上述问题给出答案。

一、网络结构

1.1 将网络中所有的3D用2D卷积来替换

将I3D网络(上图中的a)所有的3D卷积采用2D卷积来代替,如上面上图中的b。为了减小显存和计算量,在12D中保留两个时序stride为2的max pooling 层。I3D和I2D在数据库Kinetics-Full和Something-Something数据库上的实验如下:

在这里插入图片描述

上面可以很明显的看出I3D的效果在两个数据库上都优于I2D(所有3D卷积是需要的)。还有一个需要注意的是上述实验中有normal和reversed两种实验,normal表示输入的帧是正常的视频顺序,reversed则表示输入的帧是翻转的顺序。可以看出在Kinetics数据集上两种顺序对网络的影响不大,所以这个数据库对于时间顺序这种信息要求不高。但是something-something数据库在I3D网络下性能急剧下降,说明该数据库对于时间顺序信息要求比较高。(比如拿东西和放东西这种情况)。这也进一步能说明I3D能很好的提取出时序特征。

1.2 将网络中的部分3D卷积用2D卷积来替换

将I3D网络中的部分3D卷积用2D卷积来替换,文章给出两种结构一个是上图中c所示的Bottom-Heavy-I3D,一个是上图d所示的Top-Heavy-I3D。

到这里已经回答了开篇的问题一,下面来回答问题二。

1.3 将网络中的时空卷积进行时间和空间的拆分(其实就是R(2+1)D的结构)

文章将3D卷积用一个维度为[1,k,k]的2D空间卷积跟上一个维度为[k,1,1]的1D时间卷积来代替。将这种拆分后的结构应用到I3D中,我们称为S3D( s e p a r a b l e   3 D   C N N separable\ 3D\ CNN separable 3D CNN)。结构如下图所示(在下文中除非有特殊说明,否则S3D都指的是下图的结构)。
在这里插入图片描述

上图中粉色的sep-conv有具体示意图,红色为含有sep-conv的Inception blocks。原始的2D Inception block、3D Inception block和含有sep-conv的Inception block的结构分别如下图所示。

在这里插入图片描述

从下表中的实验结果可以看出S3D不仅效果好,参数量和计算量都比I3D小。

在这里插入图片描述
在这里插入图片描述

并且从上述1.2部分给出的实验结果折线图可以看出,带有separable 3D卷积的Top-Heavy模型(Top-Heavy-S3D)无论是速度还是效果都是最佳的。从图中还可以看到Top-Heavy-S3D线上有一个拐点,我们称为”Fast-S3D”,它的结构是top 2的两层为separable 3D,其余层为2D。

到这里已经回答了问题二。文章在S3D的基础上增加了一个门操作进一步提高的网络的精度。

1.4 时空特征门(Spatio-temporal feature gating)

为了进一步提高网络的精度,文章提出了一个Spatio-temporal feature gating的操作。该操作其实很简单,就是对于输入x,输出y通过下式得到:

y = σ ( W x + b ) ⊙ x y=\sigma(Wx+b)\odot x y=σ(Wx+b)x

其中 ⊙ \odot 表示元素乘, x ∈ R n , y ∈ R n x\in R^n,y\in R^n xRn,yRn分别表示输入输出, W ∈ R n × n W\in R^{n\times n} WRn×n表示权重, b ∈ R n b\in R^n bRn表示bias。这个机制就是想将 σ ( W x + b ) \sigma(Wx+b) σ(Wx+b)中预测为重要的x增加一部分权重,不重要的x则减少权重。

这个门操作可以放在网络的任何地方,经过文章实验,文章发现将这个操作放在S3D网络中的每一个[k,1,1]时间卷积后面效果最好,文章称这个网络为S3D-G。

文章的网络结构构建就完成了,具体的实验细节请查询文章。

视频算法交流:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175710.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午11:36
下一篇 2026年3月26日 下午11:36


相关推荐

  • Git的提交与查看差异

    Git的提交与查看差异

    2021年10月24日
    62
  • Python实现性能自动化测试竟然如此简单[通俗易懂]

    Python实现性能自动化测试竟然如此简单[通俗易懂]一、思考❓❔1.什么是性能自动化测试?性能系统负载能力超负荷运行下的稳定性系统瓶颈自动化测试使用程序代替手工提升测试效率性能自动化使用代码模拟大批量用户让用户并发请求多页面多用

    2022年7月5日
    29
  • CLoin 2021激活码破解方法[通俗易懂]

    CLoin 2021激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    62
  • wake on wlan无线唤醒_睡眠后重启才能连接WiFi

    wake on wlan无线唤醒_睡眠后重启才能连接WiFi(1)添加头文件:       #include “core.h”      在core.h文件中有:       #ifdef CONFIG_HAS_EARLYSUSPEND             #include        #endif (2)在wifi驱动ath6kl结构体中添加early_suspend结构:        #ifdef CO

    2026年1月15日
    5
  • JS数组的长度问题

    JS数组的长度问题说得 js 获取数组长度 相信都会第一时间想到 array length 但是 length 有明显的缺陷 比如 varstr str 99 99 console log str length 得到的结果是 100varstr str name javascript str test sds

    2026年3月17日
    3
  • Java–反射

    Java–反射反射定义用途(了解)反射基本信息反射相关的类Class类(反射机制的起源)反射的使用反射优点和缺点定义Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。用途(了解)1、在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对

    2022年7月7日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号