经典卷积神经网络 (CNN) 架构模型详解:LeNet、AlexNNet、GoogleNet、ResNet、DenseNet

news2024/9/20 18:43:43

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【车辆检测追踪与流量计数系统】
49.【行人检测追踪与双向流量计数系统】50.【基于YOLOv8深度学习的反光衣检测与预警系统】
51.【危险区域人员闯入检测与报警系统】52.【高密度人脸智能检测与统计系统】
53.【CT扫描图像肾结石智能检测系统】54.【水果智能检测系统】
55.【水果质量好坏智能检测系统】56.【蔬菜目标检测与识别系统】
57.【非机动车驾驶员头盔检测系统】58.【太阳能电池板检测与分析系统】
59.【工业螺栓螺母检测】60.【金属焊缝缺陷检测系统】
61.【链条缺陷检测与识别系统】62.【交通信号灯检测识别】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

    • 卷积神经网络 (CNN) 架构
    • 1.LeNet-5
      • LeNet-5网络构建
      • lenet5模型概要
    • 2. AlexNNet
      • AlexNNet模型构建
      • 模型概要
    • 3. GoogleNet(Inception vl)
    • 4.ResNet(残差网络)
    • 5. DenseNet

卷积神经网络 (CNN) 架构

卷积神经网络 (CNN)深度学习中的一种神经网络架构,用于从结构化数组中识别模式。然而,多年来,CNN 架构已经发展起来。基本 CNN 架构的许多变体已经开发出来,从而为不断发展的深度学习领域带来了惊人的进步。

下面,让我们讨论一下 CNN 架构是如何随着时间的推移而发展和成长的。

1.LeNet-5

  • 第一个LeNet-5架构是最广为人知的CNN架构。它于1998年推出,广泛用于手写方法数字识别。

  • LeNet-5 有 2 个卷积层和 3 个完整层。

  • 这个LeNet-5架构有60,000个参数。
    结构如下:
    LeNet-5 - Geeksforgeeks

  • LeNet-5 能够处理需要更大、更多 CNN 卷积层的更高分辨率图像。

  • leNet-5 技术是通过所有计算资源的可用性来衡量的

LeNet-5网络构建

LeNet-5 代码示例

import torch 
from torchsummary import summary 
import torch.nn as nn 
import torch.nn.functional as F 

class LeNet5(nn.Module): 
	def __init__(self): 
		# Call the parent class's init method 
		super(LeNet5, self).__init__() 
		
		# First Convolutional Layer 
		self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1) 
		
		# Max Pooling Layer 
		self.pool = nn.MaxPool2d(kernel_size=2, stride=2) 
		
		# Second Convolutional Layer 
		self.conv2 = nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5, stride=1) 
		
		# First Fully Connected Layer 
		self.fc1 = nn.Linear(in_features=16 * 5 * 5, out_features=120) 
		
		# Second Fully Connected Layer 
		self.fc2 = nn.Linear(in_features=120, out_features=84) 
		
		# Output Layer 
		self.fc3 = nn.Linear(in_features=84, out_features=10) 

	def forward(self, x): 
		# Pass the input through the first convolutional layer and activation function 
		x = self.pool(F.relu(self.conv1(x))) 
		
		# Pass the output of the first layer through 
		# the second convolutional layer and activation function 
		x = self.pool(F.relu(self.conv2(x))) 
		
		# Reshape the output to be passed through the fully connected layers 
		x = x.view(-1, 16 * 5 * 5) 
		
		# Pass the output through the first fully connected layer and activation function 
		x = F.relu(self.fc1(x)) 
		
		# Pass the output of the first fully connected layer through 
		# the second fully connected layer and activation function 
		x = F.relu(self.fc2(x)) 
		
		# Pass the output of the second fully connected layer through the output layer 
		x = self.fc3(x) 
		
		# Return the final output 
		return x 
	
lenet5 = LeNet5() 
print(lenet5)

输出:

LeNet5(
  (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
  (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
  (fc1): Linear(in_features=400, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)

lenet5模型概要

打印 lenet5 的summary 来检查参数

# add the cuda to the mode 
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 
lenet5.to(device) 

#Print the summary of the model 
summary(lenet5, (1, 32, 32))

输出:

----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1            [-1, 6, 28, 28]             156
         MaxPool2d-2            [-1, 6, 14, 14]               0
            Conv2d-3           [-1, 16, 10, 10]           2,416
         MaxPool2d-4             [-1, 16, 5, 5]               0
            Linear-5                  [-1, 120]          48,120
            Linear-6                   [-1, 84]          10,164
            Linear-7                   [-1, 10]             850
================================================================
Total params: 61,706
Trainable params: 61,706
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.06
Params size (MB): 0.24
Estimated Total Size (MB): 0.30
----------------------------------------------------------------

2. AlexNNet

  • AlexNet CNN 架构在 2012 年 ImageNet ILSVRC 深度学习算法挑战赛中以较大的方差获胜,达到了 17%,而排名第二的 top-5 错误率达到了 26%!
  • 它是由 Alex Krizhevsky(创始人姓名)、Ilya Sutskever 和 Geoffrey Hinton 引入的,与 LeNet-5 非常相似,只是更大更深,并且它首先被引入将卷积层直接堆叠在彼此模型之上,而不是在 CN 网络卷积层上堆叠一个池化层。
  • AlexNNet 有 6000 万个参数,因为 AlexNet 总共有 8 层,5 个卷积层和 3 个全连接层。
  • AlexNNet 首次将(ReLU)整流线性单元作为激活函数
  • 这是第一个使用GPU来提高性能的CNN架构。

ALexNNet - Geeksforgeeks

AlexNNet模型构建

AlexNNet 的构建模型代码:

import torch 
from torchsummary import summary 
import torch.nn as nn 
import torch.nn.functional as F 

class AlexNet(nn.Module): 
	def __init__(self, num_classes=1000): 
		# Call the parent class's init method to initialize the base class 
		super(AlexNet, self).__init__() 
		
		# First Convolutional Layer with 11x11 filters, stride of 4, and 2 padding 
		self.conv1 = nn.Conv2d(in_channels=3, out_channels=96, kernel_size=11, stride=4, padding=2) 
		
		# Max Pooling Layer with a kernel size of 3 and stride of 2 
		self.pool = nn.MaxPool2d(kernel_size=3, stride=2) 
		
		# Second Convolutional Layer with 5x5 filters and 2 padding 
		self.conv2 = nn.Conv2d(in_channels=96, out_channels=256, kernel_size=5, padding=2) 
		
		# Third Convolutional Layer with 3x3 filters and 1 padding 
		self.conv3 = nn.Conv2d(in_channels=256, out_channels=384, kernel_size=3, padding=1) 
		
		# Fourth Convolutional Layer with 3x3 filters and 1 padding 
		self.conv4 = nn.Conv2d(in_channels=384, out_channels=384, kernel_size=3, padding=1) 
		
		# Fifth Convolutional Layer with 3x3 filters and 1 padding 
		self.conv5 = nn.Conv2d(in_channels=384, out_channels=256, kernel_size=3, padding=1) 
		
		# First Fully Connected Layer with 4096 output features 
		self.fc1 = nn.Linear(in_features=256 * 6 * 6, out_features=4096) 
		
		# Second Fully Connected Layer with 4096 output features 
		self.fc2 = nn.Linear(in_features=4096, out_features=4096) 
		
		# Output Layer with `num_classes` output features 
		self.fc3 = nn.Linear(in_features=4096, out_features=num_classes) 

	def forward(self, x): 
		# Pass the input through the first convolutional layer and ReLU activation function 
		x = self.pool(F.relu(self.conv1(x))) 
		
		# Pass the output of the first layer through 
		# the second convolutional layer and ReLU activation function 
		x = self.pool(F.relu(self.conv2(x))) 
		
		# Pass the output of the second layer through 
		# the third convolutional layer and ReLU activation function 
		x = F.relu(self.conv3(x)) 
		
		# Pass the output of the third layer through 
		# the fourth convolutional layer and ReLU activation function 
		x = F.relu(self.conv4(x)) 
		
		# Pass the output of the fourth layer through 
		# the fifth convolutional layer and ReLU activation function 
		x = self.pool(F.relu(self.conv5(x))) 
		
		# Reshape the output to be passed through the fully connected layers 
		x = x.view(-1, 256 * 6 * 6) 
		
		# Pass the output through the first fully connected layer and activation function 
		x = F.relu(self.fc1(x)) 
		x = F.dropout(x, 0.5)	 
		
		# Pass the output of the first fully connected layer through 
		# the second fully connected layer and activation function 
		x = F.relu(self.fc2(x)) 
		
		# Pass the output of the second fully connected layer through the output layer 
		x = self.fc3(x) 
		
		# Return the final output 
		return x 
										
										
alexnet = AlexNet() 
print(alexnet)

输出:

AlexNet(
  (conv1): Conv2d(3, 96, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))
  (pool): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
  (conv2): Conv2d(96, 256, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
  (conv3): Conv2d(256, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (conv4): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (conv5): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (fc1): Linear(in_features=9216, out_features=4096, bias=True)
  (fc2): Linear(in_features=4096, out_features=4096, bias=True)
  (fc3): Linear(in_features=4096, out_features=1000, bias=True)
)

模型概要

打印 alexnet 的summary以查看模型参数:

# add the cuda to the mode 
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 
alexnet.to(device) 

#Print the summary of the model 
summary(alexnet, (3, 224, 224))

输出:

----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1           [-1, 96, 55, 55]          34,944
         MaxPool2d-2           [-1, 96, 27, 27]               0
            Conv2d-3          [-1, 256, 27, 27]         614,656
         MaxPool2d-4          [-1, 256, 13, 13]               0
            Conv2d-5          [-1, 384, 13, 13]         885,120
            Conv2d-6          [-1, 384, 13, 13]       1,327,488
            Conv2d-7          [-1, 256, 13, 13]         884,992
         MaxPool2d-8            [-1, 256, 6, 6]               0
            Linear-9                 [-1, 4096]      37,752,832
           Linear-10                 [-1, 4096]      16,781,312
           Linear-11                 [-1, 1000]       4,097,000
================================================================
Total params: 62,378,344
Trainable params: 62,378,344
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 5.96
Params size (MB): 237.95
Estimated Total Size (MB): 244.49
----------------------------------------------------------------

3. GoogleNet(Inception vl)

  • GoogleNet架构由 Google Research 的 Christian Szegedy 创建,并在 ILSVRC 2014 挑战赛中将前五名错误率降低到 7% 以下,取得了突破性成果。这一成功很大程度上归功于其比其他 CNN 更深的架构,这得益于其初始模块,与之前的架构相比,该模块能够更有效地使用参数
  • GoogleNet 的参数比 AlexNet 少,比例为 10:1(大约 600 万而不是 6000 万)
  • Inception 模块的架构如图所示。

GoogleNet(Inception 模块) - Geeksforgeeks

GoogleNet(Inception 模块)

  • 符号“3 x 3 + 2(5)”表示该层使用 3 x 3 内核、步幅为 2 和 SAME 填充。输入信号随后被馈送到四个不同的层,每个层都具有 RelU 激活函数和步幅为 1。这些卷积层具有不同的内核大小(1 x 1、3 x 3 和 5 x 5),以捕获不同尺度的模式。此外,每个层都使用 SAME 填充,因此所有输出都具有与其输入相同的高度和宽度。这允许将来自所有四个顶部卷积层的特征图沿最终深度连接层中的深度维度连接起来。
  • 整体 GoogleNet 架构有 22 个较大的深度 CNN 层。

4.ResNet(残差网络)

  • 残差网络 (ResNet)是 ILSVRC 2015 挑战赛的获胜者,由 Kaiming He 开发,其 CNN 深度极深,由 152 层组成,前五名错误率高达 3.6%。训练如此深度网络的一个重要因素是使用跳跃连接(也称为快捷连接)。进入某一层的信号被添加到堆栈中更高层的输出中。让我们来探索一下为什么这样做是有益的。
  • 训练神经网络时,目标是让它复制目标函数 h(x)。通过将输入 x 添加到网络的输出(跳过连接),网络可以建模 f(x) = h(x) – x,这种技术称为残差学习。
F(x) = H(x) - x得出H(x) := F(x) + x。 

ResNet(残差网络) - Geeksforgeeks

跳跃(快捷方式)连接

  • 初始化常规神经网络时,其权重接近于零,导致网络输出接近于零的值。通过添加跳跃连接,生成的网络将输出其输入的副本,从而有效地对恒等函数进行建模。如果目标函数与恒等函数相似,这将大有裨益,因为它将加速训练。此外,如果添加多个跳跃连接,即使多个层尚未开始学习,网络也可以开始取得进展。
  • 目标函数非常接近identity函数(通常情况如此),这将大大加快训练速度。
  • 深度残差网络可以看作是一系列残差单元,每个残差单元都是一个带有跳跃连接的小型神经网络

5. DenseNet

  • DenseNet模型引入了密集连接的卷积网络的概念,其中每一层的输出都连接到每个后续层的输入。这一设计原则是为了解决高级神经网络中梯度消失和梯度爆炸导致的准确率下降问题而提出的。
  • 简单来说,由于输入层和输出层之间的距离太远,数据在到达目的地之前就丢失了。
  • DenseNet 模型引入了密集连接的卷积网络的概念,其中每一层的输出都连接到每个后续层的输入。这一设计原则是为了解决高级神经网络中梯度消失和梯度爆炸导致的准确率下降问题而提出的。

DenseNet - Geeksforgeeks

密集网络

  • 密集块中的所有卷积均由 ReLU 激活并使用批量归一化。仅当数据的高度和宽度尺寸保持不变时,才可以进行通道级联,因此密集块中的卷积均为步长 1。池化层插入密集块之间以进一步降低维度。
  • 直观地看,人们可能会认为,通过连接所有之前看到的输出,通道和参数的数量将呈指数级增长。然而,DenseNet 在可学习参数方面出奇地经济。这是因为每个连接的块(可能具有相对大量的通道)首先通过 1×1 卷积,将其减少到较少的通道数。此外,1×1 卷积在参数方面是经济的。然后,应用具有相同通道数的 3×3 卷积。
  • DenseNet 每个步骤产生的通道都连接到所有先前生成的输出的集合。每个步骤都利用一对 1×1 和 3×3 卷积,为数据添加 K 个通道。因此,通道数量随着密集块中的卷积步骤数量线性增加。整个网络的增长率保持不变,DenseNet 在 K 值介于 12 到 40 之间时表现出良好的性能。
  • 密集块和池化层组合起来形成 Tu DenseNet 网络。DenseNet21 有 121 层,但结构可调整,可轻松扩展到 200 层以上

DenseNet - Geeksforgeeks


关注文末名片G-Z-H:【阿旭算法与机器学习】,发送【开源】可获取更多学习资源

在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

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

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

相关文章

文字转视频软件哪个好用?揭秘创意新工具

最近,我在筹备一个小型的个人项目,需要制作一系列的教学视频,但我对视频编辑一窍不通。就在我快要放弃的时候,我发现了一些神奇的工具,它们能自动把文字变成视频! 想知道自动生成视频的软件有哪些吗&#…

Docker 安装FileBeat、Elasticsearch及Kibana详细步骤

一、ELK简介 二、docker安装Elasticsearch 2.1 创建Docker网络 2.2 拉取镜像 2.3 创建挂载目录 2.4 添加配置文件 2.5 创建es容器 2.6 测试Elasticsearch是否安装成功 三、docker安装Logstash 3.1 拉取镜像 3.2 创建挂载目录 3.3 添加配置文件 3.4 创建Logstash容…

如何更新我的SSL证书到期日期?

续订SSL证书需要获取新证书来替换即将过期的证书。该过程可能略有不同,具体取决于Gworg获取证书的方法。以下是有关如何续订SSL证书的一般指南: 检查有效期: 在开始续订流程之前,请检查SSL证书的当前到期日期。您通常可以在SSL证…

【PyTorch】深入解析 `with torch.no_grad():` 的高效用法

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言一、with torch.no_grad(): 的作用二、with torch.no_grad(): 的原理三、with torch.no_grad(): 的高效用法3.1 模…

24 初识C++

目录 一、C概念 (一)C是什么 (二)C的历史 (三)C参考文档 二、第一个C程序 三、C的域 四、命名空间 namespace (一)namespace 的作用 (二)namespace 的…

如何从 SIM 卡恢复短信?这篇专业教程文章会帮到你

您是 Android 手机的忠实用户吗?您是否定期通过打电话、发送短信或在 WeChat 上聊天来与朋友和家人保持联系?如果你这样做,我相信你的手机上一定有很多短信,这些短信对于保存你与他人聊天的内容非常重要。您是否有这样的经验&…

碧桂园服务上海项目获评“2024年度上海市物业管理优秀示范项目”

近日,上海市物业管理行业协会发布《关于2024年度上海市物业管理优秀示范项目评定结果的公示》官方红头文件。文件对上海市393个物业管理优秀示范项目进行公示。 上海联源物业发展有限公司露香园项目、静鼎安邦府邸项目、佘山东郡项目和上海金晨物业经营管理有限公司…

mac 安装brew并配置国内源

​ 前置条件 - Xcode 命令行工具 一行代码安装Homebrew 添加到路径(PATH) - zsh shell为例 背景介绍 最近重装了我的MAC mini (m1 芯片), 很多软件都需要重新安装,因为后续还需要安装一些软件,所以想着安装个包管理软件 什么…

苹果手机通话记录怎么恢复?已总结了4个方法,快速恢复

苹果手机的通话记录是我们联系好友与家人的重要方式之一。如果我们忘记储存重要好友或家人的联系方式,但是曾经有过通话,那我们就可以在苹果手机的通话记录中找到重要的联系人。但是,如果这些通话记录不小心被删除了,那苹果手机通…

ArkUI-状态管理最佳实践

ArkUI-状态管理最佳实践 概述合理选择装饰器使用监听和订阅精准控制组件刷新Watch装饰器监听数据源使用自定义事件发布订阅 概述 在声明式UI编程范式中,UI是应用程序状态的函数,应用程序状态的修改会更新响应的UI界面。ArkUI采用了MVVM模式。 ArkUI提…

2024年第十届数维杯国际大学生数学建模挑战赛

竞赛介绍 为了培养学生的创新意识及运用数学方法和计算机技术解决实际问题的能力,内蒙古创新教育学会、内蒙古基础教育研究院决定主办2024年第十届数维杯国际大学生数学建模挑战赛(国际赛)。 数维杯大学生数学建模挑战赛每年分为两场&#…

uniapp开发鸿蒙,是前端新出路

uniapp开发鸿蒙,是前端新出路吗? 相信不少前端从业者一听uniapp支持开发鸿蒙Next后非常振奋。小编作为7年前端也是非常激动,第一时间体验了下。在这里也给大家分享一下我的看法 uniapp开发鸿蒙优势 1.对于前端开发者而言,几乎无需…

基于51单片机的跑马串口调试波形发生器proteus仿真

地址: https://pan.baidu.com/s/1WTjU_hRJ-fLMTT5g1q-NlA 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectro…

嵌入式全栈开发学习笔记---C++(多态)

目录 多态polymorphic 多态成立的三个条件 1、要有继承 2、要有虚函数重写 3、用父类指针(父类引用)指向子类对象 重载与重写区别 动态联编和静态联编 多态原理 构造函数中调用虚函数能否实现多态? 用父类指针指向子类数组 虚析构函数 动态类型识别 第…

【免越狱】iOS任意版本号APP下载

下载地址 https://pan.quark.cn/s/570e928ee2c4 软件介绍 下载iOS旧版应用,简化繁琐的抓包流程。一键生成去更新IPA(手机安装后,去除App Store的更新检测)。 软件界面 使用方法 一、直接搜索方式 搜索APP,双击选…

Vue3 + Ts + Vite项目 websoket封装使用

文章目录 一、安装二、封装三、请求地址配置3.1 将接口地址放到 public3.2 引入 ipconfig.js 文件3.3 全局类型声明 四、页面使用4.1 引用4.2 注册 五、说明 一、安装 npm npm install websocket --save-devpnpm pnpm install websocket --save-dev二、封装 在 /src/utils …

Haskell爬虫:连接管理与HTTP请求性能

爬虫技术作为数据抓取的重要手段,其效率和性能直接影响到数据获取的质量与速度。Haskell,作为一种纯函数式编程语言,以其强大的类型系统和并发处理能力,在构建高效爬虫方面展现出独特的优势。本文将探讨在Haskell中如何通过连接管…

OVMR:华为北大联手,基于多模态融合的SOTA开放词汇识别 | CVPR 2024

即插即用的方法OVMR将新类别的多模态线索嵌入到VLM中,以增强其在开放词汇识别中的能力。它最初利用多模态分类器生成模块将示例图像嵌入到视觉标记中,然后通过推断它们与语言编码器的上下文关系来自适应地融合多模态线索。为了减轻低质量模态的负面影响&…

[DICOM活久见] 序列内部的RescaleIntercept不同导致的问题

本文由Markdown语法编辑器编辑完成. 1. 背景: 本文记录在工作中遇到的一些比较罕见的dicom图像. 这对于在未来工作中, 处理图像时, 需要考虑方案的完整性, 会有很大的帮助. 本文介绍的, 是目前我工作10年来, 头一次见到的一个CT序列, 它的序列内的RescaleIntercept值, 不是完…

Ubuntu解压7z压缩包方法

0 Preface/Foreword 1 解压缩指令 1.1 环境安装和检查 环境:检测ubuntu环境是否装有7z工具,如果没有,需要手动安装,安装方法如下: sudo apt-update sudo apt-get install p7zip-full 检测工具是否安装成功&#xff…