ManyDepth位姿估计网络解析PoseCNN如何为多帧深度估计提供关键几何信息【免费下载链接】manydepth[CVPR 2021] Self-supervised depth estimation from short sequences项目地址: https://gitcode.com/gh_mirrors/ma/manydepthManyDepth 是 CVPR 2021 的自监督多帧单目深度估计项目其核心亮点正是**位姿估计网络PoseCNN**与代价体Cost Volume的巧妙结合无需任何深度或位姿标签仅靠单目视频训练就能在推理阶段利用短视频序列输出远超单帧方法的精细深度图。本文将用通俗易懂的方式拆解 ManyDepth 位姿估计网络的原理与结构看看它究竟如何为多帧深度估计提供关键的几何信息。 背景速览什么是自监督多帧深度估计传统深度估计依赖大量标注好的深度图采集成本极高。自监督方法则换了一条思路用视图合成当作监督信号——如果网络预测的深度和位姿足够准确那么把相邻帧重投影回当前帧时应当能完美复原当前帧的图像重建误差越小说明预测越准。ManyDepth 更进一步在推理时把多帧信息真正用起来它将连续几帧的特征与当前帧做匹配构建一个代价体让网络从不同深度假设下哪里匹配、哪里不匹配中推断每个像素的深度。而要把参考帧对齐到当前帧的视角就必须先知道两帧之间相机的运动——这正是位姿估计网络PoseCNN的用武之地。上图是 ManyDepth 的整体架构特征提取 →位姿估计→ 特征扭曲Warping→ 代价体构建 → 深度解码。可以看到位姿估计处于多帧融合流程的上游是后续一切几何运算的前提条件。 核心职责位姿估计网络如何输出 6 自由度相机位姿ManyDepth 的位姿估计网络由编码器 解码器两部分构成位姿编码器复用 ResNet 结构但把首层卷积改造为接收 6 通道输入两帧图像在通道维堆叠用来提取两帧之间的运动特征位姿解码器把高维特征压缩成 6 个数值——前 3 个是旋转轴角 axis-angle 表示后 3 个是平移translation合起来就是相机间的 6 自由度相对位姿。相关实现见 pose_cnn.py 与 pose_decoder.py。核心思想非常直观喂给网络两张连续帧它告诉你相机在这两帧之间动了多少——转了多少角度、朝哪个方向平移了多远。最后代码还会把这 6 个数值转换为 4×4 的变换矩阵见 layers.py方便后续做投影运算。 关键一步位姿如何驱动代价体构建理解了位姿的输出形式再看它如何落地成几何信息网络先在目标帧上划定一组假设深度平面例如在 0.1 米到 20 米之间均匀采样 96 个深度值借助相机内参和 PoseCNN 预测的位姿把每个假设深度对应的参考帧特征**反扭曲backward warp**到目标帧视角逐深度平面比较扭曲特征与目标帧特征的差异L1 距离差异最小的那个深度平面就是该像素最可能的深度。整个过程实现在 resnet_encoder.py 的match_features函数中。可以这样理解没有位姿参考帧特征就无法被搬运到目标帧视角代价体也就无从构建。位姿的准确性直接决定了多帧几何信息能否被正确融合。值得一提的还有自适应深度分箱adaptive depth binning由于自监督训练并不知道场景的真实尺度训练时会动态估计当前场景的深度范围让假设深度平面始终落在合理区间这也是 ManyDepth 能在真实场景稳定工作的关键细节。 自学成才位姿网络在自监督训练中的学习方式没有位姿标签PoseCNN 靠什么学习答案是重投影损失photometric reprojection loss用预测的深度和位姿把相邻帧重投影回目标帧得到重建图像让重建图像与真实目标帧做像素级对比结合 SSIM 与 L1 损失重建得越逼真说明深度与位姿预测得越准网络便沿着这个方向持续优化。训练流程见 trainer.py 的predict_poses函数位姿网络会为每一对相邻帧单独做一次前向传播再通过矩阵乘法把两两之间的位姿串联成任意两帧的相对位姿。此外训练后期还会冻结freeze位姿网络与单目教师网络可通过--freeze_teacher_epoch参数控制让多帧网络在固定的几何信息下专注学习训练更稳定。 效果验证位姿信息带来的精度飞跃多帧信息的价值最终体现在精度上。相比仅用单帧的 Monodepth2ManyDepth 在 KITTI、CityScapes 等数据集上取得了当时自监督单目训练方法的最优成绩尤其在车辆边缘、细长结构等单帧难以估计的区域深度图明显更锐利、更连贯。上图直观对比了同一场景下两者的深度图与误差图ManyDepth 在动态物体、遮挡区域等棘手位置的表现都更稳定红色错误区域明显更少。 快速上手如何亲自体验位姿估计与多帧深度想亲手跑一遍 PoseCNN 多帧深度估计克隆仓库即可git clone https://gitcode.com/gh_mirrors/ma/manydepth仓库自带一组行车记录仪测试序列下载预训练权重后用 test_simple.py 一条命令就能输出目标帧的深度图python -m manydepth.test_simple \ --target_image_path assets/test_sequence_target.jpg \ --source_image_path assets/test_sequence_source.jpg \ --intrinsics_json_path assets/test_sequence_intrinsics.json \ --model_path path/to/weights运行后生成的伪彩色深度图里近处车辆与远处建筑层次分明可以直观感受到多帧几何信息带来的增益。 总结ManyDepth 的**位姿估计网络PoseCNN**结构并不复杂却承担着为多帧深度估计提供关键几何信息的重任它预测相机运动、支撑代价体构建、驱动重投影损失让仅凭单目视频就能训练出高质量的多帧深度估计模型。理解了 PoseCNN也就掌握了 ManyDepth 最核心的几何逻辑。【免费下载链接】manydepth[CVPR 2021] Self-supervised depth estimation from short sequences项目地址: https://gitcode.com/gh_mirrors/ma/manydepth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考