当前位置: 首页 > news >正文

Video Transformer Network

目录

摘要

Abstract

VTN

背景

模型框架

视频特征提取

时空位置编码

Transformer编码器

任务特定头

关键创新

实验

代码

总结


摘要

Video Transformer Network 是基于Transformer架构改进的视频理解模型,旨在解决传统3D卷积神经网络在长距离依赖建模和计算效率方面的不足。通过引入自注意力机制,VTN能够有效捕捉视频序列中的全局时空依赖关系,同时显著提升计算效率。该模型采用视频特征提取、时空位置编码、Transformer编码器和任务特定头的框架,在视频分类、动作识别等任务上取得了SOTA的性能,成为视频理解领域的重要进展。

Abstract

The Video Transformer Network is an improved video understanding model based on the Transformer architecture, designed to address the limitations of traditional 3D convolutional neural networks in modeling long-range dependencies and computational efficiency. By incorporating the self-attention mechanism, VTN effectively captures global spatiotemporal dependencies in video sequences while significantly enhancing computational efficiency. The model employs a framework consisting of video feature extraction, spatiotemporal positional encoding, Transformer encoders, and task-specific heads, achieving state-of-the-art performance in tasks such as video classification and action recognition, marking a significant advancement in the field of video understanding.

VTN

论文链接:[2102.00719] Video Transformer Network

项目地址:SlowFast/projects/vtn/README.md at master · bomri/SlowFast · GitHub

背景

传统视频理解模型依赖于卷积操作来提取时空特征,但存在以下问题:

  • 长距离依赖建模困难:3D卷积核的局部感受野限制了模型捕捉视频中远距离时空关系的能力;
  • 计算效率低:3D卷积操作计算复杂度高,难以处理长视频序列;
  • 缺乏全局上下文信息:卷积操作难以建模视频中全局的时空依赖关系。

VTN通过引入Transformer架构,利用其自注意力机制解决了上述问题,能够高效地建模视频中的全局时空依赖关系。

模型框架

视频特征提取

视频特征提取是VTN的第一步,目的是将原始视频数据转换为适合Transformer处理的特征表示。

(1) 输入预处理

输入视频被分割为多个片段。例如,一段视频可以被均匀采样为 T 个片段,每个片段包含若干帧(frame),每个片段被送入预训练的CNN中提取视觉特征。

假设有一个视频数据集,每个视频被分割为 16 帧,每帧是 224x224 的 RGB 图像,使用批大小为 4 进行训练。

  • 输入形状:(batch_size, seq_len, C, H, W) = (4, 16, 3, 224, 224)。

(2) 特征提取

2D CNN:如果使用2D CNN,模型会逐帧提取空间特征,然后将这些特征在时间维度上堆叠,形成时空特征。

3D CNN:如果使用3D CNN,模型直接提取时空特征,同时捕捉空间和时间信息。

提取的特征通常是一个三维张量,形状为 T×H×W×C ,其中:

  • T 是时间维度,即片段或帧的数量
  • H×W 是空间维度,即特征图的高度和宽度
  • C 是通道数,即特征的维度

(3) 特征降维

为了减少计算量,通常会对提取的特征进行降维。例如,通过全局平均池化将空间维度 H×W 压缩为1,得到形状为 T×C 的特征序列。

使用预训练的 ResNet-50 提取每帧的特征:

  • 输入:每帧的形状为 (4, 3, 224, 224)
  • ResNet-50 输出:每帧的特征维度为 2048
  • 输出形状:(4, 16, 2048)

时空位置编码

由于Transformer本身不具备对输入序列的顺序感知能力,VTN引入了时空位置编码来保留视频序列的时间顺序和空间位置信息,类属于ViT中的位置编码。

(1) 时间位置编码

时间位置编码用于表示视频片段或帧在时间轴上的位置,通常使用正弦和余弦函数生成时间位置编码,公式如下:

PE_{(t,2i)}=sin(\frac{t}{10000^{2i/C}}),PE_{(t,2i+1)}=cos(\frac{t}{10000^{2i/C}})

t 是时间位置、i 是维度索引、C 是特征维度

(2) 空间位置编码

空间位置编码用于表示帧内不同区域的空间位置,使用类似时间位置编码的方法生成空间位置编码,或者使用可学习的参数。

(3) 位置编码与特征融合

将时间位置编码和空间位置编码与视频特征相加,形成最终的输入特征。

为每帧添加时间和空间位置编码:

  • 时间位置编码:使用正弦和余弦函数生成,形状为 (1,16,2048)
  • 空间位置编码:使用类似方法生成,形状为 (1,16,2048)
  • 输出形状:(4,16,2048)

Transformer编码器

Transformer编码器是VTN的核心模块,用于建模视频序列中的全局时空依赖关系

(1) 自注意力机制

自注意力机制通过计算视频序列中任意两个位置之间的注意力权重,捕捉长距离依赖关系。具体来说,对于输入特征 X\in \mathbb{R}^{T\times C},自注意力机制计算查询 Q 、键 K 和值 V :

Q=XW_{Q}K=XW_{K}V=XW_{V}

W_{Q}W_{K}W_{V}是可学习的权重矩阵。

注意力权重通过点积计算:

Attention(Q,K,V)=Softmax(\frac{QK^{T}}{\sqrt{C}})V

(2) 多头注意力

为了增强模型的表达能力,VTN使用多头注意力机制。将查询、键和值分别投影到多个子空间,并在每个子空间中独立计算注意力。多头注意力的输出通过拼接和线性变换得到最终结果。

(3) 前馈神经网络

在自注意力机制之后,VTN使用一个前馈神经网络对注意力输出进行非线性变换。FFN通常由两个全连接层和一个激活函数组成。

(4) 残差连接和层归一化

在每个子层之后,VTN使用残差连接和层归一化来加速训练并提升模型稳定性。

使用 6 层 Transformer 编码器建模全局时空依赖关系:

  • 输入形状:(4, 16, 2048)
  • Transformer 编码器输出形状:(4, 16, 2048)

任务特定头

根据具体任务,VTN设计不同的输出头来生成最终结果。

(1) 视频分类

使用全局平均池化将Transformer编码器的输出压缩为一个固定长度的特征向量,再通过一个全连接层和Softmax函数输出类别概率。

(2) 动作识别

结合时间信息,使用时间池化或LSTM等模块进一步处理Transformer编码器的输出,再通过全连接层输出动作类别。

序列维度进行平均池化,得到固定长度的特征向量:

  • 输入形状:(4, 16, 2048)
  • 输出形状:(4, 2048)

通过全连接层将特征向量映射到类别空间:

  • 输入形状:(4, 2048)
  • 全连接层输出形状:(4, num_classes),假设 num_classes = 10

(3) 视频描述生成

使用Transformer解码器生成文本描述。解码器通过自注意力和编码器--解码器注意力机制,逐步生成描述文本。

关键创新

自注意力机制:通过全局建模能力,解决了传统卷积操作在长距离依赖建模上的局限性;

高效计算:避免了重复的卷积操作,利用并行计算加速训练和推理;

灵活性:可处理不同长度的视频序列,适应多种视频理解任务。

实验

VTN 在 Kinetics-400 验证集上使用不同主干网络的性能对比,如下图所示:

模型中不同注意力层数对性能影响的对比分析,如下图所示:

关于位置编码方法在视频理解任务中的影响评估,特别是针对是否对输入帧进行打乱的实验结果和分析,如下图所示:

代码

import torch
import torch.nn as nn
import torchvision.models as models
from torch.nn import TransformerEncoder, TransformerEncoderLayerclass SpatiotemporalPositionalEncoding(nn.Module):"""时空位置编码模块"""def __init__(self, d_model, max_len=1000):super(SpatiotemporalPositionalEncoding, self).__init__()self.d_model = d_modelself.max_len = max_len# 时间位置编码self.time_pe = nn.Parameter(torch.zeros(1, max_len, d_model))# 空间位置编码self.space_pe = nn.Parameter(torch.zeros(1, max_len, d_model))self._init_pe()def _init_pe(self):# 使用正弦和余弦函数初始化位置编码position = torch.arange(self.max_len).unsqueeze(1)div_term = torch.exp(torch.arange(0, self.d_model, 2) * (-torch.log(torch.tensor(10000.0)) / self.d_model))pe = torch.zeros(1, self.max_len, self.d_model)pe[0, :, 0::2] = torch.sin(position * div_term)pe[0, :, 1::2] = torch.cos(position * div_term)self.time_pe.data = peself.space_pe.data = pedef forward(self, x):"""x: (batch_size, seq_len, d_model)"""batch_size, seq_len, _ = x.size()# 添加时间位置编码x = x + self.time_pe[:, :seq_len, :]# 添加空间位置编码x = x + self.space_pe[:, :seq_len, :]return xclass VideoTransformerNetwork(nn.Module):"""Video Transformer Network (VTN) 模型"""def __init__(self, num_classes, d_model=512, nhead=8, num_layers=6, dim_feedforward=2048, dropout=0.1):super(VideoTransformerNetwork, self).__init__()self.d_model = d_model# 视频特征提取(使用预训练的ResNet)self.feature_extractor = models.resnet50(pretrained=True)self.feature_extractor.fc = nn.Linear(self.feature_extractor.fc.in_features, d_model)# 时空位置编码self.positional_encoding = SpatiotemporalPositionalEncoding(d_model)# Transformer编码器encoder_layer = TransformerEncoderLayer(d_model, nhead, dim_feedforward, dropout)self.transformer_encoder = TransformerEncoder(encoder_layer, num_layers)# 动作识别任务头self.classifier = nn.Sequential(nn.Linear(d_model, d_model // 2),nn.ReLU(),nn.Linear(d_model // 2, num_classes))def forward(self, x):"""x: (batch_size, seq_len, C, H, W)"""batch_size, seq_len, C, H, W = x.size()# 提取帧特征x = x.view(batch_size * seq_len, C, H, W)x = self.feature_extractor(x)  # (batch_size * seq_len, d_model)x = x.view(batch_size, seq_len, -1)  # (batch_size, seq_len, d_model)# 添加时空位置编码x = self.positional_encoding(x)# Transformer编码器x = x.permute(1, 0, 2)  # (seq_len, batch_size, d_model)x = self.transformer_encoder(x)  # (seq_len, batch_size, d_model)x = x.permute(1, 0, 2)  # (batch_size, seq_len, d_model)# 全局平均池化x = x.mean(dim=1)  # (batch_size, d_model)# 动作识别任务头x = self.classifier(x)  # (batch_size, num_classes)return xif __name__ == "__main__":# 输入数据:batch_size=4, seq_len=16, C=3, H=224, W=224input_data = torch.randn(4, 16, 3, 224, 224)# 初始化模型model = VideoTransformerNetwork(num_classes=10)  # 假设有10个动作类别# 前向传播output = model(input_data)print(output.shape)  # 输出形状:(4, 10)

代码说明

  1. 视频特征提取:使用预训练的ResNet-50提取帧特征,并将全连接层替换为输出维度为 d_model 的线性层。输入视频被分割为 seq_len 个帧,每个帧通过ResNet提取特征;
  2. 时空位置编码:使用正弦和余弦函数生成时间和空间位置编码,并将其添加到视频特征中;
  3. Transformer编码器:使用多层Transformer编码器建模视频序列中的全局时空依赖关系;
  4. 动作识别任务头:通过全局平均池化和全连接层输出动作类别。

示例输入输出
输入:(batch_size, seq_len, C, H, W),例如 (4, 16, 3, 224, 224);

输出:(batch_size, num_classes),例如 (4, 10)。

效果展示:

 

总结

Video Transformer Network 通过引入 Transformer 架构,解决了传统视频理解模型在长距离依赖建模和计算效率方面的局限性,利用自注意力机制捕捉视频中的全局时空依赖关系,显著提升了视频分类、动作识别等任务的性能。VTN 的成功不仅为视频理解领域提供了一种强大的建模工具,还为未来研究提供了重要启发,包括多模态融合、高效计算、无监督学习以及模型轻量化等方向。其优异的性能和灵活性标志着视频理解领域的一个重要进展,为后续研究奠定了坚实基础。 

相关文章:

Video Transformer Network

目录 摘要 Abstract VTN 背景 模型框架 视频特征提取 时空位置编码 Transformer编码器 任务特定头 关键创新 实验 代码 总结 摘要 Video Transformer Network 是基于Transformer架构改进的视频理解模型,旨在解决传统3D卷积神经网络在长距离依赖建模和…...

Java网络编程演进:从NIO到Netty的UDP实践全解析

前言 在当前高并发、大数据量的互联网环境下,高性能的网络通信框架变得越来越重要。本文将深入探讨Java网络编程的演进,从NIO到Netty,并通过实际案例分析Netty的优势和应用。(本次主要以UDP请求为例) Java网络编程演…...

Linux系统中快速安装docker

1 查看是否安装docker 要检查Ubuntu是否安装了Docker,可以使用以下几种方法: 方法1:使用 docker --version 命令 docker --version如果Docker已安装,输出会显示Docker的版本信息,例如: Docker version …...

人工智能之数学基础:幂法和反幂法求特征值和特征向量

本文重点 特征值和特征向量是矩阵的重要性质,我们前面学习了矩阵的正交分解,要想完成正交分解需要求出一个矩阵的特征值和特征向量。有的时候,我们只需要求出一个矩阵的最大的特征值以及矩阵的最小特征值,它们以及它们对应的特征向量具有特殊的含义,下面我们介绍两种方法…...

数据结构 -- 树的应用(哈夫曼树和并查集)

树的应用 哈夫曼树 带权路径长度 结点的权:有某种现实含义的数值(如:表示结点的重要性等) 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该结点上权值的乘积 树的带权路径…...

游戏引擎学习第193天

仓库:https://gitee.com/mrxiao_com/2d_game_4 回顾 我们昨天做了一些非常有趣的实验。在实验中,我们的目标是实现一个能够在运行时改变的编译时常量的概念。最开始,这个想法纯粹是出于一时的兴趣,觉得这应该是个很有意思的尝试。于是我们进…...

数据结构每日一题day7(顺序表)★★★★★

题目描述&#xff1a;从顺序表中删除其值在给定值s与t之间(包含s和 t&#xff0c;要求 s<t)的所有元素&#xff0c;若s或t不合理或顺序表为空&#xff0c;则返回 false&#xff0c;若执行成功则返回 true。 算法思想&#xff1a; 输入检查&#xff1a;若顺序表为空、指针为…...

ACM模式常用方法总结(Java篇)

文章目录 一、ACM输入输出模式二、重要语法2.1、导包2.2、读取数据2.3、判断是否有下一个数据2.4、输出2.5、关闭scanner2.6、易踩坑点 一、ACM输入输出模式 在力扣上编写代码时使用的是核心代码模式&#xff0c;如果在面试中遇到ACM模式就会比较迷茫&#xff1f;ACM模式要求你…...

SpringCould微服务架构之Docker(6)

容器的基本命令&#xff1a; 1. docker exec &#xff1a;进入容器执行命令 2. docker logs: -f 持续查看容器的运行日志 3. docker ps&#xff1a;查看所有运行的容器和状态 案例&#xff1a;创建运行一个容Nginx容器 docker run--name myNginx -p 80:80 -d nginx 命…...

脑疾病分类的疑惑【7】一般FMRI数据都存储为什么格式?能不能给我用数据简单的描述一下FMRI是如何存储的?

fMRI 数据通常以 NIfTI&#xff08;Neuroimaging Informatics Technology Initiative&#xff09; 格式存储&#xff0c;这是一种专为神经影像设计的开放标准格式。以下是简化说明和示例&#xff1a; 1. 常见fMRI数据格式 格式扩展名特点NIfTI.nii 或 .nii.gz最常用&#xff0…...

DOM 加载函数

DOM 加载函数 在Web开发中,DOM(文档对象模型)加载函数是一个核心概念。它指的是在页面加载过程中,浏览器如何处理和解析HTML文档,并创建相应的DOM树。本文将深入探讨DOM加载函数的作用、原理及其在Web开发中的应用。 引言 随着互联网的飞速发展,Web技术日新月异。DOM作…...

[特殊字符]《Curve DAO 系统学习目录》

本教程旨在系统学习 Curve DAO 项目的整体架构、核心机制、合约设计、治理逻辑与代币经济等内容&#xff0c;帮助开发者全面理解其设计理念及运作方式。 目录总览&#xff1a; 1. Curve 项目概览 • 1.1 Curve 是什么&#xff1f;主要解决什么问题&#xff1f; • 1.2 与其他…...

webpack和vite之间的区别

Webpack 和 Vite 都是现代前端开发中非常流行的构建工具&#xff0c;但它们的设计理念、工作原理以及适用场景都有所不同。以下是两者之间详细的对比说明&#xff1a; 1. 构建机制与速度 Webpack: Webpack 是一个通用的模块打包工具&#xff0c;它通过分析项目中的依赖关系图来…...

《Operating System Concepts》阅读笔记:p495-p511

《Operating System Concepts》学习第 44 天&#xff0c;p495-p511 总结&#xff0c;总计 17 页。 一、技术总结 1.cache (1)定义 A cache is a region of fast memory that holds copies of data. (2)cache 和 buffer 的区别 The difference between a buffer and a cac…...

Java进阶——位运算

位运算直接操作二进制位&#xff0c;在处理底层数据、加密算法、图像处理等领域具有高效性能和效率。本文将深入探讨Java中的位运算。 本文目录 一、位运算简介1. 与运算2. 或运算异或运算取反运算左移运算右移运算无符号右移运算 二、位运算的实际应用1. 权限管理2. 交换两个变…...

特征增强金字塔FPN

特征增强金字塔FPN 利用 ConvNet 特征层次结构的金字塔形状&#xff0c;构建一个在所有尺度上都具有强大语义的特征金字塔 总结&#xff1a;特征金字塔是检测不同尺度物体的识别系统中的基本组成部分。 1.利用深度卷积网络固有的多尺度、金字塔层次结构&#xff0c;以边际额…...

Java课程设计(双人对战游戏)持续更新......

少废话&#xff0c;当然借助了ai&#xff0c;就这么个实力&#xff0c;后续会逐渐完善...... 考虑添加以下功能&#xff1a; 选将&#xff0c;选图&#xff0c;技能&#xff0c;天赋&#xff0c;道具&#xff0c;防反&#xff0c;反重力&#xff0c;物理反弹&#xff0c;击落…...

c++第三课(基础c)

1.前文 2.break 3.continue 4.return 0 1.前文 上次写文章到现在&#xff0c;有足足这么多天&#xff08;我也不知道&#xff0c;自己去数吧&#xff09; 开始吧 2.break break是结束循环的意思 举个栗子 #include<bits/stdc.h> using namespace std; int main(…...

Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十一)

注册表设置 GPU虚拟化标志 GpuVirtualizationFlags 注册表项用于设置半虚拟化 GPU 的行为。 密钥位于&#xff1a; DWORD HKLM\System\CurrentControlSet\Control\GraphicsDrivers\GpuVirtualizationFlags 定义了以下位&#xff1a; 位描述0x1 ​ 为所有硬件适配器强制设置…...

Android在KSP中简单使用Room

Android在KSP中简单使用Room 最近下载了最新版Studio&#xff0c;好多依赖和配置都需要升级&#xff0c;之前使用过room封装数据库工具类&#xff0c;最近在整理ksp相关&#xff0c;于是把room也升级了&#xff0c;简单记录一下升级过程&#xff0c;直接上代码。 1.添加KSP依…...

Maven 构建配置文件详解

Maven 构建配置文件详解 引言 Maven 是一个强大的项目管理和构建自动化工具,广泛应用于 Java 开发领域。在 Maven 项目中,配置文件扮演着至关重要的角色。本文将详细介绍 Maven 构建配置文件的相关知识,包括配置文件的作用、结构、配置方法等,帮助读者更好地理解和应用 M…...

精确截图工具:基于 Tkinter 和 PyAutoGUI 的实现

在日常工作中&#xff0c;截图是一个非常常见的需求。虽然 Windows 自带截图工具&#xff0c;但有时我们需要更精确的截图方式&#xff0c;比如选取特定区域、快速保存截图并进行预览。本篇博客将介绍一个使用 Python 结合 Tkinter 和 PyAutoGUI 开发的精确截图工具。 C:\pytho…...

Linux练习——有关硬盘、联网、软件包的管理

1、将你的虚拟机的网卡模式设置为nat模式&#xff0c;给虚拟机网卡配置三个主机位分别为100、200、168的ip地址 #使用nmtui打开文本图形界面配置网络 [rootrhcsa0306 ~]# nmtui #使用命令激活名为 ens160 的 NetworkManager 网络连接 [rootrhcsa0306 ~]# nmcli c up ens160 #通…...

【C++】 —— 笔试刷题day_12

一、删除公共字符 题目解析 题目给了两个字符串&#xff08;其中包含空格&#xff09;&#xff0c;让我们在第一个字符串中删除第二个字符串中的字符。 我们要输出删除后的字符串。 算法思路 这道题&#xff0c;如果直接按照题目中的要求去第一个字符串中删除字符&#xff0c…...

家乡旅游景点小程序(源码+部署教程)

运行环境 家乡旅游景点小程序运行环境如下&#xff1a; • 前端&#xff1a;小程序 • 后端&#xff1a;无 • IDE工具&#xff1a;微信开发者工具 • 技术栈&#xff1a;小程序 注意&#xff1a;此项目为纯静态项目&#xff0c;无后端 主要功能 家乡旅游景点微信小程序主…...

SQL Server:当在删除数据库时因为存在触发器而无法删除

当在删除数据库时因为存在触发器而无法删除&#xff0c;你可以通过禁用触发器来解决这个问题。下面为你介绍在 SQL Server 里禁用和启用触发器的方法。 禁用数据库中所有表的触发器 你可以使用系统视图 sys.triggers 来查询数据库里所有的触发器&#xff0c;然后生成禁用这些…...

多人协同进行qt应用程序开发应该注意什么2?

在多人协同开发Qt应用程序时&#xff0c;为了确保高效协作、代码一致性和项目可维护性&#xff0c;需要特别注意以下关键点&#xff1a; 1. 版本控制与协作流程 统一版本控制工具&#xff1a;使用Git并规范分支策略&#xff08;如Git Flow&#xff09;&#xff0c;通过.gitign…...

js关于for of 与for in

for…of for-of循环用于遍历可迭代对象&#xff0c;如数组、字符串、Map、Set等。它直接访问每个元素的值&#xff0c;而不是键名。 const arr [3,5,6,7,0] for(let item of arr){console.log(item); } // 3 // 5 // 6 // 7 // 0只有部署了Iterator接口的数据结构才能使用fo…...

Python Excel

一、Python读Excel——xlrd -*- coding: utf-8 -*- import xlrddef read_excel():打开文件workbook xlrd.open_workbook(rD:\demo1.xlsx)获取所有sheetprint(workbook.sheet_names()) 列表形式返回sheet1_name workbook.sheet_names()[0]根据sheet索引或者名称获取sheet内容…...

前端全局编程和模块化编程

1. 全局编程 <!DOCTYPE html> <html> <head><title>OpenLayers 示例</title><style>.map {width: 100%;height: 400px;}</style><script src"https://cdn.jsdelivr.net/npm/olv7.4.0/dist/ol.js"></script>&…...

随机2级域名引导页HTML源码

源码介绍 随机2级域名引导页HTML源码,每次点进去都随机一个域名前缀。 修改跳转域名在 350 行代码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行 效果预览 源码免费获取 随机2级域名引导页…...

Latex的各种数学公式

Latex的各种数学公式 简介公式1、 A 、 A ‾ \neg A\text{、}\overline{A} A、A2、 、 \text{、} 、3、 ⋅ 、 ∙ \cdot \text{、} \bullet ⋅、∙ 4、表格 简介 这里会随时更新我需要用到的数学公式&#xff0c;以csdn中写作格式为主&#xff0c;可能过时了&#xff0c;不适合…...

稻壳模板下载器(Windows):免费获取WPS稻壳模板的利器

稻壳模板下载器&#xff08;Win&#xff09; 稻壳模板下载器是一款功能强大的工具&#xff0c;能够帮助用户免费下载WPS稻壳儿中的各种模板&#xff0c;无需开通VIP会员。它支持多种模板类型&#xff0c;包括PPT、Word、Excel等&#xff0c;极大地提升了用户的办公效率。 依托…...

BeanDefinition和Beanfactory实现一个简单的bean容器

目录 什么是 Springbean 容器 设计思路 图解 参考文章 开源地址 BeanDefinition 类 BeanFactory 类 测试类 什么是 Springbean 容器 Spring 包含并管理应用对象的配置和生命周期&#xff0c;在这个意义上它是一种用于承载对象的容器&#xff0c;你可以配置你的每个 Bea…...

Mybatis的resultMap标签介绍

说明&#xff1a;在Mybatis中&#xff0c;resultMap 标签可以用于SQL查询后的封装数据&#xff0c;本文用两个场景介绍 resultMap 标签的使用。 搭建环境 先搭一个Demo&#xff0c;pom如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> &…...

jarvisoj API调用 [JSON格式变XXE]

http://web.jarvisoj.com:9882/ 题目要求&#xff1a;请设法获得目标机器 /home/ctf/flag.txt 中的flag值 抓包得到&#xff1a; POST /api/v1.0/try HTTP/1.1 Host: web.jarvisoj.com:9882 Content-Length: 36 Accept-Language: zh-CN,zh;q0.9 User-Agent: Mozilla/5.0 (W…...

论坛系统的测试

项目背景 论坛系统采用前后端分离的方式来实现&#xff0c;同时使用数据库 来处理相关的数据&#xff0c;同时将其部署到服务器上。前端主要有7个页面组成&#xff1a;登录页&#xff0c;列表页&#xff0c;论坛详情页&#xff0c;编辑页&#xff0c;个人信息页&#xff0c;我…...

RK3588使用笔记:纯linux系统下基础功能配置(不定期更新)

一、前言 用于记录使用RK3588这个平台在纯linux系统下的一些功能配置&#xff0c;RK3588只是一个芯片&#xff0c;linux只是一个系统&#xff0c;但是linux系统可以运行在无数的芯片上&#xff0c;也都大同小异&#xff0c;本编文章主要记录linux系统环境的一些常用的基础功能…...

yum install 报错(CentOS换源):

yum instally yum utils device mapper persistent-data lvm2 报错&#xff1a; 排查错误原因&#xff1a;centos7 系统停止维护了 解决方案&#xff1a;换源&#xff08;更换操作系统&#xff09; //1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-…...

HTTP常见状态码分析

当浏览者访问一个网页时&#xff0c;浏览者的浏览器会想网页所在的服务器发出请求&#xff0c;当浏览器接收并显示网页前&#xff0c;此网页所在的服务器会返回一个包含 HTTP 状态码的信息头&#xff08;server header&#xff09;用以响应浏览器的请求。 常见的状态码&#xf…...

Python与Web 3.0支付系统:技术融合与未来展望

Python与Web 3.0支付系统:技术融合与未来展望 随着区块链技术的不断发展,Web 3.0支付系统正逐步成为数字经济的重要组成部分。Python作为一种高效、易用的编程语言,在Web 3.0支付系统的开发中扮演着不可或缺的角色。本文将从技术背景、Python的应用、代码示例以及未来发展趋…...

Linux命令-sed指令

sed命令参数&#xff1a; 基本参数 -n&#xff1a;抑制默认输出&#xff0c;只显示匹配的行。 -e&#xff1a;指定 sed 脚本。 -i&#xff1a;直接修改文件内容。 -f&#xff1a;指定包含 sed 脚本的文件。 -r&#xff1a;启用扩展正则表达式。 常用操作 s&#xff1a;替换字符…...

Unbantu24.04配置-软件安装

Ubantu24.04配置—环境安装 ​ 最近在笔记本安装了双系统&#xff0c;这次在这里回顾一下&#xff0c;本章节主要是一些软件的注意点&#xff0c;大多数都是在网上有一定的教程的 1.搜狗输入法 1.1 删除其他框架 sudo apt purge ibus sudo apt remove fcitx5* sudo apt pur…...

八股总结(Java)实时更新!

八股总结&#xff08;java&#xff09; ArrayList和LinkedList有什么区别 ArrayList底层是动态数组&#xff0c;LinkedList底层是双向链表&#xff1b;前者利于随机访问&#xff0c;后者利于头尾插入&#xff1b;前者内存连续分配&#xff0c;后者通过指针连接多块不连续的内存…...

NVIDIA TensorRT 10 [TAR]安装教程

平台信息 操作系统&#xff1a;Ubuntu 20.04.6 LTSCPU架构&#xff1a;x86_64GPU&#xff1a;Tesla T4 x 2驱动信息&#xff1a; NVIDIA-SMI&#xff1a;535.104.05Driver Version: 535.104.05CUDA Version: 12.2 步骤 预备步骤 安装驱动和CUDA 假设已经成功安装好驱动&a…...

深入探索 iOS 卡顿优化

认识卡顿 一些概念 FPS&#xff1a;Frames Per Second&#xff0c;表示每秒渲染的帧数&#xff0c;通过用于衡量画面的流畅度&#xff0c;数值越高则表示画面越流畅。CPU&#xff1a;负责对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码…...

【C/C++算法】从浅到深学习---分治算法之快排思想(图文兼备 + 源码详解)

绪论&#xff1a;冲击蓝桥杯一起加油&#xff01;&#xff01; 每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a;本章是针对快速排序进行的优化和再次理解快排思想&#xff0c;将会通过4道题目带你再次…...

精通React JS中的API调用:示例指南

精通React JS中的API调用:示例指南 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 精通React JS中的API调用:示例指南为什么在React JS中进行API调用?在React JS中制作API调用:…...

浅谈Thread类及常见方法与线程的状态(多线程编程篇2)

目录 前言 1.Thread类及常见方法 Thread类中常见的属性 1. getId() 2. getName() 3. getState() 4. getPriority() 5. isDaemon() 6. isAlive() 7. isInterrupted() 2.Thread类中常见的方法 Thread.interrupt() (中断线程) Thread.start()(启动线程) 1. 覆写 run…...

算法刷题记录——LeetCode篇(1.2) [第11~20题](持续更新)

更新时间&#xff1a;2025-03-29 LeetCode题解专栏&#xff1a;实战算法解题 (专栏)技术博客总目录&#xff1a;计算机技术系列目录页 优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注&#xff01; 17. 电话号码的字母组合 给定一个仅包含数字 2-9…...