用于图像分类任务的经典神经网络综述

🎀个人主页: https://zhangxiaoshu.blog.csdn.net
📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️,如有错误敬请指正!
💕未来很长,值得我们全力奔赴更美好的生活!

前言

长期以来,计算机视觉一直是人工智能研究的关键领域之一。早期的图像处理方法通常基于手工设计的特征提取器,这在处理复杂任务时面临一些限制,随着深度学习的崛起,特别是深度神经网络的发展,计算机视觉领域发生了革命性的变化。深度学习的优势在于其能够学习从原始数据中提取有用特征的能力,而无需手动设计特征提取器,本文主要介绍在深度学习发展史中用于图像分类任务的经典神经网络。


文章目录

  • 前言
  • 一、图像分类任务介绍
  • 二、基于卷积的网络
    • 1. LeNet
    • 2. AlexNet
    • 3. VGG
    • 4. GoogLeNet
    • 5. ResNet
    • 6. DenseNet
    • 7. RepVGG
  • 三、基于Transformer的网络
    • 1. Vision Transformer
    • 2. Swin Transformer
  • 四、基于轻量化的网络
    • 1. MobileNet
    • 2. ShuffleNet
    • 3. EfficientNet
  • 五、PyTorch网络使用


一、图像分类任务介绍

图像分类任务指输入一张或多张图像。输出为将图像分配到一个或多个类别中。

一些关键概念:

类别: 预定义的目标类别,每个类别代表一种对象或场景。

训练集: 包含标注(类别信息)的图像集合,用于训练模型。

验证集和测试集: 用于评估模型性能的独立数据集。验证集用于调整模型超参数,测试集用于最终性能评估。

特征学习: 模型通过训练从数据中学习特征,这些特征有助于区分不同类别的图像。

模型评估指标: 通常包括准确率(正确分类的图像比例)、精确度(正类别中被正确分类的比例)、召回率(实际正类别中被正确分类的比例)等。

二、基于卷积的网络

1. LeNet

LeNet是由Yann LeCun等人于1998年提出的卷积神经网络(Convolutional Neural Network,CNN)架构,它是深度学习领域中最早成功应用于图像分类任务的模型之一。LeNet的设计旨在处理手写数字识别问题,特别是美国邮政服务的邮政编码识别项目。这个模型的提出对卷积神经网络的发展产生了深远的影响。
在这里插入图片描述

主要结构和组成部分:

  • 输入层(Input Layer): LeNet最初被设计用于处理手写数字图像,因此输入层表示图像的像素。

  • 第一层(第一个卷积层):卷积操作:提取输入图像的局部特征。Sigmoid激活函数:引入非线性。平均池化层:降低特征图的维度,减小计算量。

  • 第二层(第二个卷积层):类似于第一层,包含卷积、激活和平均池化。

  • 全连接层(Fully Connected Layers):将卷积层提取的特征映射到输出类别。采用Sigmoid激活函数。

  • 输出层:通常是一个全连接层。Softmax激活函数用于将输出转换为类别概率分布。

2. AlexNet

AlexNet是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton等人于2012年设计的深度卷积神经网络,它在ImageNet大规模图像识别竞赛(ILSVRC)中取得了巨大的成功。这个模型标志着深度学习在计算机视觉领域的崛起,并成为后来深度卷积神经网络的开创者之一。
在这里插入图片描述

主要特点和结构:

  • 深度: AlexNet是一个相对较深的神经网络,包含5个卷积层和3个全连接层。

  • 卷积层和池化层:前两个卷积层后跟最大池化层,用于提取图像的特征。激活函数采用ReLU(Rectified Linear
    Unit),这一选择在当时并不常见,但后来成为了深度学习中的常用激活函数。

  • 局部响应归一化(Local Response Normalization):在激活层之后引入局部响应归一化层,这有助于抑制神经元的饱和度,增强模型的泛化性能。

  • Dropout:在全连接层中引入Dropout层,以减轻过拟合问题。Dropout通过在训练过程中随机关闭一些神经元来防止网络对特定数据过于依赖。

  • 大规模并行计算:AlexNet的设计考虑到了大规模并行计算,通过分布在多个GPU上进行训练,这在当时是一项创新。

3. VGG

VGG(Visual Geometry Group)是由牛津大学的Visual Geometry Group在2014年提出的深度卷积神经网络架构。VGG以其简洁而规整的网络结构而闻名,对卷积层和池化层的堆叠使用非常规则的结构,使得整个网络非常容易理解和调整。
在这里插入图片描述

主要特点和结构:

  • 深度和规整的结构:VGG网络非常深,有16或19个卷积层(根据不同的配置),并且所有的卷积层都是3x3的卷积核。这种深度和规整的结构有助于提取图像中的丰富特征。

  • 小卷积核:VGG采用多个3x3的卷积核来替代一个较大的卷积核(如5x5或7x7)。这样的设计有助于增加非线性,提高网络的表达能力,并减少参数数量。

  • 池化层:VGG网络中使用最大池化层,通过减小空间维度来降低计算复杂性。

  • 全连接层:VGG在卷积层之后使用全连接层,将卷积层提取的特征映射到最终的输出。

  • 激活函数:VGG使用ReLU(Rectified Linear Unit)作为激活函数,这对训练过程中的梯度流动和网络的收敛起到了积极的作用。

  • VGG16 和 VGG19:VGG16包含16个权重层,其中有13个卷积层和3个全连接层。VGG19是VGG的一个变种,包含19个权重层,其中有16个卷积层和3个全连接层。

4. GoogLeNet

GoogLeNet,也称为Inception v1,是由Google研究团队于2014年提出的深度卷积神经网络。它在ImageNet大规模图像识别竞赛(ILSVRC)中取得了显著的成功,并引入了"Inception"模块,该模块采用多尺度卷积核来提取不同层次的特征,使得网络更具表达能力。
在这里插入图片描述

主要特点和结构:

  • Inception 模块:Inception模块采用了不同大小的卷积核(1x1、3x3、5x5)和最大池化层,并将它们在同一层级进行堆叠。这有助于网络同时学习不同尺度的特征,提高了网络的表达能力。
    1x1卷积核用于降维,减少计算量。这也可以看作是一种瓶颈结构(Bottleneck Structure)。

  • 全局平均池化(Global Average Pooling):GoogLeNet采用全局平均池化层,取代了传统的全连接层。这有助于减少参数数量,降低过拟合风险,并使网络更具通用性。

  • 辅助分类器:GoogLeNet在中间层添加了辅助分类器,用于提供额外的梯度信号,有助于缓解梯度消失问题,加速训练过程。

  • Batch Normalization:GoogLeNet引入了批量归一化(Batch Normalization),有助于提高网络的训练速度,增加网络的稳定性。

Inception 模块的示意图如下:

Input -> 1x1 Conv -> \
                       -> Concatenate
Input -> 3x3 Conv -> /
Input -> 5x5 Conv -> \
                       -> Concatenate
Input -> Max Pool -> /
  • Inception v1 (GoogLeNet): 这是最早的"Inception"版本,由Christian Szegedy等人在2014年提出。它引入了"Inception"模块,该模块使用多个不同大小的卷积核并行处理输入数据,从而提高了网络的效果。

  • Inception v2 (BN-Inception or Inception-BN): 也称为Batch Normalization Inception,这个版本在Inception v1的基础上引入了批量归一化(Batch Normalization),从而加速训练过程。

  • Inception v3: 这是"Inception"系列的第三个版本,引入了一些新的设计原则,如分解卷积(Factorized Convolutions)和更深的网络结构。它在识别精度和计算效率方面都有所提高。

  • Inception v4: 这个版本在Inception v3的基础上进行了改进,引入了一些额外的技巧,如残差连接(Residual Connections)和更深层次的网络结构。

5. ResNet

ResNet(Residual Network)是由微软研究院的Kaiming He等人在2015年提出的深度卷积神经网络结构。ResNet的设计突破了传统的深度神经网络的训练难题,通过引入残差学习(residual learning)机制,成功训练了非常深的网络,达到了当时的领先水平。
在这里插入图片描述

主要特点和结构:

残差学习:ResNet的关键创新是引入了残差块(Residual Block)或残差学习。在传统的卷积神经网络中,随着网络层数的增加,梯度逐渐变小,导致梯度消失问题。而残差学习通过引入跳跃连接(shortcut connection),允许网络学习残差(residual)而不是直接学习映射,从而有效解决了梯度消失问题。

残差块结构:残差块通常包括两个卷积层,每个卷积层之间有一个跳跃连接。残差块的结构可以用数学公式表示为:

o u t p u t = i n p u t + F ( i n p u t ) output=input+F(input) output=input+F(input)

其中 F ( i n p u t ) F(input) F(input)是卷积层的输出。

  • 堆叠残差块:ResNet通过堆叠多个残差块来构建深度网络。深度网络的训练变得更加容易,因为残差学习机制减缓了梯度逐层传播的消失问题。

  • 全局平均池化:与GoogLeNet类似,ResNet使用全局平均池化层替代全连接层,以减少参数数量。

  • 批量归一化和ReLU激活:ResNet中广泛使用批量归一化(Batch Normalization)和ReLU激活函数,有助于提高网络的训练速度和稳定性。

6. DenseNet

DenseNet(Densely Connected Convolutional Networks)是由李飞飞等人于2017年提出的深度卷积神经网络架构。DenseNet的关键创新是在网络的设计中引入了密集连接(dense connectivity)的概念,即每一层都与前面所有层直接相连,使得网络具有更加紧密的信息流动,有效地缓解了梯度消失问题。
在这里插入图片描述

主要特点和结构:

  • 密集连接(Dense Connectivity):DenseNet中每一层都与前面所有层直接相连,每一层接收来自前面所有层的特征图作为输入。这种密集连接的结构有助于保持更多的特征信息,并促使梯度更容易传播。

  • 稠密块(Dense Block):DenseNet的主要构建单元是稠密块,每个稠密块包含多个密集连接的卷积层。在每个卷积层之后,都将其输出与前面层的输出连接起来,形成密集连接。

  • 过渡块(Transition Block):在稠密块之间引入过渡块,通过使用1x1卷积层和平均池化层来减小特征图的尺寸。这有助于控制网络的复杂度,减少计算量。

  • 全局平均池化:与其他一些先进的网络一样,DenseNet采用全局平均池化来替代全连接层,减少参数数量,提高网络的泛化能力。

  • 批量归一化和ReLU激活:DenseNet中广泛使用批量归一化和ReLU激活函数,有助于提高网络的训练速度和稳定性。

7. RepVGG

RepVGG(Reparameterized VGG)是由Microsoft Research提出的一种卷积神经网络架构,旨在结合VGG的简单结构和ResNet的强大性能。RepVGG通过重新参数化卷积层,使得网络具有VGG风格的简单性,同时保留了ResNet中的残差连接,提高了网络的性能。
在这里插入图片描述

RepVGG 主要特点和结构:

  • 重新参数化的卷积层:RepVGG使用了重新参数化的卷积层,将卷积核的权重分解成两个部分:一个是可学习的,一个是固定的。这种设计简化了卷积层的计算,同时保持了一定的灵活性。

  • ResNet 风格的残差连接:RepVGG引入了ResNet风格的残差连接,使得网络能够更有效地传递梯度、缓解梯度消失问题,并加速了训练过程。

  • 简单且有效的结构:RepVGG的整体结构类似于VGG,由多个卷积层和全连接层组成,具有简单、易理解的特点,同时在性能上具备了一定的深度学习模型的优势。

  • 端到端可训练:RepVGG 是一个端到端可训练的网络结构,可以通过梯度下降来学习网络中所有的参数。

三、基于Transformer的网络

1. Vision Transformer

Vision Transformer(ViT)是一种基于注意力机制的图像分类网络,由Alexey Dosovitskiy等人在2020年提出。相比于传统的卷积神经网络(CNNs),ViT采用了全注意力机制,将输入图像分割成一系列的图像块(patches),并通过自注意力机制捕捉图像全局信息。 ViT是一种在图像分类任务上取得显著成功的全新方法,它改变了传统卷积神经网络的范式,通过自注意力机制更灵活地捕捉图像中的关系。
Vision Transformer

主要特点和结构:

  • 图像块的表示:输入图像被分割成固定大小的图像块(patches)。每个图像块被视为一个向量,这样整个图像就被表示为一个序列。

  • 位置嵌入(Position Embeddings):为了捕捉序列中的位置信息,ViT引入了位置嵌入。这些位置嵌入向量被加到图像块的表示中,以便模型学习到图像中不同位置的关系。

  • 多头注意力机制:ViT使用了多头注意力机制,允许模型关注图像中不同区域的信息。每个注意力头都学习到了图像块之间的关系,有助于捕捉全局信息。

  • 全连接层(MLP):在多头注意力机制之后,ViT采用了全连接层(多层感知机,MLP)来进一步提取特征。这一部分被称为MLP处理块。

  • 层归一化和残差连接:每个MLP处理块后都进行了层归一化和残差连接,以提高模型的训练稳定性。

  • 全局池化:最终的序列表示经过全局平均池化,得到整个图像的表示。

2. Swin Transformer

Swin Transformer是一种用于图像分类任务的变种Transformer架构,由微软亚洲研究院在2021年提出。Swin Transformer采用了分层的局部注意力机制和窗口化的注意力机制,以处理大尺寸输入图像,并取得了在图像分类任务上的卓越性能。
在这里插入图片描述

主要特点和结构:

  • 分层的局部注意力机制:Swin Transformer引入了分层的局部注意力机制,将输入图像分割成非重叠的块,并在每个块内部执行局部注意力,以处理大尺寸输入。

  • 窗口化的注意力机制:Swin Transformer使用窗口化的注意力机制,即在每个块中只与相邻的块进行注意力交互,从而减少了计算复杂性。

  • 交换操作(Shift Operation):为了促进图像信息的交流,Swin Transformer引入了交换操作,即在不同块之间进行位置的平移,有助于捕捉图像中的全局信息。

  • 层次结构:Swin Transformer采用了层次结构,包含多个Swin Transformer块。每个Swin Transformer块中包含分层的局部注意力、窗口化的注意力、交换操作等模块。

  • 跨层连接:Swin Transformer中引入了跨层连接,允许低层特征直接连接到高层特征,促进特征的信息流动。

  • 多尺度特征:Swin Transformer通过采用多层次的注意力机制,能够处理多尺度的特征,使得模型对于不同尺度的物体具有更强的感知能力。

四、基于轻量化的网络

1. MobileNet

MobileNet是由Google在2017年提出的一系列轻量级神经网络架构,旨在在计算资源有限的移动设备上实现高效的图像分类和目标检测。MobileNet的设计目标是在保持较高的性能的同时,大幅减少参数数量和计算复杂度,使得它适用于嵌入式设备和移动端应用。

MobileNet的核心思想是采用深度可分离卷积(depthwise separable convolution)代替传统的标准卷积操作,以减少模型中的参数数量。深度可分离卷积将标准卷积分为两步:深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。
在这里插入图片描述

MobileNet 主要特点和结构:

  • 深度可分离卷积:深度可分离卷积分为两步:深度卷积对每个输入通道执行卷积,然后通过逐点卷积将其映射到输出通道。这一操作降低了计算复杂度,减少了参数数量。

  • 宽度乘数(Width Multiplier):MobileNet引入了宽度乘数,允许用户控制每一层网络的宽度。通过减少中间层的通道数,可以在不显著损失性能的情况下减小网络的大小。

  • 分辨率乘数(Resolution Multiplier):MobileNet还引入了分辨率乘数,允许用户缩小输入图像的分辨率。降低分辨率可以减少计算量,但可能损失一些图像细节。

  • 全局平均池化:MobileNet通常使用全局平均池化层替代全连接层,以减少参数数量。

  • 线性瓶颈:在每个深度可分离卷积的逐点卷积之前,MobileNet采用了线性激活函数(没有非线性变换),以提高模型的表达能力。

  • MobileNetV1(2017): 第一个MobileNet版本,采用了深度可分离卷积,成功地在移动设备上实现了高效的图像分类。

  • MobileNetV2(2018): 引入了倒残差结构(inverted residual structure),在V1的基础上进一步改进。此版本通过使用残差连接和线性瓶颈来提高性能。

  • MobileNetV3(2019): 进一步改进MobileNetV2,引入了更多的优化和设计改进,如可分离卷积的非线性激活、更大的网络输入尺寸、更精细的网络宽度调整等。

2. ShuffleNet

ShuffleNet是由微软亚洲研究院于2018年提出的一种轻量级神经网络结构,旨在在计算资源受限的移动设备上实现高效的图像分类和目标检测。ShuffleNet的设计注重在减小计算复杂度和参数数量的同时,保持较高的模型性能。

ShuffleNet的主要特点是通过引入分组卷积和通道重排操作来减少计算复杂度。分组卷积将输入通道分为若干组,每组进行独立的卷积计算,然后将结果拼接在一起。通道重排操作则用于对通道进行重新排列,从而增强信息的传递。
ShuffleNet 主要特点和结构:
在这里插入图片描述

  • 分组卷积:ShuffleNet引入了分组卷积,将输入通道分为多个组,每个组进行独立的卷积操作。这有助于降低计算复杂度和参数数量。

  • 通道重排(Channel Shuffle):通道重排操作将输入通道进行重新排列,以增强信息的传递。这一操作在分组卷积之后进行,有助于促进不同组之间的信息交流。

  • 逐点卷积(Pointwise Convolution):ShuffleNet使用逐点卷积(1x1卷积)来调整通道数量,使得网络更加灵活,同时减少参数数量。

  • 基础单元(ShuffleNet Unit):ShuffleNet的基础单元包括分组卷积、通道重排、逐点卷积和批量归一化等操作。多个基础单元的堆叠构成了整个网络。

  • 全局平均池化:与其他一些轻量级网络一样,ShuffleNet通常使用全局平均池化层替代全连接层,以减少参数数量。

  • ShuffleNetV1(2018): 第一个版本,引入了分组卷积和通道重排的概念,取得了较好的性能。

  • ShuffleNetV2(2018): 在ShuffleNetV1的基础上进行改进,引入了更多的特征通道重排和新的网络结构设计。ShuffleNetV2进一步减小了计算复杂度,提升了性能。

3. EfficientNet

EfficientNet是由谷歌研究团队在2019年提出的一种高效且性能优越的卷积神经网络架构。EfficientNet的设计目标是在给定计算资源的情况下,取得更好的性能,同时充分考虑了网络的深度、宽度和分辨率等因素。

EfficientNet的设计基于三个主要组件:宽度乘数(width multiplier)、深度乘数(depth multiplier)和分辨率乘数(resolution multiplier)。这些乘数允许用户在不同方向上对网络进行缩放,以满足不同的性能和计算资源需求。
在这里插入图片描述

EfficientNet 主要特点和结构:

  • 宽度乘数(Width Multiplier):宽度乘数控制每一层网络的通道数,即每个卷积层的宽度。通过调整宽度乘数,可以在不改变模型深度的情况下减小或增大模型的计算复杂度。

  • 深度乘数(Depth Multiplier):深度乘数控制网络的层数。通过调整深度乘数,可以在不改变模型宽度的情况下减小或增大模型的计算复杂度。

  • 分辨率乘数(Resolution Multiplier):分辨率乘数控制输入图像的分辨率。通过调整分辨率乘数,可以在不改变模型深度和宽度的情况下减小或增大模型的计算复杂度。

  • 复合缩放系数(Compound Scaling):EfficientNet采用复合缩放系数,同时调整宽度、深度和分辨率,以获得更好的性能。复合缩放系数的提出是为了综合考虑这三个方向上的缩放效果。

  • MBConv(MobileNetV2-like Bottleneck Block):EfficientNet中使用了一种称为MBConv(MobileNetV2-like Bottleneck Block)的块作为基础单元,该块结合了深度可分离卷积和残差连接。

五、PyTorch网络使用

torchvision.models 模块是 PyTorch 中用于定义和加载预训练模型的模块。它提供了许多经典的图像分类、目标检测、图像生成等深度学习模型的实现。这些模型已经在大规模图像数据集上进行了预训练,可以用于各种计算机视觉任务。

下面以ResNet为例简单说明 torchvision.models 模块中图像分类网络的使用示例:

import torch
import torchvision.transforms as transforms
from torchvision.models import resnet50

# 示例输入图像(需要调整为你的图像路径)
image_path = 'path/to/your/image.jpg'

# 预处理图像
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
])

image = transform(Image.open(image_path)).unsqueeze(0)

# 创建 ResNet50 模型
model = resnet50(pretrained=True)

# 将模型设置为评估模式
model.eval()

# 进行预测
with torch.no_grad():
    output = model(image)

# 打印预测结果
print(torch.argmax(output[0]).item())


文中图片大多来自论文和网络,如有侵权,联系删除,文中有不对的地方欢迎指正。

参考:
Rawat W, Wang Z. Deep convolutional neural networks for image classification: A comprehensive review[J]. Neural computation, 2017, 29(9): 2352-2449.
Chen L, Li S, Bai Q, et al. Review of image classification algorithms based on convolutional neural networks[J]. Remote Sensing, 2021, 13(22): 4712.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++标准模板库 STL 简介(standard template library)

在 C 语言中,很多东西都是由我们自己去实现的,例如自定义数组,线程文件操作,排序算法等等,有些复杂的东西实现不好很容易留下不易发现的 bug。而 C为使用者提供了一套标准模板库 STL,其中封装了很多实用的容器&#xf…

基于单片机设计的超声波测距仪(采用HC-SR04模块)

一、前言 本项目是基于单片机设计的超声波测距仪,主要采用了STC89C52单片机和HC-SR04超声波测距模块。通过LCD1602液晶显示屏来展示测量的距离信息。 超声波测距技术是一种常见的非接触式测距方法,利用超声波的传播速度测量物体与测距器之间的距离。它…

GDOUCTF2023-Reverse WP

文章目录 [GDOUCTF 2023]Check_Your_Luck[GDOUCTF 2023]Tea[GDOUCTF 2023]easy_pyc[GDOUCTF 2023]doublegame[GDOUCTF 2023]L!s![GDOUCTF 2023]润!附 [GDOUCTF 2023]Check_Your_Luck 根据 if 使用z3约束求解器。 EXP: from z3 i…

【C++】探索C++模板编程

文章目录 什么是C模板?模板的基本语法类型模板参数模板函数的示例类模板的示例总结 C模板是一种强大的编程工具,它可以实现泛型编程,使代码更加灵活和可重用。本篇博客将介绍C模板的基本语法、类型模板参数和模板函数的使用,并通过…

第20章:多线程

20.1 线程简介 在Java中,并发机制非常重要,程序员可以在程序中执行多个线程,每个线程完成一个功能,并与其他线程并发执行,这种机制被称为多线程。但是,并不是所有编程语言都支持多线程。 线程的特点&#…

集群 CPU 利用率均值达 45% ,揭秘小红书规模化混部技术实践

根据 Gartner 预测数据显示:2024 年全球 IT 支出预计将达到 5.1 万亿美元,比 2023 年增长 8 %。然而,该机构的另一项调查数据显示:全球数据中心服务器平均 CPU 利用率普遍低于 20%,存在巨大的资源浪费。据测算&#xf…

Python内置函数与标准库函数的解释示例

一、内置函数与标准库函数的区分 Python 解释器自带的函数叫做内置函数,这些函数可以直接使用,不需要导入某个模块。 Python 解释器也是一个程序,它给用户提供了一些常用功能,并给它们起了独一无二的名字,这些常用功能…

C语言——标识符

一、标识符是什么 标识符是C程序的最基本组成部分,例如:变量名称、函数名称、数据类型等等,都是一个标识符。标识符的要求是:必须由字母(区分大小写)、数字、下划线组成。而且,标识符的第一个字…

Django回顾【一】

一、Web应用程序 Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件。应用程序有两种模式C/S、B/S。 C/S&#xff1a;客户端<----->服务端 例如My…

共筑关基安全防线,开源网安加入中关村华安关键信息基础设施安全保护联盟

近日&#xff0c;开源网安正式加入“中关村华安关键信息基础设施安全保护联盟”&#xff08;以下简称&#xff1a;关保联盟&#xff09;成为会员单位&#xff0c;进一步加强与行业内重要机构、企业的协同合作&#xff0c;推动关键信息基础设施安全保护领域的生态建设。 未来&am…

9.Spring 整合 Redis

引入依赖&#xff1a;spring-boot-starter-data-redis配置 Redis&#xff1a;配置数据库参数、编写配置类&#xff0c;构造 RedisTemplate访问 Redis&#xff1a; redisTemplate.opsForValue() redisTemplate.opsForHash() redisTemplate.opsForList() redisTemplate.opsForSe…

Codebeamer—软件全生命周期管理轻量级平台

产品概述 Codebeamer涵盖了软件研发的生命周期&#xff0c;在一个整合的平台内支持需求管理、测试管理、软件开发过程管理以及项目管理等&#xff0c;同时具有IToperations&DevOps相关的内容&#xff0c;并支持变体管理的功能。对于使用集成的应用程序生命周期管理&#xf…

LVS-DR实验

实验前准备 DR服务器&#xff1a;192.168.188.11 192.168.188.15 NFS服务器&#xff1a;192.168.188.14 Web服务器1&#xff1a;192.168.188.12 Web服务器2&#xff1a;192.168.188.13 Vip&#xff1a;192.168.188.188 客户端&#xff1a;192.168.188.200 配置负载均衡调度…

Stable Video Diffusion重磅发布:基于稳定扩散模型的AI生成视频

最近&#xff0c;stability.ai发布了稳定视频扩散&#xff0c;这是stability.ai第一个基于图像模型稳定扩散的生成视频基础模型。现在可以在研究预览中看到&#xff0c;这个最先进的生成人工智能视频模型代表着stability.ai在为每种类型的人创建模型的过程中迈出了重要的一步。…

C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解

这个示例创建了一个主窗口&#xff0c;其中包含两个按钮。第一个按钮点击时会显示一个简单的消息框&#xff0c;第二个按钮点击时会执行一个特定的操作&#xff08;在这个例子中&#xff0c;仅打印一条调试信息&#xff09;。 功能描述&#xff1a; 创建窗口和布局&#xff1a;…

linux 内核线程

内核线程类似于用户进程&#xff0c;通常用于并发处理些工作&#xff0c;它是一种在内核空间实现后台任务的方式&#xff0c;并且可以参与时间片轮转调度。 内核线程可以进行繁忙的异步事件处理&#xff0c;也可以睡眠等待某事件的发生&#xff0c;内核线程可以访问内核函数和…

名词解释之EID和SR

大家在聊辅助驾驶时&#xff0c;经常会发现有名词叫SR&#xff0c;或者EID&#xff0c;理想的环境感知界面叫EID&#xff0c;而其他很多车型里大家管那个界面叫SR。我们下面具体看下这两个词具体指什么。 SR是“Situational Awareness”的缩写,意思是环境感知或场景认知。 SR系…

【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验

一、自定义算子工程介绍与创建 自定义算子工程是一个包含用户编写的host侧和kerne|侧算子实现文件的&#xff0c;用于编译和安装自定义算子run包的工程框架。 CANN软件包中提供了工程创建工具msopgen&#xff0c;开发者可以输入算子原型定义文件生成Ascend C算子开发工程。 需…

每日一题--寻找重复数

蝶恋花-王国维 阅尽天涯离别苦&#xff0c; 不道归来&#xff0c;零落花如许。 花底相看无一语&#xff0c;绿窗春与天俱莫。 待把相思灯下诉&#xff0c; 一缕新欢&#xff0c;旧恨千千缕。 最是人间留不住&#xff0c;朱颜辞镜花辞树。 目录 题目描述&#xff1a; 思路分析…

JVM运行时数据区域、对象内存分配、内存溢出异常总结

深入理解java虚拟机第二章 二、运行时数据区域2.2.1 程序计数器2.2.2 Java虚拟机栈2.2.3 本地方法栈2.2.4 Java堆2.2.5 方法区2.2.6 运行时常量池2.2.7 直接内存 三、HotSpot虚拟机对象解密2.3.1 对象的创建对象如何分配内存&#xff1f;对象的创建如何处理并发问题&#xff1f…