论文速读:Squeeze Time 视频分类

标题:No Time to Waste: Squeeze Time into Channel for Mobile Video Understanding

论文:https://arxiv.org/pdf/2405.08344

代码:https://github.com/xinghaochen/SqueezeTime/tree/main

发表:2024

Transformer出现后,基本在CV各个领域横着走。本文可以说是在移动端视频理解上重铸传统CV的荣光,从论文宣称的效果上看:基本是五边形战士了,吊打一切!No Time to Waste,开读!

背景

当前的视频理解架构主要基于3D卷积块或配合额外时间建模操作的2D卷积。这些方法都将时间轴视为视频序列中的一个独立维度,需要大量的计算和内存资源,从而限制了在移动设备上的应用。

亮点

本文提出一个轻量级的视频识别网络,称为SqueezeTime。具体做法:将视频序列的时间轴压缩到通道维度中。为了增强所提网络的时间建模能力,设计了一个通道-时间学习(CTL)模块来捕获序列的时间动态。该模块包含两个互补的分支,其中一个分支负责时间重要性的学习,而另一个具有时间位置恢复能力的分支旨在增强跨时间的对象建模能力。

结构

2:所提出的网络包含四个主要阶段,每个阶段由一系列精心设计的CTL模块堆叠而成,旨在挖掘和恢复隐藏的时间表示。

3:为了降低更大尺度特征的维度,我们采用了步长为2的2×2卷积进行下采样。

本文最核心的地方就是网络结构的设计,我们拆解学习一下。

输入部分:

输入通过reshape操作,将时间维度压缩到通道中进行(3,t,h,w--->3t,h,w),再依次经过5x5卷积,Relu,MaxPool

CTL Block: 

整体是残差结构:1x1卷积,CTL Module,  1x1卷积

CTL Module:  双分支结构

branch1:TFC1x1:前面有Sigmoid结果可以理解为attention机制,表达对不同通道的时间重要性

branch2:IOI Module:同样是双分支结构

经过以上拆解,Squeeze Time网络结构就非常的清洗明了,作者提到的CTL更多的是一种论文名词的包装,全都是基本算子,以及attention机制的组合搭配。

结果

前面博文使用的paddle-Tsm-v2(主干是LCNet),FLOPS是600+M,本文FLOPS是5.5G,整体还是偏大的。能否在同样量级上战胜TSM尚不确定。等有空在打架数据集上验证一下,看看效果。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现在Unity2D中点击某个物体后,物体改变速度,并在一段时间后恢复原始速度,可以按照以下步骤进行: 1. 创建物体:首先创建一个物体,可以使用Unity的模型编辑器或导入自定义模型。 2. 添加组件:给物体添加刚体组件和碰撞器组件,以便进行物理模拟。 3. 编写脚本:创建一个脚本来控制物体的速度变化和复原。在脚本中,可以使用协程来延迟一段时间后恢复原始速度。 ```csharp using UnityEngine; public class ObjectController : MonoBehaviour { public float originalSpeed = 5f; // 物体的原始速度 public float changedSpeed = 10f; // 物体改变后的速度 public float restoreDelay = 2f; // 物体恢复原始速度的延迟时间 private Rigidbody2D objectRigidbody; private float currentSpeed; void Start() { objectRigidbody = GetComponent<Rigidbody2D>(); currentSpeed = originalSpeed; } void Update() { // 点击鼠标左键时改变物体速度 if (Input.GetMouseButtonDown(0)) { Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); Collider2D collider = Physics2D.OverlapPoint(mousePosition); if (collider != null && collider.gameObject == gameObject) { ChangeSpeed(changedSpeed); StartCoroutine(RestoreSpeed(restoreDelay)); } } // 应用物体速度 Vector2 velocity = transform.up * currentSpeed; objectRigidbody.velocity = velocity; } void ChangeSpeed(float newSpeed) { currentSpeed = newSpeed; } System.Collections.IEnumerator RestoreSpeed(float delay) { yield return new WaitForSeconds(delay); currentSpeed = originalSpeed; } } ``` 4. 在场景中放置物体实例:在场景中放置一个物体的实例,并将物体控制脚本(ObjectController)添加到物体的GameObject上。 通过以上步骤,当点击该物体时,物体的速度将改变为指定的速度,并在一段时间后恢复原始速度。你可以根据需要调整原始速度、改变后的速度和恢复延迟时间。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微风❤水墨

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值