Recursive Social Behavior Graph for Trajectory Prediction(CVPR2020阅读笔记)

Recursive Social Behavior Graph for Trajectory Prediction

用于轨迹预测的递归社会行为图
收录于CVPR2020
作者:Jianhua Sun , Qinhong Jiang , Cewu Lu
论文地址:https://arxiv.org/abs/2004.10402
发表时间:22 Apr 2020

摘要

社会互动是人类轨迹预测中产生合理路径的重要主题。
在本文中,我们提出了基于群体的社会互动模型的新见解,以探索行人之间的关系。
我们递归地提取由基于组的注释所监督的社交表示,并将其公式化为社交行为图,称为递归社交行为图。 我们的递归机制在很大程度上探索了表示能力。 然后使用图卷积神经网络在这种图中传播社交交互信息。 在递归社会行为图的指导下,我们在ETH和UCY数据集上的先进技术方法平均在ADE中为11.1%,在FDE中为10.8%,成功地预测了复杂的社会行为。

1 引言

预测动态场景中人类的未来轨迹是计算机视觉中的一项重要任务[28、16、31、32、33、42、44、20]。 这也是自动驾驶和人机交互中的关键点之一,它们为后续的决策过程提供了丰富的信息。 轨迹预测的主要挑战在于如何将人与人之间的相互作用纳入考虑之中以产生合理的路径[2、13、3、6、27、26]。
早期的工作为解决问题付出了很多努力。 Social Force [14,28]提取了不同类型的force,例如用于处理它的加速和减速力。 近年来,深度学习取得了长足的进步,这激发了研究开始研究基于深度神经网络的方法。 一些研究[2,13,34,18,17]修改了具有特定集合或关注机制的递归神经网络(RNN)体系结构,以集成RNN之间的信息。
虽然取得了很大的进步,但仍然存在着挑战。基于力(force)的模型[28]利用距离来计算力,当相互作用比较复杂时就会失效。而对于池化(pooling)方法[2,13],则以两人在同一时间步长的距离作为计算关系强度的标准。注意(Attention)方法在[18,34]中也遇到了同样的问题,即在他们的方法中使用欧氏距离来引导注意机制。
总的来说,这些学习方法试图利用距离来制定不同agent之间的影响强度,但是忽略了基于距离的方案无法处理人类社会中的众多社会行为。图1给出了两个典型的例子。前三张图片显示,两个人从相反的方向走到同一个目的地。最下面的三张图片显示,三个行人沿着街道走,另外三个人站着不动,互相交谈。虽然在这两个场景中,行人在红色圆圈中的距离很遥远,但他们表现出强烈的关系。

图1所示。这些例子都是远距离的、不相关的人与人之间的互动。图像按时间顺序从左到右排列。前三张图片显示,两个人(红色圆圈)从相反的方向走到同一个目的地。底部的三张图片显示,左红圈的人跟在右红圈的人后面,几乎不受蓝圈的人的影响。

图1所示
这些例子都是远距离的、不相关的人与人之间的互动。图像按时间顺序从左到右排列。前三张图片显示,两个人(红色圆圈)从相反的方向走到同一个目的地。底部的三张图片显示,左红圈的人跟在右红圈的人后面,几乎不受蓝圈的人的影响。

在这篇论文中,我们的目标是探索行人之间的关系超越使用的距离。为此,我们提出了基于群体的社会互动模型的新观点。一个群体可以被定义为一组有着相似动作、行为、目的或目标的人。
如图2所示,每一种颜色代表一组,并且用箭头标注关系,以显示相互作用的方向性。此外,场景中的组可以表示为图,这是特征传播的一种常见结构。此外,我们认为社会关系的表现是过于复杂,不能很好地用手工制作的方法捕捉。

在这里插入图片描述

图2 小组和小组互动的例子。红圈和蓝圈是不同的组。箭头的方向代表相互作用中影响的方向。

为了模拟这种新颖的见解,我们提出了一种递归提取社会关系的神经网络,并将它们表示为一个社会行为图,称为递归社会行为图(RSBG)每个行人都被视为一个节点其特征考虑了历史轨迹。这些节点通过相关的社会表现来连接,这些社会表现被认为是图的边缘。我们使用群体注释来监督社会表现的生成,这是第一次使用社会相关注释来帮助神经网络学习我们所知的社会关系。此外,还引入了递归机制。我们通过社会表征递归更新交互作用范围内的个体轨迹特征,进而利用更好的个体特征来更新社会表征。为了实现基于RSBG的特征传播,本系统采用了基于图卷积神经网络(GCNs)的框架

在ETH[31]中的2个数据集和UCY[21]中的3个数据集的多人体轨迹基准上的实验表明,我们的模型在精度改进方面具有优势。我们的贡献可以总结如下:

  1. 我们提出了递归社会行为图,这是一种新的社会行为建模的图表示方法,并使用递归神经网络来生成它。该网络旨在提取潜在的行人关系,并由群体标注进行监督,这是首次在预测任务中引入专家标注的社会相关标注
  2. 我们首先引入GCNs,将人类社会行为融入动态场景中进行预测任务,从而获得更强的表达能力和更高的性能。
  3. 我们在几个视频数据集中进行了详尽的实验。通过应用我们提出的方法,与最先进的方法相比,我们能够实现11.1%的ADE和10.8%的FDE的改进。

2 相关工作

Human trajectory forecasting(行人轨迹预测)
人类轨迹预测是根据一个人的历史轨迹和视觉特征,如他当前的行为和环境,来预测他可能的轨迹。随着人类理解和轨迹跟踪技术的成熟[30,6,10,12,11],在这一领域进行了大量的研究[28,16,31,32,33,42,44,20,5]。早期的研究[28,39,20]试图建立数学模型来预测轨迹。例如,能量最小化[39]模型构造了一个每边都有代价的网格图,将轨迹预测问题表示为最短路径问题,并用Dijkstra算法求解。Abbeel等人提出的IRL[1]已经被用于[20]的轨迹预测,它将人类行为建模为一个连续的决策过程
随着神经网络的发展,提出了许多基于深度学习的预测方法[22,2,13,17,34,35,41],并侧重于不同的见解来解决这个问题。Alahi等人。[2]修改了vanilla LSTM结构使用一个新颖的**(pooling)池化方法传播人群场景中的人类互动。Gupta等人的[13]和Li等人的[22]在他们的预测框架中应用了一个生成式对抗网络来探索人类行为的多模态。Sadeghian等人的[34]和Liang等人的[25]从上下文提取**了丰富的信息,以获得更准确的预测。这些研究都取得了巨大的突破。
Human-human interactions in trajectory forecasting(轨迹预测中的人类交互)

人物交互(HOI)[9,36,24,40,23]为场景理解带来了丰富的信息。因此,人与人的互动对于正确预测未来的发展轨迹至关重要。早期的研究,如社会力[14],通过不同类型的力在动态场景中建模人与人的交互。然而,由于一些关键参数是高度基于先验知识的,如力的定义,它们无法处理复杂和人群场景与各种行人可能完全不同的行为。
近年来,递归神经网络(RNN)已在序列问题中显示出强大的威力[4,7,8,29,19]。然而,单一的基于RNN的体系结构无法处理人与人的交互。Alahi等人[2]提出了Social LSTM,它在普通LSTM的每个时间步之后应用社会池( social pooling )来集成社会特性。Gupta等人[13]改进了社会池(social pooling)以获取全局上下文。这些汇集方法利用两个人之间的距离作为衡量关系强度的标准。进一步,[34,18]引入了注意机制来传播社会特征,但也遇到了注意高度受距离限制的问题。Sadeghian et al.[34]以目标agent与其他agent之间的欧式距离为参考,对这些agent进行置换,得到注意机制前的置换不变式,Ivanovic et al.[18]使用欧几里得距离构建交通agent图(traffic agent
graph )来引导注意机制
。因此,这些方法不能很好地处理图1中描述的情况。
最近,Huang等人提出了一种基于图形注意(GA T)的网络来传播不同行人之间的空间和时间互动,而没有对注意机制进行特殊的监督。虽然这种方法不受距离的限制,但是由于缺乏监督,注意力机制无法处理复杂的场景,在某些情况下可能会失败,如[17]中的4.2节所述。
Graph Neural Network(图神经网络)
图形神经网络(又称GNN)及其变体[38]的诞生是为了处理欧氏空间中表示的数据。GNNs可以分为不同的类型,其中图卷积网络(Graph Convolutional Networks, GCNs)[15]被广泛应用于不同的计算机视觉任务中。例如,Gao等人[12]在深度siamese网络中训练GCNs,以便在视觉跟踪任务中进行鲁棒目标定位。STGCN是普通GCN的一个变体,Yan等人使用它来构建用于人类动作识别的动态骨架图。Wang等人采用GCN对图像中的图形进行匹配。在这篇文章中,我们将展示GCNs如何在人与人的互动中传播社会特征,并成功地提高轨迹预测的整体准确性。

3 方法

在本节中,我们提出了一个社会行为驱动模型来实现群体层面的轨迹预测。它的设计是为了捕捉这样一个事实,即在公共场所的行人经常聚集和成群行走,尤其是在人群场景中。这些群体表现出明显的社会行为,如跟随和加入,这对轨迹预测很重要。

3.1. Problem Definition
在前人工作的基础上[2,13],我们假设每个视频都经过检测和跟踪算法预处理得到每个人在每个时间步的空间坐标和具体的ID
因此,在一特定的时间步t,对于行人 ID i,我们可以将他的坐标表示
在这里插入图片描述,将帧级的周围信息表示为在这里插入图片描述,例如在t时刻以任务 i为中心的俯视图或角度视图图像块。 我们在时间步在这里插入图片描述中观察每个人的坐标序列和实例补丁作为输入,并在在这里插入图片描述中预测坐标序列作为输出。

3.2. Overview
在视频提供的场景中,给定一系列行人在一起,每一对行人之间的关系可以通过一个集合来定义
在这里插入图片描述
其中在这里插入图片描述表示场景中每个人的唯一ID, N表示场景中行人的总数,r(i, j)表示场景中行人在这里插入图片描述之间关系的社会表示。通过对每个人的个体表征fi,可以将关系集表示为一个社会行为图在这里插入图片描述。我们将个体表征和社会关系表征分别设计为在这里插入图片描述节点特征和边缘特征。因此,为了更好地理解社会关系,在在这里插入图片描述上预先形成了一个新的递归框架,我们称之为递归社会行为图(RSBG)。由于递归在这里插入图片描述的强大特性,我们可以用LSTM模型来预测未来的轨迹
在接下来的章节中,我们将介绍3.3节中的个体表征和3.4节中的社会关系表征。递归社会行为图(RSBG)将在第3.5节中讨论。最后,在第3.6节中,我们介绍了如何将提议的RSBG集成到LSTM中,以实现高质量的轨迹预测。

3.3. Individual Representation(个人表征)
我们采用历史轨迹特征和行人上下文特征作为个体表征。
Historical Trajectory feature(历史轨迹特征)
在真实的社会动态场景中,人们通常会在几秒钟内决定好路径,这意味着以后的轨迹会很大程度上影响之前的轨迹?。为此,我们采用BiLSTM架构而不是流行的普通LSTM[2,13]来捕获单个特性,考虑到先前和未来步骤的依赖性,这可以为单个轨迹生成更全面的表示。

Human Context feature(行人上下文特征)
为了提取帧级的人类实例上下文信息,我们使用了卷积神经网络(CNN)。具体来说,在每个行人i 的时间步t 的空间位置在这里插入图片描述,我们可以从视频集中在在这里插入图片描述获得一个图像块在这里插入图片描述。因此,对于行人i 的整个历史轨迹,我们将补丁集在这里插入图片描述馈入CN N框架以计算视觉信息Vi,该信息可以表示为人类上下文特征。
最后,我们将历史轨迹特征和上下文人类特征连接起来作为个体表示。 我们将第i个人实例的特征图表示为fi。
在这里插入图片描述

图3 预测方法的概述 对于个体表征,使用BiLSTMs对历史轨迹特征进行编码,使用CNNs对人类背景特征进行编码。对于关系社会表示,我们首先递归地生成RSBG,然后使用GCN传播社会特性。在译码阶段,将社会特征与个体特征串联起来,最后使用基于LSTM的译码器进行译码。

3.4. Relational Social Representation(社会关系表示)
现有的大部分社会模型[2,13,18,34]都存在一定的局限性,即以行人的距离作为构建社会表征的强参照。然而,社会关系行为是复杂的,不能简单地用一个手工制作的特性来建模。因此,我们直接对社会关系进行了诠释,了解了什么是社会关系。
Relationship Labeling为了监督培训,我们引入了社会相关注解。在注释中,根据视频将行人分成若干组,并将其重构为邻接矩阵,用0/1表示两个行人是否在同一组。
我们邀请有社会学背景的专家来判断两个行人的关系。在注释过程中,专家不仅根据速度、加速度、方向、人与人之间的相对距离等物理规律来确定一组人,还根据社会学知识来确定。考虑到在真实场景中群体信息在一定程度上是动态的,我们将整个场景划分为时间区间,这个时间区间对于关系的动态变化的响应是足够小的。专家对每个时间段的交互进行了注释。
Feature Design对于一个N人场景,我们可以构造一个特征矩阵在这里插入图片描述,其中每一行表示一个人的特征,L表示特征长度,然后我们定义一个关系矩阵R。
在这里插入图片描述
其中在这里插入图片描述是两个完全连接的层网络函数,用于将F映射到两个不同的特征空间,我们分别称它们为主体特征空间和对象特征空间( subject feature space and object feature space)。
因为行人图是有方向的,所以我们需要这两个函数来保证非可交换性。
通过将主体特征和客体特征与每个有序对的内积相结合,关系嵌入矩阵R可以响应任意一对行人之间的关系。
我们的关系标签提供了R:0/1的真值,以表示两个行人是否在同一组中。

3.5. Recursive Social Behavior Graph(递归社会行为图)

我们设计了一个递归机制来进一步推进我们的表征R和F
首先,我们的个体社会表征F应该考虑到它周围的人的互动。
第二,我们希望建立在更强的个体社会表征基础上的关系模型。递归更新是
在这里插入图片描述
在这里插入图片描述

其中fc为全连接操作,k为递归深度。
对于初始化,F0中的特征是全局坐标中的历史轨迹。式(4)将深度k中提取的每个人的原始信息与以Rk为代表的群表示的交互信息结合起来,得到下一个深度k + 1的关系嵌入的信息量丰富的张量。
在我们的实验中,我们设置k = 0,1,2来提取三个关系矩阵(R0,R1,R2),并通过在这里插入图片描述将它们融合在一起,其中Ra包含三个阶段的递归关系特征 ,并且可以将其视为以下图卷积的邻接矩阵。 我们在这里使用交叉熵损失来计算地面实况R和Ra之间的损失。
通过递归生成,递归社会行为图(RSBG)定义如下:
在这里插入图片描述
其中ti表示第i个人的相对历史轨迹,Ra(i1,i2)表示Ra中i1列和i2行中的浮点数。 通过将单个轨迹和关系的社会表示映射到顶点和边缘,RSBG为后续的轨迹生成过程提供了丰富的信息。

3.6. Trajectory Generation(轨迹生成)
Graph Convolution(图卷积)
先前的工作使用专门设计的合并方法[2,13]或注意力模型[18,34]来传播社交互动信息。 在我们的工作中,我们首先引入图卷积网络(GCN)来集成由RSBG引导的消息,因为GCN在处理图结构化数据方面具有强大的功能。
在这里,我们使用GCNs作为消息传递方案,从邻接节点聚合高级社交信息,根据在这里插入图片描述:
在这里插入图片描述
公式8将交互作用沿Ra中的加权边传递。 为了避免由于不同节点拥有的邻居数量不同而产生的偏差,通常将相邻节点的聚合特征通过相邻节点的总权重进行归一化,这是GCN中的一种常见做法。 等式9累积信息以更新节点i的状态,并且fupdate可以采用从张量到张量的任何可微分的映射函数。 在这里,我们使用完全连接层通过ReLU激活进行映射。 m代表GCN的深度,h代表中间特征。 在我们的实验中,我们使用两层GCN网络传播交互信息,这意味着m = 1,2。 最后,可以将第i个人的社会表示形式表示为ui = v2 i。 请注意,由于潜在关系已经在社会关系表示中被完全捕获,因此我们在[43]中使用GCN代替了[43]中的ST-GCN或[17]中的GA T,我们只需要在此处传播特征。

LSTM decoder
与先前编码的个体特征和社会形式的特性,我们提出了一个基于LSTM解码器轨迹生成、我在哪里输入h0 = (fi, ui),输出是ˆ欧美,代表时间步t中ID为i的人。

Exponential L2 Loss
先前的工作[13,25]使用L2损失来评估预测结果和地面真值之间的差异。 但是,此损失函数在FDE上的突出显示不足,而FDE是衡量预测准确性的非常重要的指标。 为此,我们提出了一种新颖的指数L2损失
在这里插入图片描述
与L2损失相比,该系数是随时间增长的系数的倍数。 此处,ˆYt i和Yt i分别是在时间t处人i的预测坐标和地面真实坐标,而γ是与Tpred相关的超参数。 在我们的实验中,我们将其设置为20。 在4.2节中,我们将显示指数L2损失在FDE指标和ADE指标方面带来了可观的改善。

4 实验

我们的模型的性能是在流行的基准上进行评估的,包括ETH[31]和UCY[21]。ETH和UCY数据集广泛用于人体轨迹预测基准[2,13,3,25,34]。包括ETH, HOTEL, UNIV, ZARA1, ZARA2等5个人群场景的行人柜。我们使用相同的配置来执行之前的工作[13]。详细地,我们观察了3.2秒(8帧)的轨迹,并以0.4帧的帧率预测4.8秒(12帧)的轨迹,并使用遗漏法进行训练和评估。
Evaluation Metrics.(评价指标) 在之前的工作[2,13,22,18]之后,我们引入了两个测试的常用度量标准
1.平均位移误差(ADE):地面真值与预测轨迹之间的L2平均距离。
2.最终位移误差(FDE):在最后一个预测时间步长时,地面真实目标和预测目标之间的L2距离。
Benchmarks(基准) 我们比较了以下基准,其中一些代表了最先进的预测任务的性能。

  1. Vanilla LSTM:一种不考虑人与人互动的LSTM网络。
  2. social LSTM:[2]中的方法。每个行人均由LSTM建模,而某个社区中行人的隐藏状态在每个时间步都使用“社交池”进行池化。
  3. social GAN:[13]中的方法。每个行人都由LSTM建模,而所有行人的隐藏状态在每个时间步都使用全局池进行池化。引入GAN来生成多峰预测结果。
  4. PITF:[25]中的方法。每个行人都由一个人的行为模块建模,而人与场景之间的交互以及人与对象的交互是由一个人交互模块建模的。
  5. STGAT:[17]中的方法。行人运动由LSTM建模,交互作用的时间相关性由额外的LSTM建模。引入GA T汇总LSTM的隐藏状态以对空间相互作用进行建模。
  6. RSBG:本文提出的方法。我们报告了模型的两个不同版本: RSBG w/ context
    and RSBG w/o context,分别表示使用和不使用人工上下文功能。
    Discussion. 先前的一些作品[13,34,17]专注于多模态预测(也就是为每个人生成多个轨迹),这在真实场景中确实有意义。 但是,正如[18]中讨论的那样,在他们的实验中,BoN评估指标损害了现实世界的适用性,因为在不事先了解最小误差轨迹的情况下,如何在线实现这样的性能还不清楚。 因此,我们主要关注单峰预测(给出一个确定的预测结果)以避免质疑评估指标,这意味着我们根据[13,17]使用它们的1V -1模型测试了Social GAN和STGA T的性能。 我们还将报告该方法的多峰预测结果,但是由于篇幅所限,这些结果将显示在供应文件中。
    Sec. 4.1展示我们可靠的实验结果, Sec. 4.2 ablation study , Sec.4.3. qualitative analysis

4.1. Quantitive Analysis
我们的方法是在流行的ETH & UCY基准上进行评估,采用ADE和FDE指标,Tpred= 12。实验结果如表1所示。结果表明,我们的模型在大多数子集的ADE和FDE上的性能都超过了最先进的方法。与STGAT相比,平均ADE和FDE分别提高了11.1%和10.8%
在这里插入图片描述
在特殊情况下,我们的方法无法与UNIV数据集中的STGAT进行比较。 原因可能是UNIV数据集中有许多场景,其中行人数量很大(20个或更多),而在其他数据集中这种情况几乎不存在。 当我们将一劳永逸的方法应用于UNIV数据集的训练和评估时,RSBG生成器将不会在庞大的小组上进行训练,而会在这些小组上进行测试,这可能会导致性能下降。 因此,这种失败的情况可能是由留一法测试中数据分布不平衡引起的。
请注意,实验结果表明,在我们的模型中应用人类上下文特征时,某些子集的性能会变差。 这也可能是由遗忘测试引起的,因为上下文功能在不同情况下发生了很大变化。 ETH数据集中的结果表明,上下文特征在某些情况下可能有助于预测。

4.2. Ablation Study
BiLSTM encoder(BiLSTM 编码器) 与之前的大多数著作[13,17]相比,我们使用BiLSTMs来编码单个人的历史轨迹,而不是LSTMs,因为后面的轨迹会影响前面的轨迹,如3.3节所述。为了证明BiLSTM的效果,我们在其他模块不变的情况下,将模型中的BiLSTM编码器替换为LSTM编码器,并与我们的全模型进行比较。如表2所示,BiLSTM编码器平均带来了5.9%的ADE和4.8%的FDE改善。
在这里插入图片描述
Exponential L2 Loss (指数L2损失) 由于L2 Loss将预测阶段中的所有时间步都视为等效,因此它在FDE上的亮度不够高,而行人的准确最终位置对于轨迹预测非常重要。 因此,我们引入指数Exponential L2 Loss 来训练模型。 我们在Tab3(表示使用L2损失)中代表超参数γ的四种不同设置。 通过使用适当的γ= 20,平均ADE和FDE的平均错误率分别降低4.0%和4.8%。 但是,如果通过将γ设置为较小来使损耗过分强调FDE,则会对Tab3中的第三行产生不利影响。
在这里插入图片描述
4.3. Qualitative Analysis
Socially acceptable trajectory generation(社会可接受轨迹生成) 正如[13]中提到的,人类轨迹预测的一个巨大挑战是产生社会可接受的结果。由于社会规范的多样性,我们将我们的方法与最先进的STGAT和SGAN方法在三个常见的社会案例中进行比较:加入、跟随和避免碰撞。可视化结果如图4所示。我们选择了三个具有挑战性的场景,这些轨迹的斜率变化频繁,这给预测带来了困难。
在这里插入图片描述
对于第1行中的案例,我们的模型成功地预测了这样的事实:男人和女人在被其他行人分开后会聚在一起。 当STGAT的预测给出错误的连接方向和目标时,SGAN未捕获此关系。 第2行中的以下场景表明,我们的模型已经掌握了一个普遍准则,即人们的出发点和目的地相似时,他们更倾向于跟随他人。以往的作品没有挖掘潜在的社会规范。此外,我们的模型也给出了一个合理的预测在第三行避碰的情况。虽然其他方法的预测结果避免了冲突,但预测的底代理轨迹指出,与我们的方法相比,这些模型并不能预测底代理的目的地。
Social representation in RSBG(RSBG中的社会代表性) 我们将源自RSBG的社交表示可视化,并在图5中分析这些权重之间的潜在群体。为清晰起见,我们在此处显示关键代理的边缘权重。
在这里插入图片描述
图(a)-(c)显示了在同一场景中以三个不同的人为中心的三个社会关系表示权重。根据RSBG中这些边缘的可视化权重,在这种集群和避免碰撞的情况下,(a)和(c)中的目标人显示出强烈的追随趋势,而(b)中的目标人更有可能避免碰撞。这表明了与我们实际场景中行为的高度一致性。此外,请注意,这三个目标之间的权重很高,这表明这三个行人在一个组中。
图(d)-(f)显示了捕获的两个远距离行人之间的牢固关系。在这三种情况下,目标代理人将更多的兴趣放在可能与他发生冲突的人身上,而不是靠近他的行人。尤其是在情况(f)中,RSBG指出,即使目标人是最远的行人,目标人也极有可能与接近的行人发生碰撞。这些情况表明,我们的方法可以成功地捕获潜在的社会关系,而不受距离的影响。

5 结论

为了获得更好的轨迹预测结果,本文研究了行人之间的交互。我们提出了一种新的结构,称为递归社会行为图,它由基于组的标注来监督,以探索不受空间距离影响的关系。为了对社会交互特征进行编码,我们引入了GCNs,它可以充分整合RSBG中的节点和边的信息。此外,我们用指数L2损失代替常用的L2损失来强调FDE的重要性。我们证明,通过应用基于群体的社会互动模型,我们的模型学习了更多的潜在社会关系,比基于距离的方法表现得更好。

猜你喜欢

转载自blog.csdn.net/Sun_ZD/article/details/106087658