yolov9文献阅读记录

本文记录了yolov9文献的阅读过程,对主要内容进行摘选翻译,帮助理解原理和应用,包括摘要、主要贡献、网络结构、主要模块,问题描述和试验对比等内容。

    • 文献
    • 摘要
    • 前言摘选
    • 主要贡献
    • 相关工作
      • 可逆性结构
      • 辅助监督
    • 问题描述
      • 信息瓶颈原理
      • 可逆函数
    • 网络结构
      • 可编程梯度信息
        • 辅助可逆支路
        • 多层次的辅助信息
      • 广义ELAN(GELAN)
    • 试验
      • 对比实验
      • 消融实验
      • 可视化
    • 结论

文献

在这里插入图片描述

摘要

在这里插入图片描述

现在的深度学习方法主要集中在如何设计最合适的目标函数,使得模型的预测结果能够最接近地面真值。同时,一个合适的架构,可以方便地获取足够的信息预测的设计。现有的方法忽略了一个事实,即当输入数据进行逐层特征提取和空间变换时,会丢失大量的信息。本文将深入研究数据在深度网络中传输时造成数据丢失的重要原因,即信息瓶颈和可逆函数。我们提出了可编程梯度信息(PGI)的概念,以应对深度网络实现多目标所需的各种变化。PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权值。此外,设计了一种新的轻量级网络结构–基于梯度路径规划的广义高效层聚合网络(GELAN)。GELAN的架构证实了PGI在轻量化模型上取得了卓越的成果。我们验证了所提出的GELAN和PGI在MSCOCO数据集上的基于对象的目标探测。结果表明**,Gelan只使用传统的卷积算子来获得比基于深度卷积的最新方法更好的仪器利用率**。PGI可用于从轻量级到大型的各种型号它可以用来获取完整的信息,这样从零开始训练的模型比使用大型数据集预先训练过的最先进的模型能够获得更好的结果,比较结果如图1所示。源代码在 代码。
在这里插入图片描述
图一。MS COCO数据集上实时目标检测器的比较。GELAN和基于PGI的对象检测方法超过了所有以前的训练从头开始的对象检测性能的方法。在精度方面,新方法优于RT DETR[43]使用大型数据集进行预训练,并且优于基于深度卷积的设计 YOLO MS[7]参数利用率方面

前言摘选

在这里插入图片描述

在深度网络中,输入数据在前馈过程中丢失信息的现象通常被称为信息瓶颈。[59],其示意图如图2所示。目前,缓解这一现象的主要方法有以下几种:(1)可逆结构的使用【3,16,19】:这种方法主要使用重复输入数据,并以显式的方式维护输入数据的信息;(2)掩蔽建模【1,6,9,27,7173】的使用:它主要使用重构损失,并采用隐式的方式最大化提取的特征并保留输入信息;(3)深度监控概念的引入【28,51,54,68】:它使用没有丢失太多重要信息的浅层特征,预先建立从特征到目标的映射,以确保重要信息可以传输到更深的层。然而,上述方法在训练过程和推理过程中都存在着不同的弊端。例如,一个可逆的架构需要附加层结合重复输入数据,这将显着增加的推断成本。此外,由于输入数据层到输出层不能有一个太深的路径,这种限制将使它难以在训练过程中建模高阶语义信息领先”之义塞斯对于屏蔽建模,其重建损失有时与目标损失相冲突。此外**,大多数掩码机制也会产生与数据不正确的关联**。对于深层监督机制,会产生误差积累,如果浅层监督在训练过程中丢失信息,后续层将无法检索到所需信息。上述现象在困难的任务和小模型上会更加显著
在这里插入图片描述
如图2所示。不同网络结构随机初始权值输出特征映射的可视化结果:(a)输入图像,(b)PlainNet、©ResNet(d)CSPNet和(e)拟议的GELAN。从图中我们可以看到,在不同的结构中,提供给目标函数计算损失的信息都有不同程度的丢失,而我们的结构可以保留最完整的信息,并为目标函数的计算提供最可靠的梯度信息

在这里插入图片描述

在这里插入图片描述

为了解决上述问题,我们提出了一个新的概念,这是可编程梯度信息(PGI)。其概念是通过辅助可逆分支生成可靠的梯度,使深层特征仍能保持执行目标任务的关键特征。辅助可逆支路的设计避免了传统深度监控过程中集成多径特性可能带来的信号损失。换句话说,我们在不同的语义层上编程梯度信息传播,从而达到最佳的训练效果。PGI的可逆结构是建在辅助分支上,所以没有额外的费用。由于PGI可以自由选择适合目标任务的损失函数,它也克服了掩模建模所遇到的问题。提出的PGI机制可以应用于各种规模的深度神经网络比只适用于非常深的神经网络的深度监督机制更通用

主要贡献

在这里插入图片描述
在本文中,我们还设计了基于ELAN的广义ELAN(GELAN),同时考虑了参数个数、计算复杂度、精度和推理速度。这种设计允许用户为不同的推理设备任意选择适当的计算块。我们将提出的PGI和GELAN相结合,设计了新一代的YOLO系列目标检测系统,我们称之为YOLOv9。我们使用MSCoco数据集进行实验,实验结果验证了我们提出的YOLOv9在所有的比较中实现了最高的性能。
在这里插入图片描述

我们将本文的贡献总结如下:
1.我们从可逆功能的角度对现有的深度神经网络架构进行了理论分析成功地解释了许多过去难以解释的现象。在此基础上设计了PGI和辅助可逆转分支,取得了良好的效果。
2.我们设计的PGI解决了深度监控只能用于深度神经网络架构的问题,从而使新的轻量级架构真正应用到日常生活中
3.我们设计的GELAN仅使用传统的卷积实现了比基于最先进技术的深度卷积设计更高的参数利用率,同时显示出轻便、快速、准确的巨大优势
4.结合提出的PGI和GELAN,对象检测性能的YOLOv9在MSCOCO数据集大大超过现有的实时对象检测器在各个方面。

相关工作

在这里插入图片描述

本文选择YOLOv7[63],已经在各种计算机视觉任务和各种场景中被证明是有效的,以此为基础来开发所提出的方法。我们使用GELAN改进的架构和训练过程与建议的PGI。上述新方法使YOLOv9成为新一代的顶级实时目标检测器。

可逆性结构

在这里插入图片描述

可逆体系结构的操作单元【3,16,19】必须保持可逆转换的特性,这样就可以保证输出特征图中的每一个层操作单元可以保留完整的原始信息。之前,RevCol[3]将传统的可逆单元推广到多层次,从而扩展了不同层次单元所表示的级数。通过对各种神经网络架构的文献回顾,我们发现有许多高性能的架构具有不同程度的可逆特性。例如,Res2Net模块[11]以分层方式将不同的输入分区与下一个分区相结合,并在向后传递之前将所有转换的分区连接起来。CBNet【34,39】重新介绍了原始输入数据通过复合主干获得完整的原始信息,并通过各种复合方法获得不同层次的多层次可逆信息。这些网络架构通常具有优异的参数利用率,但额外的复合层会导致推理速度缓慢动态Det[36]结合了CBNet[34]而高效的实时目标检测器YOLOv7[63]以在速度、参数数量和精度之间实现非常好的权衡。本文介绍了DynamicDet体系结构,作为设计可逆分支的基础。此外,可逆信息被进一步引入到所提出的PGI中。提出的新结构在推理过程中不需要额外的连接,因此它可以充分保持速度,参数量和准确性的优势

辅助监督

在这里插入图片描述

深度监督【28,54,68】是最常见的辅助监控方法它通过在中间层中插入额外的预测层来进行训练。特别是在基于变压器的方法中引入的多层解码器的应用是最常见的。另一种常用的辅助监测方法是利用相关的元信息对地物图进行预处理,并使其具有目标任务所需的属性【18,20,24,29,76】。这种类型的例子包括使用分割损失或深度损失,以提高对象检测器的准确性。重新近年来,在文献【53,67,82】中有许多报道采用不同的标记分配方法来产生不同的辅助监督机制,以加快模型的收敛速度,同时提高模型的鲁棒性。然而,辅助监督机制通常只适用于大型模型,应用于轻量级模型时,容易产生欠参数化现象,使性能变差。我们提出的PGI设计了一种重新编程多层次语义信息的方法,这种设计使得轻量级模型也可以从辅助监督机制中受益

问题描述

在这里插入图片描述

人们通常将深度神经网络的收敛困难归结为梯度消失或梯度饱和等因素,而这些现象在传统的深度神经网络中确实存在。然而,现代深度神经网络通过设计各种归一化和激活函数,已经从根本上解决了上述问题。然而,深度神经网络仍然存在收敛速度慢或收敛效果差的问题。在本文中,我们进一步探讨上述问题的性质。通过对信息瓶颈的深入分析,我们推断出该问题的根本原因是最初来自一个非常深层的网络的初始梯度在传输后很快丢失了大量实现目标所需的信息。为了证实这一推论,我们用初始权值对不同结构的深度网络进行前馈,然后在图2中对它们进行可视化和可视化。显然,PlainNet在深层目标检测中丢失了很多重要的信息。至于ResNet.CSPNet和GELAN能够保留的重要信息的比例,确实与训练后能够获得的准确性成正相关。我们进一步设计了基于可逆网络的方法来解决上述问题的原因。在这一节中,我们将阐述我们对信息瓶颈原理和可逆函数的分析

信息瓶颈原理

在这里插入图片描述

根据信息瓶颈原理,我们知道数据X在进行转换时可能会造成信息丢失,如式。

在深度神经网络中,f(·)和g(·)分别代表了两个连续层的操作。由式1可以预测随着网络层数的增加,原始数据将更容易丢失。然而,深度神经网络的参数是基于网络的输出以及给定的目标,然后通过计算损失函数生成新的梯度后更新网络。正如人们可以想象的那样,更深层次的神经网络的输出不太能够保留有关预测目标的完整信息。这将有可能在网络训练过程中使用不完整的信息,从而导致不可靠的梯度和较差的收敛

在这里插入图片描述
解决上述问题的一种方法是直接增大模型的尺寸。当我们使用大量的参数来构造模型时,它更有能力对数据进行更完整的转换。上述方法允许即使在数据前馈过程中丢失的信息仍然有机会保留足够的信息来执行到目标的映射。上述现象解释了为什么在大多数现代模型中宽度比深度更重要。然而,上述结论并不能从根本上解决超深度神经网络中梯度不可靠的问题。下面,我们将介绍如何利用可逆函数来解决问题,并进行相关分析。

可逆函数

在这里插入图片描述

当一个函数r有一个反变换函数v时,我们称这个函数为可逆函数,如式2所示。

数据X通过可逆函数转换而不丢失信息,如式所示。3.

当网络的变换函数由可逆函数组成时,可以得到更可靠的梯度来修正模型。当今几乎所有受欢迎的深度学习方法是符合可逆特性的体系结构,如式4。
在这里插入图片描述

其中l表示PreAct ResNet的第L层,f是第l层的变换函数。PreAct 加粗样式ResNet[22]以显式的方式重复地将原始数据X传递到后续层。虽然这样的设计可以让一千层以上的深度神经网络收敛得非常好但是破坏了我们需要深度神经网络的一个重要原因。也就是说,对于困难的问题,我们很难直接找到简单的映射函数将数据映射到目标。这也解释了为什么当层数较少时PreAct ResNet的性能不如ResNet。21]。

在这里插入图片描述

此外,我们尝试使用屏蔽建模,允许转换器模型实现显著的突破。我们使用近似的方法,如公式5,试图找到r的逆变换u,使变换后的特征可以保留足够的信息,使用稀疏的功能,方程式的形式。如公式5所示:
在这里插入图片描述

其中M是一个动态二进制掩码。其他常用的方法是扩散模型和变分自编码器,它们都具有求反函数的功能。然而,当我们将上述方法应用于一个轻量级模型时,就会出现缺陷,因为轻量级模型对于大量的原始数据会参数化不足。由于上述原因,将数据X映射到目标Y的重要信息(Y,X)也将面临同样的问题。对于这个问题,我们将探讨它使用信息瓶颈的概念[59],信息瓶颈的计算公式如下:
在这里插入图片描述
在这里插入图片描述
一般来说,I(Y,X)只会占据I(X,X)中很小的一部分。然而,它是关键的目标任务。因此,即使在前馈阶段丢失的信息量并不显著,只要I(Y,X)被覆盖,训练效果就会受到很大影响。由于轻量化模型本身处于欠参数化状态,在前馈阶段很容易丢失很多重要信息。因此,我们对于轻量级模型的目标是如何从I(X,X)中准确地过滤|(Y,X)。至于完全保存X的信息,那是很难做到的。基于以上分析,我们希望提出一种新的深度神经网络训练方法**,既能生成可靠的梯度来更新模型,又能适用于浅层和轻量级的神经网络**。

网络结构

在这里插入图片描述
图3所示。PGI和相关网络体系结构和方法。(a)路径聚合网络[37],(b)可逆色谱柱(RevCol)[3],©传统的深部监督,和(d)我们提出的可编程梯度信息(PGI)。PGI主要由三部分组成:(1)主枝:用于推理的体系结构;(2)**辅助可逆枝:**生成可靠的梯度,为主枝提供向后传输;(3)多级辅助信息:控制主分支学习可规划的多层次语义信息

可编程梯度信息

在这里插入图片描述
为了解决上述问题,我们支持提出了一个新的辅助监督框架,称为可编程梯度信息,如图3d。PGI主要包括三个部分,即(1)主支路,(2)辅助可逆支路,以及(3)多层次辅助信息。从图3(d)我们PGI的推理过程只使用主分支,因此不需要任何额外的推理开销。至于其他两个组件,它们用于解决或减缓深度学习方法中的几个重要问题。其中,辅助可逆支路的设计是为了解决神经网络深化所带来的问题。网络深化会造成信息瓶颈,使损失函数无法产生可靠的梯度。在多级辅助信息方面,针对深度监控带来的错误累积问题特别是多预测分支的架构和轻量级模型。接下来,我们将一步一步介绍这两个组件。

辅助可逆支路

在这里插入图片描述

在PGI中,我们提出了辅助可逆分支来产生可靠的梯度和更新网络参数。通过提供从数据映射到目标的信息损失函数可以提供指导并且避免从与目标相关性较小的不完整的前馈特征中发现虚假相关性的可能性。通过引入可逆体系结构,提出了完整信息的维护,但在可逆体系结构中增加主枝将消耗大量的推理开销。我们分析了图3(b)的架构,发现当增加由深到浅层的额外连接时,推理时间将增加20%。当我们反复将输入数据添加到网络的高分辨率计算层(黄色框)时,推理时间甚至超过两倍。
由于我们的目标是使用可逆的结构,以获得可靠的梯度,“可逆”是不是唯一的必要条件,在推理阶段。鉴于此,我们将可逆支路作为深度监控支路的扩展,设计辅助可逆支路,如图3(d)所示。对于因信息瓶颈而丢失重要信息的主支路深支,可以从辅助可逆支路中获得可靠的梯度信息。 这些梯度信息将驱动参数学习以帮助提取正确而重要的信息,而上述操作可以使主分支获得对目标任务更有效的结果。此外,由于在较深的网络中复杂的任务需要转换,可逆结构在浅层网络中的性能要比在一般网络中差。我们提出的方法并不强制主分支保留完整的原始信息,而是通过辅助监督机制产生有用的梯度来更新它。该设计的优点是该方法也适用于较浅的网络

最后,由于在推理阶段可以去除辅助可逆支路,因此可以保持原网络的推理能力。我们也可以选择PGI中任意的可逆结构来起到辅助可逆分支的作用

多层次的辅助信息

在本节中,我们将讨论多级辅助信息是如何工作的。包含多个预测分支的深度监控架构如图3©所示。对于物体检测,不同的特征金字塔可以用来执行不同的任务,例如它们可以一起检测不同大小的物体。因此,在连接到深层监控分支后,浅层特征将被引导学习小目标检测所需的特征,此时系统将把其他尺寸的目标位置作为背景。然而,上述行为将导致深度特征金字塔丢失大量的信息,需要预测的目标对象。考虑到这个问题,我们认为每个特征金字塔都需要接收所有目标对象的信息,以便Subse Quent主分支能够保留完整的信息来学习各种目标的预测
多级辅助信息的概念是插入辅助监督的特征金字塔高层与主分支之间的集成网络,然后使用它来组合来自不同预测头的返回梯度,如图3(d)所示。然后利用多级辅助信息对包含所有目标对象的梯度信息进行聚合,并将其传递给主分支进行参数更新。此时,主干特征金字塔层次结构的特征将不受某些特定对象信息的支配。结果表明,该方法可以缓解深度监控中的信息不完整问题。此外,任何综合网络都可以用于多层次的辅助信息。因此,我们可以规划所需的语义层次,以指导不同规模的网络架构的学习。

广义ELAN(GELAN)

在这里插入图片描述
图4所示。GELAN的体系结构:(a)CSPNet[64],(b)环境法网络[65],以及©提议的Gelan。我们模仿CSPNet和ELAN扩展到可
以支持任何计算块。
在这里插入图片描述

在本节中,我们将介绍所提出的新的网络体系结构-GELAN。通过结合两种神经网络架构,CSPNet[64]和ELAN[651,在梯度路径规划的基础上,**设计了具有轻量化、推理速度快、精度高的广义高效层聚合网络(GELAN)。**其总体架构如图4所示。我们将ELAN的性能进行了遗传化。[65],最初只使用卷积层的堆叠,到一个可以使用任何计算块的新架构。

试验

对比实验

在这里插入图片描述

消融实验

在这里插入图片描述
在这里插入图片描述

可视化

在这里插入图片描述
GELAN随机初始权值输出的特征图(可视化结果)经过100层后,ResNet开始图6所示。不同深度Plain Net、ResNet、CSpNet、产生前馈输出,该输出足以模糊对象信息。我们提出的Gelan仍然可以保留相当完整的信息,直到第150层,并且仍然有很好的区分直到第200层

结论

在这里插入图片描述

在本文中,我们建议使用PGI来解决的信息通信瓶颈问题和深度监控机制不适合轻量级神经网络的问题。我们设计了一个高效、轻量级的神经网络GELAN。在目标检测方面,GELAN在不同的计算块和深度设置下都具有强大而稳定的性能。它确实可以被广泛扩展为适合各种推理设备的模型。对于以上两个问题,PGI的引入让轻量级模型和深度模型在精度上都得到了显著的提升由PGI和GELAN联合设计的YOLOv9显示出了强大的竞争力。与YOLOv8相比,其出色的设计使深度模型的参数数量减少了49%,计算量减少了43%,但在MSCOCO数据集上仍有0.6%的AP改进

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

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

相关文章

windows上配置Redis主从加哨兵模式实现缓存高可用

一、哨兵模式 哨兵(sentinel)是Redis的高可用性(High Availability)的解决方案:由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器。当主服务器进入下线状态时,sentinel可以将该主服务器下的某…

Appium如何自动判断浏览器驱动

问题:有的测试机chrome是这个版本,有的是另一个版本,怎么能让自动判断去跑呢?? 解决办法:使用appium的chromedriverExecutableDir和chromedriverChromeMappingFile 切忌使用chromedriverExecutableDir和c…

vue处理后端返回的日志

vue处理后端返回的日志,并保持日志内容最新(滚动到最新内容) 1、后端返回的日志格式如下所示,该如何处理成正常的文本换行 2、在获取日志的接口中做如下处理,把返回的/n替换成换行标签,并根据任务状态判断…

Python构建高效可扩展的Web应用程序库之aiohttp使用详解

概要 在Python异步编程领域中,aiohttp库以其强大的功能成为构建高效可扩展的Web应用程序的重要工具。它利用asyncio提供异步HTTP客户端和服务器功能,使其成为处理并发请求和优化性能的理想选择。在本全面指南中,将深入探讨aiohttp库,包括安装方法、特性、基本和高级功能、…

突破校园网限速:使用 iKuai 多拨分流负载均衡 + Clash 代理(内网带宽限制通用)

文章目录 1. 简介2. iKuai 部署2.1 安装 VMware2.2 安装 iKuai(1) 下载固件(2) 安装 iKuai 虚拟机(3) 配置 iKuai 虚拟机(4) 配置 iKuai(5) 配置多拨分流 2.3 测试速度 3. Clash 部署3.1 准备工作(1) 配置磁盘分区(2) 安装 Docker(3) 安装 Clash(4) 设置代理 1. 简介 由于博主…

DETR【Transformer+目标检测】

End-to-End Object Detection with Transformers 2024 NVIDIA GTC,发布了地表最强的GPU B200,同时,黄仁勋对谈《Attention is All You Need》论文其中的7位作者,座谈的目的无非就是诉说,Transformer才是今天人工智能成…

vtk,ITK,DICOM3.0

(14 封私信 / 80 条消息) VTK ITK OPENCV,从图像处理的角度来说,哪种用的人多? - 知乎 (zhihu.com) 医学领域:通常要求使用ITK和VTK。 ITK做底层处理算法。 VTK做可视化显示。 ITK:Insight Segment and Regestration Toolkit …

链表之单链表

上一篇博客我们学习了线性表中的顺序表,这一篇博客让我们继续往下了解线性表的链表,链表分为好几种结构,活不多说,让我们开始学习吧! 目录 1.链表 2.链表的结构 3.单链表的实现 1.链表 1.概念:它是一种物…

【QT入门】 自定义标题栏界面qss美化+按钮功能实现

往期回顾: 【QT入门】 鼠标按下和移动事件实现无边框窗口拖动-CSDN博客【QT入门】 设计实现无边框窗口拉伸的公用类-CSDN博客【QT入门】对无边框窗口自定义标题栏并实现拖动和拉伸效果-CSDN博客 【QT入门】 自定义标题栏界面qss美化按钮功能实现 一、最终效果 二、…

Linux简单介绍

Linux简单介绍 编译器VMware虚拟机Ubuntu——LinuxOS为什么使用LinuxOS? 目录结构Windows目录结构Linux操作系统home是不是家目录? Linux常用命令终端命令行提示符与权限切换命令tab 作用:自动补全上下箭头pwd命令ls命令mkdir命令touch命令rm…

Vue 大文件切片上传实现指南包会,含【并发上传切片,断点续传,服务器合并切片,计算文件MD5,上传进度显示,秒传】等功能

Vue 大文件切片上传实现指南 背景 在Web开发中,文件上传是一个常见的功能需求,尤其是当涉及到大文件上传时,为了提高上传的稳定性和效率,文件切片上传技术便显得尤为重要。通过将大文件切分成多个小块(切片&#xff0…

小程序滑动删除组件+全选批量删除组件+附源码

小程序滑动删除组件全选批量删除组件附源码 说明 使用 uni-app、uview 组件开发,全端(微信小程序、QQ小程序、抖音小程序等等) 支持滑动删除组件、支持左滑删除、长按进入批量删除、全选删除、长按弹窗删除、 组件式开发,文章…

LabVIEW太赫兹波扫描成像系统

LabVIEW太赫兹波扫描成像系统 随着科技的不断发展,太赫兹波成像技术因其非电离性、高穿透性和高分辨率等特点,在生物医学、材料质量无损检测以及公共安全等领域得到了广泛的应用。然而,在实际操作中,封闭性较高的信号采集软件限制…

Leetcode 674. 最长连续递增序列

心路历程: 这道题和递增子序列的一样,由于题目中要求连续,实际上会让状态转移更加简单,因为候选的动作集合相当于更小了。 状态:nums的区间[0, i],第i个元素和第i-1个元素的大小关系 动作:是否…

Vue3_2024_7天【回顾上篇watch常见的后两种场景】___续

Vue3中监听多条数据的两种使用 1.watch【使用上一章写法,监听两个属性,然后执行相应操作…】 2.watchEffect【相对于使用watch,watchEffect默认页面初始加载,有点类似加配置:立即执行 immediate】 代码: …

无熟人难办事?--迪米特法则

1.1 第一天上班 第一天上班,电脑安装工作但是安装的同事小张刚巧有事要忙,主管有事也出去了,没有人搭理。小张快下班的时候才回来,开始帮我装系统,加域,设置密码等。 1.2 无熟人难办事 管理上出了问题&a…

文献阅读:将条形码神经解剖学与空间转录分析相结合,可以识别投射神经元相关基因

文献介绍 「文献题目」 Integrating barcoded neuroanatomy with spatial transcriptional profiling enables identification of gene correlates of projections 「研究团队」 Anthony M. Zador(美国冷泉港实验室) 「发表时间」 2021-05-10 「发表期…

Rust---复合数据类型之枚举、数组

目录 枚举的使用Option 枚举数组的使用输出结果 枚举(Enum):表示一个类型可以有多个不同的取值。枚举类型可以包含不同的变体(variants),每个变体可以有不同的数据类型。 枚举的使用 enum Direction {Up,…

[QOpenGLWidget+QMouseEvent]实时绘制长方形

复现moho-打卡第1天 - 20240402 1.1--QOpenGLWidget中显示长方形 实现方法:顶点着色器中给定长方形的四个顶点数据,代码如下: // 顶点位置 GLfloat vertics[1][4][3] { {{mousePressPosX,mousePressPosY,0.0},{mousePressPosX,mouseMoveP…

hexo博客7:构建简单的多层安全防御体系

【hexo博客7】构建简单的多层安全防御体系 写在最前面理解全面安全策略的重要性防御常见的网络攻击1. SQL注入攻击2. 文件上传漏洞3. 跨站脚本攻击(XSS)4. 跨站请求伪造(CSRF)5. 目录遍历/本地文件包含(LFI/RFI&#x…