《Beyond Short Clips: End-to-End Video-Level Learning with Collaborative Memories》论文笔记
Abstract
- 解决的问题?
现有的视频标准训练方式每个迭代会从原始视频中采样一个clip(剪辑),然后通过这一个clip来学习video-level级别的标签。本文认为一个clip不具有足够的时间覆盖性来展示需要识别的标签。而且这种学习方式阻碍模型学习长期时间依赖性的能力。
- 怎么解决的?
引入了一种协同记忆机制(collaborative memory mechanism),在每个训练步,可以从同一个视频采样的多个clips中学习特征。
- 结果如何?
该方法可以适用于不同的架构和任务。在action recognition/detection中都取得了SOTA的结果。
1. Introduction
- 现有的研究方法?存在什么问题?
- 在clip-based backbone之上建立一个分离的网络。这种方式:1)要么无法end-to-end训练(即整个模型要在预先提取的clip-level的features上进行训练);2)要么需要临时的backbones,难以应用在现代的网络架构中。
- 本文是怎么解决上述问题?提出了哪些方法
- 提出了一个协同记忆机制,该记忆机制可以从一个video多个clips中聚集videl-level的上下文信息。在每一个训练步中,将全局的上下文信息注入每一个clip中,从而优化单个clip的表征(representation)。
- 本文的主要贡献
- 一种可以让clip-based模型学习videl-level dependencies的end-to-end新型训练框架
- 一种可以让多个clips进行信息交换的信息协同记忆机制。并探索了几种实现方式,同时指出了优化的困难点
- 该方法可以适用于不同的backbones,在action recognition和detection上都取得了SOTA的结果
2. Related Work
3. Methods
给定一个TTT帧视频v={I0,…,IT−1}v = \{I_0, \dots,I_{T-1}\}v={I0,…,IT−1},每个训练步从原视频中采样N个clips{C0,…,CN−1}\{C_0,\dots,C_{N-1}\}{C0,…,CN−1},Cn={Itn,…,Itn+L−1}C_n=\{I_{t_n},\dots,I_{t_n+L-1}\}Cn={Itn,…,Itn+L−1}包含L个连续的帧。N是一个由T和L之间的比例决定的超参数,目的是获得足够的时间覆盖。
Collaborative Memory
Memory interactions
Average Pooling: 通过一个平均池化将所有clips的表征聚集起来。其中每个clip-level的表征是一个k×dk \times dk×d的矩阵,k=height×width×lengthk = height \times width \times lengthk=height×width×length,d是通道的数量。平均池化可以数学表示为M=Push({Xn}n=0N−1)=Pool({XnWI}n=0N−1),WI∈Rd×d′M=Push(\{X_n\}^{N-1}_{n=0})=Pool(\{X_nW_I\}_{n=0}{N-1}), W_I \in \mathbb{R}^{d \times d^\prime}M=Push({Xn}n=0N−1)=Pool({XnWI}n=0N−1),WI∈Rd×d′.对于每一个clip可以通过出栈操作取回这个全局信息:Mn=Pop(M,Xn)=MM_n=Pop(M,X_n)=MMn=Pop(M,Xn)=M.可以看到这种方式每个clip取回的全局信息都是相同的。一种更好地设计应该是不同的clip应该能从全局记忆M中取回clip-specific信息。
Associative Memory: 受到[1], [21]的启发,设计了一种新的聚集信息以及取回clip-specific信息的方法:
- Accumulation:
Push({Xn}n=0N−1)=1N∑n=0N−1(XnWk)T(XnWv)Push(\{X_n\}^{N-1}_{n=0})=\frac{1}{N}\sum_{n=0}^{N-1}(X_nW_k)^T(X_nW_v)Push({Xn}n=0N−1)=N1n=0∑N−1(XnWk)T(XnWv)
- Retrival:
Mn=Pop(M,Xn)=(XnWq)MM_n=Pop(M,X_n)=(X_nW_q)MMn=Pop(M,Xn)=(XnWq)M
WiW_iWi都是需要学习的参数用于记忆交互和维度降低(k×d→d×d′k\times d \rightarrow d \times d^\primek×d→d×d′)。如果把上面两个过程写到一起:
()()T()()^T()()T是一个内积计算,可以看做是在求两个表征的相似性因子。所以此时从全局记忆中取回的信息是与当前的clip与其他clip的相似性成比例的。相比self-attention机制,这种方法在计算和内存消耗上更加高效,因为它不需要存储所有的clip-level features也不需要在所有的clips之间进行逐对比较。
Context Infusion
- residual connection:一种组合MnM_nMn和XnX_nXn的方式是通过残差连接:Xn^=MnWO+Xn,WO∈Rd×d′\hat{X_n}=M_nW_O+X_n, W_O \in \mathbb{R}^{d \times d^\prime}Xn^=MnWO+Xn,WO∈Rd×d′, WOW_OWO是一个用于匹配特征维度的线性变换。但是这种方式在实验中表现并不好,模型容易对MnM_nMn过拟合。因为MnM_nMn相对于XnX_nXn包含了更加丰富的信息,在训练过程中模型也主要依赖于前者而对后者的使用比较小。(可以参考4.3节的Fig. 5)
- feature gating:相比于让模型直接接触到MnM_nMn,feature gating强迫模型使用背景信息对不同clip-level features的强度重新标定。具体是使用如下的方式:
Xn^=(J+σ(Mn^WO))⊙Xn\hat{X_n}=(J+\sigma(\hat{M_n}W_O)) \odot X_nXn^=(J+σ(Mn^WO))⊙Xn
其中σ\sigmaσ是sigmoid函数,JJJ是一个用于残差连接的全1矩阵(跟1做乘法不会改变原始数值,σ()\sigma()σ()决定了clip-level特征中每个元素相对原始数值的缩放比例。因此称之为残差),Mn^=GAP(Mn)\hat{M_n}=GAP(M_n)Mn^=GAP(Mn),GAP=global average pooling. feature gating可以看做是channel-wise的注意力机制类似于context gating ([34], [58])以及SE block ([22]).通过使用feature gating,模型的优化变得更加简单了。
Video-level Supervision
Video-level supervision
video-level loss = clip-level loss + aggregated loss of all N clips:
Lvideo=1N∑n=0N−1L(h(Xn^))+αL(H)L_{video}=\frac{1}{N}\sum_{n=0}^{N-1}L(h(\hat{X_n})) + \alpha L(H)Lvideo=N1n=0∑N−1L(h(Xn^))+αL(H)
其中H=1N∑n=0N−1h(g(Xn,Mn))H=\frac{1}{N}\sum_{n=0}^{N-1}h(g(X_n, M_n))H=N1∑n=0N−1h(g(Xn,Mn)),在原文中这一过程被称为average pooling。L都是cross-entropy loss。
Coping with the GPU Memory Constraint
Batch reduction
假如在当前环境下允许的最大的batchsize为BBB(单位为clip),则文中所提出的方法可以将batchsize降为B^=round(B/N)\hat{B}=round(B/N)B^=round(B/N), (单位为video,用筛选出的N个clips来代表一个video)。为了能够在更新batchnorm参数时提高clip的多样性,作者提出在计算batch-norm统计值(batch-norm statistics)只使用来自不同video的clips。这种方式不能支持任意大小的N,但是它简单,高效,在实践中可以适用于绝大多数的设置。(没看明白这为什么算是解决内存限制的。)
Multi-iteration
相比于在一个batch中直接加载进所有的N个clips,还可以将这N个clips在N个不同的batch中分别用于训练。当与记忆协同机制合并时,只需要执行一个两次扫描(two-scan)过程:
- 生成clip-based features,用于构建全局记忆MMM;
- 输出注入全局记忆信息后的每个clip的分类结果。
这种方式可以满足任意大小的N,而且对内存是友好的。
Slow-only和R(2+1)D这两个模型,Batch reduction都比Multi-iteration训练的效果更好,分别高了1和2个百分点。
本文没有公开代码,所以具体实现仍然需要研究。
《Beyond Short Clips: End-to-End Video-Level Learning with Collaborative Memories》论文笔记相关推荐
- 论文笔记之Understanding and Diagnosing Visual Tracking Systems
Understanding and Diagnosing Visual Tracking Systems 论文链接:http://dwz.cn/6qPeIb 本文的主要思想是为了剖析出一个跟踪算法中到 ...
- 《Understanding and Diagnosing Visual Tracking Systems》论文笔记
本人为目标追踪初入小白,在博客下第一次记录一下自己的论文笔记,如有差错,恳请批评指正!! 论文相关信息:<Understanding and Diagnosing Visual Tracking ...
- 论文笔记Understanding and Diagnosing Visual Tracking Systems
最近在看目标跟踪方面的论文,看到王乃岩博士发的一篇分析跟踪系统的文章,将目标跟踪系统拆分为多个独立的部分进行分析,比较各个部分的效果.本文主要对该论文的重点的一个大致翻译,刚入门,水平有限,如有理解错 ...
- 目标跟踪笔记Understanding and Diagnosing Visual Tracking Systems
Understanding and Diagnosing Visual Tracking Systems 原文链接:https://blog.csdn.net/u010515206/article/d ...
- 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)
追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems) PROJECT http://winsty.net/tracker_di ...
- ICCV 2015 《Understanding and Diagnosing Visual Tracking Systems》论文笔记
目录 写在前面 文章大意 一些benchmark 实验 实验设置 基本模型 数据集 实验1 Featrue Extractor 实验2 Observation Model 实验3 Motion Mod ...
- Understanding and Diagnosing Visual Tracking Systems
文章把一个跟踪器分为几个模块,分别为motion model, feature extractor, observation model, model updater, and ensemble po ...
- CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记
理解出错之处望不吝指正. 本文模型叫做SANet.作者在论文中提到,CNN模型主要适用于类间判别,对于相似物体的判别能力不强.作者提出使用RNN对目标物体的self-structure进行建模,用于提 ...
- ICCV 2017 UCT:《UCT: Learning Unified Convolutional Networks forReal-time Visual Tracking》论文笔记
理解出错之处望不吝指正. 本文模型叫做UCT.就像论文题目一样,作者提出了一个基于卷积神经网络的end2end的tracking模型.模型的整体结构如下图所示(图中实线代表online trackin ...
- CVPR 2018 STRCF:《Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking》论文笔记
理解出错之处望不吝指正. 本文提出的模型叫做STRCF. 在DCF中存在边界效应,SRDCF在DCF的基础上中通过加入spatial惩罚项解决了边界效应,但是SRDCF在tracking的过程中要使用 ...
最新文章
- 转载:常用正则表达式大全!(例如:匹配中文、匹配html)
- mxnet METRIC自定义评估验证函数
- 使用ramdisk 优化nagios IO性能
- OpenCV中LUT函数的使用
- C 运算符和语句总结
- 看阿里云如何用云上技术创新,帮助哈啰单车实现智能数据收治
- Docker自动构建开发测试平台
- Grunt-Kmc基于KISSY项目打包
- php代码实现tp5监听队列,thinkPHP5的队列使用
- linux spi flash id,SPI Flash(W25Q16DV) 基本操作
- Silverlight 游戏开发小技巧:技能冷却效果1(Cooldown)
- NCPC 2015 A Adjoin the Networks(好题)
- spring mvc 响应处理post请求和get请求 测试
- 什么是HTTP状态码 常见状态码集合
- 到底如何保证线程安全,总结得太好了。。
- div标签别样的属性——tabindex
- 详解 Redis 应用场景及应用实例
- android专项测试题,Android期末测考试试题(附带答案).doc
- 500行C++代码实现软件渲染器 - 0.引言
- shape文件格式简单说明
热门文章
- 罗振宇2022“时间的朋友”跨年演讲全文稿(pdf)
- HTTP请求OPTION方法
- 2014年中科院地理所博士考试真题遥感概论
- 十三、JavaSE-IO体系
- shell脚本编程学习笔记2(xdl)——Bash变量
- 简单的网页制作期末作业——HTML+CSS+JavaScript小礼品购物商城网站
- 沈南鹏@《遇见大咖》: A轮没投,投了8个月以后就证明了张一鸣是对了,在美国都没有张一鸣这种模式...
- 了解中国的组织结构后续
- Power OJ 2844: New contest【模拟】
- html引用外部css文件(使用绝对路径)