TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读
TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读
- Abstract
- 1 Introduction
- 2 Related Work
- 3 Method
- 3.1 Motion Enhanced Module
- 3.2 Temporal Interaction Module
- 3.3 TEINet
- 4 Experiments
- 5 Conclusion
- 阅读总结
文章信息;

原文链接:https://arxiv.org/abs/1911.09435
无源码
发表于:AAAI 2020
Abstract
在设计用于动作识别的视频架构时,效率是一个重要问题。3D卷积神经网络在视频动作识别方面取得了显著进展。然而,与其2D对应物相比,3D卷积往往引入了大量参数并导致高计算成本。为了缓解这个问题,我们提出了一种高效的时间模块,称为时间增强和交互(TEI)模块,它可以插入到现有的2D卷积神经网络中(称为TEINet)。TEI模块通过解耦通道相关性建模和时间交互学习了不同的范例来学习时间特征。首先,它包含一个增强运动模块(MEM),用于增强与运动相关的特征,同时抑制不相关的信息(例如,背景)。然后,它引入了一个时间交互模块(TIM),以通道级的方式补充时间上下文信息。这种两阶段建模方案不仅能够灵活有效地捕获时间结构,而且对模型推断而言也是高效的。我们进行了大量实验证明了TEINet在几个基准数据集(如Something-Something V1&V2,Kinetics,UCF101和HMDB51)上的有效性。我们提出的TEINet在这些数据集上能够取得良好的识别准确率,同时保持高效率。

图1:TEINet构建块。我们提出了一个有效的TEI模块,将时间建模解耦为MEM以增强运动相关特征和TIM捕获时间上下文信息。该TEI模块可以插入到2D ResNet块中,构建一个高效的TEINet视频架构。
1 Introduction
视频理解是计算机视觉中最重要的问题之一(Simonyan和Zisserman 2014; Tran等人 2015; Wang等人 2016)。动作识别是视频理解中的一个基本任务,因为它不仅能够从视频中提取语义信息,还能为其他任务(如动作检测和定位)提供通用的视频表示(Feichtenhofer等人 2018; Zhao等人 2017)。与静态图像不同,动作识别的核心问题是如何有效地建模时间信息。时间维度通常在空间域上表现出不同的特性。以适当的方式建模时间信息对于动作识别至关重要,这引起了研究的极大兴趣。
最近,卷积网络(LeCun等人 1998)已经成为动作识别中的主流方法(Simonyan和Zisserman 2014; Carreira和Zisserman 2017; Tran等人 2018)。TSN(Wang等人 2016)是一种高效的方法,它忽略了对时间顺序信息的约束,只在最终分类器层聚合时间信息。为了更加缓慢和早期地捕获时间信息,一些基于新型高效2D卷积神经网络的架构被开发出来,例如StNet(He等人 2019)和TSM(Lin,Gan和Han 2018)。然而,它们涉及一些手工设计,缺乏明确的解释,并且可能不够理想用于时间建模。3D卷积神经网络(Tran等人 2015; Carreira和Zisserman 2017)是直接从RGB帧学习时空特征的更为原理性的架构。不幸的是,从2D卷积简单地扩展到其3D版本会导致一个关键问题:当密集地用3D卷积替换2D卷积时,会导致计算成本高。因此,我们希望设计一个灵活的时间建模模块,它具有学习时空表示的能力,但仍保持2D卷积神经网络的高效性。
直观地,视频中的时间结构可以从多个方面有助于动作识别。首先,运动信息能够帮助我们聚焦于对动作识别有区分性的移动物体或人物。这些区分性特征可以针对每个输入视频自动确定。其次,视觉特征的时间演变使我们能够捕获视频中的动态变化,并将相邻帧级特征联系起来进行动作识别。基于这些分析,我们提出了一种新的时间建模范式,称为增强与交互。这种新设计将时间模块分解为两个阶段:首先增强区分性特征,然后捕获它们的时间交互。这种独特的设计使我们能够以更为原理性和高效的方式分别捕获通道级的相关性和时间关系。结果表明,这种分离的建模方案不仅能够灵活有效地捕获时间结构,而且在实践中还保持了较高的推断效率。
具体地,我们首先介绍了Motion Enhanced Module (MEM),它利用运动信息作为指导,聚焦于重要特征。为了使这种增强更加高效和有效,我们将特征图压缩到仅关注通道级重要性,并利用时间差异作为近似运动图。然后,为了捕获相邻帧之间的时间交互,我们提出了Temporal Interaction Module (TIM),它对视觉特征的局部时间变化进行建模。为了控制模型复杂度并确保推断效率,我们在一个局部时间窗口中采用了时间通道级卷积。这两个模块按顺序连接,形成了一种新颖的时间模块,即Temporal Enhancement and Interaction (TEI module),它是一个通用的构建模块,可以插入到现有的2D CNNs中,如ResNets,如图1所示。
在实验中,我们使用2D ResNet在大规模数据集(如Kinetics(Kay等人,2017年)和Something-Something(Goyal等人,2017年))上验证了TEI块的有效性。最终的视频架构,被称为TEINet,在保持快速推断速度的同时,明显提高了性能。特别地,我们的TEINet在Something-Something数据集上实现了最先进的性能,并且在Kinetics数据集上以更低的计算成本实现了与之前基于3D CNN的方法相当的性能。我们还通过在UCF101和HMDB51数据集上进行微调来展示TEINet的泛化能力,其中也获得了具有竞争力的识别准确率。这项工作的主要贡献总结如下:
- 我们提出了一种新的时间建模模块,称为TEI模块,通过将时间特征学习的任务分解为通道级增强和局部时间交互。
- 我们在各种大规模数据集上验证了提出的TEINet,结果表明它能够在较低的计算成本下明显改善先前的时间建模方法。
2 Related Work
2D CNNs in Action Recognition.传统的2D CNNs被广泛应用于视频动作识别领域(Simonyan和Zisserman 2014; Feichtenhofer,Pinz和Wildes 2016; Wang等人 2016; Lin,Gan和Han 2018; Gan等人 2015)。两流方法(Simonyan和Zisserman 2014; Feichtenhofer,Pinz和Zisserman 2016; Zhang等人 2016)将光流或运动向量视为运动信息,以构建一个时间流CNN。TSN(Wang等人 2016)利用平均池化来聚合一组稀疏采样帧的时间信息。为了提高TSN的时间推理能力,TRN(Zhou等人 2018)通过关注采样帧之间的多尺度时间关系而被提出。为了高效建模时间结构,TSM(Lin,Gan和Han 2018)在原始特征图上提出了一个时间偏移模块。与TSM具有相同的动机,我们的TEINet也基于具有高效性的2D骨干,但更擅长捕捉视频识别的时间线索。
3D CNNs in Action Recognition.3D卷积(Tran等人,2015年;Carreira和Zisserman,2017年)是对2D版本的直接扩展,以直接从RGB图像中学习时空表示。I3D(Carreira和Zisserman,2017年)将所有2D卷积核扩展为3D卷积核,并直接利用在ImageNet上预训练的权重。ARTNet(Wang等人,2018a)通过更高阶的关系建模改进了原始的3D卷积,以明确捕获运动信息。3D卷积是一种自然且简单的建模时间特征的方法,但在实践中计算量大。与3D CNN不同,我们的TEINet纯粹基于2D CNNs的新型时间模块用于视频识别。
Efficient Temporal Modules.一些高效的时间模型通过组合2D和3D卷积提出。ECO(Zolfaghari,Singh和Brox 2018)将2D卷积和3D卷积组合成一个网络,以在2D CNNs和3D CNNs之间实现平衡。为了分解空间和时间特征的优化,伪3D卷积,例如P3D(Qiu,Yao和Mei 2017)、S3D(Xie等人 2018)和R(2+1)D(Tran等人 2018),将时空3D卷积分解为空间2D卷积和时间1D卷积。我们的TEINet将一个新的时间块集成到纯粹的2D骨干中,赋予网络在视频中建模时间结构的能力。
Attention in Action Recognition.注意力机制(Hu,Shen和Sun 2018;Li,Hu和Yang 2019)被广泛应用于图像分类中,可以利用少量额外的参数来提升性能。类似地,也有一些与动作识别相关的工作(Wang等人 2018b;Girdhar和Ramanan 2017)涉及到注意力。非局部网络将非局部均值操作形式化为非局部块,以捕获视频中的长程依赖关系。我们方法中的运动增强模块(MEM)与这些注意力方法不同。MEM通过局部运动趋势构建时间注意力权重,可以通过端到端训练而不使用额外的监督,并在准确性上获得可观的提升。
3 Method
在本节中,我们将介绍我们提出的TEI模块。首先,我们描述了运动增强模块,并解释了如何学习通道级别的注意力权重。然后,我们介绍了时间交互模块的技术细节。最后,我们将这两个模块结合起来作为TEINet的构建模块,并将此模块集成到现有的2D CNN架构中。

图2:TEI模块的流程。我们在左侧展示了增强运动模块(MEM),右侧展示了时间交互模块(TIM)。其中 ⊙ \odot ⊙表示逐元素乘法, ⊖ \ominus ⊖表示逐元素减法。值得注意的是,在TIM中,我们使用不同的框表示卷积核权重,这意味着每个通道不共享卷积核权重。
3.1 Motion Enhanced Module
我们的方法是通过使用相邻帧级特征的时间差异以通道级方式增强与运动相关的特征。为了降低计算成本,我们首先为每个通道构建全局表示,然后在通道级进行特征增强。如图2所示,给定一个输入序列 X = { x 1 , x 2 , . . . , x T } X=\{x_1,x_2,...,x_T\} X={x1,x2,...,xT},其中 x t ∈ R C × H × W x_t\in\mathbb{R}^{C\times H\times W} xt∈RC×H×W,我们首先通过全局平均池化在它们的空间维度 ( H × W ) (H\times W) (H×W)上聚合特征图 x t x_t xt,得到 x ^ t ∈ R C × 1 × 1 \hat{x}_t\in\mathbb{R}^{C\times1\times1} x^t∈RC×1×1。然后,这些池化特征经过后续处理操作生成通道重要性权重。
基本上,我们观察到整体外观信息随着时间逐渐缓慢变化。运动显著区域的像素值变化速度比静态区域的像素值更快。在实践中,我们利用相邻帧之间的特征差异来近似表示运动显著性。为了减少模型复杂度, x t ^ \hat{x_t} xt^和 x ^ t + 1 \hat{x} _{t+ 1} x^t+1被输入到两个不同的2D卷积中,其卷积核大小为 1 × 1 1\times1 1×1,其中 x t ^ \hat{x_t} xt^的通道将被压缩。这种维度缩减和差值计算可以表示为:

这里的 W θ W_\theta Wθ和 W ϕ W_\phi Wϕ是卷积的可学习参数,将 X ^ \hat{X} X^中的通道数从 C C C减少到 C r \frac Cr rC。在我们的实验中,减少比率 r r r设为8。
然后,另一个2D卷积应用于 s t s_t st,旨在恢复与输入 s t s_t st相同的通道维度。注意力权重通过以下方式获得:

其中, σ ( ∗ ) \sigma(*) σ(∗)表示sigmoid函数, W φ W_\varphi Wφ是Conv3的可学习参数。最后,我们获得了不同通道的注意力权重 s ^ ∈ R C × 1 × 1 \hat{s}\in\mathbb{R}^{C\times1\times1} s^∈RC×1×1。我们利用通道级乘法来增强运动显著特征:

这里 t ∈ [ 1 , T − 1 ] t\in[1,T-1] t∈[1,T−1], u t u_t ut是我们最终增强的特征图。为了保持时间尺度与输入 X X X一致,我们简单地将 x T x_T xT复制为 u T u_T uT,即 u T = x T u_T=x_T uT=xT。
Discussion.我们注意到我们的MEM与(Hu, Shen, and Sun 2018)中的SE模块类似。然而,SE模块和MEM之间的根本区别在于,SE模块是一种自注意机制,通过使用自己的全局特征来校准不同的通道,而我们的MEM是一种运动感知注意模块,通过增强与运动相关的特征。为了证明MEM的有效性,我们在第4.3节进行了比较实验。在相同的设置下,我们的MEM比视频数据集中的SE模块更擅长增强用于动作识别的时间特征。
3.2 Temporal Interaction Module
在MEM中,我们增强了与运动相关的特征,但我们的模型仍然无法在局部时间窗口内捕获时间信息,即随时间变化的视觉模式的时间演变。因此,我们提出了时间交互模块(TIM),旨在以较低的计算成本捕获时间上下文信息。更具体地说,我们在这里使用通道级卷积来独立地学习每个通道的时间演变,这保留了模型设计的低计算复杂度。
如图2所示,给定输入 U = { u 1 , u 2 , . . . , u T } U=\{u_1,u_2,...,u_T\} U={u1,u2,...,uT},我们首先将其形状从 U T × C × H × W U^{T\times C\times H\times W} UT×C×H×W转换为 U ^ C × T × H × W \hat{U}^{C\times T\times H\times W} U^C×T×H×W(记为 U ^ \hat{U} U^以避免歧义)。然后,我们对 U ^ \hat{U} U^应用通道级卷积操作如下:

其中, V V V是通道级卷积核, Y c , t , x , y Y_{c,t,x,y} Yc,t,x,y是经过时间卷积后的输出。与3D卷积相比,通道级卷积极大地降低了计算成本。在我们的设置中,通道级卷积的卷积核大小为 3 × 1 × 1 3\times1\times1 3×1×1,这意味着特征只与相邻时间的特征进行交互,但当特征图通过网络的深层时,时间感知场将逐渐增长。卷积后,我们将输出 Y Y Y的形状转换回 T × C × H × W T\times C\times H\times W T×C×H×W。普通3D卷积的参数为 C o u t × C i n × t × d × d C_{out}\times C_{in}\times t\times d\times d Cout×Cin×t×d×d,而(Tran et al.,2018)中的时间1D卷积为 C o u t × C i n × t C_{out}\times C_{in}\times t Cout×Cin×t,但是TIM的参数为 C o u t × 1 × t C_{out}\times 1\times t Cout×1×t。与其他时间卷积算子相比,TIM的参数数量大大减少。
Discussion.我们发现我们的TIM与最近提出的TSM(Lin, Gan, and Han 2018)有关。实际上,TSM可以被视为一种通道级时间卷积,其中时间核对于非移位固定为[0, 1, 0],向后移位固定为[1, 0, 0],向前移位固定为[0, 0, 1]。我们的TIM将TSM操作推广为一个具有可学习卷积核的灵活模块。在实验中,我们发现这种可学习的方案比随机移位更有效地捕获了用于动作识别的时间上下文信息。
通道级卷积的卷积核大小为 3 × 1 × 1 3\times1\times1 3×1×1表示卷积核在空间维度上的大小为 1 × 1 1\times1 1×1,在通道维度上的大小为 3 3 3。这种卷积核的设计使得卷积操作仅在时间维度上进行,而在空间维度上保持不变,从而可以在保留时间关系的同时,不改变空间信息。在视频数据中,这种卷积操作可以用来捕获相邻帧之间的时间变化特征,而不引入额外的空间维度上的卷积操作,从而减少了模型的计算复杂度。
3.3 TEINet
在介绍了MEM和TIM之后,我们准备描述如何构建时间增强和交互模块(TEI),并将其整合到现有的网络架构中。如图1所示,TEI模块由上述介绍的MEM和TIM组成,可以高效实现。首先,输入特征图将被送入MEM中,以学习不同通道的注意力权重,旨在增强与运动相关的特征。然后增强的特征将被送入TIM中,以捕获时间上下文信息。我们的TEI模块是一个通用且高效的时间建模模块,可以插入任何现有的2D CNN中以捕获时间信息,生成的网络称为时间增强和交互网络(TEINet)。
我们的TEI模块直接插入到2D CNN主干中,而其他方法(如Tran等人2018年;邱等人2017年;谢等人2018年)则将2D卷积替换为更昂贵的3D卷积或(2+1)D卷积。这种新的集成方法不仅能够使用预训练的ImageNet模型进行初始化,而且与3D CNN相比,还带来更少的额外计算FLOPs。在我们的实验中,为了在性能和计算成本之间取得平衡,我们使用ResNet-50(He等人,2016年)作为主干来实例化时间增强和交互网络(TEINet)。我们在第4节中进行了大量实验,以找出TEINet在动作识别中的最佳设置。
Discussion.我们的论文提出的增强和交互是一种分解建模方法,赋予网络在视频中学习时间特征的强大能力。我们发现我们的模块对两种类型的视频数据集都有效:以运动为主的数据集,如Something-Something V1&V2,以及以外观为主的数据集,如Kinetics-400。MEM和TIM在捕获时间信息时关注不同的方面,其中MEM旨在学习通道级别的重要性权重,而TIM则试图学习相邻特征的时间变化模式。正如表1a所示,这两个模块相互合作且互补。
4 Experiments




消融实验不看了,学习思路就行,毕竟算起来也是比较老的论文了,2024的都过完一半了,2020也是四年前了,时间真快。
5 Conclusion
在这项工作中,我们提出了一种高效的时间建模方法,即TEINet,用于捕获视频帧中的时间特征,以进行动作识别。通过插入由运动增强模块(MEM)和时间交互模块(TIM)组成的TEI块,可以将普通的ResNet转换为TEINet。MEM通过计算时间注意力权重来专注于增强与运动相关的特征,而TIM则通过通道级时间卷积来学习时间上下文特征。我们进行了一系列实证研究,以证明TEINet在视频动作识别中的有效性。实验结果表明,我们的方法在SomethingSomething V1&V2数据集上取得了最先进的性能,并且在Kinetics数据集上表现出了高效率的竞争性能。
阅读总结
通过特征差来得到注意力感觉还是可以借鉴的。
也就是这个模块

代码没开源,不过感觉还是个听简单的模块。
相关文章:
TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读
TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读 Abstract1 Introduction2 Related Work3 Method3.1 Motion Enhanced Module3.2 Temporal Interaction Module3.3 TEINet 4 Experiments5 Conclusion阅读总结 文章信息; 原文链接:https:…...
Navicat Data Modeler Ess for Mac:强大的数据库建模设计软件
Navicat Data Modeler Ess for Mac是一款专为Mac用户设计的数据库建模与设计工具,凭借其强大的功能和直观的界面,帮助用户轻松构建和管理复杂的数据库模型。 Navicat Data Modeler Ess for Mac v3.3.17中文直装版下载 这款软件支持多种数据库系统&#x…...
NSS刷题
[SWPUCTF 2021 新生赛]jicao 类型:PHP、代码审计、RCE 主要知识点:json_decode()函数 json_decode():对JSON字符串解码,转换为php变量 用法: <?php $json {"ctf":"web","question"…...
CUDA专项
1、讲讲shared memory bank conflict的发生场景?以及你能想到哪些解决方案? CUDA中的共享内存(Shared Memory)是GPU上的一种快速内存,通常用于在CUDA线程(Thread)之间共享数据。然而࿰…...
C# 判断Access数据库中表是否存在,表中某个字段是否存在
在C#中判断Access数据库中某个表是否存在以及该表中某个字段是否存在,可以通过以下步骤实现: 判断表是否存在 可以使用ADO.NET中的OleDbConnection.GetOleDbSchemaTable方法来获取数据库的架构信息,并检查特定的表是否存在。 using System…...
【C++】学习笔记——模板进阶
文章目录 十一、模板进阶1. 非类型模板参数2. 按需实例化3. 模板的特化类模板的特化 4. 模板的分离编译 未完待续 十一、模板进阶 1. 非类型模板参数 模板参数分为类型形参和非类型形参 。类型形参即:出现在模板参数列表中,跟在class或者typename之类的…...
JAVA系列 小白入门参考资料 接口
目录 接口 接口的概念 语法 接口使用 接口实现用例 接口特性 实现多个接口和实现用例 接口间的继承 接口 接口的概念 在现实生活中,接口的例子比比皆是,比如:笔记本上的 USB 口,电源插座等。 电脑的 USB 口上&am…...
日报表定时任务优化历程
报表需求背景 报表是一个很常见的需求,在项目中后期往往会需要加多种维度的一些统计信息,今天就来谈谈上线近10个月后的一次报表优化优化之路(从一天报表跑需要五分钟,优化至秒级) 需求:对代理商进行日统计…...
excel表格里,可以把百分号放在数字前面吗?
在有些版本里是可以的,这样做: 选中数据,鼠标右键,点击设置单元格格式,切换到自定义,在右侧栏输入%0,点击确定就可以了。 这样设置的好处是,它仍旧是数值,并且数值大小没…...
应用案例 | 商业电气承包商借助Softing NetXpert XG2节省网络验证时间
一家提供全方位服务的电气承包商通过使用Softing NetXpert XG2顺利完成了此次工作任务——简化了故障排查的同时,还在很大程度上减少了不必要的售后回访。 对已经安装好的光纤或铜缆以太网网络进行认证测试可能会面临不同的挑战,这具体取决于网络的规模、…...
【JAVA语言-第20话】多线程详细解析(二)——线程安全,非线程安全的集合转换成线程安全
目录 线程安全 1.1 概述 1.2 案例分析 1.3 解决线程安全问题 1.3.1 使用synchronized关键字 1.3.1.1 同步代码块 1.3.1.2 同步方法 1.3.2 使用Lock锁 1.3.2.1 概述 代码示例: 1.4 线程安全的类 1.4.1 非线程安全集合转换成线程安全集合 1.5 总结 …...
区块链中的加密算法及其作用
区块链技术以其去中心化、不可篡改、透明公开的特性,在全球范围内引发了广泛的关注和讨论。其中,加密算法作为区块链技术的核心组成部分,对于维护区块链网络的安全、确保数据的完整性和真实性起到了至关重要的作用。本文将详细介绍区块链中常…...
微信小程序跳转微信管理平台配置的客服及意见页面
<button open-type"contact" bindcontact"handleContact" session-from"sessionFrom">帮助与客服</button> 不需要路径 在当前小程序中会自动进入 open-type"contact" 其他参数不用修改 只修改这个参数对应表单组件 /…...
灌溉机器人 状压dp
灌溉机器人 题目描述 农田灌溉是一项十分费体力的农活,特别是大型的农田。小明想为农民伯伯们减轻农作负担,最近在研究一款高科技——灌溉机器人。它可以在远程电脑控制下,给农田里的作物进行灌溉。 现在有一片 N 行 M 列的农田。农田的土…...
用于接收参数的几个注解
了解四种主要请求方法的传参格式 GET方法: 参数通常通过URL的查询字符串(query string)传递,形式为key1value1&key2value2。示例:http://example.com/api/resource?key1value1&key2value2 POST方法…...
Flask-Login 实现用户认证
Flask-Login 实现用户认证 Flask-Login 是什么 Flask-Login 是 Flask 中的一个第三方库,用于处理用户认证和管理用户会话,它提供了一组工具和功能,使得在 Flask 应用程序中实现用户认证变得更加简单和方便。 如何使用 Flask-Login 1.安装…...
基于WPF的DynamicDataDisplay曲线显示
一、DynamicDataDisplay下载和引用 1.新建项目,下载DynamicDataDisplay引用: 如下图: 二、前端开发: <Border Grid.Row"0" Grid.Column"2" BorderBrush"Purple" BorderThickness"1"…...
股票问题(至多两次购买
class Solution {public int maxProfit(int[] prices) {int[] dpnew int[4];dp[0]-prices[0];//第一次持有dp[1]0;dp[2]-prices[0];//第二次持有dp[3]0;for(int i1;i<prices.length;i){dp[0]Math.max(dp[0],-prices[i]);dp[1]Math.max(dp[1],dp[0]prices[i]);dp[2]Math.max(…...
车辆运动模型中LQR代码实现
一、前言 最近看到关于架构和算法两者关系的一个描述,我觉得非常认同,分享给大家。 1、好架构起到两个作用:合理的分解功能、合理的适配算法; 2、好的架构是好的功能的必要条件,不是充分条件,一味追求架构…...
Springboot集成feign远程调用
需求:在leadnews-wemedia微服务里需要调用leadnews-article微服务的接口。新建一个支持feign调用的名为heima-leadnews-feign-api的模块 heima-leadnews-feign-api的pom文件里导入openfeign依赖 <dependency><groupId>org.springframework.cloud</g…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
