当前位置: 首页 > news >正文

论文笔记:Contrastive Trajectory Similarity Learning withDual-Feature Attention

ICDE 2023

1 intro

1.1 背景

  • 轨迹相似性,可以分为两类
    • 启发式度量
      • 根据手工制定的规则,找到两条轨迹之间基于点的匹配
    • 学习式度量
      • 通过计算轨迹嵌入之间的距离来预测相似性值
  • 上述两种度量的挑战:
    • 无效性:
      • 具有不同采样率或含有噪声的轨迹会降低现有度量的有效性
        • 使用手工制定规则的启发式度量容易受到低质量轨迹的错误影响
        • 学习式度量主要采用并非最初为轨迹数据设计的深度学习模型,可能无法捕捉轨迹点之间以及相似轨迹之间的长空间相关性
      • 图1显示了Porto出租车轨迹数据集上的3-最近邻查询结果
        • 使用t2vec(图1b)获得的查询结果远离查询轨迹
        • 由Hausdorff获得的结果更接近查询轨迹(图1a),但不如论文的TrajCL方法(图1c)所获得的那样接近
    • 低效

`1.2 本文贡献

  • 提出了TrajCL,一种基于对比学习的轨迹相似性度量
    • 首先利用四种轨迹增强方法来为每个训练样本生成具有不同特征的多样化轨迹变体(view)、        
      • 点移位、点屏蔽、轨迹截断和轨迹简化
    • 然后,提出的DualSTB编码器将增强的轨迹嵌入,以捕捉轨迹之间的空间距离相关性
      • 将轨迹的结构和空间特征都编码到其学习到的嵌入中
      • 提供了轨迹的粗粒度和细粒度位置信息
    • 之后,简单地将两条轨迹的相似性计算为它们的嵌入之间的L1距离

2 方法

2.1 问题描述

将轨迹 T 视为点的序列,记录某实体的运动的离散位置,表示为T=[p1​,p2​,...,p∣T∣​],其中pi​ 是 T 上的第 i 个点,由其在欧几里得空间中的坐标表示,即 pi​=(xi​,yi​)

问题陈述:给定一组轨迹,我们的目标是学习一个轨迹编码器F:T→h,将轨迹 T 映射到 d 维嵌入向量h∈Rd。两条轨迹学习到的嵌入之间的距离应该与两条轨迹之间的相似性负相关(论文使用L1距离)

2.2 数据增强

2.3 Encoder Backbone

人们可能会将结构特征和空间特征这两种特征类型合并成一种,以适应 MSM 的输入结构。然而,这样的方法在经验上被证明是较差的

DualMSM 允许学习每种输入特征类型的独占注意力系数,然后进行自适应集成

——>确保了基于不同类型特征的点之间的相关性被独立建模

——>自适应集成使得注意力机制在组合不同类型的输入特征时更为灵活

没有任何递归结构,所以可以很轻松地被GPU加速

3 实验

3. 1 实验数据

  • 波尔图——从 2013 年 7 月到 2014 年 6 月之间,在葡萄牙波尔图的 170 万条出租车轨迹
  • 西安——2018 年 10 月的前两周,来自中国西安的 210 万条网约车轨迹
  • 德国——从 2006 年到 2013 年之间,在德国提交的 170.7 千条用户轨迹

  • 过滤掉位于城市(或国家)区域之外的轨迹,或包含少于 20 个点或多于 200 个点的轨迹,来对每个数据集进行预处理
  • 预处理后的数据集在表 II 中进行了总结

我们使用 Adam 优化器训练 TrajCL,并最多进行 20 个 epoch,如果连续 5 个 epoch 没有改善损失,我们将提前停止。学习率初始化为 0.001,每 5 个 epoch 减半一次。

代码: https://github.com/changyanchuan/TrajCL

3.2 结果

http://www.lryc.cn/news/182121.html

相关文章:

  • 整数和字符串比较的坑
  • LeetCode 面试题 08.04. 幂集
  • 【m_listCtrl !=NULL有多个运算符与操作数匹配】2023/9/21 上午11:03:44
  • Logrus 集成 color 库实现自定义日志颜色输出字符原理
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-2】语言模型,提问范式与 Token
  • 想要精通算法和SQL的成长之路 - 最长连续序列
  • UG NX二次开发(C#)- 制图(Draft)-工程图框选制图曲线并输出制图曲线的信息
  • 1.7.C++项目:仿muduo库实现并发服务器之Poller模块的设计
  • Flutter笔记:build方法、构建上下文BuildContext解析
  • composer 安装和基本使用
  • Ubuntu配置深度学习环境(TensorFlow和PyTorch)
  • 【产品经理】国内企业服务SAAS平台的生存与发展
  • 【vue 首屏加载优化】
  • docker--redis容器部署及与SpringBoot整合-I
  • 力扣 -- 518. 零钱兑换 II(完全背包问题)
  • 一文搞懂UART通信协议
  • 【算法|动态规划No.7】leetcode300. 最长递增子序列
  • LeetCode 54 螺旋矩阵
  • OpenCV 概念、整体架构、各模块主要功能
  • 组合数与莫队——组合数前缀和
  • stm32之雨滴传感器使用记录
  • 华硕平板k013me176cx线刷方法
  • C#停车场管理系统
  • C++:stl:stack、queue、priority_queue介绍及模拟实现和容量适配器deque介绍
  • ​【Java】面向对象程序设计 课程笔记 面向对象基础
  • Hive【Hive(五)函数-高级聚合函数、炸裂函数】
  • zabbix(二)
  • 容器安全检测工具KubeHound使用
  • 机器学习笔记 - 基于强化学习的贪吃蛇玩游戏
  • C++_pen_类