[论文阅读]MaIL: Improving Imitation Learning with Mamba
Abstract
这项工作介绍了mamba模仿学习(mail),这是一种新颖的模仿学习(il)架构,为最先进的(sota)变换器策略提供了一种计算高效的替代方案。基于变压器的策略由于能够处理具有固有非马尔可夫行为的人类记录数据而取得了显著成果。然而,它们的高性能伴随着大型模型的缺点,这使得有效的训练变得复杂。虽然状态空间模型(ssms)以其效率而闻名,但它们无法与变压器的性能相匹配。mamba显著提高了ssms和竞争对手对transformers的性能,使其成为il政策的一个有吸引力的替代方案。mail利用mamba作为骨干,并引入了一种形式化,允许在编码器-解码器结构中使用mamba。这种形式化使其成为一种通用的架构,既可以用作独立的策略,也可以用作更高级架构的一部分,例如扩散过程中的扩散器。
对LIBERO IL benchmark和三个真实机器人实验的广泛评估表明,mail:i)在所有libero任务中都优于transformer,ii)即使在小数据集下也能实现良好的性能,iii)能够有效地处理多模态感官输入,iv)与transformer相比,对输入噪声更具鲁棒性
Introduction
这里,当前的方法要么使用仅解码器结构[5],要么使用解码器-编码器架构[6]。这些架构中哪一个擅长通常取决于任务。变压器的性能通常伴随着难以训练的大型模型,特别是在数据稀缺的领域。处理观测序列的另一种概念是状态空间模型[12]。这些模型假设观测值(嵌入)之间存在线性关系,通常在计算上更高效。最近的方法,如选择性状态空间模型mamba[13],严格提高了状态空间模型的性能,并在许多任务中与变压器竞争。由于其在推理速度、内存使用和效率方面的特性,mamba是一个有吸引力的il策略模型
邮件可以用作独立的策略,也可以用作更高级流程的一部分,例如扩散流程中的扩散器。我们以两种变体实现邮件。在仅解码器的变体中,mail处理噪声动作和观测特征[5]以及扩散过程的时间嵌入,并输出去噪动作。
Related Works
Sequence Models.
变压器中的自我关注机制允许并行处理序列,有效地解决了rnn在顺序数据处理中的局限性[17,18,19,20]。然而,结构化状态空间模型[12,22,22,13]为变压器提供了一种有吸引力的替代方案。变压器在序列长度上按二次缩放,而结构化状态空间模型则按线性缩放[13]
最近的工作[13]依赖于关联扫描,它也允许并行计算,但还允许输入相关的可学习矩阵[13]
Imitation Learning (IL).
早期的模仿学习方法主要侧重于学习状态-动作对之间的一一映射。但这些方法忽略了历史中包含的丰富时间信息。随后的方法结合了rnns来编码观测序列,证明了利用历史观测可以提高模型性能。然而,这些方法存在基于rnn架构的固有局限性,包括表示能力有限、序列建模时间长以及训练时间慢,因为它们不适合大规模并行化。
Transformer可以对长序列进行建模,同时通过并行序列处理保持训练效率。这一趋势延伸到具有多模态感官输入的il[36,37,38,39],其中变换器对图像和语言序列进行编码
最近,扩散模型在模仿学习中表现出了优越性[5,40,6,41,39]。由于其强大的泛化能力和丰富的表示能力来捕捉多模态动作分布,它们已成为模仿学习领域的sota
Preliminaries
3.1 Mamba: Selective State-Space Models
mamba[13]通过使用选择性扫描算子改进了结构化状态空间序列模型(ssms)
输入序列,输出序列
,b、l、d分别表示批量大小、序列长度和维度
标准ssm定义了时不变参数和时间步长向量∆将x(l)的输入映射到隐藏状态,然后可以将其投影到输出y(l)
mamba通过使ssm参数成为输入的函数来实现选择机制
线性是指线性投影层,softplus是relu的平滑近似。那么输出可以通过以下方式计算
其中是离散化的[42]个具有时间步长∆的对应项。由于时变模型只能以循环方式计算,mamba进一步实现了一种硬件感知方法来高效计算选择性ssm。
图1:d-ma:mamba去噪架构集成了用于状态编码的resnet-18和用于动作编码的动作编码器。状态序列的长度为K,而扩散步骤t处的动作序列的长度是J。在将输入馈送到曼巴模块之前,位置编码(PE)和时间编码(TE)增强了输入,其中sk和ak共享相同的位置编码。曼巴模块有n×曼巴块,详细结构[13]如左图所示。mamba模块的输出由线性输出层处理,从而实现一步去噪操作。mamba块中的符号×表示矩阵乘法,σ表示silu激活函数。
3.2 Policy Representations
在这项工作中,我们使用了两种策略表示:行为克隆(bc)和去噪扩散策略(ddps)。为了清楚起见,我们关注的是非连续性的情况。
Behavioral Cloning
行为克隆假设参数化的条件高斯分布作为策略表示,即最大化模型参数θ的可能性简化为均方误差(mse)损失,
其中使用演示数据中的状态-动作对来近似s、a的期望。
Denoising Diffusion Policies
去噪扩散策略利用去噪函数从马尔可夫链
中采样
从
开始,对给定的观测值s产生无噪声动作
。
训练去噪函数,通过最小化损失来预测噪声动作的源噪声
,t上的期望对应于
中的均匀采样。
4 Mamba for Imitation Learning
从成功的仅解码器(D-Tr)和编码器-解码器(ED-Tr)变换器中汲取灵感,我们提出了两种基于mamba的架构:仅解码器mamba(D-Ma)和编码器解码器mamba(ED-Ma)
这些架构充当策略的参数化。具体来说,当采用行为克隆(bc)时,这些架构将条件高斯分布的均值μθ参数化。当使用去噪扩散策略(ddps)时,这些架构将去噪函数εθ参数化。鉴于前一种情况的简单性,我们将重点介绍ddps背景下的这些架构
4.1 Decoder-Only Mamba
与仅解码器转换器类似,我们使用mamba块来处理输入。图1显示了纯解码器mamba架构的概述。ddps的解码器专用mamba被设计为学习去噪函数εθ,该函数接受一系列观测值,噪声动作
和diffusion step t,来生成噪声较小的动作序列
使用时间嵌入te对扩散步骤进行编码。使用resnet-18对观测值进行编码,在不同时间步长的图像之间共享权重。动作编码器enca用于对有噪声的动作输入进行标记。此外,位置嵌入pe被应用于观测和动作。然后,时间嵌入、状态嵌入和动作嵌入将被输入到mamba解码器decm中。mamba解码器是通过堆叠多个具有残差连接和层归一化的mamba块来实现的。算法1中示出了完整的推理例程
4.2 Encoder-Decoder Mamba
与仅包含自注意机制的解码器变压器相比,具有交叉注意的编码器-解码器变压器是一种更灵活有效的设计,可以处理复杂的输入输出关系,特别是在输入和输出序列结构不同的情况下。然而,由于目标和源共享相同的序列长度,mamba没有提供这样的机制来支持编码器-解码器结构。
我们提出了一种称为mamba聚合的新方法,用于设计mamba的编解码器版本。可视化可以在图2中找到。mamba编码器encm用于处理时间嵌入和状态嵌入,mamba解码器decm用于处理噪声嵌入。由于em和dm的输入具有不同长度的序列,我们建议添加可学习变量来补充每个序列
图2:ed-ma:与d-ma模型不同,ed-ma包含用于处理时间嵌入和状态嵌入的mamba编码器,以及用于处理噪声动作的mamba解码器。为了聚合来自编码器和解码器的信息,将可学习的动作变量引入编码器输入,将可习得的时间变量和状态变量引入解码器输出,以进行序列对齐。
act对比:
5 Experiments
我们的调查侧重于以下关键问题:
q1)MaIL能否实现与变压器相当或更优的性能?
q2)MaIL可以使用多模式输入,如语言指令吗?
q3)MaIL如何有效地处理观察中的连续信息?
5.1 Baselines
我们的实验包含四种架构:去卷积变换器(d-tr)、编解码器变换器(ed-tr)、仅解码器mamba(d-ma)、编解码mamba(ed-ma)。
为了进行公平的比较,我们使用resnet18对每种方法的视觉输入进行编码。对于使用语言指令的任务,我们使用预训练的clip模型[43]来获得相应的语言嵌入,该嵌入用于所有方法的训练和推理。
基于上述设置,我们实施以下模仿学习策略:
行为克隆(bc)我们实现了一种用变压器和曼巴结构的mse损失训练的vanilla行为克隆策略。
深度学习论文中的黑话总结 (ngui.cc)
基于bc中相同结构的去噪扩散策略(ddp),我们进一步使用离散去噪过程实现了一种扩散策略[44]。我们为每种架构使用16个扩散时间步长进行训练和采样。
5.2 Simulation Evaluation
LIBERO
评估是使用libero基准进行的,该基准包括五个不同的任务套件:LIBERO-Spatial, LIBERO-Object, LIBERO-Goal, LIBERO-Long, and LIBERO90。每个任务套件包括10个任务和50个人类演示,但libero-90除外,它包含90个任务,50个演示。每个任务套件都旨在测试机器人学习和操纵能力的不同方面。任务可视化如图3所示。更多细节见附录c。
Evaluation Protocol
我们分别在五个libero任务套件中比较了每种方法。除了libero-90包含900个轨迹外,我们没有使用完整的演示,而是为每个子任务只使用了20%的演示,每个任务套件总共使用了100个轨迹。我们调整变压器和曼巴的超参数,确保它们的参数量相似。所有模型都训练了50个epoch,我们使用最后一个检查点进行评估。遵循libero的官方基准设置,我们为每个子任务执行了20次部署 rollouts,每个任务套件总共进行了200次评估,但libero-90除外,它包括1800次评估。我们报告了超过3个种子的每个任务套件的平均成功率。
Main Results.
我们在表1中报告了主要结果。我们基于mamba的架构d-ma和ed-ma在基于bc策略的所有libero任务套件中的表现明显优于基于转换器的方法
表1:libero基准测试的性能,其中“w/o语言”表示我们不使用语言指令,“w/language”表示我们使用从预训练的剪辑模型生成的语言令牌,h1和h5分别表示使用当前状态和5步历史状态
具体来说,基于曼巴的模型在libero-object和libero-90中的成功率提高了近30%。当使用ddp策略时,我们的模型始终超过变压器基线,在大多数任务中性能提高超过5%。这些结果证实了q1,表明mail的性能优于变压器。
为了解决q2问题,我们使用额外的语言嵌入作为输入,将邮件与libero-target和libero-90上的transformers进行了比较。我们观察到,在这些任务中,基于mamba的方法有了显著改进,表明邮件有效地利用了多模态输入。
鉴于最近的视觉模仿学习作品使用历史观察作为输入,我们用1和5个历史观察来评估这些方法。我们发现历史信息并不总是能提高绩效。 只有在libero对象中h5模型的表现优于h1模型,而在其他任务中,h5模型取得了类似或更差的结果。
基于mamba的h5模型的性能再次始终优于基于transformer的模型,这表明mail能够有效地捕获连续的观察特征,回答了问题3
Ablation on Observation Occlusions
为了进一步了解transformer和mamba的顺序学习能力,我们随机屏蔽图像区域并测试模型的性能下降。结果如图4所示。而对于零遮挡,变压器架构可以与mamba相当,添加遮挡会更快地降低变压器的性能,表明mamba可以更好地从历史序列中提取重要信息。
Ablation on Dataset Size
鉴于邮件仅在20%的演示中表现良好,我们有兴趣随着数据集大小的增加来评估其可扩展性。我们在libero空间任务上使用bc策略将基于mamba的模型与transformer模型进行了比较。结果如图4所示。很明显,当数据稀缺时,基于mamba的模型明显优于transformer,并且随着数据集大小的增加,其性能也相当。
5.3 Real Robot Evaluation
我们基于7自由度franka熊猫机器人设计了三个具有挑战性的任务,利用模型的视觉输入。位于机器人前方不同角度的两个摄像头提供视觉数据。一个图像被裁剪并调整为(128,256,3),而另一个图像则调整为(256,256,3)。
整个设置如图5所示。这些图像在每个时间步上堆叠以形成观察结果。我们从输入中排除了机器人状态,因为之前的研究报告称,包括它们可能会导致性能不佳[7]。
动作空间是8维的,包括关节位置和夹持器状态。下面详细介绍的任务设置如图6-8所示。相应的结果如表2-4所示。
我们使用ddp-h1模型将ed-tr与ed-ma进行了比较。我们对每种方法训练了100个迭代周期(收敛),并使用最终的检查点对模型进行了评估。对于每个任务,我们为对象执行了20个具有不同初始状态的展开。为了确保公平比较,我们对变压器和曼巴评估使用了相同的初始状态。从结果来看,基于mamba的方法与变压器模型取得了相当的结果。
6 Limitations
虽然mail在较小的数据集大小下表现出了出色的性能,但随着数据集的扩展,它的优势变得不那么明显。当在更大的数据集上训练时,mail的结果与transformer模型相当,但并不超过后者。
此外,mamba的设计是为了快速高效地处理大规模序列。然而,在序列相对较短的模仿学习策略的背景下,Transformer的推理时间与mamba相似。这降低了mamba在这些场景中的性能效率优势。
7 Conclusion
总之,这项工作提出了一种新的模仿学习(il)策略架构mail,它弥合了处理观察序列的效率和性能之间的差距。通过利用状态空间模型的优势并对其进行严格改进,mail为传统上基于大型复杂变压器的策略提供了一种有竞争力的替代方案。在编码器-解码器结构中引入mamba增强了其通用性,使其既适合独立使用,也适合集成到扩散过程等高级架构中。对libero-il基准测试和真实机器人实验的广泛评估表明,mail不仅匹配而且超越了现有基线的性能,使其成为一种有前景的il任务方法。
B Transformer Architecture
我们描述了扩散策略中的两种基于变换器的架构:仅解码器模型(图9)和编码器-解码器模型(见图10)。这两种架构都利用了变压器模型的优势来有效地处理顺序数据并捕获长期依赖关系。
图9:仅解码器学习块。该架构集成了用于状态编码的resnet-18和用于地平线j动作的动作编码器,这两个组件都馈入了一个自我注意机制。位置编码(pe)和时间编码(te)增强了输入。最终,自我关注的输出被馈送到线性输出层,以预测未来的行为
图10:编码器-解码器学习块。此图说明了为策略学习设计的编码器-解码器转换器块的架构。在编码器中,状态使用resnet-18进行编码,通过时间编码(te)和位置编码(pe)进行增强,并通过自我注意进行处理。解码器然后利用对编码动作的自注意,并采用交叉注意来整合来自编码器的编码状态。最终,交叉注意力的输出被馈送到线性输出层,以预测未来的行动。
D Model Details
D.1 Parameter Comparison
我们还评估了配备rtx2060gpu的本地pc上的推理时间,使用32的批处理大小,以确保在表5中的相同条件下评估所有模型。
D.2 Training Details
我们在表6中列出了基于transformer和基于mamba的策略的训练超参数。为了确保公平比较,我们将两种策略的超参数调整到同一水平。
这些策略是使用libero提供的人类专家演示进行训练的,在主实验中,我们只对每个任务进行10次演示。
所有模型都在配备4个a100 gpu的集群上训练,批处理大小为256,使用3个不同的种子在50个迭代周期内进行训练。最后,我们计算了这3个种子的平均成功率。
E.3 Data Collection
遥操作用于收集所有真实机器人任务的数据,其中领导者机器人由人类控制,追随者机器人跟随领导者机器人,如图12所示。物体被放置在跟随机器人的前方,摄像头看不到领导机器人或人类。将引导机器人的当前关节状态作为期望的关节状态发送给跟随机器人。夹持器的状态被认为是二进制的,要么关闭,要么打开。为引导机器人的夹持器设置阈值;如果当前宽度低于阈值,跟随机器人的夹持器将关闭,否则将打开。
E.4 Evaluation
对于评估,使用模型的输出有时会激活机器人的安全机制,因为它违反了一定的约束。为了解决这个问题,在当前关节位置和模型输出之间生成轨迹。然后在每个时间步长将该轨迹的点提供给机器人,而不是模型的原始输出。该轨迹的长度取决于模型的输出与当前机器人状态的距离。
相关文章:
![](https://i-blog.csdnimg.cn/direct/5cafcc7076dc4d0aaae502cf92354fcc.png)
[论文阅读]MaIL: Improving Imitation Learning with Mamba
Abstract 这项工作介绍了mamba模仿学习(mail),这是一种新颖的模仿学习(il)架构,为最先进的(sota)变换器策略提供了一种计算高效的替代方案。基于变压器的策略由于能够处理具有固有非…...
![](https://www.ngui.cc/images/no-images.jpg)
在HTML中使用JavaScript
在 HTML 中使用 JavaScript 有以下几种常见的方式: 一、内联脚本 (一)基本语法 内联脚本是将 JavaScript 代码直接嵌入到 HTML 文件的 <script> 标签内部。 <!DOCTYPE html> <html lang"en"> <head> <…...
![](https://img-blog.csdnimg.cn/img_convert/ca94718a7746096d572a0aae3a236717.png)
InjectFix 热更新解决方案
简介 今天来谈一谈,项目种的客户端热更新解决方案。InjectFix是腾讯xlua团队出品的一种用于Unity中C#代码热更新热修复的解决方案。支持Unity全系列,全平台。与xlua的思路类似,InjectFix解决的痛点主要在于Unity中C#代码写的逻辑在发包之后无…...
![](https://i-blog.csdnimg.cn/direct/41c38cca1b0b4a9bba82a969a6d12597.png)
PHP7.4安装使用rabbitMQ教程(windows)
(1),安装rabbitMQ客户端erlang语言 一,erlang语言安装 下载地址1—— 下载地址2——https://www.erlang.org/patches/otp-27.0 二,rabbitMQ客户端安装 https://www.rabbitmq.com/docs/install-windows (…...
![](https://i-blog.csdnimg.cn/direct/ed3b4e309ccb402e909b0b4b9d46146d.png)
分页以及tab栏切换,动态传类型
<view class"disTitle"><view class"disName">账户明细</view><view class"nav"><u-tabs lineWidth"0" :activeStyle"{color: #FD893F }" :list"navList" change"tabsChange&quo…...
![](https://i-blog.csdnimg.cn/direct/ef4fce99b88e43aaa9a586790a7fae6c.png#pic_center)
【算法】平衡二叉树
难度:简单 题目 给定一个二叉树,判断它是否是 平衡二叉树 示例: 示例1: 输入:root [3,9,20,null,null,15,7] 输出:true 示例2: 输入:root [1,2,2,3,3,null,null,4,4] 输出&…...
![](https://i-blog.csdnimg.cn/direct/5e4c33fadf8b47da99b973e3108fa5bf.png)
五、 计算机网络(考点篇)
1 网络概述和模型 计算机网络是计算机技术与通信技术相结合的产物,它实现了远程通信、远程信息处理和资源共享。计算机网络的功能:数据通信、资源共享、管理集中化、实现分布式处理、负载均衡。 网络性能指标:速率、带宽(频带宽度或传送线路…...
![](https://www.ngui.cc/images/no-images.jpg)
如何解决数据分析问题:IPython与Pandas结合
如何解决数据分析问题:IPython与Pandas结合 数据分析是现代科学研究、商业决策和技术开发中的一个重要环节。IPython和Pandas是两个强大的工具,它们可以大大简化和加速数据分析的过程。本文将为初学者详细介绍如何结合使用IPython和Pandas来解决数据分析…...
![](https://i-blog.csdnimg.cn/direct/53cdfc2ea70a412ca9a0673f904534c9.png)
如何在 Microsoft Edge 上使用开发人员工具
Microsoft Edge 提供了一套强大的开发人员工具,可帮助 Web 开发人员检查、调试和优化他们的网站或 Web 应用程序。 无论您是经验丰富的 Web 开发人员还是刚刚起步,了解如何有效地使用这些工具都可以对开发过程产生重大影响。 在本文中,我们…...
![](https://i-blog.csdnimg.cn/direct/c509b81030014413b01bfb4e2e626e40.png)
《Linux系统编程篇》认识在linux上的文件 ——基础篇
前言 Linux系统编程的文件操作如同掌握了一把魔法钥匙,打开了无尽可能性的大门。在这个世界中,你需要了解文件描述符、文件权限、文件路径等基础知识,就像探险家需要了解地图和指南针一样。而了解这些基础知识,就像学会了魔法咒语…...
![](https://i-blog.csdnimg.cn/direct/ea4f6c69b89143ed9688bb02dbb76ba2.png)
Qt:22.鼠标相关事件(实例演示——鼠标进入/离开某控件的事件、鼠标按下事件、鼠标释放事件、鼠标双击事件)
目录 1.实例演示——鼠标进入/离开某控件的事件: 2.鼠标按下事件: 3.鼠标释放事件: 4.鼠标双击事件: 1.实例演示——鼠标进入/离开某控件的事件: 首先创建一个C类文件 Label,填写好要继承的父类 QLabe…...
![](https://i-blog.csdnimg.cn/direct/99bf491d80dd4e06a916e074fc08309c.png)
笔记 4 :linux 0.11 中继续分析 0 号进程创建一号进程的 fork () 函数
(27)本条目开始, 开始分析 copy_process () 函数,其又会调用别的函数,故先分析别的函数。 get_free_page () ; 先 介绍汇编指令 scasb : 以及 指令 sstosd :…...
![](https://i-blog.csdnimg.cn/direct/406b9599dd2d410e8b80b269caa132e5.png)
Vue3 引入Vanta.js使用
能搜到这篇文章 想必一定看过demo效果图了吧 示例 Vanta.js - Animated 3D Backgrounds For Your Website (vantajs.com) 1. 引入 在根目录 index.html中引入依赖 <script src"https://cdnjs.cloudflare.com/ajax/libs/three.js/r134/three.min.js"></sc…...
![](https://i-blog.csdnimg.cn/direct/bb254161b24742619559b81d71ab41ba.png)
LeetCode --- 134双周赛
题目 3206. 交替组 I 3207. 与敌人战斗后的最大分数 3208. 交替组 II 3209. 子数组按位与值为 K 的数目 一、交替组 I & II 题目中问环形数组中交替组的长度为3的子数组个数,主要的问题在于它是环形的,我们要考虑首尾相接的情况,如何…...
![](https://i-blog.csdnimg.cn/direct/27785dc454a547f796bccc545eef984d.png)
快速读出linux 内核中全局变量
查问题时发现全局变量能读出来会提高效率,于是考虑从怎么读出内核态的全局变量,脚本如下 f open("/proc/kcore", rb) f.seek(4) # skip magic assert f.read(1) b\x02 # 64 位def read_number(bytes):return int.from_bytes(bytes, little,…...
![](https://i-blog.csdnimg.cn/direct/58693513d93541a8a699fad79fb239a5.png)
postman录制设置
一、前言: postman是一个很好接口调试或是测试工具,简单方便,不需要很复杂的流程与技术,并且也具备录制条件。对于接口不了解,没有明确对应的说明,但又想通过接口进行一些测试使用其录制是一个不错的办…...
![](https://i-blog.csdnimg.cn/direct/bc19d7fded664ca092f00ea8bbdc4cc9.png)
redis消息队列
redis 的list类型实现消息队列: list结构实现的优缺点: 2、pubsub模式(消息发布订阅)实现消息队列 pubsub的优缺点: 命令行实现: pub:第一次发送有两个接收,第二个只有一个接收 sub接收&#x…...
![](https://i-blog.csdnimg.cn/direct/1a498df91d0a401aa9e1f82c3ba02d41.png)
Linux vim的使用(一键安装则好用的插件_forcpp),gcc的常见编译链接操作
vim 在Linux系统上vim是个功能还比较完善的软件。但是没装插件的vim用着还是挺难受的,所以我们直接上一款插件。 我们只需要在Linux上执行这个命令就能安装(bite提供的) curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh …...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5CaDMIN%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20240713150844844.png&pos_id=img-UDcJW3Ot-1720872886067)
css基础(1)
CSS CCS Syntax CSS 规则由选择器和声明块组成。 CSS选择器 CSS选择器用于查找想要设置样式的HTML元素 一般选择器分为五类 Simple selectors (select elements based on name, id, class) 简单选择器(根据名称、id、类选择元素) //页面上的所有 …...
![](https://i-blog.csdnimg.cn/direct/e3f247a8bb38412abdf00863f2ecc6c0.png)
高并发线程池设计Nginx线程池源码剖析
为什么我们需要线程池?Why? 省流: 为了解决: 1.访问磁盘速度慢 2.等待设备工作 3..... 我们使用多线程技术,在IO繁忙的时候优先处理别的任务 为了解决多线程的缺陷: 1.创建、销毁线程时间消耗大 2.创建线程太多使系统资源不足或者线程频繁切换…...
![](https://i-blog.csdnimg.cn/direct/94ee638781e147bb8884b20c0c3be4ee.jpeg)
SEO:6个避免被搜索引擎惩罚的策略-华媒舍
在当今数字时代,搜索引擎成为了绝大多数人获取信息和产品的首选工具。为了在搜索结果中获得良好的排名,许多网站采用了各种优化策略。有些策略可能会适得其反,引发搜索引擎的惩罚。以下是彭博社发稿推广的6个避免被搜索引擎惩罚的策略。 1. 内…...
STM32之六:SysTick系统滴答定时器
目录 1. SysTick简介 2. 时钟来源 3. SysTick寄存器 3.1 CTRL—SysTick控制及状态寄存器 3.2 RELOAD—SysTick重装载数值寄存器 3.3 CURRENT—SysTick当前数值寄存器 4. systick系统定时器配置 5. 延时函数实现 5.1 延时函数编写步骤 5.2 微秒级延时函数delay_us 5.…...
![](https://i-blog.csdnimg.cn/direct/02508da0900d4be2bd02fee89661be00.png)
全栈物联网项目:结合 C/C++、Python、Node.js 和 React 开发智能温控系统(附代码示例)
1. 项目概述 本文详细介绍了一个基于STM32微控制器和AWS IoT云平台的智能温控器项目。该项目旨在实现远程温度监控和控制,具有以下主要特点: 使用STM32F103微控制器作为主控芯片,负责数据采集、处理和控制逻辑采用DHT22数字温湿度传感器,精确采集环境温湿度数据通过ESP8266 W…...
![](https://i-blog.csdnimg.cn/direct/e7a5562ac8684b8d9e890816a8b3d746.png)
WPF学习(3) -- 控件模板
一、操作过程 二、代码 <Window x:Class"学习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expressio…...
![](https://www.ngui.cc/images/no-images.jpg)
Netty Websocket SpringBoot Starter
netty websocket starter Quick Start Demo 项目 添加依赖 <!--添加源--> <repository><id>github</id><url>https://maven.pkg.github.com</url><snapshots><enabled>true</enabled></snapshots> </reposit…...
![](https://i-blog.csdnimg.cn/direct/798118bb4fda4ba9a34ee230cfad36a4.png)
数据结构(4.2)——朴素模式匹配算法
字符串模式匹配 在主串中找到模式串相同的子串,并返回其所在的位置。 子串和模式串的区别 子串:主串的一部分,一定存在 模式串:不一定能在主串中找到 字符串模式匹配 朴素模式匹配算法 主串长度为n,模式串长度为…...
![](https://www.ngui.cc/images/no-images.jpg)
git切换远程仓库地址
git 更换远程仓库地址三种方法总结 一、前言 由于之前项目管理使用私服的 gitlab ,现在换成了Gitea,需要修改远端仓库地址。 二、环境 windows 10git version 2.34.0.windows.1 三、帮助文档 GitHub文档 四、三种修改方法 方法一:不删除远程仓…...
![](https://www.ngui.cc/images/no-images.jpg)
同步与异步:.NET 中的 Task.WaitAll 和 Task.WhenAll
在 C# 中,异步编程通常涉及同时运行多个任务。处理多个任务的两种常见方法是 Task.WaitAll 和 Task.WhenAll。虽然它们看起来很相似,但它们的用途不同,并且用于不同的场景。本文探讨了 Task.WaitAll 和 Task.WhenAll 之间的区别,并…...
![](https://i-blog.csdnimg.cn/direct/bcc6b52baadc45a69bdf8c0afdd4c49b.png)
在Linux系统实现瑞芯微RK3588部署rknntoolkit2进行模型转换
一、首先要先安装一个虚拟的环境 安装Miniconda包 Miniconda的官网链接:Minidonda官网 下载好放在要操作的linux系统,我用的是远程服务器的linux系统,我放在whl这个文件夹里面,这个文件夹是我自己创建的 运行安装 安装的操作都是yes就可以了 检查是否安装成功,输入下面…...
![](https://i-blog.csdnimg.cn/direct/e8f2813d3f6a4f638c0d02689e7ff7e7.png)
【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用
目录 一、引言 二、pipeline库 2.1 概述 2.2 使用task实例化pipeline对象 2.2.1 基于task实例化“自动语音识别” 2.2.2 task列表 2.2.3 task默认模型 2.3 使用model实例化pipeline对象 2.3.1 基于model实例化“自动语音识别” 2.3.2 查看model与task…...
![](/images/no-images.jpg)
营销型网站规划建设的七大要素/推广平台免费b2b网站大全
几日来一直在看 马维达翻译的《ACE自适配通信环境中文技术文档》,终于看出点名堂决定从今日开始写代码调试工作工作系统的原型。虽说动作慢了点,不过连续阅读了《ACE文档》和Bruce Zhang的《软件设计精要与模式》多章,对设计模式有了更深刻的…...
![](https://img2018.cnblogs.com/blog/1573074/201901/1573074-20190118160224662-545431820.gif)
顺德装修网站建设/百度推广区域代理
已将完整示例放置在github上 地址:https://github.com/LyyZzzz/img-slide.git如有转载望附带本网页链接 /*** created by Lee on 2019/1/18 12:07* slide 调用方法 基于jq *为必传* param box 图片盒子 ** param eachbox 每个图片最高父级 ** param time 轮播间隔…...
![](/images/no-images.jpg)
黑群晖的做网站文件/seo小白入门
在做算法的过程中经常终端传来的是jpeg图片,需要将jpeg解码为yuv再进行处理。这里使用jpeg-6b交叉编译,然后进行解码,下面是解码的过程:#include <ctype.h> #include <errno.h> #include <unistd.h> #include &…...
![](https://s1.51cto.com/attachment/200811/200811261227667946609.jpg)
便捷的网站建设软件/怎么做百度网页
Rational RequisiteProIBM Rational RequisitePro解决方案是一种需求和用例管理工具,能够帮助项目团队改进项目目标的沟通,增强协作开发,降低项目风险,以及在部署前提高应用程序的质量。通过与 Microsoft? Word 的高级集成方式&a…...
![](/images/no-images.jpg)
xampp 开发网站/公司网站推广费用
Substring with Concatenation of All Words 比较复杂的一题,首先是要明确用滑块的概念来解决,始终保持L集合中的字符串在滑块中都只出现了一次,当然设置一个总计数count,当cout等于L集合长度时,即使找了一段符合要求的…...
![](http://s2.51cto.com/wyfs02/M00/8E/F3/wKiom1jPmCjC0eveAACg4z3bkBA323.jpg-wh_651x-s_3719362189.jpg)
网站建设有什么理论依据/人工智能培训心得
我们先来看看几种常见的退出方法(不优雅的方式) 一、容器式 建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundl…...