Pytorch之MobileNetV3图像分类

news2024/11/16 13:41:09
  • 💂 个人主页:风间琉璃
  • 🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)订阅专栏

前言

由于传统卷积神经网络, 内存需求大、 运算量大导致无法在移动设备以及嵌入式设备上运行。VGG16的权重大小有450M,而ResNet中152层的模型,其权重模型644M,这么大的内存需求是明显无法在嵌入式设备上进行运行的。而网络应该服务于生活,所以轻量级网络的很重要的。

MobileNet 模型是 google 在 2017 年针对手机或者嵌入式提出轻量级模型。MobileNet是一系列的轻量化神经网络,包括MobileNet v1、MobileNet v2和MobileNet v3

MobileNet v1是在VGG网络的基础上引入了深度可分离卷积(Depthwise Separable Convolutions,从而使得卷积参数大大减少,达到轻量化的效果。

MobileNet v2在v1的基础上引入了倒残差结构(Bottleneck Residual Block并加入了shortcut连接,以进一步提高网络的性能

MobileNet v3使用了 NAS NetAdapt 算法搜索最优的模型结构,同时对模型一些结构进行了改进,例如在 MobileNet v2 的 Bottleneck Residual Block 基础上引入 Squeeze-and-Excitation

 一、MobileNet v1

Mobilenet v1是一种轻量级的神经网络结构,用于图像分类和目标检测任务。它的设计目标是在保持较高准确率的同时,减少了模型的计算复杂度和参数量。

Mobilenet v1使用了深度可分离卷积(depthwise separable convolution)来减少计算量。深度可分离卷积将标准卷积分为深度卷积逐点卷积两个步骤,从而降低了计算量和参数量。此外,Mobilenet v1还使用了全局平均池化来减少全连接层的数量,进一步减小了模型的规模。

介绍MobileNet v1可以使用一句话概括,MobileNet v1只要将把VGG中的标准卷积层换成深度可分离卷积即可。

1.深度可分离卷积

MobileNet模型是基于深度可分离卷积,这是一种分解卷积的形式。这种形式将标准卷积分解为一个深度卷积和一个称为逐点卷积的1x1的卷积

所以深度可分离卷积应该由两个部分组成,即深度卷积和逐点卷积。用下图直观进行表示:

​ 

先了解标准卷积的计算过程:对所有输入通道用相同的卷积核得到不同通道特征,将不同通道特征组合起来使得输出特征包含每个输入的特征。

​ 

特点:

  • 输入特征矩阵channel = 卷积核channel
  • 卷积核个数 = 输出特征矩阵channel

 (1)深度卷积(Depthwise convolution)

深度卷积对每一个输入通道应用一个单独的卷积核(与标准卷积不同,标准卷积对每一个输入通道应用同一个卷积核)得到特征图,此时,每张特征图仅与一个输入通道和其对应卷积核相关,各个通道之间特征图不关联

DW卷积中的每一个卷积核,只会和输入特征矩阵的一个channel进行卷积计算,所以输出的特征矩阵就等于输入的特征矩阵。

特点:

  • 卷积核channel=1
  • 输入特征矩阵channel=卷积核个数=输出特征矩阵channel

(2)逐点卷积(Pointwise convolution)

点卷积(1x1卷积)将深度卷积的输出特征图进行线性组合后再输出,使得最后的输出特征都包含每个输入特征,即将深度卷积输出的不关联的特征图关联起来

点卷积将标准卷积层中卷积核大小换成1x1即可得到,其主要作用就是对特征图进行升维和降维

(3)计算量对比

图为标准卷积与深度可分离卷积对应的计算量

其中D_{F} 为输入Feature Map的宽度和高度(假设输入特征图与使用的卷积核均为正方形),

M为输入通道数 / 输入Feature Map深度),N为输出通道数,D_{K}​为卷积核大小。

然后引入计算量的定义:

参数数量(params):关系到模型大小,单位通常为M,通常参数用 float32 表示,所以模型大小是参数数量的 4 倍。

FLOPS(floating point operations per second):注意全大写,指每秒浮点运算次数,理解为计算速度,是一个衡量硬件性能的指标。

FLOPs(floating point operations):注意s小写(s表复数),指浮点运算数,理解为计算量

可以用来衡量算法/模型的复杂度。这关系到算法速度,大模型的单位通常为 G,小模型单位通常为 M。

注意在深度学习中,我们用FLOPs,也就是计算量,用来衡量算法/模型的复杂度。

 不同神经网络层的参数数量和计算量估计方法:

Conv2d标准卷积层:
Input: H ∗ W ∗ N 
Output:H ∗ W ∗ M 
Filters: K ∗ K
==>
Params: K ∗ K ∗ M ∗ N 
FLOPs: H ∗ W ∗ K ∗ K ∗ M ∗ N 

FC全连接层:
Input: N
Output: M 
==>
Params: M ∗ N 
FLOPs: M ∗ N

Depthwise conv2d深度卷积:
Input: H ∗ W ∗ M 
Output: H ∗ W ∗ M
Filters: K ∗ K
==>
Params: K ∗ K ∗ M 
FLOPs: H ∗ W ∗ K ∗ K ∗ M  

Pointwise conv2d点卷积:
将标准卷积层中卷积核大小换成1x1即可得到
Params: M ∗ N
FLOPs: H ∗ W ∗ M ∗ N

从上面我们可以得到,使用深度可分离卷积后得到的总计算量为DF*DF*DK*DK + DF*DF*M*N。

将深度可分离卷积的总计算量与标准卷积相比较,可以得到下面式子,


深度可分离卷积的计算量是标准卷积 的 1/N +1/( Dk * Dk)倍。通常情况下,N (输出通道)远大于卷积核尺寸,故1/N +1/( Dk * Dk) 近似等于 1/( Dk * Dk)。

当卷积核的大小为Dk =3 时,深度可分离卷积的计算量约为标准卷积的1/9倍。

2.MobileNet v1网络结构

(1)核心层(深度可分离卷积层)

上图左边是标准卷积层,右边是V1的卷积层。V1的卷积层,首先使用3×3的深度卷积提取特征,接着是BN层、ReLU层,这里的第一个ReLU是指的ReLU6,在之后是逐点卷积,BN和ReLU。这也很符合深度可分离卷积,将左边的标准卷积拆分成右边的一个深度卷积和一个逐点卷积

Relu6(抑制其最大值):

公式:当 x > 6时,其导数也为0。

主要是为了在移动端float16的低精度的时候,也能有很好的数值分辨率,如果对ReLu的输出值不加限制,那么输出范围就是0到正无穷,而低精度的float16无法精确描述其数值,带来精度损失。

ReLU和ReLU6图表对比:

(2)宽度因子和分辨率因子

 MobileNetV1还使用宽度因子和分辨率因子进一步减小模型参数数量和计算量,当然,在一定程度上会降低模型精确度。

宽度因子Width Multiplier(α):
α ∈ ( 0 , 1 ]作用于通道数量上,通常取1, 0.75, 0.5和0.25

由上式可得,模型计算量和参数量大约降低a^{2}

分辨率因子Resolution Multiplier(ρ)
ρ ∈ ( 0 , 1 ] 作用于输入图像上,通常取为224,192,160和128(常隐式表示),作用后模型大小,参数量不变,计算量降低为\rho ^{2}   

(3)网络结构

MobileNetV1 网络结构如下图所示,其中 Conv 表示普通卷积,Conv dw 表示 DW 卷积操作。

整个MobileNet v1网络除了平均池化层和softmax输出层外,共28层,其中深度卷积层有13层。

第1层为3x3的标准卷积,s2进行下采样。接下来26层为核心层结构(深度可分离卷积层),并且其中的部分深度卷积会利用s2进行下采样。最后采用平均池化层将feature变成1x1,根据预测类别大小全连接层加softmax层输出


除全连接层不使用激活函数,而使用softmax进行分类之外,其他所有层都使用BatchNorm和ReLU。

MobileNet v1网络有一个缺点:DW 卷积核很容易废掉,即卷积核参数大部分为 0

3.创新点

(1)MobileNetV1提出了深度可分离卷积的概念,替代了标准卷积操作,大大减少了参数数量和计算量。


(2)提出两个超参数宽度因子和分辨率因子,可根据现实情况需求,调整输入输出通道数量和输入图像尺寸,可自由权衡精度与参数数量,计算量。


(3)使用BN加快模型收敛速度,提高模型精度和泛化能力。
 

二、MobileNet v2

在MobileNet v1的实际训练过程中,深度卷积时卷积核特别容易废掉,即训练完成后卷积核参数是大部分为0。

在 2018 年 googleNet 提出了 v2 版本的 mobileNet,v2认为是Relu函数造成这样的原因:在输入维度是2,3时,输出和输入相比丢失了较多信息;但是在输入维度是15到30时,输出则保留了输入的较多信息。如下图所示,

所以在使用Relu函数时,当输入的维度较低时,会丢失较多信息,因此我们这里可以想到两种思路,一是把Relu激活函数替换成别的,二是通过升维将输入的维度变高。

1.Linear Bottlenecks

从v1可知,深度可分离卷积层的构成:首先是一个3x3的深度卷积,其次是BN、Relu层,接下来是1x1的逐点卷积,最后又是BN和Relu层。

既然是ReLU导致的信息损耗,将ReLU替换成线性激活函数。但是需要注意的是,并不是将所有的Relu激活都换成了线性激活,而是将最后一个ReLU6变成线性激活函数,如下图。变换后的模块称为Linear Bottlenecks

线性瓶颈(Linear Bottlenecks) 在高维空间上,如 ReLU 这种激活函数能有效增加特征的非线性表达,但是仅限于高维空间中,如果降低维度,再使用 ReLU 则会破坏特征。

因此在 mobileNets V2 中提出了 Linear Bottlenecks 结构,在执行了降维的卷积层后面,不再加入类似 ReLU 等的激活函数进行非线性转化,这样做的目的是尽可能的不造成信息的丢失

2.Inverted Residuals

Inverted Residuals(倒残差结构),通过下图可以看出,左侧为ResNet中的残差结构,其结构为1x1卷积降维--->3x3卷积--->1x1卷积升维;右侧为MobileNetV2中的倒残差结构,其结构为1x1卷积升维--->3x3DW卷积--->1x1卷积降维。V2先使用1x1卷积进行升维的原因高维信息通过ReLU激活函数后丢失的信息更少

倒残差结构(Inverted residual) 在 ResNet 为了构建更深的网络,提出了 ResNet 的另一种形式,一个 bottleneck 由一个 1 x 1 卷积(降维),3 x 3 卷积和 1 x 1 卷积(升维)构成。

在 MobileNet 中,DW 卷积的层数是输入通道数,本身就比较少,如果跟残差网络中 bottleneck 一样,先压缩,后卷积提取,可得到特征就太少了。采取了一种逆向的方法—先升维,卷积,再降维

ResNet网络:残差结构是先用1*1卷积降维,3x3卷积,1x1卷积升维,两头大中间小。

MobileNet v2:残差结构是先用1*1卷积升维,dw卷积,1x1卷积降维,两头小中间大。

所以MobileNet v1和v2的block如下:

左边是v1的block,没有Shortcut并且带最后的ReLU6。

右边是v2的加入了1×1升维,引入Shortcut并且将最后的ReLU改为Linear。步长为1时,先进行1×1卷积升维,再进行深度卷积提取特征,再通过Linear的逐点卷积降维。将input与output相加,形成残差结构。

步长为2时,因为input与output的尺寸不符,因此不添加shortcut结构,其余均一致。当stride=1且输入特征矩阵与输出特征矩阵shape相同时才有shortcut链接

3.MobileNet v2网络结构

MobileNet v2网络结构如下图所示,其中 conv2d表示普通卷积,bottleneck表示右边的block。

上图是MobileNet v2网络的结构表,其中t代表的是扩展因子(倒残差结构中第一个1x1卷积的扩展因子),c代表输出特征矩阵的channel,n代表倒残差结构重复的次数,s代表步距(注意:当有多个bottleneck,  s只针对第一个bottleneck这里的步距只是针对重复n次的第一层倒残差结构,后面的都默认为1)。

三、MobileNet v3

MobileNetV3,是谷歌在2019年3月21日提出的网络架构。首先,引入眼帘的是这篇文章的标题"Searching for MobileNetV3",“searching”一词就把V3的论文的核心观点展示了出来——用神经结构搜索(NAS)来完成V3参数的设计。

想较于之前的网络,不管是VGG、ResNet、MobileNetV1、MobileNetV2,网络结构都是我们自己手动去设计的,如网络的层数、卷积核大小、步长等等参数都需要自己设置。而NAS通过计算机来实现最优的参数设定,通过比较不同参数的网络模型效果,从而选择最优的参数设置。但是这也对计算机的性能要求也特别的高。
 

主要特点:

①论文推出两个版本:Large 和 Small,分别适用于不同的场景。

②使用NetAdapt算法获得卷积核和通道的最佳数量。

③继承V1的深度可分离卷积。

④继承V2的具有线性瓶颈的残差结构。

⑤引入SE通道注意力结构。

⑥使用了一种新的激活函数h-swish(x)代替Relu6,h的意思表示hard。

⑦使用了Relu6(x + 3)/6来近似SE模块中的sigmoid。

⑧修改了MobileNetV2后端输出head。

1.SE模块

引入SE模块,主要为了利用结合特征通道的关系来加强网络的学习能力它首先是将特征图的每个通道都进行平均池化,然后进行两个全连接层得到一个输出结果,这个结果会和原始的特征图进行相乘,得到新的特征图

网络的左半部分是一个传统的卷积变换,忽略掉这一部分并不会影响我们的SE模块的理解。直接看一下后半部分,其中 U 是一个 W×H×C 的Feature Map, (W,H) 是图像的尺寸, C是图像的通道数。 

 首先是Fsq(⋅) (Squeeze操作),顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个 1×1×C 的特征向量,特征向量的值由U确定。这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的

Squeeze部分的作用是获得Feature Map U的每个通道的全局信息嵌入(特征向量)。在SE block中,这一步通过VGG中引入的Global Average Pooling(GAP)实现的,即通过求每个通道C Feature Map的平均值

其次是 Excitation 操作,它是一个类似于循环神经网络中门的机制。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。

 最后是一个 Reweight 的操作,将 Excitation 的输出的权重看做是经过特征选择后的每个特征通道的重要性然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定

以在Mobilenetv3中的应用为例进行理解,

首先下图左上角表示为四个通道的特质图,经平均池化后得到左下角的图;再次经过两次全连接层后,转化成了右下角的图,最后用右下角的0.5、0.3,0.1,0.2(Conv1每个channel的权值系数)分别乘原始的特质图,则得到最终的右上角的图。

2.耗时层结构

在MobileNet v3中,作者重新设计耗时层结构,首先减少第一个卷积层卷积核个数,从原来的32个变为16个,使用ReLU或者swich,其准确率几乎相同,并且节省了2ms和1000万madds。

其次,精简了Last Stage。Original Last Stage是通过NAS算出来的,但最后实际测试发现Efficient Last Stage结构可以在不损失精度情况下去除一些多余的层,如下图所示,

移除之前的瓶颈层连接,进一步降低网络参数。可以有效降低11%的推理耗时,而性能几乎没有损失。 

3.ReLu6和h-swish激活函数

在v1和v2版本中用到的Relu激活函数是Relu6激活函数,ReLu6激活函数如下图所示,在ReLU的基础上加了最大值6进行限制。

v3版本使用的激活函数为h-swish,其图像和表达式如下图所示:图中包括了一些其他相关的一些函数表达式及图像。

采用h-swish(hardswish),计算速度相对较快,有利于量化 

h-swish是基于swish的改进,swish最早是在谷歌大脑2017的论文Searching for Activation functions所提出 。

swish论文的作者认为,Swish具备无上界有下界、平滑、非单调的特性。并且Swish在深层模型上的效果优于ReLU。仅仅使用Swish单元替换ReLU就能把MobileNet,NASNetA在 ImageNet上的top-1分类准确率提高0.9%,Inception-ResNet-v的分类准确率提高0.6%。

v3也利用swish当作为ReLU的替代时,它可以显著提高神经网络的精度。但是呢,作者认为这种非线性激活函数虽然提高了精度,但在嵌入式环境中,是有不少的成本的。原因就是在移动设备上计算sigmoid函数是非常明智的选择。所以提出了h-swish。

可以用一个近似函数来逼近swish,作者选择的是基于ReLU6,作者认为几乎所有的软件和硬件框架上都可以使用ReLU6的优化实现。其次,它能在特定模式下消除了由于近似sigmoid的不同实现而带来的潜在的数值精度损失。

作者认为随着网络的深入,应用非线性激活函数的成本会降低,能够更好的减少参数量。作者发现swish的大多数好处都是通过在更深的层中使用它们实现的。因此,在V3的架构中,只在模型的后半部分使用h-swish(HS)。 

4.网络总体结构

MobileNet v3特有的block结构如下,

当stride=1且输入特征矩阵与输出特征矩阵shape相同时才有shortcut链接

作者针对不同需求,通过NAS得到两种结构,一个是MobilenetV3-Large,结构如下图:

①Input表示输入尺寸
②Operator中的NBN表示不使用BN,最后的conv2d 1x1相当于全连接层的作用
③exp size表示bottleneck中的第一层1x1卷积升维,维度升到多少(第一个bottleneck没有1x1卷积升维操作)
④out表示bottleneck输出的channel个数
⑤SE表示是否使用SE模块

⑥NL表示使用何种激活函数,HS表示HardSwish,RE表示ReLu
⑦s表示步长(s=2,长宽变为原来一半)

 四、网络实现

结束语

感谢阅读吾之文章,今已至此次旅程之终站 🛬。

吾望斯文献能供尔以宝贵之信息与知识也 🎉。

学习者之途,若藏于天际之星辰🍥,吾等皆当努力熠熠生辉,持续前行。

然而,如若斯文献有益于尔,何不以三连为礼?点赞、留言、收藏 - 此等皆以证尔对作者之支持与鼓励也 💞。

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

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

相关文章

多线程JUC

文章目录 多线程一.什么是多线程二.多线程的两个概念三.线程的实现方式四.常见的成员方法五.线程安全的问题六.死锁七.生产者和消费者 多线程 一.什么是多线程 进程:是程序的基本执行实体 理解:每一个运行的软件就是一个进程 线程:是操做系统能够进行运算调度的最小单位,它…

Halcon 从基础到精通-02- 开发基于HALCON的应用

HALCON的应用通过HDevelop应用来构建原型。HDevelop的开发主要有3种形式。 Start from Scratch: 手动通过脚本,把HDevelop的代码转化为一般的编程语言。如,上一节提到,其实,每个operators,也许并不一样,需要依据HALC…

开发工具箱 —— it-tools

文章目录 开发工具箱 —— it-tools安装访问效果 开发工具箱 —— it-tools 安装 docker 安装教程:在 CentOs7 中安装宝塔面板和 Docker(包括MySQL,Redis) docker 安装命令 docker run -d --name it-tools --restart unless-st…

[unity]保存文件的路径设置

序 比如,序列化了一个数组,保存到磁盘上。 原来的路径是"D://test.bin",能跑,但是有点问题:序列化出来的文件和原项目离的太远,不好管理。 要是能保存到unity工程的文件夹里就好了。这个路径该…

c#设计模式-行为型模式 之 责任链模式

🚀简介 又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对 象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为…

学员自述:上位机编程培训经历

、大家好,我是华山编程培训中心的学员 之前是从事PLC编程工作的,在C#语言这一块是零基础,之前也尝试过自学,但对于类啊继承啊堆栈这些基本的概念始终是无法理解,直到看到华山培训的视频,并参与朱老师的直播…

番外--命令操作

------------- task00: 00:常用文件目录类命令1-18.(pwd; cd;ls; more;less;head;tail; mkdir;rmdir;cp;mv;rm&#xff1b…

pandas 笔记:asfreq

1 方法介绍 asfreq 是一个在 Pandas 时间序列数据分析中常用的方法。这个方法主要用于改变时间序列的频率。asfreq 可以帮助我们将一个时间序列从一个频率转换为另一个频率 2 基本用法 DataFrame.asfreq(freq, methodNone, howNone, normalizeFalse, fill_valueNone)3 参数说…

实验室超声波(提取)萃取技术有哪些实际的应用?

梵英超声(fanyingsonic)实验室超声波清洗机 超声波具有“空化现象”,“机械振动”以及“热效应”等特性。“空化现象”可产生瞬间几千个压力,使提取介质的微小气泡压缩、爆裂、破碎被提取原料和细胞壁,加速天然药用成分的溶出,“机…

微服务技术栈-Docker应用部署

文章目录 前言一、数据卷二、Docker 应用部署1、MySQL部署2、Tomcat部署3、Nginx部署4、Redis部署5、Kafka部署 总结 前言 之前文章讲到过,docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器,接下来我们将…

虫情测报灯——一种农业虫情防治工具

KH-CQPest虫情测报灯是一种农业虫情防治工具,它可以通过光源或药物诱虫的方式,吸引害虫撞击撞击屏,通过远红外自动处理技术,无公害杀死害虫的同时保存害虫标本,利用高像素的摄像头拍照、农业四情测报平台识别害虫&…

简单两步实现离线部署ChatGPT,ChatGPT平替版,无需GPU离线搭建ChatGPT

文末附主程序安装包和大模型参数文件~ 演示效果如下图所示: 一、使用方法 软件主要分为两个部分:GPT4ALL软件主体(主程序)模型参数(离线模型),如果使用API Key的话则不需要下载模型参数。 可以…

家居家纺经营配送小程序商城的作用是什么

家居家纺产品是每个家庭都必备的,无论商场还是小摊贩,市场中经营商家数量都比较多,而随着互联网电商发展,在实际经营中,传统线下商家也面临多个难题: 首先就是获客问题,线下渠道推广宣传方式单…

深刻解析数据库技术的要点以及应对策略 (软件设计师笔记)

😀前言 在信息化的时代背景下,数据已经成为了推动各行各业发展的核心要素之一。数据的储存、管理、维护、和获取变得尤为关键,确保信息的高效流通和决策的科学性。数据库技术,正是在这一背景下发挥着举足轻重的作用,它…

源码上分析Vue2和Vue3的响应式原理

本文节选自我的博客:源码上分析Vue2和Vue3的响应式原理 💖 作者简介:大家好,我是MilesChen,偏前端的全栈开发者。📝 CSDN主页:爱吃糖的猫🔥📣 我的博客:爱吃糖…

基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码

基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码 文章目录 基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.帝国主义竞争优化BP神经网络3.1 BP神经网络参数设置3.2 帝国主义竞争算…

【BI看板】Superset2.0+图表二次开发初探

Superset图表功能也很丰富了,但一些个性化的定制需求就需要二次开发了。网上二开的superset版本大多是0.xxx版本的或1.5xxx版本,本次用的是2.xxx。 源码相关说明 源码目录 superset-2.0\superset-frontend\plugins\plugin-chart-echarts 插件相关资料 官…

图片批量编辑器,轻松拼接多张图片,创意无限!

你是否曾经遇到这样的问题:需要将多张图片拼接成一张完整的画面,却缺乏专业的图片编辑技能?现在,我们为你带来一款强大的图片批量编辑器——让你轻松实现多张图片拼接,创意无限! 这款图片批量编辑器可以帮助…

IP地址划分知识点总结

目录 1.IP数据报头 2.IP地址 3.IP地址分类 4.特殊IP地址 1.IP数据报头 网络之间的互连协议(Internet Protocol,IP)是方便计算机网络系统之间相互通信的协议,是各大厂家遵循的计算机网络相互通信的规则。 IP数据报报头如下图所示: (1)版…

计算机竞赛 题目:基于python的验证码识别 - 机器视觉 验证码识别

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于pyt…