Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks 中文翻译

2023-11-11

Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks 中文翻译

如有异议,请多指教,非专业人员,仅供参考

摘要

理解人类的运动行为对于自主移动平台(如自动驾驶汽车和社交机器人)在以人类为中心(human-centric)的环境中导航至关重要。这是一项具有挑战性的任务,因为人类的运动本质上是多模态的:根据人的历史行动轨迹,在接下来的步骤中人类可以有很多条路作为选择。我们通过结合序列预测和生成对抗网络来解决这个问题:使用一个周期性的序列到序列(sequence-to-sequence)模型观察运动历史并预测未来的行为,使用一个新颖的池化机制来聚集人们之间的信息。我们通过对抗训练来预测可信的未来行为,并使用新型的多样性损失函数来鼓励多样化预测。通过对几个数据集的实验,我们证明了我们的方法在准确性(accuracy)、多样性(variety)、避免碰撞(collision avoidance)和计算复杂度(computational complexity)方面优于先前的工作。

1.介绍

预测行人的运动行为对于自动驾驶汽车或社交机器人等与人类共享同一生态系统的自主移动平台来说至关重要。人类能够有效地处理复杂的社交(social interaction),而这些机器也应该能够做到这一点。为此,一个具体而重要的任务是:给定行人的观察运动轨迹( 举例:过去3.2秒的坐标),预测所有可能的未来轨迹,见 <图1>
由于拥挤场景中人类运动的固有特性,因此预测人类行为是一项挑战:
在这里插入图片描述
图1 说明两个行人想避开对方的场景。有许多可能的方法可以避免潜在的冲突。我们提出了一个方法,给定相同的可观察过去路径(observed past),在拥挤的场景中预测出多个接近人类真实行为(socially acceptable)的输出。

1.人际互动(Interpersonal)

每个人的行动都取决于周围的人。人类有一种天生的能力,能够在人群中解读他人的行为。联合建模这些相关性(dependencies)是一个挑战。

2.社会可以接受性(socially acceptable)

有些轨迹在物理上是可能的,但在社会中这种行为是不可能发生的。行人的行为是受社会规则约束的,比如:让路(yielding right-of-way)或尊重个人空间。而将这些行为形式化并非易事。

3.多模式(multimodal)

考虑到历史行为,没有单一正确的未来预测。多种可能的发展轨迹是合理的,也是符合社会规律的。


轨迹预测的探索工作已经解决了上述一些挑战。interpersonal 的相关问题已经被基于手工特征 (hand-crafted feature) [2,7,41,46]的传统方法完全解决。最近,基于递归神经网络(RNNs)的数据驱动技术(data-driven techniques)[1,28,12,4]重新探讨了社会可接受性。最后,在给定静态场景[28, 24](例如,十字路口应该走哪条街)的情况下,研究了有关该问题多模态(multimodal)的方面。Robicquet等人[38]证实了在行人在面对不同的场景(温和的或者激进的场景之下)会采取多重的导航(navigation styles)方式。因此,预测任务需要输出不同的可能结果。

虽然现有的方法在应对这些具体挑战方面取得了很大的进展,但它们存在两个局限性

i) 首先,在做出预测时,他们模拟每个人周边的一个区域。因此,它们在对场景中所有人之间的交互进行建模的时候不具备很高的计算效率(computationally efficient fashion)。

ii) 第二,他们倾向于学习“平均行为”,因为通常使用的损失函数,可以最小化预测输出和ground truth之间的欧氏距离。相反,我们的目标是学习多种“表现优异的行为”,即:,多重的可以被社会所接受的行为轨迹。

为了解决以往工作的局限性,我们建议利用生成模型(recent progress in generative models)的最新进展。生成式对抗网络(GANs)是近年来发展起来的一种用于解决:难以处理的概率计算行为推断的逼近困难等问题[14]的网络。虽然他们已经被用来产生逼真的信号,如图像[34],我们提出:给定一个可观察的过去状态,使用他们(GAN)来产生多个“社会可接受(socially acceptable)”的轨迹。一个网络(生成器)生成候选对象,另一个(鉴别器)对它们进行评估。对抗性损失(adversarial loss) 使我们的预测模型能够超越 L2损失 的限制,并有可能了解那些能够欺骗鉴别者的“良好行为”的分布。在我们的工作中,这些行为被称为“在拥挤的场景中的 ‘ 社会可接受 ’ 运动轨迹”。

我们提出的GAN是一个RNN编码器-解码器生成器和一个基于RNN的编码器鉴别器(encoder discriminator),具有以下两个新颖之处:

i) 我们引入了多样性损失(variety loss),这鼓励了GAN的生成网络扩展其分布并覆盖可能的路径空间,同时与观察到的输入保持一致(being consistent with the observed input)。

ii) 我们提出了一个新的池化机制(pooling mechanism),它学习一个“全局”池化向量,为所有参与场景的人编码细致的线索。

通过对几个公开的真实世界人群数据集的实验,我们展示了最先进的准确性、速度,并证明我们的模型有能力产生各种“社会可接受”的轨迹

2.相关工作

预测人类行为的研究可以分(can be grouped as)为学习预测人与空间的相互作用或人与人的相互作用。前者学习场景特定的动作模式(scene-specific motion patterns) [3, 9, 18, 21, 24, 33, 49],后者模拟场景的动态内容,即行人之间如何相互影响(dynamic content of scenes)。
我们工作的重点是后者: 学习预测人与人之间的互动。我们讨论了这方面的现有工作,以及RNN在序列预测和生成模型方面的相关工作。

  • 人与人的交互(human-human interaction)
    从宏观模型的人群视角(macroscopic models)和微观模型(microscopic models)的个体视角(我们工作的重点)对人类行为进行了研究。微观模型的一个例子是 Helbing和Molnar [17] 对行人行为进行了建模,引力(attractive force)引导他们朝着目标前进,排斥力(repulsive force)鼓励他们避免碰撞。在过去的几十年里,这种方法经常被重新使用 [5, 6, 25, 26, 30, 31, 36, 46]。经济学中流行的工具也被投入使用,如Antonini等人的离散选择框架(discrete choice framework) [2]。Treuille等人 [42]采用连续体动力学,Wang等人 [44],Tay等人 [41]使用高斯过程。这些函数也被用于研究固定群组(stationary groups) [35, 47]。然而,所有这些方法都使用基于相对距离和特定规则的手工制作的能量势(hand crafted energy potentials based on relative distances and specific rules)。相比之下,在过去的两年中,基于RNNs的数据驱动方法(data-driven methods)已经超越上述传统方法。

  • 用于序列预测的RNNs(RNNs for sequence prediction)
    递归神经网络是一类丰富的动态模型,它将前馈网络扩展到多个领域进行序列生成如语音识别 [7, 8, 15],机器翻译 [8],为图像添加字幕 [20, 43, 45, 39]但这些应用缺乏高层次的时空结构 [29],人们多次尝试使用多个网络来捕获复杂的交互 [1, 10, 40],Alahi等人的 [1]使用一个social pooling 层,模拟附近的行人。在本文的其余部分中,我们证明了使用多层感知器(multi-layer perceptron)(MLP)再进行最大池化(max pooling)在计算上更有效,并且与来自 [1] 的social pooling 表现相近或更好。Lee等人 [28]介绍了一个采用变分自编码器(variational autoencoder)(VAE)的RNN编解码框架从而进行轨迹预测的。然而,他们并没有在拥挤的场景中模拟人与人之间的互动。

  • 生成模型(Generative Modeling)
    生成模型如变分自编码器 [23]是通过 最大化训练数据似然下界(maximize the lower bound of training data likelihood) 来训练的。Goodfellow等人提出了另一种方法,生成对抗网络(GANs) [14],其中训练过程是**生成模型(generative model)判别模型(discriminative model)**之间的极小极大博弈(minimax game)。这就克服了逼近难以计算的概率的运算困难。生成模型在超分辨率 [27]、图像到图像转换 [19]和图像合成 [16, 34, 48]等任务中显示出良好的结果,这些任务对于给定的输入具有多个可能的输出。然而,它们在序列生成问题中的应用,如自然语言处理,已经滞后了,因为从这些生成的输出中进行采样并将其提供给鉴别器是一个不可微(non-differentiable)的操作。

3.理论

当人类再人群中进行路径规划的时候会本能地考虑到自己身边的人的状态。我们计划我们的路径,牢记我们的目标,同时也考虑周围人的运动,如他们的运动方向,速度等。然而,在这种情况下,通常存在多个可能的选项。我们需要的模型不仅能够理解这些复杂的人类交互行为(human interactions),而且还能够捕捉各种选项(capture the variety of options)。 目前的方法侧重于预测未来的平均轨迹,所以他们通过最小化到ground truth的 L2 距离,而我们希望预测多个“良好”轨迹。在这个部分,我们首先提出了我们的基于编解码结构的GAN 来解决这些问题,接下来我们展示了我们最新的池化层结构,这是一个模拟人与人之间交互(human-human interaction)的池化层,最终我们引入了我们的多类损失(variety loss)来促使网络基于给定的观测序列可以产生多种不同的未来轨迹。


3.1定义问题(problem definition)

我们的目标是联合推理(reason)和预测(predict)一个场景中所涉及的所有对象(agent)的未来轨迹。我们假设我们接收到的输入是场景中所有人的轨迹 X = X 1 , X 2 , … , X n , X = X_1, X_2,…,X_n, X=X1,X2,,Xn, 同时 预测未来轨迹 Y ^ = Y ^ 1 , Y ^ 2 , . . . . Y ^ n \hat {Y} =\hat Y_1,\hat Y_2,....\hat Y_n Y^=Y^1,Y^2,....Y^n ,行人的输入轨迹 i i i 定义为: X i = ( x i t , y i t ) X_i=(x_i^t,y_i^t) Xi=(xit,yit),在时间步长 t = t o b s + 1 , . . . . , t p r e d t=t_{obs}+1,....,t_{pred} t=tobs+1,....,tpred,我们用 Y i ^ \hat {Y_i} Yi^ 表示预测。


3.2 生成对抗网络(generative adversial networks)

生成式对抗网络(GAN)由两个相互对立训练的神经网络组成 [14]。进行对抗训练的两个模型是:一个是捕获数据分布的生成模型 G G G,一个是估计样本来自训练数据而不是 G G G 的概率的判别模型 D D D。生成器 G G G 以潜在变量 z z z 作为输入,输出样本 G ( z ) G(z) G(z) 。鉴别器 D D D x x x 作为输入,输出的 D ( x ) D(x) D(x) 代表着 x x x 真实的概率。训练过程类似于一个两个人的最小最大的博弈,目标函数如下:

m i n G   m a x D V ( G , D ) = E x − p d a t a ( x ) [ log ⁡ D ( x ) ] + E z − p ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] min_{G}\ max_{D}V(G,D)=\mathbb E_{x-p_{data(x)}}[\log D(x)]+\mathbb E_{z-p_{(z)}}[\log(1-D(G(z)))] minG maxDV(G,D)=Expdata(x)[logD(x)]+Ezp(z)[log(1D(G(z)))] (公式1)

GANs可以通过向生成器和鉴别器提供额外的输入 c c c 来用于条件模型,生成 G ( z , c ) G(z, c) G(z,c) D ( x , c ) D(x, c) D(x,c) [13, 32]


3.3 社交意识 GAN(social-aware GAN)

正如第1节所讨论的,轨迹预测是一个多模态问题,生成模型可以与时间序列(timeseries)数据一起使用,以模拟可能的未来。我们在设计SGAN时利用了这一观点,它使用GANs解决了问题的多种模态(参见图2)
在这里插入图片描述
图2 系统总览 我们的模型由三个关键部分组成: 生成器 ( G ) (G) (G) , 池化模块,鉴别器 ( D ) (D) (D) G G G 作为过去的轨迹 X i X_i Xi 的输入,并且对人 i i i 的过去行为编码为 H i t H_i^t Hit ,池化模块作为所有 H i t o b s H_i^{t_{obs}} Hitobs 的输入并且最终对于每一个场景中的人 i i i 输出一个池化向量 P i P_i Pi,解码器根据 H i t o b s H_i^{t_{obs}} Hitobs P i P_i Pi 生成未来的轨迹。 D D D T r e a l T_{real} Treal T f a k e T_{fake} Tfake 作为输入,并将它们归类为社会可接受的或不可接受的(PM参见图3)。

我们的模型由三个关键部分组成:生成器 ( G ) (G) (G) , 池化模块 P M PM PM 和鉴别器 ( D ) (D) (D) G G G是G是基于编码器-解码器框架,我们通过 P M PM PM 来链接编码器和解码器的隐藏状态。对 G G G输入 X i X_i Xi可以输出轨迹预测 Y i ^ \hat {Y_i} Yi^ D D D将包含输入 X i X_i Xi和预测结果输出 Y i ^ \hat {Y_i} Yi^的整个序列输入到鉴别器中,然后将他们分类为真或者是假。

【生成器】

我们首先将每个人的位置嵌入到一个单层的MLP中来获取一个固定长度的向量 e i t e_i^t eit。这些嵌入部分在 t 时刻作为编码器的LSTM单元的输入,引入如下递归式:

e i t = ϕ ( x i t , y i t , W e e ) e_i^t=\phi(x_i^t,y_i^t,W_{ee}) eit=ϕ(xit,yit,Wee)公式2)

h e i t = L S T M ( h e i t − 1 , e i t ; W e n c o d e r ) h_{ei}^t=LSTM(h_{ei}^{t-1},e_i^t;W_{encoder}) heit=LSTM(heit1,eit;Wencoder)

其中 ϕ \phi ϕ 是一个由ReLU非线性单元的嵌入函数, W e e W_{ee} Wee是一个嵌入的权重。LSTM权重 W e n c o d e r W_{encoder} Wencoder 在一个场景中所有人共享。

简单的对于每一个人使用一个LSTM不能获取人与人之间的交互行为,编码器学习每个单元的状态并存储它们的运动历史。然而,正如Alahi等人所示 [1]。我们需要一个紧凑的表示,它结合了来自不同编码器的信息,以有效地推理有关社会互动。在我们的方法中,我们通过一个池模块(PM)对人与人的交互进行建模。 t o b s t_{obs} tobs之后,我们把场景中所有人的隐藏状态集合起来,得到每个人的池化张量(pooled tensor) p i p_i pi。通常情况下,GANs用输入的噪声来产生样例。我们的目标是创造出与过去一致的未来情景。为了实现这一点,我们通过初始化的隐藏状态来设定生成输出轨迹的条件,如下:

c i t = γ ( P i , h e i t ; W c ) c_i^t=\gamma(P_i,h_{ei}^t;W_c) cit=γ(Pi,heit;Wc) (公式3)
h d i t = [ c i t , z ] h_{di}^t=[c_i^t,z] hdit=[cit,z]

γ ( ⋅ ) \gamma(·) γ() 是一个拥有非线性单元ReLU和嵌入权重 W c W_c Wc 的多层感知机(multi-layer perceptron)(MLP)。在轨道预测方面,我们在两个重要方面偏离(deviate)了之前的工作:

  • 之前的工作 [1] 使用隐藏状态来预测二元高斯分布的参数。然而,这如何在不可微的情况下,通过采样的反向传播,在训练过程中引入了困难,我们通过直接预测坐标 ( x ^ i t , y ^ i t ) (\hat x_i^t,\hat y_i^t) (x^it,y^it)来避免这种情况。

  • “社会”语境一般是作为输入提供的LSTM细胞 [1, 28] 相反,我们只提供一次池化上下文(pooled context)作为解码器的输入。这也为我们提供了在特定时间步长的情况下选择池的能力,并且与S-LSTM [1] 相比,速度提高了16倍(见表2)。

初始化上述解码器状态后,我们可以得到如下预测:

e i t = ϕ ( x i t − 1 , y i t − 1 , W e d ) e_i^t=\phi(x_i^{t-1},y_i^{t-1},W_{ed}) eit=ϕ(xit1,yit1,Wed)

P i = P M ( h d 1 t − 1 , . . . , h d n t ) P_i=PM(h_{d_1}^{t-1},...,h_{d_n}^{t}) Pi=PM(hd1t1,...,hdnt) (公式4)

h d i t = L S T M ( γ ( P i , h d i t − 1 ) , e i t ; W d e c o d e r ) h_{di}^t=LSTM(\gamma (P_i,h_{d_i}^{t-1}),e_i^t;W_{decoder}) hdit=LSTM(γ(Pi,hdit1),eit;Wdecoder)

( x ^ i t , y ^ i t ) = γ ( h d i t ) (\hat x_i^t,\hat y_i^t)=\gamma(h_{d_i}^t) (x^it,y^it)=γ(hdit)

其中 ϕ ( . ) \phi(.) ϕ(.)是拥有非线性单元ReLU和嵌入权重 W e d W_{ed} Wed的嵌入函数。 W d e c o d e r W_{decoder} Wdecoder表示的是LSTM的权重, γ \gamma γ表示的是多层向量感知机(MLP)


【鉴别器】
鉴别器由一个单独的编码器组成。具体地说,它取输入 T r e a l = [ X i , Y i ] 或 T f a k e = [ X i , Y ^ i ] T_{real} = [X_i,Y_i]或T_{fake}= [X_i, \hat Y_i] Treal=[Xi,Yi]Tfake=[Xi,Y^i]并且分类真/假的。我们在编码器的最后隐藏状态上应用一个多层向量感知机(MLP)来获得一个分类的分数。理想情况下,“鉴别者”将学习微妙的社会互动规则,并将社会不能接受的轨迹归类为“假轨迹”。


【损失】
除了对抗性损失(adversarial loss)外,我们还将L2损失应用于预测轨迹,该轨迹测量生成的样本与实际groundtruth真实值之间的差距。

3.4. 池化模块

为了在多人之间共同推理,我们需要一种机制来在LSTMs之间共享信息,然而,有几个挑战的方法应该解决:

  • 一个场景中可能有很多人。我们需要一个紧凑表示,从所有人那里收集信息。

  • 分散的人-人互动。本地信息并不总是足够的,远处的行人可能会互相影响。因此,网络需要对全局配置建模。

在这里插入图片描述
图3 我们通过图中红色的人来比较我们的池化机制(红色虚线箭头)和社交池化(social-pooling)[1](红色虚线格)之间的差距。 我们的方法计算红色的人和所有其他人之间的相对位置; 这些位置与每个人的隐藏状态连接,由MLP(多层感知机)独立处理,然后汇集元素以计算红人的池化向量 P 1 P_1 P1。 社交池只考虑网格内的人,并且不能模拟所有人之间的交互。

社交池化 [1]通过提出一个基于网格的池化方案来解决第一个问题。然而,这个人工制作的解决方案速度很慢,并且不能捕获全局上下文。Qi等 [37] 表明,在输入点集的变换元素上应用一个学习的对称函数可以实现上述性质。如图2所示,这可以通过通过一个多层向量感知机(MLP)和一个对称函数(我们使用Max-Pooling)传递输入坐标来实现。 池化向量 P i P_i Pi 需要总结一个人的所有做决定需要的信息。由于我们使用相对坐标来表示平移不变性,所以我们用每个人相对于person i i i 的相对位置来增加池模块的输入


3.5. 鼓励产生多样性样本

轨迹预测是一个具有挑战性的问题,因为考虑到过去有限的历史,一个模型必须对多个可能的结果进行推理。到目前为止所描述的方法产生了良好的预测,但是这些预测试图在可能有多个输出的情况下产生“平均”预测。此外,我们发现输出对噪音的变化不是很敏感,有无噪声产生的预测非常相近

我们提出了一个多样性损失函数来鼓励网络产生不同的样本。对于每个场景,我们通过从 N ( 0 , 1 ) N(0,1) N(0,1) 中随机采样 z z z 并根据 L 2 L2 L2 意义上的“最佳”预测,生成 k k k 个可能的输出预测。

L v a r i e t y = m i n k ∣ ∣ Y i − Y i ^ ( k ) ∣ ∣ 2 \frak L_{variety}=min_{k}||Y_i- {\hat{Y_i}}^{(k)}||_2 Lvariety=minkYiYi^(k)2 (公式5)

其中 k k k 是超参数

通过仅考虑最佳轨迹,这种损失促使网络进行“减小错误的两方面预测(hedge the bet)”并覆盖符合过去轨迹的输出空间。 这个损失在结构上类似于“最小化N(MoN)损失[11]”,但据我们所知,这并未在GAN的背景下用于鼓励生成样本的多样性。
在这里插入图片描述
表1 跨数据集的所有方法的定量结果。我们报告了两个误差指标平均位移误差(ADE)最终位移误差(FDE) t p r e d = 8 t_{pred}= 8 tpred=8 t p r e d = 12 t_{pred}= 12 tpred=12 (8 / 12) 单位是米。我们的方法始终优于最先进的 S-LSTM方法,尤其适用于长期预测(图中的值越低越好)。

3.6 实验细节

我们在解码器和编码器模型中使用 L S T M LSTM LSTM。 编码器隐藏状态的大小为 16 16 16,解码器为 32 32 32 。我们将输入坐标嵌入为 16 16 16 维向量。 我们使用 A d a m [ 22 ] Adam [22] Adam[22]优化器训练每批次数量为 64 64 64的发生器和鉴别器,迭代 200 200 200 次,初始学习率为 0.001 0.001 0.001

4.实验

在本节中,我们在两个公开可用的数据集上评估我们的方法:ETH [36]和UCY [25]。 这些数据集由具有丰富的人类交互场景的真实世界人类轨迹组成。 我们将所有数据转换为真实世界坐标并进行插值以达到每 0.4 0.4 0.4 秒获取一个值。 总共有 5 5 5 组数据(ETH-2, UCY-3),有 4 4 4 个不同的场景,由拥挤的环境中的 1536 1536 1536 名行人组成具有挑战性的场景,如:群体行为,人们相互交叉,避免碰撞以及群体聚集和散开。

【评估指标】
类似于先前的工作[1,28]我们使用两个误差指标:

① 平均位移误差(ADE):在所有预测时间步长上, g r o u n d − t r u t h ground-truth groundtruth 标签与我们预测之间的平均 L 2 L2 L2 距离。

② 最终位移误差(FDE):在预测周期 T p r e d T_{pred} Tpred 结束时“预测的最终目的地”与“真实最终目的地”之间的距离。

【Baseline(基线)】
我们与以下基线进行比较:

线性: 线性回归量,通过最小化最小平方误差来估计线性参数。

LSTM: 没有池化机制的简单LSTM。

S-LSTM: Alahi等人提出的方法[1]。 每个人都通过LSTM建模,隐藏状态在每个时间步使用“社交池(social-pooling)”层进行合并。

我们也在不同的控制设置下对我们的模型进行“切除研究”(ablation research)。我们在章节中称我们的完整方法为 SGAN-kVP-N,其中 kV 表示模型是否使用多样化损失进行了训练(k = 1基本上表示没有使用多样化损失),P 表示使用我们提出的池化模块。在测试时,我们从模型中多次采样,选择 L2 意义下的最佳预测进行定量评估。N 是我们在测试期间从模型中采样的时间。

【评估方法】
我们遵循与[1]类似的评估方法。 我们使用“留一法”(leave-one-out),使用4组训练并测试剩下的一组。 我们观察8个步骤(3.2秒)的轨迹并显示8个(3.2秒)和12个(4.8秒)时间步长的预测结果。

4.1定量评估

我们将两个指标ADE和FDE的方法与表1中的不同基线进行比较。正如预期的那样,线性模型只能对直线路径进行建模,并且在预测时间较长时( t p r e d = 12 t_{pred} = 12 tpred=12)尤其糟糕。 LSTM和S-LSTM都比线性基线表现更好,因为它们可以模拟更复杂的轨迹。 然而,在我们的实验中,S-LSTM并不优于LSTM。 我们尽力重现论文的结果。 [1]在合成数据集上训练模型,然后在真实数据集上进行微调。 我们不使用合成数据来训练任何可能导致性能下降的模型
在这里插入图片描述
图4 品种损失的影响。 对于SGAN-1V-N,我们训练单个模型,在训练期间为每个序列绘制一个样本,在测试期间绘制 N个样本。 对于SGAN-NV-N,我们在训练和测试过程中使用 N个样本训练多个模型以减少变种。 多样性损失的训练显性提高了准确性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks 中文翻译 的相关文章

  • Django连接Mysql报错:ModuleNotFoundError: No module named 'MySQLdb'

    Django连接Mysql报错 环境 Django 1 11 8 与 Python 3 6 ModuleNotFoundError No module named MySQLdb django core exceptions Imprope
  • 实验一,简单的C++程序

    实验1 简单的C 程序 一 实验目的和要求 1 熟悉Visual C 6 0编译系统的常用功能 2 学会使用Visual C 6 0编译系统实现简单的C 程序 3 熟悉C 程序的基本结构 学会使用简单的输入 输出操作 二 实验内容 1 编译
  • 短视频源码PHP进入大屏时期,你会观看吗?

    网络环境的开展 电视能够说是离我们越来越远 在网络 手机的普遍应用下 短视频行业 直播行业都更倾向于手机端开展 而小小的手机屏幕曾经不能满足用户的需求 假如将短视频源码PHP与电视分离会是怎样的场景呢 固然我们对电视观看的次数降落 但电视的

随机推荐

  • js的if条件判断

    js的if条件判断 if 条件表达式 console log true 如果条件表达式为true 执行该处代码 不再执行else后面代码 else console log false 如果条件表达式为false 执行该处代码 if 1 co
  • ajax异步获取svg,jQuery的AJAX从文件中检索SVG - 错误:“没有很好地形成”(jQuery AJAX r...

    我一直在使用从Inkscape中许多不同的SVG和使用 load了一会儿特定的容器元素 最近 我试图改变负载于获取 AJAX 主要是为了能够预先设置SVG 这pefectly工作 SVG前置到元素应该做的 问题是我得到的控制台错误使用检索S
  • Lsyncd 实时同步

    1 描述 Lsyncd ssh 开源lsyncd采用inotify原理监听某一个目录 如果目录内发生变化 利用rsync协议自动同步多服务器 因此lsyncd是一个轻量级的实时镜像解决方案 细粒度的定制可以通过配置文件来实现 配置文件可以编
  • 2023华为OD机试真题【分奖金/单调栈】

    题目内容 公司老板做了一笔大生意 想要给每位员工分配一些奖金 想通过游戏的方式来决定每个人分多少钱 按照员工的工号顺序 每个人随机抽取一个数字 按照工号的顺序往后排列 遇到第一个数字比自己数字大的 那么 前面的员工就可以获得 距离数字差值
  • vue项目前端埋点,获取用户信息及记录页面菜单停留时间

    当路由切换时都会去调用这个方法 控制台中能看到用户信息 操作时间 停留时间等 以下代码放到你路由文件夹中 页面埋点方案 let startTime Date now let currentTime router beforeEach to
  • 电池充放电自动测试系统介绍

    电池是国民经济的基础产品 广泛运用在交通运输 通讯 电力 铁路 国防 计算机 应急设备等各个领域 传统电池检测生产方式已经很难满足电池产品的市场需求 那么如何高效快速的进行电池产品的性能检测呢 今天就给大家介绍一款全能型电池测试系统 电池充
  • Redis连接报错:ERR Client sent AUTH, but no password is set

    如果在redis windows conf或者redis conf 我的是这个配置文件 文件夹中设置了密码 但是会报错 ERR Client sent AUTH but no password is set 用记事本打开redis wind
  • AD20/Altium designer——过孔盖油

    1 AD中添加的过孔默认是不会进行盖油的 在3D视图下如下 可以很明显看出来 2 进行过孔盖油需要双击过孔 在弹出的属性栏里进行如下操作 3 过孔盖油后 可以看见只有小孔了
  • 如何轻松玩转Rust语言

    Rust是由Mozilla主导开发的通用 编译型编程语言 设计准则为 安全 并发 实用 支持函数式 并发式 过程式以及面向对象的编程风格 本期Meetup由FISCO BCOS核心开发者李陈希给大家分享如何轻松玩转Rust语言 围绕Rust
  • DVWA失效的访问控制

    失效的访问控制 可以认为是系统对一些功能进行了访问或权限限制 但因为种种原因 限制并没有生效 造成失效的访问控制漏洞 比如越权等 这里以DVWA为例 先访问低难度的命令执行并抓包 删除cookie 并在请求头添加路径 dv vulnerab
  • 在使用win10 cmd的时候python报错:python不是内部或外部指令,也不是可运行的程序或批处理文件

    今天想用cmd运行python脚本 但是弹出了python不是内部或外部指令 也不是可运行的程序 解决方法如下 右键我的电脑 属性 高级 环境变量 path 双击path 新建 在下面的框中把python路径填进去 下面来说找路径 win1
  • 【Typora】设置图片保存相对路径

    当使用Typor编写markdown文件时 如果拷贝到其他地方 经常会图片丢失 为了解决这个问题 我使用了图片相对路径设置 文件 gt 偏好设置 找到 图片插入 设置之后保存Typora 文件路径如下 这样就不怕找不到图片啦
  • 【GD32】从0开始学GD32单片机(12)—— TIMER高级定时器详解+DMA修改PWM波占空比例程

    目录 简介 重复计数器 互补模式和死区插入 中止模式 霍尔传感器接口功能 DMA模式 例程 简介 上两篇介绍了基本定时器和通用定时器 下面是文章的链接 TIMER基本定时器详解 1毫秒延时例程 TIMER通用定时器详解 PWM波形输出捕获例
  • Python如何优雅地可视化目标检测框

    1 引言 随着计算机视觉算法工程师的内卷 从事目标检测的小伙伴们越来越多了 很多时候我们费了九牛二虎之力训练了一版模型 可是可视化出来的效果平淡无奇 是不是有点太不给力啦 作为计算机视觉工程师 我们是不是应该关注下如何优雅地可视化我们模型地
  • 漫谈 ChatGPT 与问答式 BI

    近日 观远数据G park Let s Date BI 系列直播第二期 2023 金融业如何应对 流浪数据 顺利落幕 观远数据联合创始人兼首席数据科学家字节带来了 漫谈 ChatGPT 与问答式 BI 的探索思考 字节一方面介绍了一系列 C
  • IDEA这样配置,好用到爆炸

    1 idea 简介 IDEA 全称 IntelliJ IDEA 是 JetBrains 公司 使用 java 编程语言开发的集成环境 这家公司总部位于捷克共和国的首都布拉格 公司旗下还有其它产品 例如 WebStorm PyCharm Ph
  • secureCRT连接,密码是正确的却提示密码错误

    最近用securecrt连接kali 输入的密码绝对是正确的却提醒密码错误 发现是密码认证默认出了问题 解决方法 1 进入配置文件 2 改为允许以root进行登录 把permitrootligin 后改为yes 把最前面的 删掉 3 将密码
  • 2023 年 Pycharm 最新下载安装教程,亲测可用,持续更新

    前言 PyCharm 是一款功能强大的 Python 编辑器 具有跨平台性 鉴于目前最新版 PyCharm 使用教程较少 为了节约时间 来介绍一下 PyCharm 在 Windows下是如何安装的 这是 PyCharm 的下载地址 http
  • 华为机试---字符串运用-密码截取

    题目描述 Catcher是MCA国的情报员 他工作时发现敌国会用一些对称的密码进行通信 比如像这些ABBA ABA A 123321 但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解 比如进行下列变化 ABBA gt 12ABB
  • Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks 中文翻译

    Social GAN Socially Acceptable Trajectories with Generative Adversarial Networks 中文翻译 如有异议 请多指教 非专业人员 仅供参考 摘要 理解人类的运动行为对