2024年6月10日~2024年6月16日周报

文章目录

  • 一、前段时间工作
  • 二、完成情况
    • 2.1 可变形卷积的学习
      • 2.1.1 Introduction-介绍
      • 2.1.2 Related Work-相关工作
      • 2.1.3 Method-方法
        • 2.1.3.1 可变形卷积动态属性的重认识
        • 2.1.3.2 Speeding up DCN—加速DCN
    • 2.2 部署可变形卷积
  • 三、假期计划

一、前段时间工作

  在之前一段时间主要完成了以下任务的学习:

  • 1.完成毕业设计;
  • 2.学习师兄的Deepwave博客;
  • 3.部署可变形卷积v4

二、完成情况

2.1 可变形卷积的学习

  • 标题: Efficient Deformable ConvNets: Rethinking Dynamic and Sparse Operator for Vision Applications(高效的可变形ConvNets:重新思考视觉应用中的动态和稀疏算子
  • 代码:https://github.com/OpenGVLab/DCNv4
  • 摘要:我们介绍了Deformable Convolution v4(DCNv4),这是一个针对广泛视觉应用设计的高效有效的运算符。DCNv4解决了其前身DCNv3的限制,且有两个关键的增强: 1. 在空间聚合中移除了softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以减少冗余操作以提高速度。 这些改进使DCNv4相比DCNv3具有显著更快的收敛速度和大幅提高的处理速度,DCNv4的前向计算速度超过了其前身的三倍。DCNv4在各种任务中表现卓越,包括图像分类、实例和语义分割,尤其在图像生成方面。将其与诸如潜在扩散模型中的U-Net等生成模型相结合时,DCNv4的表现优于其基线,表明它在提升生成模型方面具有潜力。在实际应用中,将DCNv3替换为DCNv4到InternImage模型中以创建FlashInternImage,带来了高达80%的速度提升和更好的性能,无需进一步修改。DCNv4在速度和效率上的改进,加上其在各种视觉任务中出色的性能,展示了其作为未来视觉模型基础构建模块的潜力。

2.1.1 Introduction-介绍

  在计算机视觉领域,关于卷积网络(ConvNets)和Transformer哪个性能更优的讨论一直存在。近年来,带有注意力机制的Transformer模型已经在大型视觉模型中取得了显著成果[12,25,44],显示出超越ConvNets的潜力。然而,像InternImage [38]和ConvNeXt [26]等最近的工作表明,基于ConvNet的视觉模型保留了强大的性能、效率、简单性和适合各种下游任务的归纳偏差[15,41]。值得注意的是,在图像生成[29,31]等领域,卷积仍然是首选方法。这种情况揭示了基于卷积的方法的持久价值。

  基于卷积的优势,DCNv3(Deformable Convolution v3)作为先进ConvNet模型InternImage的核心运算符,创新地将稀疏注意力机制与卷积结合起来:它以滑动窗口的方式处理每个输出位置,窗口大小较小(例如3×3=9个点),这充当了类似卷积的局部、稀疏运算符,同时通过自适应范围动态采样点,并根据输入相关的注意力权重聚合空间特征。由于其较小的窗口大小和ConvNet的归纳偏差,预计DCNv3将实现更快的收敛速度和更低的推断延迟,特别是与密集全局[12]或基于局部窗口[25]的注意力方法相比。

  尽管具有这些优势,DCN并没有成为视觉骨干模型的首选解决方案。这一观察结果促使我们调查DCN运算符的持续限制。我们首先注意到的是运行速度。DCN的缓慢速度被认为是一个长期存在的问题,因为它在采样非附近位置时引入了额外的开销,使其不适用于现代卷积算法。我们的比较分析(如图1a所示)显示,DCNv3甚至可能比经过适当优化的密集全局注意力还要慢,突显了进一步优化的必要性。此外,我们发现在初始骨干训练阶段,DCNv3甚至比全局注意力收敛速度更慢,如图1b所示,这与直觉相反,因为DCNv3配备了ConvNet的归纳偏差。

在这里插入图片描述

图1. (a) 相对运行时间以DCNv3为基准。DCNv4比DCNv3显著提速,并超越其他常见的视觉运算符。(b) 在相同的网络架构下,DCNv4比其他运算符更快地收敛,而DCNv3在初始训练阶段落后。

  为了克服这些挑战,我们提出了Deformable Convolution v4(DCNv4),这是对稀疏DCN运算符进行实用效率优化的创新进展。DCNv4具有更快的实现和改进的运算符设计,以增强其性能,我们将在以下内容中详细阐述:

  • 首先,我们对现有实现进行指令级别的内核分析,发现DCNv3已经非常轻量级。计算成本不到1%,而内存访问成本占了99%。这促使我们重新审视运算符的实现方式,并发现DCN前向过程中的许多内存访问是冗余的,因此可以进行优化,从而实现了更快速的DCNv4实现。
  • 其次,受卷积的无界权重范围启发,我们发现空间聚合中的softmax归一化(密集注意力中的标准操作)在DCNv3中是不必要的,因为它不要求每个位置都有专用聚合窗口的操作。直观地说,softmax将权重限制在0到1的有界范围内,可能限制了聚合权重的表达能力。这一观点启发我们在DCNv4中移除了softmax,增强了其动态特性并提高了性能。

  因此,DCNv4不仅收敛速度显著快于DCNv3,而且前向速度提升了超过3倍。这一改进使得DCNv4能充分发挥其稀疏属性,成为最快速的常见核心视觉运算符之一。

  我们进一步将InternImage中的DCNv3替换为DCNv4,创建了FlashInternImage。值得注意的是,与未进行任何额外修改的InternImage相比,FlashInternImage实现了50%到80%的速度提升。这一增强将FlashInternImage定位为最快速的现代视觉骨干网络之一,同时保持卓越的性能。在DCNv4的帮助下,FlashInternImage在ImageNet分类和迁移学习设置中显著提高了收敛速度,并在下游任务中进一步展示了改进的性能。

  此外,DCNv4在各种架构和任务中都显示出作为通用视觉运算符的潜力。我们将DCNv4整合到其他现代骨干架构中,包括ConvNeXt [26]和ViT[12],替换深度可分卷积[35]和密集自注意力层[35]。令人惊讶的是,在没有任何超参数调整的情况下,这些精心设计的具有DCNv4的网络表现相当,同时速度更快,展示了动态稀疏DCNv4的有效性和效率。此外,我们探索了将DCNv4应用于生成模型作为新的应用领域的潜力。具体而言,我们将其应用于用于潜在扩散模型的U-Net架构,替换常规卷积。我们的实验结果显示,DCNv4在图像生成方面的表现优于基准线,显示了使用DCN来改进生成模型的巨大潜力。

  我们将发布DCNv4的实现,并希望这一高效的运算符能促进视觉领域未来的研究。

2.1.2 Related Work-相关工作

  • 视觉模型中的核心运算符:标准卷积[17]是最流行和最有影响力的运算符,构成了大多数计算机视觉架构的基础[14,16,32]。然而,许多具有独特特性的运算符共同在计算机视觉的发展中起着关键作用。深度可分离卷积(DWConv)[6]分离了空间和通道操作,在开发轻量级和高效模型方面至关重要[26,27]。RepLKNet [11]表明,纯卷积网络利用大核深度可分卷积可以在效率和有效性方面达到竞争性的性能。可变形卷积(DCN)系列[7,38,47]通过向卷积内核添加可学习的偏移量,显着提高了卷积的适应性。与卷积相反,注意力机制[35]具有建模远程依赖关系的能力,并已成功应用于各种计算机视觉任务[3,12,24,33]。窗口注意力[25,36]通过将注意力操作限制在固定大小的窗口中,降低了原始注意力的计算复杂度。为了减轻原始注意力所带来的高计算复杂度,可变形注意力[48]使每个查询能够集中在选定数量的关键采样点上,并动态确定位置和权重。这种有效的方法广泛用于以下领域的感知方法[4,19,21,22,43,45]。DynamicConv [40]和dynamicDWNet [13]通过结合动态权重[4,19,21,22,43,45]来增强深度可分卷积(DWConv),从而实现了动态权重的使用,使其能够动态适应。对于非网格结构化数据,稀疏算子[34,37,42]利用通过双线性插值或参数化方式获得的动态权重。
  • 视觉骨干中的内存访问成本(MAC):正如以前的研究所强调的那样[18,27],FLOP虽然是衡量模型复杂性的常用指标,但并不能准确地表示模型的速度或延迟。在实际场景中,模型的运行速度受到多种因素的影响,而不仅仅是FLOP。在这种情况下,内存访问成本(MAC)起着特别重要的作用[27]。Flash—Attention [9]通过减少对高带宽内存(HBM)的访问次数,在实践中实现了更快的速度,尽管与普通注意力相比具有更高的FLOP。虽然DCN运营商在FLOP方面没有表现出劣势,但在相同的FLOP预算下,它们的延迟与DW—Conv相比要长得多,这主要是由于大量的存储器访问成本。在这项工作中,我们进行了深入的分析和优化的内存访问成本与DCN运营商,显着加快DCN的运行速度。

2.1.3 Method-方法

2.1.3.1 可变形卷积动态属性的重认识

  重温DCNv3:给定输入 x ∈ R H × W × C x \in \mathbb{R}^{H\times W \times C} xRH×W×C,其中高度为 H H H,宽度为 W W W,通道数为 C C C。对于每个点 p 0 p_{0} p0,使用 K K K个点定义了DCNv3操作,如方程(2)所示:
y g = ∑ k = 1 K m g k x g ( p 0 + p k + Δ p g k ) , (1) \mathbf{y}_{g} = \sum_{k=1}^{K}\mathbf{m}_{gk}\mathbf{x}_{g}(p_{0}+p_{k}+\Delta p_{gk}) ,\tag{1} yg=k=1Kmgkxg(p0+pk+Δpgk),(1)
y = c o n c a t ( [ y 1 , y 2 , … , y G ] , a x i s = − 1 ) , (2) \mathbf{y} = \mathbf{concat}([\mathbf{y}_1,\mathbf{y}_2,\dots,\mathbf{y}_G],axis=-1),\tag{2} y=concat([y1,y2,,yG],axis=1),(2)

  其中, G G G表示空间聚合组的数量。对于第 g − t h g-th gth个组, x g , y g ∈ R H × W × C \mathbf{x}_g,\mathbf{y}_g\in\mathbb{R}^{H\times W \times C} xg,ygRH×W×C表示具有 C ′ = C / G C^{'}=C/G C=C/G的组维数的切片输入/输出特征图; m g k ∈ R \mathbf{m}_{gk}\in\mathbb{R} mgkR表示第 g g g组中第 k k k个采样点的空间聚合权重(也称为调制标量),它是对输入 x x x条件化并通过softmax函数在维度 k k k上进行归一化的; p k p_{k} pk表示预定义网络采样的第 k k k个位置{(-1,-1),(-1,0),…,(0,+1),…,(+1,+1)}就像常规卷积中一样,并且 Δ p g k \Delta p_{gk} Δpgk是与第 g g g组中网络采样位置 p k pk pk对应的偏移量。在DCNv3运算符之前和之后可以对x和y进行1×1点卷积,以增强模型的表达能力[6],遵循可分离卷积的方法。DCNv3是卷积和注意力的组合:一方面,它以滑动窗口的方式处理输入数据,这遵循了卷积的方式并具有其归纳偏差;另一方面,采样偏移量∆p和空间聚合权重m是从输入特征动态预测的,显示了其动态特性,并使其更像是一个注意力机制。我们比较了不同的运算符,每个运算符都有其自己的特性,如图2所示。
在这里插入图片描述

图2. 在空间聚合中,对于同一通道内不同位置的查询像素,核心运算符的比较。(a) 注意力和 (b) DCNv3 使用有界的(范围从0到1)动态权重来聚合空间特征,而注意力的窗口(采样点集)是相同的,DCNv3 对每个位置使用一个专用窗口。(c) 卷积具有更灵活的无界值范围的聚合权重,并对每个位置使用专用滑动窗口,但窗口形状和聚合权重与输入无关。(d) DCNv4 结合了它们的优点,使用自适应聚合窗口和动态聚合权重,具有无界值范围。

  Softmax 归一化:卷积和 DCNv3 之间的一个关键区别在于,DCNv3 使用 softmax 函数对空间聚合权重 m 进行归一化,遵循了缩放点积自注意力的惯例。相反,卷积没有在其权重上使用 softmax,但仍然能够很好地工作。注意力需要 softmax 的原因很明显:带有 Q 、 K 、 V ∈ R N × d Q、K、V\in\mathbb{R}^{N\times d} QKVRN×d的缩放点积自注意力的定义如下:

s o f t m a x ( 1 d Q K T ) (3) softmax(\frac{1}{\sqrt{d}}QK^{T})\tag{3} softmax(d 1QKT(3)

  其中,N 是同一注意力窗口中的点的数量(可以是全局的[12]或局部的[25]),d 是隐藏维度,Q、K、V 是从输入计算得到的查询、键和值矩阵。在注意力中,Eq. (3) 中需要进行 softmax 操作;如果没有 softmax,可以先计算 K T V ∈ R d × d K^TV ∈ \mathbb{R}^{d×d} KTVRd×d,并且对于同一注意窗口中的所有查询,它退化为线性投影,从而导致性能退化。然而,对于深度卷积和 DCNv3 等卷积运算符,每个点都有自己专用的聚合窗口,并且每个聚合窗口中的值已经不同,而且没有“键”概念,因此这种退化问题不再存在,归一化变得不再必要。事实上,对于在固定的 0-1 范围内使用 softmax 对卷积权重进行归一化可能会对运算符的表达能力造成显著的限制,并且使学习速度变慢。

  为了验证这一假设,我们训练了一个 ConvNeXt 模型,并在卷积前将深度卷积权重的 7×7 窗口应用了 softmax。从表1的结果中,我们观察到模型性能以及收敛速度显著下降。这表明,对于每个位置都有专用聚合窗口的运算符(如卷积或 DCN),具有无界范围的聚合权重比 softmax 归一化的有界范围权重具有更好的表达能力。
在这里插入图片描述

表1. 不同训练时期的ImageNet-1K准确度。对卷积权重添加softmax归一化显著影响了ConvNeXt模型的收敛速度和最终性能。

  增强动态特性:受到这一观察的启发,我们在DCNv3中移除了softmax归一化,将调制标量从0到1转换为与卷积类似的无界动态权重。如图2所示,这种改变进一步增强了DCN的动态特性,其中其他运算符具有一定的限制,如有界值范围(注意力/DCNv3)或固定聚合窗口与输入无关的聚合权重(卷积)。图1b显示,通过进行这种改变,DCNv4的收敛速度显著快于DCNv3和其他常见运算符,包括卷积和注意力。第4节的结果进一步展示了DCNv4在预训练和迁移学习设置中的良好表现。

2.1.3.2 Speeding up DCN—加速DCN

  理论上,DCN作为一个使用3×3窗口的稀疏运算符,应该比其他使用更大窗口大小的常见运算符,如密集注意力或7×7深度卷积,更快地执行。然而,我们发现事实并非如此,如图1a所示。在本小节中,我们首先对GPU效率进行了理论分析,显示了根据我们如何读取内存而产生的内存访问成本的巨大差异。我们进一步根据观察结果进行了优化,通过节省额外的内存指令,显著提高了DCN的速度,并将作为稀疏运算符的速度优势带入了现实。

  GPU效率的理论分析:我们的研究从对DCNv3运算符的计算行为进行理论检查开始。我们采用屋顶线模型评估其性能,重点关注理论FLOPs和内存访问成本(MAC)。对于形状为(H,W,C)的输入和输出张量,DCNv3运算符需要36HWC个FLOPs,其中3×3表示卷积核的空间维度,因子4考虑了每个采样点的双线性插值。

  根据[27]中概述的框架,DCNv3的内存访问成本(MAC)被计算为2HWC + 27HWG。第一项对应于输入/输出特征图的大小,第二项对应于DCNv3的偏移和聚合权重,其中G表示组数。我们将G近似为C/16,假设每个组的维度为16,因此得到约3.7HWC个MAC。然而,这假设了一个理想的情况,即具有无限缓存且每个值只需单个内存读取,这在并行计算环境中通常是不现实的,因为并发线程执行需要同时访问数据。

  为了估计最大的内存访问需求,我们考虑了一个没有缓存的情景,每个输出位置都需要新的内存读取,其中包括36次双线性插值的读取、27次偏移/聚合权重的读取以及一次写操作,结果是64HWC的MAC。这比理想情况大17倍。

  该分析揭示了计算与存储器访问的比率(范围从0.6到9.7)的巨大差距,突出了存储器访问优化的巨大潜力。值得注意的是,尽管DCNv3使用了依赖于输入的动态偏移,导致了不确定的内存访问,但一个确定的事情是同一组内的通道共享偏移值。这使得我们提出了一个具体的优化策略,以提高DCNv3的速度。

  消除冗余工作量:在之前的CUDA实现中,对于形状为(H,W,C)的输入,偏移量 ( H , W , G , K 2 × 2 ) (H,W,G,K^2×2) (H,W,G,K2×2)和聚合权重 ( H , W , G , K 2 ) (H,W,G,K^2) (H,W,G,K2),我们将总共创建 H × W × C H×W×C H×W×C个线程以最大限度地提高并行性,其中每个线程处理一个通道的一个输出位置。值得注意的是,在每个组内, D = C / G D = C/G D=C/G个通道共享相同的采样偏移和聚合权重值,对于每个输出位置而言。在同一个输出位置上使用多个线程处理这些D个通道是浪费的,因为不同的线程会多次从GPU内存中读取相同的采样偏移和聚合权重值,这对于一个内存绑定的操作符来说是至关重要的。在每个输出位置上使用一个线程处理同一组内的多个通道可以消除这些多余的内存读取请求,大大减少了内存带宽的使用。由于采样位置相同,我们也可以仅计算DCN中使用的双线性插值系数一次。具体来说,如果每个线程处理 D ′ D' D个通道,则读取偏移和聚合权重的内存访问成本,以及计算双线性插值系数的计算成本,都可以减少 D ′ D' D倍。

  消除冗余的内存指令:在实际操作中,仅通过让线程处理多个通道并不会看到速度的提升。原因在于,当D′增加时,我们创建的线程变少,而每个线程的工作量现在增加了D′倍。这实际上减少了CUDA内核的并行程度。幸运的是,DCN内核现在在计算方面变得轻量化,因为双线性插值只需为所有D′通道执行一次,且大部分工作量集中在从不同通道读取输入值的内存指令上。当内存布局是通道最后时,所有D′个通道的值是连续的,我们可以利用矢量化加载:例如,要从内存中读取四个32位浮点值,而不是使用四条指令分别读取四次32位浮点值,我们可以使用单条指令一次加载128位打包的值,从而减少指令数量并缩短每个线程的执行时间。我们可以在将最终结果写入GPU内存时应用类似的技术,最小化内存访问时间并提高内存带宽利用率。此外,现代的半精度数据格式(float16/bfloat16)使需要加载的字节数减半,这意味着在相同内存带宽下,使用半精度格式时内存效率可以提高两倍。然而,在原始的DCNv3实现中,我们并未看到使用半精度数据的速度提升,这可能是由于数据访问和计算带来的过多开销,而在我们新的实现中,速度提升显著。值得注意的是,上述优化技术也可以应用于DCNv1/v2和可变形注意力[48], 因为它们共享类似的性能瓶颈和问题。

2.2 部署可变形卷积

  • Windows快速部署DCNv4(成功版):Windows快速部署DCNv4(成功版)

三、假期计划

  本次假期主要有以下安排:

  • 1.尝试将可变形卷积v4添加到网络中;
  • 2.阅读与Deepwave相关思想的论文;
  • 3.学习吴恩达的机器学习视频;
  • 4.完成数学公式的学习;
  • 5.思考如何修改损失函数;

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

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

相关文章

------构造类型数据—结构体---- + ----函数-----

构造类型数据——结构体 1)结构体的基本概念 结构体(struct)是C语言(以及其他一些编程语言)中用于将不同类型的数据组合成一个单一类型的方式。这种数据类型允许你将多个变量(可能是不同类型)…

结合Boosting理论与深度ResNet:ICML2018论文代码详解与实现

代码见:JordanAsh/boostresnet: A PyTorch implementation of BoostResNet 原始论文:Huang F, Ash J, Langford J, et al. Learning deep resnet blocks sequentially using boosting theory[C]//International Conference on Machine Learning. PMLR, 2…

axure9设置组件自适应浏览器大小

问题:预览时不展示下方的滚动条 方法一:转化为动态面板 1.在页面上创建一个矩形 2.右键-转化为动态面板 3.双击进入动态面板设置 4.设置动态面板矩形的颜色 5.删除原来的矩形 6.关闭动态面板,点击预览 7.此时可以发现底部没有滚动条了 方法…

AI大模型之争:通用与垂直,谁将拔得头筹?

✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点赞、关注、收藏、评论,是对我最大…

移植案例与原理 - startup子系统之syspara_lite系统属性部件 (2)

系统属性部件syspara_lite负责提供获取与设置操作系统相关的系统属性,包括默认系统属性、OEM厂商系统属性和自定义系统属性。为满足OpenHarmony产品兼容性规范,产品解决方案需要实现获取设备信息的接口,如:产品名、品牌名、厂家名…

苹果Mac电脑遭恶意软件攻击 Mac第三方恶意软件删除不了

苹果Mac电脑一直以来都以安全性和稳定性著称,许多用户认为Mac电脑不会受到恶意软件的侵害,但事实上,Mac电脑也不是绝对安全的,近年来,有越来越多的恶意软件针对Mac电脑进行攻击,甚至有些恶意软件可以绕过苹…

如何看待SD3 版本,和SDXL相比有何优势?

胖友们好!!!痴迷AI的本枕又来写Stable Diffusion了…… SD社区群众们翘首企盼的SD3的weights总算在huggingface上发布了 于是我也在当天非常激动地用ComfyUI生成了一些图像…… 这篇文章算是半个评测半个心得吧,因为有些东西是…

解禁日大涨,爱玛科技的投资前景值得信任吗?

6月17日,爱玛迎来6.28亿股、金额超190亿元的解禁,占总股本72.91%。不过,爱玛股价在巨量解禁中反而迎来涨势,因为这部分股票中,创始人张剑持有的限售股数量几乎就占了爱玛总股本的七成。某种意义上,市场认为…

Windows系统下制作Windows Server系统U盘启动及安装指导

Windows系统下制作Windows Server系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口);下载好对应的系统镜像;下载RUFUS或者软通碟U盘制作启动软件; 二、Windows操作系统下制作U盘启动(这里以使用RUFUS软件…

面向对象和面向过程

Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对象的基本功能,例如:继承、多态、封装等。 Python支持面向过程、面向对象、函数式编程等多种编程方式。而Java编程语言支持面向对象的编程方式&#xff0…

基于WPF技术的换热站智能监控系统16--动态数据绑定

1、实现思路 1)实时读取到的数据绑定到前台UI控件上,这个通过MVVM模式实现,同时注意实时读取必须通过任务task异步方式,这就需要读取PLC数据。 2)UI控件的动作,如开或关水泵,必定能够将值写入…

Java基础 - 练习(一)打印等腰三角形

Java基础练习 打印等腰三角形,先上代码: public static void main(String[] args) {// 打印等腰三角形System.out.println("打印等腰三角形:");isoscelesTriangle(); } public static void isoscelesTriangle() {// for循环控制行…

ollama模型CPU轻量化部署

一、定义 ollama 定义环境部署demo加载本地模型方法基本指令关闭开启ollamaollama 如何同时 运行多个模型, 多进程ollama 如何分配gpu修改模型的存储路径 二、实现 ollama 定义 ollama 是llama-cpp 的进一步封装,更加简单易用,类似于docker. 模型网址…

【深度学习】AI换脸,EasyPhoto: Your Personal AI Photo Generator【一】

论文:https://arxiv.org/abs/2310.04672 文章目录 摘要IntroductionTraining Process3 推理过程3.1 面部预处理3.3 第二扩散阶段3.4 多用户ID 4 任意ID5 实验6 结论 下篇文章进行实战。 摘要 稳定扩散Web UI(Stable Diffusion Web UI,简称…

Linux_理解程序地址空间和页表

目录 1、进程地址空间示意图 2、验证进程地址空间的结构 3、验证进程地址空间是虚拟地址 4、页表-虚拟地址与物理地址 5、什么是进程地址空间 6、进程地址空间和页表的存在意义 6.1 原因一(效率性) 6.2 原因二(安全性) …

DOS INT 21H中断 2号功能暗改AL

注意此时AX0200,DX0057 执行INT 21H之后: 可以看到执行完“??? [BXSI]”之后,AL就变为了57H,和DL相同。 部分INT 21H功能表: 所以究竟是什么原因呢? -------------------------------------------…

MDK 代码烧录到RAM区运行

MDK 代码烧录到RAM区运行 环境配置设置分散加载文件启动文件修改设置外部调试器烧录 建立函数入口半主机问题导致BKPT 0xAB 有一个需求,除了IAR以及GCC的版本工程还需要MDK版本,为了实现最小的工程环境,flash烧录算法也没有,这时需…

【C++】:list容器的基本使用

目录 🚀前言一,list的介绍二,list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插,头删,尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 🚀前言 list中的接口比较多&#xff…

SpringBootWeb 篇-入门了解 Apache POI 使用方法

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Apache POI 概述 2.0 使用 Apache POI 读写 Excel 文件 2.1 写入 Excel 文件 2.2 写入 Excel 文件代码演示 2.3 读取 Excel 文件 2.4 读取 Excel 文件代码演示 1.…

使用Multipass编译OpenHarmony工程

Multipass 是一个轻量级虚拟机管理器,支持 Linux、Windows 与 macOS,这是为希望使用单个命令提供全新 Ubuntu 环境的开发人员而设计的。使用 Linux 上的 KVM、Windows 上的 Hyper-V 和 macOS 上的 HyperKit 来以最小的开销运行 VM,同时它还可…