热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

S3D算法详解

S3D论文详解论文地址:RethinkingSpatiotemporalFeatureLearning:Speed-AccuracyTrade-offsinVide

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卷积使用时间和空间两种卷积来替换,例如将kt×k×kk_t\times k\times kkt×k×k大小的3D卷积核采用一个空间卷积1×k×k1\times k\times k1×k×k紧跟一个时间卷积kt×1×1k_t\times 1\times 1kt×1×1来取代,其中ktk_tkt表示时间维度的核大小,kkk为空间维度的核大小。文章实验发现这种模型修改方法在效率和准确率上都优于原始的I3D。本文的模型称为S3D,其实是separable3DCNNseparable\ 3D\ CNNseparable 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。

从下图的实验结果可以看出,在相同的FLOPS的情况下Top-Heavy-I3D的效果会比Bottom-Heavy-I3D好。而且很明显的Top-Heavy-I3D会速度更快,因为Top-Heavy-I3D中3D卷积输入的特征图会小。这说明3D卷积更适合放在处理高层次的语义特征。
在这里插入图片描述

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


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

文章将3D卷积用一个维度为[1,k,k]的2D空间卷积跟上一个维度为[k,1,1]的1D时间卷积来代替。将这种拆分后的结构应用到I3D中,我们称为S3D(separable3DCNNseparable\ 3D\ CNNseparable 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=σ(Wx+b)⊙xy=\sigma(Wx+b)\odot xy=σ(Wx+b)x

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

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

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

视频算法交流qq群:657626967


推荐阅读
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 本文探讨了图像标签的多种分类场景及其在以图搜图技术中的应用,涵盖了从基础理论到实际项目实施的全面解析。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
author-avatar
七月de七月小
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有