Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
szz34 authored Sep 6, 2024
1 parent 416a189 commit abc2334
Showing 1 changed file with 176 additions and 0 deletions.
176 changes: 176 additions & 0 deletions _posts/2022-11-10-pytorch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
---
title: '【论文阅读笔记】Spatial-Temporal Similarity for Trajectories with Location Noise and Sporadic Sampling'
date: 2022-01-02
permalink: /posts/2022/01/sts/
tags:
- trajectory similarity
- data management
- trajectory mining
---

[原文链接](https://ieeexplore.ieee.org/document/9458932)

看了论文标题就差不多知道,这篇文章要做的,就是设计一种算法来衡量两条轨迹之间的相似度,并且这些轨迹数据是有定位误差和零星采样问题的。

# Background
随着物联网设备和定位技术的发展,会产生许多时空相似度很高的轨迹,例如:

对于单个个体:其轨迹可能会被多个定位系统所采集,比如当你驾驶汽车在高速上行驶,手机或汽车的GPS、路边的监控摄像头,以及经过的收费站等都会记录你的位置信息,生成多条轨迹。

对于多个个体:比如你的朋友和你结伴出行,生成的两条轨迹也是相似度很高的。

本文研究的方向就是设计一种方法来度量两条轨迹之间的相似度,帮助我们发现一些相似度很高的轨迹对。这是一项很有实际意义的工作,比如在案件侦破中,警方通过相似度分析可以将犯人的车辆、手机和人像联系起来,降低破案的难度。在疫情扩散的当下,我们还可以通过分析感染者的轨迹来寻找密切接触者。

# Challenges
但是,想要实现轨迹间相似性的度量不是件容易的事。第一个问题就是难以避免的定位误差问题,例如下图(a)中小黑和小白在现实中处在相同的位置,但二者的定位数据却相差比较远。第二个问题是零星采样的问题,我理解的这个词(Sporadic)应该有两层含义:首先是不同的定位系统,它的采样率不尽相同。第二个是下图(b)中展示的异步(heterogeneous)定位的问题,假设小黑和小白结伴行走,两个定位系统的采样率也相等,但由于两系统的采样时刻不同,导致二人的位置数据并没有时间和位置上的重叠。这是我们研究轨迹相似性要克服的两个挑战。

![image](https://github.com/user-attachments/assets/1b290af1-6ca3-447d-b952-089f8cb5dafa)

# Related Works
想要研究两条轨迹的相似性,很多同学的第一直觉应该是计算两条轨迹之间的相对距离。事实上,早年间许多工作都是基于这个原理进行的,比如去计算两条轨迹间对应点的距离,最后取平均值(下图中的第一个)。不同的工作基于不同的距离度量标准。针对两条轨迹采样点数量不同的情况,又研究了寻找相应配对点的算法(下图中的第二个和第三个)。

![image](https://github.com/user-attachments/assets/e01cb1b1-fde7-4417-b6f4-2cba20fd6596)

这些工作有基于离散的情况,有的基于连续的情况。有的只考虑空间维度,还有的会同时考虑时空维度。近些年随着深度学习的发展也涌现出一些基于深度学习的算法。这些工作存在一些局限性:

①有的工作只研究空间维度的相似性,忽略了时间维度的信息。

②有的工作没有考虑我们之前提到的定位误差和零星采样的问题,导致算法鲁棒性较差。

③有些工作要基于很强的假设,比如假设个体速度不变,或者要基于大规模的数据来训练模型。

# Overview
本篇论文希望设计一种非深度学习的算法来度量两条轨迹的相似性。下图展示了该方法的流程框架。

![image](https://github.com/user-attachments/assets/b54aad06-cc15-46b0-a3ac-4265713530cd)

给定两条有定位误差和零星采样问题的轨迹,它是由许多采样点构成,每个采样点包括位置和时间信息。

![image](https://github.com/user-attachments/assets/143fce3a-6bfb-4945-bc04-aaefdc916208)

我们首先去估计个体在某一时刻位于某位置的概率,之后将其扩展到整个时间和空间维度,进而去衡量两条轨迹的相似性。我们将该方法简称为STS,它对于定位误差和零星采样问题具有很好的鲁棒性,不需要假设速度固定不变,而是通过一种个性化的方法为个体计算其专属的速度分布。最后,该方法不需要训练集数据进行模型训练。

# Spatial-Temporal Probability Estimation
下面我们来看一下STS方法的实现原理。
## 1. S-T Probability Estimation under Location Noise
我们首先去计算个体在某时刻位于某一位置的概率。为了减小计算成本,我们将整个空间划分为相同大小的正方形网格,并以网格的中心点来代表该网格的位置。

![image](https://github.com/user-attachments/assets/23ad77e3-532d-4e4c-acb5-f8bbfb3212c7)

![image](https://github.com/user-attachments/assets/a68a1dea-68b0-4eea-b9af-d9bb86d7397f)

之后,我们计算对于一条轨迹,它在t时刻的位置位于网格ri内的概率(公式(1))。这里我们是针对t不包含在采样点里的情况。比如一条轨迹采样点的时间戳只有t1、t2、t3,我们想看t1和t2之间某时刻个体所在的位置,就可以通过该方法进行一个预测。它实际上就是一个条件概率的形式。

![image](https://github.com/user-attachments/assets/716d9298-3efe-47ab-baf0-1094cb833ab1)

下一步,我们通常认为轨迹里的位置符合马尔科夫性质,也就是当前位置只受上一个位置的影响,而不受其他点的影响。这样,我们就可以将上面的公式简化为下面这种形式,只考虑ti、t、ti+1三个时刻,去掉其他时刻,并通过转移概率的形式表示。

![image](https://github.com/user-attachments/assets/34726bd1-8ebb-403a-ac00-d7ee43590900)

因为我们的方法要考虑定位误差带来的影响,因此对于采样点的位置l,我们希望将其表示为概率分布的形式,而不是一个确定的点。我们通过最常用的高斯分布来模拟定位误差的概率分布情况,将网格r的位置作为高斯分布的期望值,f(r, li)代表对于采样点中的位置li,其真实位置位于网格r内的概率。li与r的距离越近,对应的概率就越高。

![image](https://github.com/user-attachments/assets/18e2dd48-fa02-4893-b01c-51232cf429fb)

公式(2)是我们上一步得到的结果,我们需要结合公式(3),对公式(2)中的l进行变换,加入噪声的影响,最终得到公式(4)这种形式。

![image](https://github.com/user-attachments/assets/0c45d9e0-8803-4f42-ac42-10cb8fe3a71e)

这样我们就算出了对于某轨迹,在t时刻其位置位于网格ri的概率。下面的公式(5)中的STP的概念是一样的,也代表这个概率,只是我们提到过,当t不包含在采样点中时,我们可以通过公式(4)在预测它的位置。如果我们的t就是某个采样点的时间,就不需要P来计算,而直接通过公式(3)就可以得到对应的概率。所以这里我们将STP分了三种情况来考虑。

![image](https://github.com/user-attachments/assets/8a91cb58-c47e-48a6-bed5-51ed0a95667f)

到这里,我们得到了计算时空概率的最终公式,但是公式里还有一个问题没有解决,那就是如何计算公式里包含的这些转移概率。

## 2. Personalized Transition Probability Estimator
下面,我们来看一下计算转移概率的方法。

所谓转移概率就是个体从时刻ti到ti+1,从位置li转移到位置li+1的概率。在很多方法中,转移概率都是基于大量的历史数据,通过计数的方式来计算的,然而本文中,在没有历史数据做支撑的情况下,我们通过个体的速度信息来计算转移概率。许多同样基于速度来计算转移概率的工作为了计算简单,会假设物体的速度固定不变,这显然是不合理的。在本文的方法中,我们会为每条轨迹生成其单独的速度概率分布,并充分考虑移动过程中速度的变化,这也体现了该方法名字中的个性化(personalized)这一含义。具体的做法是:我们首先根据两个采样点之间的数据和间隔时间,计算两点间的平均速度,生成这样一个速度数组S。

![image](https://github.com/user-attachments/assets/757c28fd-acce-420a-ab43-bf6e6f41947b)

之后通过核密度估计来得到该轨迹速度的概率分布情况。对于核密度估计的内容,不懂的同学可以看一下[这篇博客](https://cloud.tencent.com/developer/article/1819548),结合里面的例子理解一下,我觉得讲得不错。

本文选择了最常用的高斯核函数,将带宽h设为下面这个值,来计算我们速度数组的分布情况。

![image](https://github.com/user-attachments/assets/ea0bb697-3c2d-45e1-a446-325df8072f4c)

我以网页中的那张图片为例,假如下图就是我们速度的分布情况,那么在2到3这个范围内的速度值对应的概率较高,该结果就反映了,在轨迹的整个移动过程中,个体在很长一段时间里都是以2到3这个速度值运动的,即这个速度值出现的概率比较高。

![image](https://github.com/user-attachments/assets/6d9bd58d-bb0f-40b9-b1e5-0416f8eab712)

因此,当我们想计算两个位置间的转移概率时,我们先计算两个位置间的平均速度,代入图像中对应的概率值,就是其转移概率,这就是本文如何通过速度来计算转移概率的方式。至于这里为什么将带宽设为这个值,作者说他是借鉴了前人的研究成果,当带宽为这个值的时候可以获得最好的效果。我在核密度估计的维基百科里也看到了类似的内容,大致意思就是当你选择高斯作为核函数的时候,最佳的带宽值就是这个值。

![image](https://github.com/user-attachments/assets/70b7c273-16de-4b83-96d1-5f771d152d5c)

那么到这里,我们知道了计算转移概率的方法,才算是彻底完成了对时空概率STP的计算。

# Spatial-Temporal Similarity Measure
## 1. Co-location Probability Estimation
我们现在知道了如何去计算STP,也就是对于某一条轨迹,在时刻t,个体位于网格r内的概率。那么,对于两条轨迹,他们在同一时刻t位于同一网格r内的概率,就用两条轨迹的STP相乘,然后对每一个可能的网格进行求和就可以了。

![image](https://github.com/user-attachments/assets/54f2e3a3-98b7-4e6b-a2e9-1b2e54d98ee7)

前面我们提到,根据时间的情况,STP有三种计算方式,所以这里的CP也有相应的三种计算方式。我们在这个P中提到,即使该轨迹的采样点中不包含t这个时间戳,我们也可以通过P来计算它的概率,但是这里的t并不是说对于任意的时间我们都可以计算,而是有一个范围。比如说,有两条轨迹Tra1和Tra2,它们各自有三个采样点t1、t2、t3和t4、t5、t6,我们取它们时间戳的并集。我们假设只有t3和t4相等,其余各不相同,那么t的范围就是t1、t2、t3、t5、t6。所以下面在计算CP的时候,如果我们要计算的时间t在两条轨迹中都有,比如t3,那么两条轨迹的STP我们都通过下图中的第一种方式来计算。如果时间t只在轨迹1中,而不在轨迹2中,比如t1或者t2,那么就用第二种方式计算。第三种情况也是类似的道理。

![image](https://github.com/user-attachments/assets/8baf04ce-e8d9-4eb4-a0a5-9bd3ed68c45a)

## 2. Spatial-Temporal Similarity
在上一步,我们计算了在某一时刻,两条轨迹位于同一网格内的概率,相当于已经在空间维度上做了一次求和,那么很自然,我们再从时间维度上做一次求和,就可以得到两条轨迹整体的相似性,我们用STS来表示。轨迹的绝对值代表轨迹采样点的数量。

![image](https://github.com/user-attachments/assets/658a734e-d866-426e-92eb-b1e00c974223)

到此,整个算法的介绍完毕。

# Experiments
## 1. Datasets
本文用到两个数据集:

第一个数据集记录了422辆出租车的轨迹,大约有170万条,采样率为15秒。一般来讲十秒以内算作高采样率,那么该数据集的采样率也算是比较高的。

第二个数据集记录了某大型商场中行人的轨迹,大约是一万两千多条。

作者对两个数据集都做了处理,删掉了采样数小于20的轨迹。

## 2. Baselines
作者将本文的STS方法与当前该领域内最新的一些方法进行了对比,例如CATS、EDwP、APM等(感兴趣的同学可以自行去了解其原理),实验方式是拿一条轨迹去匹配与之相似度最高的另一条轨迹。

## 3. Dataset Construction
这里需要说明一下,上面提到实验中使用的两个数据集的作用是去模拟室外和室内这两种不同的场景,而并不是拿一个数据集中的一条轨迹,在另一个数据集中寻找与之匹配的轨迹。也就是说,每个数据集中的轨迹本质上还是由单个定位设备采集,而且我们又没有ground-truth,如何去判断轨迹匹配的准确率呢?

这里作者采用了一种比较巧妙的方式(应该不是作者原创),他将一条轨迹通过交替采样分成两条轨迹,我们将这两条轨迹称为同源的轨迹,这样就相当于手动生成了两条相似度极高的轨迹。同时因为我们知道这两条轨迹的相似度很高,如果进行轨迹匹配,对方就是匹配的最佳结果,因此也相当于获得了ground-truth。同时这种将一条轨迹分成两条的方式也模拟了异步采样的场景,可以说是一举多得。

![image](https://github.com/user-attachments/assets/43720fff-70bf-4755-9497-e0612e443dd1)

这样,我们就将每个数据集各自拆成了两个子数据集。

## 4. Performance Metrics
算法的评价指标,分别是平均排名(mean rank)和准确率(precision)。二者的具体含义可以去仔细看一下原文,还挺奇怪的。总之平均排名越接近1,或者准确率越接近100%,算法的表现越好。

![image](https://github.com/user-attachments/assets/932df3df-a157-4d47-a36b-5f6b19f334c0)

## 5. Results
结果部分我就不细说了,大家看看图吧,具体意义详见原文。

![image](https://github.com/user-attachments/assets/87f85aa1-d7a8-4eca-8787-8a30a4809950)

![image](https://github.com/user-attachments/assets/1c41a8fe-7660-46aa-9908-62c05e531df7)

上图所谓“异步采样的影响”,就是看两条轨迹采样率的差异对结果的影响。

![image](https://github.com/user-attachments/assets/11628d8f-bb32-41df-8bd9-55fe9b69dd91)

![image](https://github.com/user-attachments/assets/8689cce0-829e-4645-97dd-93b3394fc9ac)

![image](https://github.com/user-attachments/assets/23798a5a-1320-44a3-9ee8-79e984018bfc)

基于上图结果,作者发现:这里的3m和100m刚好十分接近两个数据集定位系统的精度值,因此作者得出结论,当我们将网格大小设置为定位系统的精度值时,就可以很好的平衡时间开销和算法表现。

# Conclusion
最后做个总结。本文希望研究一种新的算法来衡量两条轨迹间的相似度,该算法同时考虑时间和空间维度,且对定位误差和零星采样问题具有鲁棒性。因此作者提出了STS方法,它对于一条轨迹,首先去预测在某时刻位于某位置的概率,然后将其拓展到整个时间和空间维度,来实现对于两条轨迹相似度的衡量。最后作者通过大量的实验证明了STS具有很好的性能,面对定位误差和零星采样问题也有很强的鲁棒性。

# 阅读感受
首先我感觉,从论文写作的角度来说,因为公式算法之类的比较多,读的时候比较困难。论文除了实验部分图挺多,其余部分就没几张图了,尤其是算法部分,只靠文字和公式确实挺难理解算法的含义,而且我觉得语言表达的也不够清晰,每个部分的标题也看不懂具体要干什么。不过,当研究明白以后,其实公式看着挺复杂,但实际原理都是挺基础的,而且作者的方法确实很有意思,他不是采用的传统方法中衡量两轨迹间相对距离的方式,而是用了许多概率估计,可以说是方法上的一种创新,尤其是个性化速度估计部分,我觉得想法很好。

另一个亮点就是将一条轨迹拆成两条的地方,也是个很值得学习的部分。

------

0 comments on commit abc2334

Please sign in to comment.