PiLoT: Neural Pixel-to-3D Registration for UAV-based Ego and Target Geo-localization¶
会议: CVPR 2026
论文: CVF Open Access
代码: 无(项目页 https://nudt-sawlab.github.io/PiLoT/)
领域: 遥感 / 无人机视觉定位 / 3D视觉
关键词: 无人机定位, 像素到3D配准, GNSS拒止, 位姿优化, 目标地理定位
一句话总结¶
PiLoT 把"无人机自定位 + 任意目标地理定位"统一成「实时视频帧与带地理坐标的 3D 地图做像素到 3D 配准」这一个问题,用双线程引擎 + 百万级合成数据训练的轻量网络 + 神经引导随机梯度优化器(JNGO),在无 GNSS / IMU 的条件下做到 1.37 m 中位误差、Jetson Orin 上 25+ FPS。
研究背景与动机¶
领域现状:无人机要"知道自己在哪 + 知道看到的东西在哪",主流是解耦的两条流水线——自定位用 VIO(视觉惯性里程计)融合 GNSS,目标定位再额外挂激光测距仪(如 DJI Matrice 4 系列)这类主动传感器。
现有痛点:这套范式有两个硬伤。一是强依赖 GNSS,在信号被干扰 / 拒止的环境里直接失效;二是激光测目标又贵又笨重,而且一次只能测一个点,无法对画面里任意像素做地理定位。即便退一步只看纯视觉,VIO/SLAM 虽然局部平滑,却会在长航时飞行中累积漂移,缺少全局参考。
核心矛盾:无人机定位被"精度 / 鲁棒 / 实时"这个不可能三角卡死——要无漂移精度就得对齐全局地图,要鲁棒就得扛日夜/季节的外观剧变和激进的 6-DoF 机动(帧间位移可达 10 m / 10°,超出常规优化器的收敛盆地),而要实时又被基于学习的稠密匹配器拖垮(机载算力有限)。三者很难同时满足。
本文目标:在没有 GNSS / IMU 的前提下,同时给出每帧无人机的 6-DoF 位姿,以及把查询图任意像素 \(\mathbf{u}=(u,v)^\top\) 映射到真实世界坐标 (lon, lat, alt)。
切入角度:作者主张范式转移——不再堆传感器,而是把自定位和目标定位重写成同一个像素到 3D 配准问题。只要把实时视频流持续配准到全局 3D 地图(如 Google Earth),系统天然就能恢复无人机 6-DoF 位姿,并由位姿 + 深度反推任意像素的地理坐标,两个任务一次解决。
核心 idea:用"视频帧↔带地理坐标 3D 地图的特征空间配准"取代"GNSS+激光"的解耦传感器方案,并为不可能三角的三条边分别设计一个组件(双线程→实时、合成数据→鲁棒泛化、JNGO→抗激进运动的精度)。
方法详解¶
整体框架¶
PiLoT 的输入是带地理坐标的 3D 地图 \(M\)、已知内参的单目视频流 \(\{I^q_i\}\),以及第一帧的一个粗位姿先验 \(\tilde{T}_{\text{init}}\);输出是每帧 6-DoF 位姿 \(\hat{T}_i\) 和任意目标像素的 3-DoF 地理坐标。整个系统由两条并行线程驱动:渲染线程用卡尔曼滤波预测一个参考位姿、在该位姿下渲染一张合成参考视图并反投影出一批 3D 地理锚点,打包成参考 bundle;定位线程对每个新来的查询帧抽多尺度特征,再用 JNGO 优化器把查询帧与这批地理锚点在特征空间对齐,求出全局一致的位姿,并把结果回传给渲染线程准备下一帧。
关键在于:自定位的位姿一旦求出,对画面里任意像素投射一条相机射线进 3D 地图、查深度即可得到该像素的地理坐标——目标定位是自定位的"免费副产品",这也是把两个任务统一的根源。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["输入:单目视频帧 +<br/>地理参考 3D 地图"] --> B["UAV专属特征提取<br/>合成数据训练·轻量网络"]
A --> C["双线程引擎<br/>渲染线程·KF预测+渲染参考视图<br/>反投影出 3D 地理锚点 B_i"]
C -->|参考 bundle B_i| D["JNGO 优化器<br/>旋转感知采样→并行精化→运动约束择优"]
B -->|多尺度特征+不确定度| D
D --> E["6-DoF 自位姿 T̂"]
E -->|对任意像素投射射线<br/>查深度| F["目标 3-DoF 地理坐标<br/>(lon, lat, alt)"]
E -.->|回传位姿,准备下一帧 B_(i+1)| C
关键设计¶
1. 双线程引擎:把渲染从定位主线程里拆出去,换实时又不漂移
朴素做法是"用上一帧渲染参考视图 → 当前帧做位姿精化"串成一条线,但渲染和优化有强时序依赖,定位引擎必须停下来等渲染完成,形成实时瓶颈。PiLoT 改成解耦的双线程并行架构:渲染线程先用恒速卡尔曼滤波从上一估计 \(\hat{T}_{i-1}\) 预测参考位姿 \(\hat{T}_{i|i-1}\),在该位姿下渲染新参考视图 \((I^r_i, D^r_i)\),并把其中 \(N\) 个深度有效的像素反投影到世界系,得到一组 3D 地理锚点:
再把参考视图、预测位姿和锚点打包为 bundle \(\mathcal{B}_i := (I_i^{r},\, \hat{\mathbf{T}}_{i|i-1}, \{\mathbf{P}_{i,j}^{W}\}_{j=1}^{N})\) 交给定位线程。这样每个查询帧都被"随无人机视角动态更新的地理锚点"约束住——锚点直接挂在全局地图上,所以不会随时间漂移,这是无漂移精度的来源。另一处巧思是一对多策略:面对快速运动,常规思路是围绕上一位姿渲染多张视图扩大搜索域,而 PiLoT 只渲染单张参考锚视图,让一"群"位姿假设都去对这张共享渲染做精化,用极少的渲染成本换到大搜索范围。
2. 百万级合成数据集:用几何监督逼网络学"扎根 3D 结构"的特征,换零样本 sim-to-real
无人机定位需要轻量网络在视角和光照剧变下仍判别力强,但现有无人机数据集要么缺稠密深度和精确位姿这类几何标注,要么城市/视角太单一,撑不起序列化的几何监督。作者自建了一条全自动 AirSim–Cesium–Unreal 仿真管线,在全球真实感地形上模拟无人机轨迹,渲出百万级(1.1M+ RGB-D 对,覆盖 82 个区域、650 km 飞行)合成数据,并导出绝对相机位姿和逐像素深度,全部经重投影校验。三级特征金字塔在 1/4、1/2、1 分辨率上提取(backbone 用 MobileOne-S0,配紧凑 U-Net 解码器,通道宽仅 \(C=32\))。训练用直接对齐范式,端到端联合优化特征提取器和迭代位姿精化,几何损失最小化地理锚点真值投影 \(\mathbf{p}_j^q\) 与估计投影 \(\tilde{\mathbf{p}}_j^q\) 之间的重投影误差:
其中 \(\rho_B(\cdot)\) 是 Barron 鲁棒损失。因为监督信号是"几何一致性"而非外观,网络被迫学到对光度变化不变、扎根底层 3D 结构的特征,从而只在合成数据上训练就能零样本泛化到真实无人机图像(消融里这一步是地基,见下)。
3. JNGO:神经引导的随机-梯度联合优化器,专治激进机动下的大位移收敛
激进的无人机机动会带来很大的帧间位移,传统纯梯度优化器容易掉进局部极小。JNGO 的思路是把全局探索和局部利用捏在一起,分三步走。
其一,旋转感知假设生成:基于"无人机图像的像素位移对旋转远比对平移敏感"这一观察,对俯仰 pitch 和偏航 yaw 这两个运动敏感轴分配更大的采样范围,从各向异性包围盒 \(\mathcal{B}_r = [-\alpha_{\text{pitch}},\alpha_{\text{pitch}}]\times[-\alpha_{\text{yaw}},\alpha_{\text{yaw}}]\) 里均匀采旋转扰动,平移扰动则从卡尔曼预测推出的高斯 \(\delta\mathbf{t}_m\sim\mathcal{N}(\boldsymbol{\mu}_t,\boldsymbol{\Sigma}_t)\) 里小幅采样,一次生成 \(M\) 个位姿假设(测试时 \(M=144\),pitch/yaw 在 \([-11°,11°]\) 以 \(2°\) 步长)。
其二,神经引导并行精化:每个假设 \(\tilde{T}_m\) 在地理锚点上做由粗到细的 Levenberg–Marquardt 优化(CUDA 并行)。在金字塔层 \(\ell\),把假设位姿下查询特征与参考特征的残差
(\(\pi(\cdot)\) 为针孔投影)按不确定度加权聚成代价 \(\mathcal{C}_{\text{photo}}^{(m,\ell)} = \sum_j \rho\left( w_\ell(j)\cdot\|\mathbf{r}^{(\ell)}_{j,m}\|^2_2 \right)\)(\(\rho\) 为 Huber 损失,\(w_\ell(j)\) 是查询/参考不确定度的联合得分),再用 LM 在 \(SE(3)\) 上迭代更新:\((\mathbf{J}^\top\mathbf{W}\mathbf{J}+\lambda\mathbf{I})\Delta\boldsymbol{\xi}=-\mathbf{J}^\top\mathbf{W}\mathbf{r}\),\(\tilde{\mathbf{T}}^{(k+1)}_{m}=\exp(\Delta\boldsymbol{\xi})\cdot\tilde{\mathbf{T}}^{(k)}_{m}\)。
其三,运动约束择优:精化后从 \(M\) 个假设里选最优时,除了最终特征代价,再加一项物理运动先验,惩罚偏离卡尔曼预测轨迹 \(\hat{T}_{\text{pred}}\) 的假设:
后一项是假设位姿与预测位姿在 \(\mathfrak{se}(3)\) 上的测地距离平方(把相对变换 \(\log(\cdot)^\vee\) 映成 6D twist),最终取总代价最小者 \(m^*=\arg\min_m\mathcal{C}_{\text{total}}^{(m)}\)。"随机采样扩搜索 + 梯度精化收敛 + 运动先验防跳变"三件套合起来,让优化器在 10 m / 10° 的极端帧间位移下仍稳定收敛。
损失函数 / 训练策略¶
端到端用几何重投影损失(上式 \(\mathcal{L}\),\(N=500\) 个参考锚点),Adam(lr \(=10^{-3}\))训 30 epoch,8 张 RTX 4090。训练时对查询位姿加 5~15 m 平移 / 5~15° 旋转噪声模拟初始化不确定性,数据增强叠加 Fourier 高频噪声和光度抖动(模糊、对比度、高斯噪声、亮度)。
实验关键数据¶
主实验:自定位(Tab. 2)¶
共享地图、512 px 输入,中位误差单位 m / °;R@1/3/5 为给定阈值内召回率,Comp. 为完整率,FPS 为定位频率。
| 数据集 | 方法 | FPS↑ | Med m↓ | Med °↓ | R@1 (m,°)↑ | Comp.↑ |
|---|---|---|---|---|---|---|
| SynthCity-6 (合成) | Render2Loc(LoFTR) | 2.0 | 0.49 | 0.04 | 76.5 | 100.0 |
| SynthCity-6 (合成) | Render2Loc(RoMaV2) | 0.8 | 0.47 | 0.04 | 77.2 | 100.0 |
| SynthCity-6 (合成) | PiLoT | 28.0 | 0.46 | 0.03 | 80.4 | 100.0 |
| UAVScenes (真实, 零样本) | Render2Loc(LoFTR) | 2.0 | 1.62 | 0.52 | 23.2 | 100.0 |
| UAVScenes (真实, 零样本) | PiLoT | 28.0 | 1.27 | 0.47 | 25.5 | 100.0 |
| UAVD4L-2yr (真实, 两年时差) | Render2Loc(RoMaV2) | 0.8 | 1.05 | 0.97 | 43.2 | 100.0 |
| UAVD4L-2yr (真实, 两年时差) | PiLoT | 28.0 | 0.92 | 0.89 | 45.8 | 100.0 |
PiLoT 在三个数据集上都拿到最低中位误差和最高召回,同时是最快的(28 FPS)。对比之下精度接近的 Render2Loc(LoFTR/RoMaV2) 只有 0.8~2 FPS,慢一两个数量级;快的 Render2Loc(ELoFTR, 20 FPS) 精度又掉。真实数据全是零样本部署、未做任何微调,UAVD4L-2yr 还引入了两年的季节/光照差,PiLoT 仍 SOTA。
目标地理定位(Tab. 3)¶
R@k 定义为目标 3D 距离误差在 k 米内的比例。
| 方法 | 单目标(真实) R@1/3/5 | 多目标(合成) R@1/3/5 |
|---|---|---|
| Render2ORB | 72.13 / 84.59 / 89.74 | 79.51 / 91.04 / 93.28 |
| PixLoc | 83.37 / 87.29 / 91.85 | 86.15 / 91.88 / 93.91 |
| Render2Loc | 87.62 / 92.60 / 96.25 | 89.03 / 93.15 / 96.07 |
| PiLoT | 90.81 / 94.32 / 96.85 | 93.74 / 95.56 / 98.19 |
自定位精度高直接转化成目标定位精度高(目标坐标靠从估计位姿射线投射 + 查深度得到),两类场景都领先。
消融实验(Tab. 4)¶
Recall(%) @ 1m/1° 在不同初始化噪声预算下:
| 配置 | w/ 3m,3° | w/ 5m,5° | w/ 10m,10° | 说明 |
|---|---|---|---|---|
| 现成 backbone | 4.2 | 0.0 | 0.0 | 通用特征在无人机域几乎全失败 |
| + 域专属训练 | 51.4 | 43.2 | 15.2 | 合成数据训练是地基 |
| + 旋转感知假设 | 83.8 | 78.9 | 70.6 | 大噪声下提升最猛 |
| + 运动正则(完整) | 84.3 | 84.3 | 84.2 | 把不同噪声预算下的性能拉平 |
| 训练数据 | 3m,3° | 5m,5° | 10m,10° |
|---|---|---|---|
| 合成(无光照/天气) | 63.5 | 62.4 | 61.6 |
| 仅 MegaDepth | 69.9 | 69.5 | 68.7 |
| 本文合成(含光照/天气) | 84.3 | 84.3 | 84.2 |
关键发现¶
- 域专属训练是地基:现成 backbone 在无人机域几乎全军覆没(3m,3° 仅 4.2%,更松阈值下归零),换成本文合成数据训练后跳到 51.4%——这一步不做,后面所有组件都无从谈起。
- 旋转感知假设在大位移下贡献最大:在 10m,10° 这种激进初始化预算下,从 15.2% 一举拉到 70.6%,印证了"无人机像素位移对旋转更敏感、就该往 pitch/yaw 多撒采样"的观察。
- 运动正则负责"稳":它把 3m/5m/10m 三档预算下的性能从 83.8/78.9/70.6 拉平到 84.3/84.3/84.2,即在最难的大位移档把鲁棒性补齐。
- 合成数据的光照/天气多样性关键:含光照天气的合成数据(84.3)显著优于真实 MegaDepth(69.9)和无光照天气的合成(63.5),说明跨域 gap 主要靠"多样视觉条件 + 几何监督"来弥合,而非单纯堆真实图。
亮点与洞察¶
- 把两个任务统一成一个:自定位求出 6-DoF 位姿后,目标定位只是"对任意像素射线投射 + 查深度",几乎零额外成本——一个配准问题同时干掉了 GNSS 依赖和激光测距硬件。
- 一对多策略很省:只渲染单张参考视图、让一群位姿假设共享它做精化,把"扩大搜索域"的成本从"多次渲染"转嫁到"CUDA 并行优化假设",这是双线程能跑实时的关键工程取舍。
- "对旋转更敏感"的观察直接落到采样设计:各向异性包围盒把采样预算偏向 pitch/yaw,是消融里大位移档增益最大的来源,这种"先看清域特性再设计采样"的思路可迁移到其他有强运动先验的配准任务。
- 几何监督 > 外观监督换泛化:损失只盯重投影误差、监督来自几何一致性,逼网络学扎根 3D 结构的特征,是零样本 sim-to-real 的根因,对其他需要跨域的定位/匹配任务有借鉴价值。
局限与展望¶
- 作者承认:极端视觉条件(如浓雾)或显著标定偏差下性能会退化。
- 强依赖高保真 3D 网格地图:只能用在已有 mesh 数据的区域,限制了地理覆盖范围;作者计划扩展到数字正射影像(DOM)和数字高程模型(DEM)这类更通用的表示,以覆盖荒野和城市。
- 自己看到的局限:所有真实评测的"零样本"都建立在合成数据足够真实的前提上,跨到与训练分布差异更大的相机/地形时是否仍稳,论文未充分压力测试;⚠️ 目标定位假设目标是"已知 2D 像素位置的点状物体",对大尺度/非刚体目标的几何定位误差如何,文中未深入。
- 第一帧仍需一个粗位姿先验(真实数据来自粗 GNSS/IMU 或真值),即"无 GNSS"是指运行期不依赖、而非完全零先验。
相关工作与启发¶
- vs VIO/SLAM(ORB-SLAM3 等):它们局部平滑但缺全局参考、长航时会漂移;PiLoT 每帧都对齐全局 3D 地图,从根上无漂移,代价是需要预建地图。
- vs 2D 卫星图配准:早期方法只能恢复 3-DoF(经纬度 + yaw)、受限于俯视假设;PiLoT 用 3D 地图恢复完整 6-DoF。
- vs 匹配类 Render2Loc(LoFTR/RoMaV2):它们精度相近但要稠密匹配 + PnP,机载上只有 0.8~2 FPS;PiLoT 用直接特征对齐 + 并行假设把速度拉到 28 FPS。
- vs 直接对齐 PixLoc:PixLoc 同为特征度量对齐但对初始化敏感、在无人机域泛化差;PiLoT 靠大规模地图扎根训练闭合航空域 gap,并用 JNGO 缓解初始化敏感。
评分¶
- 新颖性: ⭐⭐⭐⭐ 把自定位与目标定位统一成像素到 3D 配准、为不可能三角三条边各配一个组件,框架级创新清晰。
- 实验充分度: ⭐⭐⭐⭐ 合成 + 两个真实数据集、自定位与目标定位双任务、组件与训练数据双消融,零样本验证扎实;极端域外压力测试略缺。
- 写作质量: ⭐⭐⭐⭐ 三大贡献对应三条边的叙事线清楚,公式与图配合到位。
- 价值: ⭐⭐⭐⭐ GNSS 拒止下的实时无人机定位有强实用价值,且嵌入式平台实测可跑。