深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制

news2024/11/16 12:03:31

在这里插入图片描述
【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等

在这里插入图片描述
专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等

本专栏主要方便入门同学快速掌握相关知识。后续会持续把深度学习涉及知识原理分析给大家,让大家在项目实操的同时也能知识储备,知其然、知其所以然、知何由以知其所以然。

声明:部分项目为网络经典项目方便大家快速学习,后续会不断增添实战环节(比赛、论文、现实应用等)

专栏订阅:

  • 深度学习入门到进阶专栏
  • 深度学习应用项目实战篇

深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制

1.时间偏移模块(TSM)

视频流的爆炸性增长为以高精度和低成本执行视频理解任务带来了挑战。传统的2D CNN计算成本低,但无法捕捉视频特有的时间信息;3D CNN可以得到良好的性能,但计算量庞大,部署成本高。作者提出了一种通用且有效的时间偏移模块(TSM),它通过沿时间维度移动部分通道来促进相邻帧间的信息交换,同时它可以插入到2D CNN中实现零计算和零参数的时间建模,以此兼具2D卷积的高效与3D卷积的高性能。

1.2. TSM模型介绍

1.2.1 Intuition

首先考虑一个正常的卷积操作,以核大小为3的一维卷积为例。假设卷积的权重为 W = ( w 1 , w 2 , w 3 ) W = (w_1, w_2, w_3) W=(w1,w2,w3),输入 X X X 是一个1D无限长的向量,则卷积操作 Y = C o n v ( W , X ) Y = Conv(W,X) Y=Conv(W,X) 可被表示为:

Y i = w 1 X i − 1 + w 2 X i + w 3 X i + 1 Y_i = w_1X_{i-1} + w_2X_i + w_3X_{i+1} Yi=w1Xi1+w2Xi+w3Xi+1
将卷积操作解耦为两步,位移和乘法累加。对输入 X X X 进行 − 1 , 0 , + 1 -1, 0, +1 1,0,+1 的位移,具体表示为:

X i − 1 = X i − 1 , X i 0 = X i , X i + 1 = X i + 1 X^{-1}_{i} = X_{i - 1}, \quad X^{0}_{i} = X_i, \quad X^{+1}_{i} = X_{i+1} Xi1=Xi1,Xi0=Xi,Xi+1=Xi+1
乘法累加可表示为:

Y = w 1 X − 1 + w 2 X 0 + w 3 X + 1 Y = w_1X^{-1} + w_2X^0 + w_3X^{+1} Y=w1X1+w2X0+w3X+1
第一步位移是不需要时间成本的,第二步乘法累加需要更大的计算消耗,但是TSM将乘法累加部分合并在了2D卷积中,因此它和基本的2D CNN网络相比不存在额外开销。

图1 Temporal Shift module

Temporal Shift Module(TSM) 如 图1 所示,在 图1 a 中,作者描述了一个具有C通道和T帧的张量,图片中每一行不同颜色代表在不同时间点的特征,沿时间维度,我们将一部分通道移动-1,另一部分通道移动+1,其余部分不动(如 图1 b 所示)。对于在线视频识别,作者也提供了在线版本的TSM(如 图1c 所示),由于在在线识别模式中,我们不能获得未来帧,因此只进行单一方向的移动。

1.2.2 简易的空间移动会带来什么问题

虽然时间位移的原理很简单,但作者发现直接将空间位移策略应用于时间维度并不能提供高性能和效率。具体来说,如果简单的转移所有通道,则会带来两个问题:(1)由于大量数据移动而导致的效率下降问题。位移操作不需要计算但是会涉及数据移动,数据移动增加了硬件上的内存占用和推理延迟,作者观察到在视频理解网络中,当使用naive shift策略时,CPU延迟增加13.7%,GPU延迟增加12.4%,使整体推理变慢。(2)空间建模能力变差导致性能下降,由于部分通道被转移到相邻帧,当前帧不能再访问通道中包含的信息,这可能会损失2D CNN主干的空间建模能力。与TSN基线相比,使用naive shift会降低2.6%的准确率。

1.2.3 TSM模块

为了解决naive shift的两个问题,TSM给出了相应的解决方法。

  1. 减少数据移动。 为了研究数据移动的影响,作者测量了TSM模型在不同硬件设备上的推理延迟,作者移动了不同比例的通道数并测量了延迟,位移方式分为无位移、部分位移(位移1/8、1/4、1/2的通道)和全部位移,使用ResNet-50主干和8帧输入测量模型。作者观察到,如果移动所有的通道,那么延迟开销将占CPU推理时间的13.7%(如 图2 a 所示),如果只移动一小部分通道,如1/8,则可将开销限制在3%左右。

图2 不同比例的通道位移下延迟与准确率对比

  1. 保持空间特征学习能力。 一种简单的TSM使用方法是将其直接插入到每个卷基层或残差模块前,如 图3 a 所示,这种方法被称为 in-place shift,但是它会损失主干模型的空间特征学习能力,尤其当我们移动大量通道时,存储在通道中的当前帧信息会随着通道移动而丢失。为解决这个问题,作者提出了另一种方法,即将TSM放在残差模块的残差分支中,这种方法被称为 residual TSM,如 图3 b 所示,它可以解决退化的空间特征学习问题,因为原始的激活信息在时间转移后仍可通过identity映射访问。

    图3 In-place TSM 和 Residual TSM

    为检验上述假设,作者在 Kinetics 数据集上比较了 In-place TSM 和 Residual TSM 的性能。在 图2 b 中我们可以看到,对于所有比例的位移,Residual TSM 都具有更好的性能。同时,作者发现,性能与位移通道的比例有关:如果比例太小,则时间推理的能力可能不足以处理复杂的时间关系;如果太大,则会损害空间特征学习能力,选择1/4的通道偏移时,性能会达到峰值。

1.2.4 TSM 视频网络

Offline Models with Bi-directional TSM

作者使用双向TSM来构建离线视频识别模型。给定视频 V,首先从视频中采样T帧 F 1 , . . . , F T F_1, ..., F_T F1,...,FT。帧采样后,2D CNN单独处理每个帧,并对输出logits求平均值以给出最终预测。我们为每个残差模块插入了TSM,无需计算即可实现时间信息融合。在论文中,作者使用ResNet50作为网络主干。

Online Models with Uni-directional TSM

在线视频理解是现实生活中很重要的任务,单向TSM将特征从前一帧转移到当前帧。用于在线识别的单向TSM 推理图如 图4 所示,在推理过程中,对于每一帧,我们保存每个残差块的前 1/8 特征图并将其缓存在内存中,对于下一帧,我们用缓存的特征图来替换当前特征图的前 1/8。我们使用 7/8 当前特征图和 1/8 前一帧的特征图组合来生成下一层,并重复。

图4 单向TSM

1.3 实验结果

表1 与TSN在不同数据集上的精度对比

表1 所示,作者在不同的数据集上分别测试了TSN的精度和TSM的精度。该表格可分为两部分,上部分涉及的数据集在时间关系上没有那么重要,TSM的计算结果小幅度优于2D TSN基线。下部分数据集,Something-Something V1和V2 以及 Jester,它们很大程度上取决于时间关系,TSM在这些数据集上性能有大幅度的明显提升。

表2 与SOTA模型对比

作者在Something-Something V1数据集上将TSM模型的性能与最先进的方法进行了对比。首先,由于TSN缺少时间建模,因此无法获得良好的性能。对于 TRN,虽然在特征提取后添加了后期时间融合,但其性能仍显著低于最先进的方法,跨所有层的时间融合的重要性。

在第二部分中,TSM与高效视频理解框架ECO进行对比。ECO使用早期2D + 晚期3D的结构,可实现中级时间融合。与ECO相比,TSM在较小的FLOP上获得了更好的性能。

第三部分包含当前的最新方法: Non-local I3D + GCN,可实现所有级别的时间融合。但由于GCN需要使用一个在MSCOCO对象检测数据集上训练的地区提议网络来生成边界框,这引入了额外的数据和训练成本,因此不能公平的进行比较。只将TSM与它的CNN部分(Non-local I3D)比较的话,TSM在验证集上的FLOP减小了10倍,精度提升1.2%。

2.TimeSformer

2.1. TimeSformer 简介

论文地址:Is Space-Time Attention All You Need for Video Understanding?

TimeSformer是Facebook AI于2021年提出的无卷积视频分类方法,该方法使用ViT网络结构作为backbone,提出时空自注意力机制,以此代替了传统的卷积网络。与图像只具有空间信息不同,视频还包含时间信息,因此TimeSformer对一系列的帧级图像块进行时空特征提取,从而适配视频任务。TimeSformer在多个行为识别基准测试中达到了SOTA效果,其中包括TimeSformer-L在Kinetics-400上达到了80.7的准确率,超过了经典的基于CNN的视频分类模型TSN、TSM及Slowfast,而且有更短的训练用时(Kinetics-400数据集训练用时39小时)。同时,与3D卷积网络相比,TimeSformer的模型训练速度更快,拥有更高的测试效率,并且可以处理超过一分钟的视频片段。

2.2 模型介绍

输入视频片段

TimeSformer的输入 X ∈ R H × W × 3 × F X \in \mathbb{R}^{H \times W \times 3 \times F} XRH×W×3×F 为一段视频片段,由 F F F 个从视频中采样的大小为 H × W H \times W H×W​ 的 RGB 图片帧组成。

图1:输入视频片段由一系列的图片帧构成

图像块拆分

与 ViT 结构相同,TimeSformer将每一帧的图像分割成 N N N 个不重叠的图像块,每个图像块的大小为 P × P P \times P P×P。因为要确保每一帧被划分为 N N N 个不重叠的图像块,因此 N N N 的计算方式为: N = H W / P 2 N = HW / P^2 N=HW/P2。我们将划分好的图像块展平为 x ( p , t ) ∈ R 3 P 2 x_{(p,t)} \in \mathbb{R}^{3P^2} x(p,t)R3P2 的向量,其中 p = 1 , . . . , N p = 1, ..., N p=1,...,N 代表图像块的位置, t = 1 , . . . , F t = 1, ..., F t=1,...,F 代表帧的索引。

图2:将图像帧切割成图像块

线性嵌入

我们将每一个图像块 x ( p , t ) x_{(p,t)} x(p,t) 通过一个线性嵌入层转化为向量 z ( p , t ) ( 0 ) ∈ R D z_{(p,t)}^{(0)} \in \mathbb{R}^D z(p,t)(0)RD​ :

z ( p , t ) ( 0 ) = E x ( p , t ) + e ( p , t ) p o s z_{(p,t)}^{(0)} = Ex_{(p,t)} + e_{(p,t)}^{pos} z(p,t)(0)=Ex(p,t)+e(p,t)pos

其中, E ∈ R D × 3 P 2 E \in \mathbb{R}^{D \times 3P^2} ERD×3P2 是一个可学习的矩阵, e ( p , t ) p o s ∈ R D e_{(p,t)}^{pos} \in \mathbb{R}^D e(p,t)posRD 代表一个可学习的位置embedding, 可以对每个图像块的位置信息进行编码。因为transformer的序列式处理方式减弱了空间位置关系,因此需要给每个图像块加上一个位置信息。 z ( p , t ) ( 0 ) z_{{(p,t)}}^{(0)} z(p,t)(0) 代表 transformer 结构的输入,同时,额外增加一个 z ( 0 , 0 ) ( 0 ) ∈ R D z_{(0,0)}^{(0)} \in \mathbb{R}^D z(0,0)(0)RD​ 来表示分类token的embedding,作为分类器的输入。

图3:线性嵌入层

QKV计算

TimeSformer采用的 transformer 结构中包含 L L L 个编码模块。对于每一个模块 l l l​,一个query/key/value的向量都会由下述公式进行计算:

q ( p , t ) ( l , a ) = W Q ( l , a ) L N ( z ( p , t ) ( l − 1 ) ) ∈ R D h k ( p , t ) ( l , a ) = W K ( l , a ) L N ( z ( p , t ) ( l − 1 ) ) ∈ R D h v ( p , t ) ( l , a ) = W V ( l , a ) L N ( z ( p , t ) ( l − 1 ) ) ∈ R D h q_{(p,t)}^{(l,a)} = W_Q^{(l,a)}LN(z_{(p,t)}^{(l-1)}) \in \mathbb{R}^{D_h} \\ k_{(p,t)}^{(l,a)} = W_K^{(l,a)}LN(z_{(p,t)}^{(l-1)}) \in \mathbb{R}^{D_h} \\ v_{(p,t)}^{(l,a)} = W_V^{(l,a)}LN(z_{(p,t)}^{(l-1)}) \in \mathbb{R}^{D_h} \\ q(p,t)(l,a)=WQ(l,a)LN(z(p,t)(l1))RDhk(p,t)(l,a)=WK(l,a)LN(z(p,t)(l1))RDhv(p,t)(l,a)=WV(l,a)LN(z(p,t)(l1))RDh

其中,LN() 代表层归一化, a = 1 , . . . , A a = 1, ..., A a=1,...,A 代表多个注意力头的索引, A A A 表示注意力头的总数。每个注意力头的潜在维度为 D h = D / A D_h = D/A Dh=D/A​。

图4:QKV计算

自注意力计算

图5:自注意力模块

作者在实验过程中对不同的视频自注意力模块进行了调研。实验发现,单一维度的自注意力(只有时间维度或空间维度的自注意力)(S)相比于时空注意力模块(ST)极大的减小了计算量,但只采取单一的时间或空间维度进行自注意力计算,对于视频分类任务来说,势必会极大的影响模型的分类精度,因此,作者提出了一种 “Divided Space-Time Attention”(T+S),在先进行时间注意力后再进行空间注意力,不同的注意力模块结构 如图5 所示。对于分离的注意力,我们先将每一个图片块 ( p , t ) (p,t) (p,t) 与其他在相同空间位置但是不同时间帧的图像块进行对比(自注意力工作机制可视化 如图6 所示),得到权重矩阵 α ( p , t ) ( l , a ) t i m e \alpha_{(p,t)}^{(l,a)time} α(p,t)(l,a)time:

α ( p , t ) ( l , a ) t i m e = S M ( q ( p , t ) ( l , a ) T D h ⋅ [ k ( 0 , 0 ) ( l , a ) { k ( p , t ′ ) ( l , a ) } t ′ = 1 , . . . , F ] ) \alpha_{(p,t)}^{(l,a)time} = SM(\frac{{q_{(p,t)}^{(l,a)}}^T}{\sqrt{D_h}} \cdot [k_{(0,0)}^{(l,a)} \{k_{(p, t^{'})}^{(l,a)} \}_{t^{'} = 1, ..., F}]) α(p,t)(l,a)time=SM(Dh q(p,t)(l,a)T[k(0,0)(l,a){k(p,t)(l,a)}t=1,...,F])

图6:自注意力模块工作机制可视化。每个视频片段都视为由一系列的帧级图像块组成,图像块大小为16*16 pixels。在本图中,蓝色代表查询图像块,非蓝色但有颜色的图像块为不同方案下的自注意力时空邻域,无颜色图像块则不用于蓝色图像块的自注意力计算。不同attention结构中不同的图像块颜色代表用于不同维度,比如:(T+S)的情况中,绿色图像块代表时间维度的自注意力邻域,红色图像块则代表空间维度的自注意力邻域。

实验证明,相比于每个图像块都需要进行 ( N F + 1 ) (NF+1) (NF+1) 次对比的时空联合注意力模块(ST),空间-时间分离的注意力模块(T+S)对于每个图像块只需要进行 ( N + F + 2 ) (N+F+2) (N+F+2) 次对比,极大的提高了计算效率的同时,同时也获得了更好的分类准确率。

作者还试验了“稀疏局部全局”(L+G)和 “轴向” (T+W+H) 注意力模型。其结构如 图5 所示,图6 显示attention过程中涉及到的图像块。对每个图像块 ( p , t ) (p,t) (p,t),(L+G)首先考虑相邻的 F × H / 2 × W / 2 F \times H/2 \times W/2 F×H/2×W/2 图像块来计算局部注意力,然后以两个图像块的步长对整个视频片段沿时间维度和空间维度计算稀疏全局注意力。“轴向”注意力将注意力计算分解为三个不同的步骤:时间、宽度和高度。Ho et al., 2019[1]; Huang et al., 2019[2]; Wang et al., 2020b[3] 中提出了对图像两个空间轴的分解注意力,作者针对视频的情况添加了时间维度。

图7:divided space-time attention

针对分离的时空自注意力模块,具体的计算流程如 图7 所示,在通过time attention获得 a l p h a ( p , t ) ( l , a ) t i m e alpha_{(p,t)}^{(l,a)time} alpha(p,t)(l,a)time, 根据权重矩阵计算得到encoding z ′ ( p , t ) ( l ) t i m e {z^{'}}_{(p,t)}^{(l)time} z(p,t)(l)time并由此计算出新的key/query/value向量。使用新得到的key/query/value来进行空间维度的计算,通过space attention得到 z ′ ( p , t ) ( l ) s p a c e {z^{'}}_{(p,t)}^{(l)space} z(p,t)(l)space​​,最终经过MLP层得到:

z ( p , t ) ( l ) = M L P ( L N ( z ′ ( p , t ) ( l ) ) ) + z ′ ( p , t ) ( l ) z_{(p,t)}^{(l)} = MLP(LN({z^{'}}_{(p,t)}^{(l)})) + {z^{'}}_{(p,t)}^{(l)} z(p,t)(l)=MLP(LN(z(p,t)(l)))+z(p,t)(l)

Classification

最后,通过一个MLP对class token进行处理,得到最终的预测结果。

y = M L P ( z ( 0 , 0 ) ( L ) ) y = MLP(z_{(0,0)}^{(L)}) y=MLP(z(0,0)(L))

2.3. 实验结果

作者对不同的attention模块分别在Kinetics-400(K400)和Something-Something-V2(SSv2)数据集上进行了实验,实验结果如 表1 所示。可以看到,分离的时空自注意力在两个数据集上都达到了很好的效果。

表1:不同attention结构的实验结果对比

作者也对TimeSformer和SlowFast以及I3D在K400数据集上进行了比较,可以看到尽管TimeSformer的参数量较大但是其推理成本较低。同时,在ImageNet-21K上进行预训练,则可达到78%的分类准确率。

表2:TimeSformer与I3D、SlowFast对比

  • References

[1] Ho, J., Kalchbrenner, N., Weissenborn, D., and Salimans, T. Axial attention in multidimensional transformers. CoRR, 2019. https://arxiv.org/pdf/1912.12180.pdf

[2] Huang, Z., Wang, X., Huang, L., Huang, C., Wei, Y., and Liu, W. Ccnet: Criss-cross attention for semantic seg- mentation. 2019. https://openaccess.thecvf.com/content_ICCV_2019/papers/Huang_CCNet_Criss-Cross_Attention_for_Semantic_Segmentation_ICCV_2019_paper.pdf

[3] Wang, H., Zhu, Y., Green, B., Adam, H., Yuille, A. L., and Chen, L. Axial-deeplab: Stand-alone axial-attention for panoptic segmentation. In Computer Vision - ECCV 2020 - 16th European Conference, 2020b. https://link.springer.com/chapter/10.1007/978-3-030-58548-8_7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻,上周Quest 3发布之后,本周苹果MR头显Vision Pro正式发布,也是本周AR/VR新闻的重头戏。 ​AR方面,苹果发布VST头显Vision Pro(虽然本质是台VR,但以AR场景为核心)以及visionOS&…

Qt动态调用(外部调用)SDK库(dll动态库)

Qt动态调用SDK库(dll动态库) ​​​​​​​ 之前的文章,介绍了Qt调用sdk库的方式,大家可以点击查看(Q调用SDK库(dll动态库))之前的文章,里面介绍的调用方式就是静态的调用方式。如下图所示&am…

NLP:BIG-bench基准任务的简介、安装、使用方法之详细攻略

NLP:BIG-bench基准任务的简介、安装、使用方法之详细攻略 目录 BIG-bench基准任务的简介 1、BIG-bench基准任务的概述 2、BBL BIG-bench基准任务的安装 BIG-bench基准任务的使用方法 1、使用SeqIO加载BIG-bench json任务的快速启动 BIG-bench基准任务的简介 …

Jmeter常用参数化技巧总结!

说起接口测试,相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

libVLC 调节图像(亮度、对比度、色调、饱和度、伽玛)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 对于一个视频来说,色彩和画面效果的呈现非常重要。假如你的画面偏暗或偏亮,缺乏层次感,色彩不够丰富或不自然,则需要根据场景和氛围进行调整。 所涉及的重要参数有: 亮度: 是视频画面的明暗程度。调整…

静态通讯录

文章目录 前言🌟一、明确通讯录信息/步骤🌏1.1.通讯录信息🌏1.2.通讯录多文件写法的好处🌏1.3.通讯录多文件写法 🌟二、通讯录的实现🌏2.1.通讯录的菜单部分🌏2.2.通讯录的框架部分&#x1f30f…

centos卸载mysql5.7安装mysql8.0

一、参考 CentOS7安装MySQL8的超级详细教程(无坑!)_Mysql_脚本之家 云服务器Centos7.9卸载 MySQL5.7.x 或 MySQL8.x 教程_centos 卸载mysql_大白有点菜的博客-CSDN博客 二、centos卸载mysql5.7 1、查看MySQL的依赖安装组件 rpm -qa|grep -i mysql 2、 依次移除&#xff08…

Canvas实现缩放+涂鸦改进

几个月以前,有人问了我一个canvass怎么实现缩放和涂鸦的问题,我基于当时的想法写了一篇博客,但是后来发现当时做的不完善,所以实现上其实还是有一些其他问题的。但是因为前段时间太忙了,也就一直没有机会去改进它。现在…

超详细:实现 Swift 与 汇编(Asm)代码混编并在真机或模拟器上运行

功能需求 虽然现在  开发的绝对主角是 Swift 语言,不过我们也希望有时 Swift 能够调用小段汇编代码以完成特殊功能。 在本篇博文中,您将学到如下内容: Swift 与 汇编语言混编的基本原理;如何在模拟器中使用 Swift x64 汇编指…

小黑带领阿黄中老黑一起跑步完成了小怪兽,晚上一起吃烤肠西瓜,买了帐篷准备一起露营的leetcode之旅:438. 找到字符串中所有字母异位词

小黑代码 class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:# 串p长度n_p len(p)# 串s长度n_s len(s)# 计数字典flags collections.Counter(p)# 统计字典map_ dict((k, 0) for k in p)# 匹配到的字符个数count 0# 头尾指针left right 0# 目标数…

Python给一个exe执行文件注册持续性的快捷键(热键)的代码实例

本篇文章主要讲解通过python给一个exe文件绑定一个快捷键、并取消快捷键(热键)的实操方法。 日期:2023年6月11日 作者:任聪聪 实现按下快捷键即可启动软件的效果说明 启动软件注册热键呼出其他软件或本体的效果说明: 演示材料说明:在download文件目录下存放一个可执行的…

数据结构与算法之美 | 栈

栈结构:后进者先出,先进者后出 栈是一种“操作受限”的线性表 当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,这时我们就应该首选“栈”这种数据结构 栈的实现 使用数组实现:顺序栈…

【数据结构】二叉树(一)

目录 一、树的概念及结构 1、树的概念 2、树的相关概念 3、树的表示 二、二叉树概念及结构 1、二叉树的概念 2、特殊二叉树 3、二叉树的性质 4、二叉树的存储结构 4.1 顺序存储结构 4.2 链式存储结构 三、二叉树顺序结构及实现 1、二叉树的顺序结构 2、堆的概念及结构 3、堆…

OMG--RTPS(Real Time Publish Subscribe Protocol)

OMG--RTPS(Real Time Publish Subscribe Protocol) 1 概述2 内容缩写DDS 有线协议的要求RTPS 有线协议The RTPS Platform Independent Model (PIM)The Structure ModuleThe Messages ModuleThe Behavior ModuleThe Discovery Module The RTPS Platform S…

Xuperchain多节点网络搭建+加节点+测试

环境准备 创建网络部署环境 # 在xuperchain目录执行 make testnet 种子节点 # 查看node1节点连接地址netURL cd node1 ./bin/xchain-cli netURL preview # 得到如下结果,实际使用时,需要将ip配置节点的真实ip,port配置成 /ip4/{{ip}}/tcp/{{port}}/p2p/Qmf2HeHe4sspGkfR…

深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

上课补充的知识

题目 char类型的默认值是\u0000 数组的创建方式 数组的遍历 遍历:从头到尾,依次访问数组每一个位置,获取每一个位置的元素.形式如下: 我们通过数组的下标操作数组,所以for循环变量操作的也是数组下标 开始:开始下标0 结束:结束下标length-1 如何变化: 语法: for…

大学结束啦!!!

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

神舟笔记本“性能、娱乐、省电、安静”模式之间的区别

前言:主要是对比神舟笔记本电脑“性能、娱乐、省电、安静”模式之间的区别 工具及硬件 名称版本号电脑Z8D6 2.5k屏鲁大师6.1023.xxx 之所以使用鲁大师,主要是为了节省时间.另外仅仅只是为了做横向对比,不需要太专业的工具。 实验中有两个变…

六级备考6天|CET-6|听力第一二三四讲|复习回顾|长对话篇章|14:00~16:30

长对话 篇章 目录 听写笔记 练习讲义 听写笔记 1. 听力策略 听前:读题——分析文章——预测题目 听中:划出听到的内容——对应程度高为正确选项 听后:不听题目——往下读题 2. 重点词汇 proofread / ˈpruːfriːd / …