返回列表

[11th] LSTM + Dynamic Programming Post-processing

435. Indoor Location & Navigation | indoor-location-navigation

开始: 2021-01-28 结束: 2021-05-17 共享出行与停车 数据算法赛
[第11名] LSTM + 动态规划后处理

[第11名] LSTM + 动态规划后处理

作者: Vicens Gaitan (Grandmaster) | 比赛: Indoor Location Navigation | 排名: 11th

祝贺所有的获奖者!特别祝贺我的队友 @Ouranos,在这场非常有趣的比赛后他也成为了 Grand Master。我们在最后一周组队,这给了我们巨大的提升。虽然最后出了点小插曲,但我们还是拿到了金牌 😊

我的工作主要集中在解决方案的后处理上。问题在于如何在路径层面同时考虑以下几点:用于位置的回归模型、来自传感器的相对信息、通过识别唯一设备获得的路径序列,以及最重要的是,位置是在网格

有趣的是,可以将其表述为网格上的组合优化问题,其成本函数表达了我们需要一个网格上的解,尽可能接近回归模型,尽可能与传感器获得的增量(deltas)一致,并同时利用路径序列的信息。

对于有限的网格点 Xg 和具有 nt 步的给定路径 p,模型 X(t),传感器相对位置 Delta(t),前一条和后一条路径的信息 Xpr, Deltat_p, Xn, DeltaT_n,我们可以写出成本函数:

$$ \sum_{i=1}^{nt} \epsilon (Xg(t)-X(t))^2 + \alpha (Xg(t-1)-Xg(t) + Delta(t))^2 + \gamma (Xg(1)-Xp)^2/Deltat_p + \gamma (Xg(nt)-Xn)^2)/Deltat_n $$

给定合适的 alpha、gamma 和 epsilon,该表达式可以使用关于 t 的动态规划进行精确优化。

在我们的案例中,模型由 @Ouranos 开发。它是 3 个 LSTM 模型的平均值,其中一个是针对每栋建筑特定的,并通过伪标签进行了训练:

训练 -> 后处理 -> 伪标签训练 -> 后处理

增量是使用组织者在他们的 GitHub 上提供的代码计算的,序列的获取方式在讨论区有描述。我们使用 .txt 文件中提供的设备信息的哈希值:

#	Brand:OPPO	Model:PBCM10	AndroidName:8.1.0	APILevel:27	
#	type:1	name:BMI160 Accelerometer	version:2062600	vendor:BOSCH	resolution:0.0023956299	power:0.18	maximumRange:39.22661
#	type:4	name:BMI160 Gyroscope	version:2062600	vendor:BOSCH	resolution:0.0010681152	power:0.9	maximumRange:34.906586
#	type:2	name:AK09911 Magnetometer	version:1	vendor:AKM	resolution:0.5996704	power:2.4	maximumRange:4911.9995
#	type:35	name:BMI160 Accelerometer Uncalibrated	version:2062600	vendor:BOSCH	resolution:0.0023956299	power:0.18	maximumRange:39.22661
#	type:16	name:BMI160 Gyroscope Uncalibrated	version:2062600	vendor:BOSCH	resolution:0.0010681152	power:0.9	maximumRange:34.906586
#	type:14	name:AK09911 Magnetometer Uncalibrated	version:1	vendor:AKM	resolution:0.5996704	power:2.4	maximumRange:4911.9995
#	VersionName:v20191120-nightly-9-gde3748b	VersionCode:424	

当没有提供信息时,路径的前 5 个字符是一个很好的代理。

在开始优化之前,我们通过两种类型的点动态扩展原始网格:

  • 我们添加 X 解中远离任何原始网格点的点。
  • 当 X 解中点之间的距离大于某个阈值时,我们引入中间点。