Social LSTM:Human Trajectory Prediction in Crowded Spaces | 文献翻译
概要
行人遵循不同轨迹以避免障碍物和容纳同行者。任何在这种场景中巡航的自动驾驶车辆都需要能够遇见行人的未来位置并相应地调整其路线以避免碰撞。轨迹预测问题能够被看作一个顺序生成任务,其中我们对基于行人过去的位置预测其未来的轨迹感兴趣。根据最近RNN(循环神经网络)模型对顺序预测任务的成功,我们提出一个能够学习一般人类运动并预测其未来轨迹的LSTM(长短期记忆网络)模型。这与人工定义函数的传统方法(如社会力模型函数)形成对比。我们在几个公共数据集上证明了我们方法的性能,其中我们的模型在一些数据集优于目前最先进的方法。我们也分析了我们的模型预测的轨迹以证明我们的模型学习的运动行为。
图1。本文旨在预测拥挤场景中的运动行为,然而这是一项颇具挑战性的任务,因为每个人的运动通常会受到周围人的影响。我们提出了一种新的模型,我们称之为“社交”LSTM,它可以通过考虑人类在共享环境巡航时通常使用的常识规则和社交惯例,共同预测场景中所有人的路径,我们将通过热图显示它们未来轨迹的预测分布。
介绍
人类天生具有相互阅读的能力。当人们在人行道、机场航站楼或购物中心等拥挤公共空间行走时,他们遵循大量(不成文的)常识规则并遵守社会惯例。例如,当他们考虑下一步去哪里时,他们尊重个人空间并让出通行权。模型化这些规则并使用它们来理解和预测复杂现实世界环境中的人类运动的能力对于广泛应用非常有价值,从部署具有社会意识的机器人[41]到在智能环境中设计智能跟踪系统[43]。
然而,在考虑这种常识行为的同时预测人类目标的运动是一个极具挑战性的问题。这需要理解拥挤空间中行人之间发生的复杂而微妙的交互。计算机视觉的最新研究成功地解决了其中的一些挑战。Kitani等人已经证明[32],与忽略场景信息的模型相比,关于静态环境语义的引入知识(例如人行道的位置、草地的延伸等)有助于更准确地预测未来行人的轨迹。[24,50,35]开创性工作还提出了模拟人与人之间互动(通常称为“社会力”)的方法,以提高多目标跟踪问题的鲁棒性(抗故障抗干扰的能力)和准确性。
然而,这些工作大多受限于以下两个假设。1)使用人工预设的函数来模拟特定的人际交互,而非以数据驱动方式传递,这导致更倾向于捕捉简单人际交互的模型(如排斥力或吸引力),并且可能无法推广到更复杂、更拥挤的环境中。2)专注于模拟彼此比较靠近的人际交互以避免可能立即发生的碰撞,然而它们并不能阻止在更遥远未来可能发生的人际交互。
在这项工作中,我们提出了一种方法,可以通过一种新颖的数据驱动体系结构来预测未来的运动轨迹,从而解决这两个挑战。受到长短期记忆网络(LSTM)近期在手写[20]和语音[21]生成等不同序列预测任务中取得成功的启发,我们也将其扩展到人类轨迹预测。虽然LSTM具有学习和复制长序列的能力,但它不能捕获多个相关序列之间的依赖关系。
我们通过一种新颖的体系结构来解决这个问题,该架构连接了与附近序列相对应的LSTM。此外,我们引入了一个“社交”池化层,该层允许空间上相互靠近序列的LSTM相互共享隐藏状态,我们称之为“社交”LSTM。它的体系结构可以自发学习在时间上重合的轨迹之间发生的典型交互。该模型利用现有的人类轨迹数据集,而不需要任何额外的算法来学习人类在社交空间中观察到的常识规则和社会惯例。
最后,我们证明,在两个公开可用的数据集上,我们的社交LSTM能够比最先进的方法更准确地预测行人轨迹:ETH[49]和UCY[39]。我们还分析了我们的模型生成的轨迹模式,以了解从轨迹数据集中学习到的社会约束。
相关工作
人际交互
Helbing和Molnar[24]开创性提出了一个带有吸引力和排斥力的行人运动模型,称为社会力模型。该模型即使在现代行人数据集上也能取得具有竞争力的结果 [39, 49]。后来这种方法被扩展到机器人领域 [41] 和活动理解 [43, 73, 50, 38, 37, 9, 10]。
类似方法也被用来模型化人际交互,并为模型设定了很强的先验知识。Treuille等人[62]使用连续动力学,Antonini等人[2]提出离散选择框架,Wang等人[69]和Tay等人[59]均使用高斯过程。这些函数也被用来研究静止群体[74, 48]。这些工作旨在生成平滑的运动路径,并没有处理与离散化相关的问题。
另一条研究路线是利用精心设计的特征和属性来改进跟踪和预测。Alahi等人[1]通过学习人群的轨迹来呈现一种社会亲和性,了解他们的相对位置而不强求其绝对位置,而Yu等人[74]提出使用人类属性来改善密集人群中的预测。他们还使用了与[6]类似的基于代理的模型。Rodriguez等人[54]分析高密度人群的视频以跟踪和计数人数。
这些模型中的大多数都根据相对距离和特定场景的规则提供人工预设的能量势能。相比下,我们提出了一种更具通用性、以数据驱动方式来学习人际交互。
活动预测
活动预测模型试图预测人们将要进行的运动和动作。大量工作通过聚类轨迹来学习运动模式 [26, 30, 46, 77]。更多方法可在[45, 52, 34, 3, 16, 33]中找到。Kitani等人在[32]中使用逆强化学习来预测静态场景中的人类路径。他们通过建模人与空间交互来推断场景的可行走路径。Walker等人在[68]中根据大量视频集合预测视觉场景中通用代步工具(例如车辆)的行为。Ziebart等人[78, 23]提出了一种基于规划的方法。Turek等人[63, 40]使用类似思想识别场景的功能地图。其他方法如[27, 19, 42, 36]展示了使用场景语义来预测人类导航的目标和路径。场景语义也被用来预测多个对象的动态[17, 36, 34, 28]。这些工作大多仅限于使用静态场景信息来预测人类运动和活动。我们的模型则专注于模型化动态的人群交互以进行路径预测。
最近一些工作也尝试预测未来的人类动作。特别是Ryoo等人[55, 8, 71, 67, 44, 58]预测流式视频中的动作。与我们的模型更相关的是使用RNN模型来预测视频中的未来事件[53, 57, 66, 56, 31]。沿着类似的思路,我们则能够预测场景中的未来轨迹。
RNN模型用于序列预测
最近,循环神经网络(RNN)及其变体,包括长短期记忆(LSTM)[25] 和门控循环单元(GRU)[12]已被证明在序列预测任务中非常成功,例如语音识别[21, 11, 13]、字幕生成[64, 29, 75, 15, 72]、机器翻译[4]、图像/视频分类[7, 22, 70, 47]、人类动态[18] 等。RNN模型被证明在处理紧密连接的数据的任务中非常有效,例如语义分割[76]、场景解析[51],甚至作为卷积神经网络(CNN)的替代品[65]。这些工作表明,RNN模型能够学习空间相关数据(如图像像素)之间的依赖关系。这促使我们将Graves等人[20]的序列生成模型扩展到我们设置中。具体来说,Graves等人[20]预测孤立的手写序列;而在我们的模型中,我们联合预测与人类轨迹相对应的多个相关序列。
框架模型
拥挤场景中的行人会根据周围其他行人的行为来调整自己的动作。例如,一个人可能会完全改变他的路径或暂时停止,以便让向他移动的人群通过。仅通过孤立观察这个人,无法预测出这种轨迹偏差。同样,简单的“排斥力”或“吸引力”函数(传统的社会力模型 [24, 43, 73, 50])也无法预测这种行为。这促使我们构建一个模型,在预测个体路径的同时考虑到较大范围内其他个体的行为。本节我们描述了我们基于池化层的LSTM模型(图 2),该模型能够联合预测场景中所有人的轨迹。我们将其称为“社交”LSTM 模型。
图2,“社交”LSTM方法概述。我们为场景中的每条轨迹使用一个单独的LSTM网络。然后,这些LSTM通过社交池化(S-池化)层相互连接。与传统LSTM不同,这个池化层允许空间上接近的LSTM相互共享信息。图中的变量在后续公式2中解释。底部一行展示场景中个体的S-池化。在一定半径内的所有LSTM的隐藏状态被汇总在一起,并用作下一步输入。
问题表述
我们假设每个场景首先被预处理以获取所有人在不同时间点的空间坐标。先前的研究也遵循这一惯例[41, 1]。在任意时间点t,场景中的第i个人由他的坐标(xit,yit)表示。我们观察到从时间1到Tobs所有人的位置,并预测他们在时间点Tobs+1到Tpred的位置。这项任务也能被看作是一个序列生成问题[20],其中输入序列对应于个体观察到的位置,而我们感兴趣的是生成一个输出序列,表示他在不同时间点的未来位置。
3.1“社交”LSTM
每个人都有不同的运动模式:他们以不同速度和加速度移动,并且有不同的步态。我们需要一个模型,能从对应于个体的有限初始观测集中理解和学习这种特定于个人的运动属性。
长短期记忆(LSTM)网络已被证明能够成功地学习和泛化孤立的序列(如手写[20]和语音[21])的属性。受此启发,我们也为我们的轨迹预测问题开发了一个基于LSTM的模型。具体而言,场景中每个人都有一个LSTM,它学习个人的状态,并预测他们未来的位置,如图2所示。LSTM的权重在所有序列之间共享。
然而,简单地为每个人使用一个LSTM模型并不能捕捉到邻近区域内的人际交互。普通的LSTM对其他序列的行为一无所知。我们通过一种新的池化策略连接邻近的 LSTM 来解决此限制,如图3所示。
图3.我们展示了代表黑点的个体的社交池化层。我们在一定空间距离内汇所有邻居的隐藏状态(用黄色、蓝色和橙色表示)。池化部分保留了邻居的空间信息,如最后两个步骤所示。
社交隐藏状态池
行人通过隐含地推理周围个体的运动来调整自己的路径。这些邻居同样受到他们周围环境中其他个体的影响,并且可能会随着时间改变他们的行为。我们期望LSTM的隐藏状态能捕捉这些随时间变化的运动属性。为了联合推理多个行人的轨迹,我们在邻近的LSTM之间共享状态。这引入了一个新的挑战:每个人都有不同数量的邻居,在非常拥挤的人群中[1],这个数量可能会过高。
因此,我们需要一个紧凑的表示来整合所有邻近状态的信息。我们通过引入“社交”池化层来处理这个问题,如图2所示。在每个时间步,LSTM单元从邻近LSTM单元接收汇总的隐藏状态信息。
汇总信息时,我们尝试通过基于网格的池化来保留空间信息,具体如下。LSTM在时间t的隐藏状态hit捕获当时场景中第i个人的潜在表示。我们通过构建一个“社交”隐藏状态张量Hit来与邻居共享这一表示。给定隐藏状态维度D和邻域大小No,我们能为第i条轨迹构建一个No×No×D的张量Hit。
其中hjt−1对应于第j个人在t−1时刻的LSTM的隐藏状态,1mn[x,y] 是一个用于检查(x,y)是否在网格的(m,n)单元格中的指示函数,Ni是与行人i 对应的邻居集合。池化操作如图3所示。
我们将汇总后的社交隐藏状态张量嵌入到ait中,并将坐标嵌入到eit中。这些嵌入被连接并用作相应轨迹在时间t的LSTM单元的输入。这引入了以下递归关系:
其中ϕ(⋅)是一个带有非线性ReLU的嵌入函数,We和Wa是嵌入权重,Wl是LSTM的权重。
位置估计
时间t的隐藏状态用于预测下一时间步t+1的轨迹位置(x^,y^)it+1的分布。与Graves等人[20]类似,我们假设一个由均值μit+1=(μx,μy)it+1、标准差σit+1=(σx,σy)it+1和相关系数ρit+1参数化的二元高斯分布。这些参数由一个线性层预测,该线性层有一个5×D的权重矩阵Wp。在时间t预测的坐标(x^it,y^it)由下式给出:
LSTM模型的参数通过最小化负对数似然损失(对于第i条轨迹的Li)来学习:
我们通过最小化训练数据集中所有轨迹的这个损失来训练模型。我们的“社交”池化层并没有引入任何额外的参数。
与传统LSTM的一个重要区别是,多个LSTM的隐藏状态通过我们的“社交”池化层相互耦合,并且我们在每个时间步通过场景中的多个LSTM联合进行反向传播。
占用图池化
“社交”LSTM模型可以用于汇总来自邻近轨迹的任何一组特征。作为一种简化,我们还尝试一个仅汇总邻居坐标的模型,称为O-LSTM。这是原始模型的简化版本,不需要在训练期间对所有轨迹进行联合反向传播。该模型仍然能学习重新定位轨迹以避免与邻居的即时碰撞。然而,由于缺乏来自邻近人的更多信息,该模型将无法平滑地改变路径以避免未来的碰撞。
对于人i,我们将张量Hit的定义修改为在时间t以行人位置为中心的No×No矩阵,并称之为占用图Oit。所有邻居的位置都在此图中汇总。Oit在(m,n)位置的元素由以下公式给出:
其中1mn[.]是之前定义的指示函数。这也可以被看作是方程(1)中社交张量的一个简化版本,其中隐藏状态向量被一个常数值替换,该常数值表示相应单元格中邻居的存在或不存在。
在学习这个更简单的模型时,向量化的占用图被用作方程(2)中Hit的替代。
路径预测的推理
测试阶段,我们使用训练好的“社交”LSTM模型预测第i个人的未来位置(x^it,y^it)。从时间Tobs+1到Tpred,我们使用前一个“社交”LSTM单元预测的位置(x^it,y^it)来代替方程(2)中的真实坐标(xit,yit)。在构建方程(1)中的社交隐藏状态张量Hit或方程(5)中的占用图Oit时,也使用预测的位置来替换真实坐标。
3.2实施细节
我们在将空间坐标用作LSTM输入之前使用了64维的嵌入维度。我们将空间池化大小No 设置为32,并使用一个总计尺寸为8x8且不重叠的池化窗口。我们为所有LSTM模型固定一个128维的隐藏状态维度。此外,我们还在汇总的隐藏状态特征上使用了一个带有非线性ReLU(修正线性单元)的嵌入层,然后才用它们来计算隐藏状态张量Hit。这些超参数基于在一个合成数据集上的交叉验证来选择。这个合成数据则通过实现社会力模型的模拟生成。这个合成数据包含了数百个场景的轨迹,平均每帧的人群密度为30。我们选择RMSprop[14]和0.003的学习率训练模型。“社交”LSTM模型在一个带有Theano[5]实现的单GPU上训练。
实验
本节中我们在两个公开行人轨迹数据集上进行实验:ETH[49]和UCY [39]。ETH数据集包含两个场景,每个场景有750名不同行人,并分为ETH和Hotel两个集合。UCY数据集包含两个场景,共有786人。这个数据集有3个部分:ZARA-01、ZARA-02和UCY。最终我们在5组数据上评估我们的模型。这些数据集代表了现实世界的拥挤场景,包含数千条非线性轨迹。如[49]所示,这些数据集还涵盖了许多具有挑战性的群体行为,例如牵手行走的情侣、相互穿插的群体以及在某些场景中动态形成和解散的群体。
我们使用三种不同的指标来报告预测误差。与Pellegrini等人[49]类似,我们使用:
1.平均位移误差——轨迹所有估计点和真实点的均方误差。Pellegirini等人在[49]中介绍。
2.最终位移误差——预测周期结束时预测的最终目的地和真实的最终目的地之间的距离。
3.平均非线性位移误差——轨迹非线性区域的均方误差。由于大多数轨迹预测的误差发生在人际交互产生的非线性转弯过程中,我们明确评估了这些区域周围的误差。我们在二阶导数的范数上设置一个启发式阈值来识别非线性区域。
为在训练模型时充分利用这些数据集,我们采用留一法,即在4组数据上训练和验证模型,然后在剩余的那组数据上进行测试,该过程我们会对所有5组数据重复进行。对于用于比较的其他基线方法,我们也采用了相同的训练和测试流程。
测试阶段,我们观察一条3.2秒的轨迹,并预测后续4.8秒的路径。在每秒0.4帧的帧率下,这对应于观察8帧并预测接下来的12帧,与[49, 39]中使用的设置相似。在表(4)中,我们将我们的模型性能与目前最先进的方法以及多个对照设置进行了比较。
线性模型(LIN):我们使用现成的卡尔曼滤波器来外推轨迹,假设加速度是线性的。
碰撞避免(LTA):我们报告了社会力模型[73]的一个仅使用碰撞避免能量的简化版本的结果。
社会力(SF):我们使用[73]中的社会力模型的实现,它考虑了诸如群体亲和力和预测目的地等多个因素。
迭代高斯过程(IGP):我们使用[61]中的IGP实现。与其他基线不同,IGP使用了关于行人最终目的地的额外信息。
普通LSTM模型:“社交”LSTM模型的一个简化版本,其中移除了“社交”池化层并将所有轨迹视为相互独立。
带有占用图的LSTM模型(O-LSTM):能够展现“社交”LSTM模型的一个简化版本的性能。作为提示,该模型仅在每个时间点汇总邻居的坐标。
简单线性模型产生了较高的预测误差,这些误差在非线性区域尤为明显,这可从平均非线性位移误差中看出。普通LSTM模型优于这个线性基线,因为它能够外推非线性曲线,如Graves等人[20]所示。然而这种简单的LSTM模型明显逊色于明确模型化人际交互的社会力模型和IGP模型,这体现了考虑人际交互的重要性。
我们的基于社交池化层的LSTM和O-LSTM在几乎所有数据集中都优于经过大量工程设计的社会力模型和IGP模型。该效果在UCY数据集中的误差减少比在ETH数据集中更为显著。原因在于两个数据集中不同的人群密度:UCY场景相对拥挤,总共有32K个非线性区域,而ETH场景则相对稀疏,只有15K个非线性区域。
在更拥挤的UCY场景中,偏离线性路径的情况更多地受到人际交互的影响。因此,我们的模型能够捕捉到邻近区域的交互,在UCY数据集中获得了更高的收益。在ETH数据集中,行人到达特定目的地的意图起到了更主导的作用。因此,在测试期间知道真实最终目的地的IGP模型在该数据集的部分区域实现了较低的误差。
在ETH的情况下,我们还观察到占用和社交LSTM的误差彼此相当,并且通常优于社会力模型。最终,我们的“社交”LSTM模型在更拥挤的UCY数据集中优于O-LSTM。这表现对于密集人群,池化整个隐藏状态以捕捉复杂交互具有优势。
表1.所有方法在所有数据集上的定量结果。我们通过以下方式呈现性能指标:前6行是平均位移误差,7至12行是非线性区域的平均位移误差,后6行是最终位移误差。所有方法都预测固定时长为4.8秒的轨迹。其中IGP使用了一个人的预期真实目的地,与其他方法不同。
4.1分析预测路径
我们在上述定量评估表明,“社交”LSTM模型在标准数据集上的表现优于目前最先进的方法。本节,我们试图更多地了解我们的模型在不同人群设置中的实际行为。我们定性研究了我们的“社交”LSTM模型在社交场景中的表现,其中个体以特定模式相互交互。
图4展示了一个由四个人占据的示例场景。我们可视化了我们的模型在不同时间点预测的路径分布。图中第一行和第三行显示每个人当前的位置以及他们的真实轨迹(实线表示未来路径,虚线表示过去路径)。第二行和第四行显示我们的“社交”LSTM模型对接下来12.4秒的预测。这些场景中,我们观察到2号、3号、4号三个人彼此靠近行走,而1号则离他们较远行走。
我们的模型在所有时间都为1号预测了一条线性路径。1号的分布随时间相似,表明该人物的运动速度恒定。
我们可以从三个人群体预测的轨迹中观察到更有趣的模式。尤其是我们的“社交”LSTM模型做出了智能的路线选择,为他人让路并预防未来的碰撞。例如,在时间步2、4、5,我们的模型甚至在实际转弯开始之前,就预测了3号和4号偏离线性路径。在时间步3、4,我们的模型预测3号“停下”以让路给1号。有趣的是,在时间步4,停下点的位置被更新以匹配路径上的真实转弯点。而在下一个时间步,随着更多观测数据的加入,模型能够正确预测以该点为支点的完整转弯。
在图5中,我们展示了我们的“社交”LSTM模型、社会力模型[49]和线性基线在ETH数据集之一上的预测结果。当人们成群结队行走,例如作为一对情侣时,我们的模型能够联合预测他们的轨迹。与社会力模型[73]不同,我们并没有显式地模型化群体行为,然而我们的模型在整体上更好地预测了群体轨迹。在图5的最后一行,我们展示了一些失败案例,即我们的预测比目前其它模型预测效果更差的情况。我们要么预测了一条线性路径(第二列),要么比需要的更早减速(第一列和第三列)。尽管在这些情况下轨迹与真实轨迹不匹配,但我们的“社交”LSTM模型仍然输出了“合理的”轨迹,即行人可能会采取的轨迹。例如,在第一列和第三列中,我们的模型预测行人将会减速以避免与前方的人发生潜在的碰撞。
图4.我们可视化了场景中4个人在6个时间步移动时预测路径的概率分布。子标题描述了我们的“社交”LSTM模型正在预测的内容。在每个时间步,第1行和第3行的实线表示真实未来轨迹,虚线表示直到该时间步的观测位置,点表示该时间步的位置。我们注意到,我们的模型经常能够在具有非线性运动的挑战性设置中正确预测未来路径。其中,T代表时间,编号1-4表示行人编号。
图5.我们的“社交”LSTM模型预测轨迹的示例。在前3行是我们的模型成功预测轨迹的示例,就位置和速度而言误差较小,我们还展示了其他方法,如社会力模型[73]和线性方法。最后1行是我们的模型预测轨迹的失败案例,例如我们预测行人将会选择减速或采取线性路径。尽管如此,“社交”LSTM模型仍预测了一条合理的路径。结果展示在ETH数据集[49]上。
结论
我们提出了一种基于LSTM的模型,能够联合推理多个行人以预测场景中的运动轨迹。我们为每个轨迹使用一个LSTM,并通过引入一个新的社交池化层在LSTM之间共享信息。我们将得到的模型称为“社交”LSTM模型。我们的模型在两个公开数据集上的表现优于目前最优的方法。此外,我们定性展示了我们的“社交”LSTM模型成功预测了由社会互动产生的各种非线性行为,例如人群结对移动。未来我们将尝试把“社交”LSTM模型扩展到多类别设置中,其中自行车、滑板车、独轮车和行人等多种对象共享同一空间。每个对象在占用图中将拥有自己的标签。此外,通过将局部静态场景图像作为LSTM的额外输入便可以在我们的框架中模型化人与空间的交互。这将允许在同一个框架中联合模型化人际交互和人与空间的交互。
鸣谢
本报告的研究得到了斯坦福人工智能实验室联合丰田人工智能研究中心以及美国海军研究办公室稀疏资助(编号N00014-13-1-0761和N00014-15-1-2615)的资金支持。
参考
相关文章:
Social LSTM:Human Trajectory Prediction in Crowded Spaces | 文献翻译
概要 行人遵循不同轨迹以避免障碍物和容纳同行者。任何在这种场景中巡航的自动驾驶车辆都需要能够遇见行人的未来位置并相应地调整其路线以避免碰撞。轨迹预测问题能够被看作一个顺序生成任务,其中我们对基于行人过去的位置预测其未来的轨迹感兴趣。根据最近RNN&am…...
前后端交互过程
一、前后端交互过程 前后端交互是指客户端(前端)与服务器(后端)之间的数据通信。以下是一个典型的前后端交互流程: 前端请求: 用户在浏览器上与前端界面交互,如点击按钮、提交表单。前端使用 A…...
【计算机视觉】人脸识别
一、简介 人脸识别是将图像或者视频帧中的人脸与数据库中的人脸进行对比,判断输入人脸是否与数据库中的某一张人脸匹配,即判断输入人脸是谁或者判断输入人脸是否是数据库中的某个人。 人脸识别属于1:N的比对,输入人脸身份是1&…...
Spark Streaming的核心功能及其示例PySpark代码
Spark Streaming是Apache Spark中用于实时流数据处理的模块。以下是一些常见功能的实用PySpark代码示例: 基础流处理:从TCP套接字读取数据并统计单词数量 from pyspark import SparkContext from pyspark.streaming import StreamingContext# 创建Spar…...
高效实现 Markdown 转 PDF 的跨平台指南20250117
高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐,但如何将其转换为易于分享和打印的 PDF 格式,是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法,并探讨…...
冯诺依曼架构和哈佛架构的主要区别?
冯诺依曼架构(Von Neumann Architecture)和哈佛架构(Harvard Architecture)是两种计算机体系结构,它们在存储器组织、指令处理和数据存取等方面有明显的不同。以下是它们的主要区别: 1.存储器结构 冯诺依曼…...
AI 新动态:技术突破与应用拓展
目录 一.大语言模型的持续进化 二.AI 在医疗领域的深度应用 疾病诊断 药物研发 三.AI 与自动驾驶的新进展 四.AI 助力环境保护 应对气候变化 能源管理 后记 在当下科技迅猛发展的时代,人工智能(AI)无疑是最具影响力的领域之一。AI 技…...
Java锁 从乐观锁和悲观锁开始讲 面试复盘
目录 面试复盘 Java 中的锁 大全 悲观锁 专业解释 自我理解 乐观锁 专业解释 自我理解 悲观锁的调用 乐观锁的调用 synchronized和 ReentrantLock的区别 相同点 区别 详细对比 总结 面试复盘 Java 中的锁 大全 悲观锁 专业解释 适合写操作多的场景 先加锁可以…...
【RabbitMq】RabbitMq高级特性-延迟消息
延迟消息 什么是延迟消息死信交换机延迟消息插件-DelayExchange其他文章 什么是延迟消息 延迟消息:发送者发送消息时指定一个时间,消费者不会立刻收到消息,而是在指定时间之后才收到消息。 延迟任务:设置在一定时间之后才执行的任…...
MindAgent:基于大型语言模型的多智能体协作基础设施
2023-09-18 ,加州大学洛杉矶分校(UCLA)、微软研究院、斯坦福大学等机构共同创建的新型基础设施,目的在评估大型语言模型在游戏互动中的规划和协调能力。MindAgent通过CuisineWorld这一新的游戏场景和相关基准,调度多智…...
Linux内存管理(Linux内存架构,malloc,slab的实现)
文章目录 前言一、Linux进程空间内存分配二、malloc的实现机理三、物理内存与虚拟内存1.物理内存2.虚拟内存 四、磁盘和物理内存区别五、页页的基本概念:分页管理的核心概念:Linux 中分页的实现:总结: 六、伙伴算法伙伴算法的核心…...
【机器学习实战中阶】比特币价格预测
比特币价格预测项目介绍 比特币价格预测项目是一个非常有实用价值的机器学习项目。随着区块链技术的快速发展,越来越多的数字货币如雨后春笋般涌现,尤其是比特币作为最早的加密货币,其价格波动备受全球投资者和研究者的关注。本项目的目标是…...
【JVM-9】Java性能调优利器:jmap工具使用指南与应用案例
在Java应用程序的性能调优和故障排查中,jmap(Java Memory Map)是一个不可或缺的工具。它可以帮助开发者分析Java堆内存的使用情况,生成堆转储文件(Heap Dump),并查看内存中的对象分布。无论是内…...
使用vscode在本地和远程服务器端运行和调试Python程序的方法总结
1 官网下载 下载网址:https://code.visualstudio.com/Download 如下图所示,可以分别下载Windows,Linux,macOS版本 历史版本下载链接: https://code.visualstudio.com/updates 2 安装Python扩展工具 打开 VS Code,安装 Microsoft 提供的官…...
AI 编程工具—Cursor 对话模式详解 Chat、Composer 与 Normal/Agent 模式
Cursor AI 对话模式详解:Chat、Composer 与 Normal/Agent 模式 一、简介 Cursor 是一个强大的 AI 辅助编程工具,它提供了多种对话模式来满足不同的开发需求。主要包括: Chat 模式:直接对话交互Composer 模式:结构化编程助手Normal/Agent 模式:不同的 AI 响应策略打开Ch…...
【MySQL】数据库基础知识
欢迎拜访:雾里看山-CSDN博客 本篇主题:【MySQL】数据库基础知识 发布时间:2025.1.21 隶属专栏:MySQL 目录 什么是数据库为什么要有数据库数据库的概念 主流数据库mysql的安装mysql登录使用一下mysql显示数据库内容创建一个数据库创…...
ChatGPT开发教程指南
ChatGPT开发教程指南 一、ChatGPT 概述二、开发环境搭建(一)硬件要求(二)软件要求 三、开发流程(一)数据处理(二)模型选择与训练(三)接口开发 四、示例代码 随…...
OpenEuler学习笔记(四):OpenEuler与CentOS的区别在那里?
OpenEuler与CentOS的对比 一、基本信息 起源与背景: OpenEuler:由华为发起,后捐赠给开放原子开源基金会,旨在构建一个开放、多元化的云计算和边缘计算平台,以满足华为及其他企业的硬件和软件需求。CentOS:…...
spring cloud如何实现负载均衡
在Spring Cloud中,实际上并没有直接支持lb:\\这样的URL前缀来自动解析为负载均衡的服务地址。lb:\\这样的表示可能是在某些特定框架、文档或示例中自定义的,但它并不是Spring Cloud官方API或规范的一部分。 Spring Cloud实现负载均衡的方式通常依赖于服…...
LeetCode:37. 解数独
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:37. 解数独 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则ÿ…...
如何在idea中搭建SpringBoot项目
如何在idea中快速搭建SpringBoot项目 目录 如何在idea中快速搭建SpringBoot项目前言一、环境准备:搭建前的精心布局 1.下载jdk (1)安装JDK:(2)运行安装程序:(3)设置安装…...
STM32补充——FLASH
目录 1.内部FLASH构成(F1) 2.FLASH读写过程(F1) 2.1内存的读取 2.2闪存的写入 2.3FLASH接口寄存器(写入 & 擦除相关) 3.FLASH相关HAL库函数简介(F1/F4/F7/H7) 4.编程实战 …...
ASP.NET Core 中的 JWT 鉴权实现
在当今的软件开发中,安全性和用户认证是至关重要的方面。JSON Web Token(JWT)作为一种流行的身份验证机制,因其简洁性和无状态特性而被广泛应用于各种应用中,尤其是在 ASP.NET Core 项目里。本文将详细介绍如何在 ASP.…...
Docker配置国内镜像源
访问docker hub需要科学上网 在 Docker 中配置镜像地址(即镜像加速器)可以显著提升拉取镜像的速度,尤其是在国内访问 Docker Hub 时。以下是详细的配置方法: 1. 配置镜像加速器 Docker 支持通过修改配置文件来添加镜像加速器地址…...
qiankun+vite+vue3
基座与子应用代码示例 本示例中,基座为Vue3,子应用也是Vue3,由于qiankun不支持Vite构建的项目,这里还要引入 vite-plugin-qiankun 插件 基座(主应用) 加载qiankun依赖 npm i qiankun -S qiankun配置(src/qiankun) src/qiankun/config.ts export default {subApp…...
如何使用AI工具cursor(内置ChatGPT 4o+claude-3.5)
⚠️温馨提示: 禁止商业用途,请支持正版,充值使用,尊重知识产权! 免责声明: 1、本教程仅用于学习和研究使用,不得用于商业或非法行为。 2、请遵守Cursor的服务条款以及相关法律法规。 3、本…...
Linux内核编程(二十一)USB驱动开发-键盘驱动
一、驱动类型 USB 驱动开发主要分为两种:主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备,而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...
vue3+ts watch 整理
watch() 一共可以接受三个参数,侦听数据源、回调函数和配置选项 作用:监视数据的变化(和Vue2中的watch作用一致) 特点:Vue3中的watch只能监视以下四种数据: ref定义的数据。 reactive定义的数据。 函数返…...
2025年最新深度学习环境搭建:Win11+ cuDNN + CUDA + Pytorch +深度学习环境配置保姆级教程
本文目录 一、查看驱动版本1.1 查看显卡驱动1.2 显卡驱动和CUDA对应版本1.3 Pytorch和Python对应的版本1.4 Pytorch和CUDA对应的版本 二、安装CUDA三、安装cuDANN四、安装pytorch五、验证是否安装成功 一、查看驱动版本 1.1 查看显卡驱动 输入命令nvidia-smi可以查看对应的驱…...
USART_串口通讯轮询案例(HAL库实现)
引言 前面讲述的串口通讯案例是使用寄存器方式实现的,有利于深入理解串口通讯底层原理,但其开发效率较低;对此,我们这里再讲基于HAL库实现的串口通讯轮询案例,实现高效开发。当然,本次案例需求仍然和前面寄…...
CAN 网络介绍
背景 在T-Box 产品开发过程中,我们离不开CAN总线,因为CAN总线为我们提供了车身的相关数据,比如,车速、油耗、温度等。用于上报TSP平台,进行国标认证;也帮助我们进行车身控制,比如车门解锁/闭锁…...
pytorch 多机多卡训练方法
在深度学习训练中,使用多机多卡(多台机器和多块 GPU)可以显著加速模型训练过程。 PyTorch 提供了多种方法来实现多机多卡训练,以下是一些常用的方法和步骤: 1. 使用 torch.distributed 包 PyTorch 的 torch.distribut…...
【智能控制】年末总结,模糊控制,神经网络控制,专家控制,遗传算法
关注作者了解更多 我的其他CSDN专栏 毕业设计 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 …...
Linux系统 C/C++编程基础——使用make工具和Makefile实现自动编译
ℹ️大家好,我是练小杰,今天周二了,距离除夕只有6天了,新的一年就快到了😆 本文是有关Linux C/C编程的make和Makefile实现自动编译相关知识点,后续会不断添加相关内容 ~~ 回顾:【Emacs编辑器、G…...
kafka学习笔记7 性能测试 —— 筑梦之路
kafka 不同的参数配置对 kafka 性能都会造成影响,通常情况下集群性能受分区、磁盘和线程等影响因素,因此需要进行性能测试,找出集群性能瓶颈和最佳参数。 # 生产者和消费者的性能测试工具 kafka-producer-perf-test.sh kafka-consumer-perf-t…...
C#与AI的共同发展
C#与人工智能(AI)的共同发展反映了编程语言随着技术进步而演变,以适应新的挑战和需要。自2000年微软推出C#以来,这门语言经历了多次迭代,不仅成为了.NET平台的主要编程语言之一,还逐渐成为构建各种类型应用程序的强大工具。随着时…...
multus使用教程
操作步骤如下: 1.在vmware vsphere上配置所有主机使用的端口组安全项 Forged transmits 设置为: Accept Promiscuous Mode 设置为:Accept Promiscuous Mode(混杂模式)和Forged Transmits(伪传输)…...
用JAVA写算法之输入输出篇
本系列适合原来用C语言或其他语言写算法,但是因为找工作或比赛的原因改用JAVA语言写算法的同学。当然也同样适合初学算法,想用JAVA来写算法题的同学。 常规方法:使用Scanner类和System.out 这种方法适用于leetcode,以及一些面试手…...
场馆预定平台高并发时间段预定实现V2
🎯 本文档介绍了场馆预订系统接口V2的设计与实现,旨在解决V1版本中库存数据不一致及性能瓶颈的问题。通过引入令牌机制确保缓存和数据库库存的最终一致性,避免因服务器故障导致的库存错误占用问题。同时,采用消息队列异步处理库存…...
(1)STM32 USB设备开发-基础知识
开篇感谢: 【经验分享】STM32 USB相关知识扫盲 - STM32团队 ST意法半导体中文论坛 单片机学习记录_桃成蹊2.0的博客-CSDN博客 USB_不吃鱼的猫丿的博客-CSDN博客 1、USB鼠标_哔哩哔哩_bilibili usb_冰糖葫的博客-CSDN博客 USB_lqonlylove的博客-CSDN博客 USB …...
Spring Boot 整合 ShedLock 处理定时任务重复执行的问题
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...
缓存之美:万文详解 Caffeine 实现原理(上)
由于社区最大字数限制,本文章将分为两篇,第二篇文章为缓存之美:万文详解 Caffeine 实现原理(下) 大家好,我是 方圆。文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍&…...
PHP语言的网络编程
PHP语言的网络编程 网络编程是现代软件开发中不可或缺的一部分,尤其是在日益发展的互联网时代。PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,专门用于Web开发。它的灵活性、易用性以及强大的社区支持使得PHP在网络…...
【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构
单体仓库(Monorepo)搭建指南:从零开始 单体仓库(Monorepo)是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置,并简化依赖管理。本文将通过实际代码示例࿰…...
算法项目实时推流
1、搭建流媒体服务器 下载mediamtx 2、视频流直推 ffmpeg -stream_loop -1 -i DJI_20250109112715_0002_W.MP4 -r 30 -c:v libx264 -preset ultrafast -f flv rtmp://192.168.100.20:1935/live/test_chengdu1 3、硬件加速 如果硬件支持,可以使用硬件加速编码器&am…...
软件测试—— 接口测试(HTTP和HTTPS)
软件测试—— 接口测试(HTTP和HTTPS) HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头(Request Headers)示例请求标头 响应标头(Response Header…...
PCL K4PCS算法实现点云粗配准【2025最新版】
目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…...
Docker 学习总结(85)—— docker cp 使用总结
前言 在现代软件开发中,Docker 已成为一种流行的容器化技术。无论是在开发、测试还是生产环境中,管理容器内的文件都是一项常见且重要的任务。本文将详细介绍如何使用 docker cp 命令在 Docker 容器与宿主机之间拷贝文件和目录,并结合一些实际使用场景,帮助您更高效地管理…...
《FMambaIR:一种基于混合状态空间模型和频域的方法用于图像恢复》学习笔记
paper:(PDF) FMambaIR: A Hybrid State Space Model and Frequency Domain for Image Restoration 目录 摘要 一、引言 二、相关工作 1、图像恢复 2、频率学习 3、状态空间模型(SSM) 三、框架 1、基本知识 2、整体框架 3、F-Mamba…...
PyQt5 超详细入门级教程上篇
PyQt5 超详细入门级教程 上篇:1-3部分:PyQt5基础与常用控件 第1部分:初识 PyQt5 和安装 1.1 什么是 PyQt5? PyQt5 是 Python 的图形用户界面 (GUI) 框架,它基于强大的 Qt 库。Qt 是一个跨平台的 C 框架,用…...