恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

单目视频无监督学习:从几何结构到深度估计与视觉里程计

  • 首页
  • 资讯中心
  • /
  • 单目视频无监督学习:从几何结构到深度估计与视觉里程计

相关资讯

COMSOL弯月结构BIC仿真:斜入射线偏振与SBC边界条件设置要点 2026/10/13 2:00:41
SSVEP脑机接口代码详解:从预处理到CCA分类器的工程实践 2026/10/13 2:00:40
Wan2.1视频生成提速:FP8量化、注意力替换与CUDA Graph实战解析 2026/10/13 2:00:40

最新资讯

Bresenham画圆算法:整数微分与八分对称的嵌入式图形实现
Agent沙箱设计实战:轻量级隔离环境搭建与四大边界控制
管家婆数据库自动备份:SQL Server维护计划向导配置指南
117-杨逢昌:班组巡检台账分类统计高频问题,驱动车间月度优化迭代
VS2019编译Ceres库的ABI对齐实战指南
基于UNSW-NB15数据集的网络攻击检测:机器学习全流程实战

今日推荐

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析
CAN总线错误处理机制深度解析:从位错误到Bus Off的硬件级调试

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

单目视频无监督学习:从几何结构到深度估计与视觉里程计

发布时间:2026/10/13 2:00:41
单目视频无监督学习:从几何结构到深度估计与视觉里程计 做三维视觉研究的人应该对“单目视频无监督学习”这几个词很敏感。我自己的体会是刚接触这类工作的时候最大的困惑在于没有深度标注没有相机位姿标注就用一台单目相机对着场景拍一段视频凭什么让神经网络学会判断远近、知道自己动了多少这个题目的答案其实就藏在了标题里的“结构”二字上。单目视频本身确实没有标签但它天然携带一套由物理成像规则决定的几何结构——同一个真实场景点在不同帧里的像素位置不同、邻近像素的深度不会完全跳变、相机运动与画面变化之间存在严格约束关系。这些结构不需要人工标注视频拍出来就已经在了。这个项目解决的核心问题就是如何把这些几何结构变成可微的监督信号把一段段普通视频直接“喂”成训练集让网络在完全没有标注的情况下学会深度感知与相机自运动估计。放到2018年11月这个时间节点看这套思路踩在了一个重要拐点上大家开始从昂贵的真值标注转向从几何中“白嫖”监督信号而它给后续无监督三维感知的研究铺了一条很关键的路。这篇文章我会沿着“到底在解决什么问题、几何一致性怎么变成监督信号、具体怎么实现、训练时会踩哪些坑”这条线展开适合想理解无监督深度估计与视觉里程计范式的同学参考。1. 先搞懂标题单目视频、无监督、结构这三个词的分量1.1 单目视频难在哪单目视频就是一台普通摄像头拍的连续图像帧序列。跟双目相机或者RGB-D传感器不一样单目视频在某一帧里只记录了一个视角的二维投影信息物体距离的线索全部被“压扁”到图像亮度、边缘、遮挡关系这些间接信号里了。人类两只眼睛靠视差感受深度司机单眼也能凭借运动中物体相对运动来判断距离这说明单目视频里确实存在深度线索只是比较隐蔽。对于深度学习来说难的不是“能不能提取线索”而是“用什么作为标准答案去教网络”。如果有真值深度图问题就退化为一个标准的监督学习回归任务。但真值深度图的获取成本非常高激光雷达设备贵标定麻烦而且不同场景、不同天气、不同路况下要重新采集。相比之下马路上随便一台行车记录仪拍出来的视频一天就能积累大量数据。如何把这些廉价视频用起来就是无监督单目深度估计存在的根本理由。1.2 无监督学习不是没有监督无监督这个词其实有迷惑性。这套方法并不是完全没有人监督而是把监督信号从“人工标注”换成了“输入数据内部的自洽关系”。视频里有一个非常硬的自洽关系如果网络估算出了当前帧里每个像素的深度又估算出了相机在相邻帧之间的运动那么就可以把前一帧的像素投影到当前帧理论上应该得到一个和真实当前帧几乎一样的重建图像。如果重建对不上说明深度或者位姿估计错了如果重建完全对得上说明这套“深度位姿”的解释是符合视频几何结构的。网络训练的目标就变成了不断最小化这种图像重建误差。换句话说输入视频本身就是老师网络自己和自己相互校验这就是自监督或者说伪监督的本质。这种监督信号虽然不如人工真值精确但它随视频数据源源不断覆盖面可以做得很大泛化到新场景的能力往往比监督模型更稳。1.3 “结构”在这里具体指什么标题里的structure不是一个抽象口号它指代了几类可量化的几何信息。第一类是时序结构相邻帧之间同一个静态场景点应当满足极线约束相机的旋转和平移决定了像素点移动的方向和大小。第二类是空间结构真实场景一般由光滑表面组成物体内部深度变化是平缓的只有在物体边缘处深度才会发生跳变这个先验可以用边缘感知的平滑约束表达。第三类是投影结构针孔相机模型下深度、视差、相机运动之间存在严格的三维-二维投影关系这是一个可微的数学公式能够把网络输出的深度和位姿串成一个完整的重建链路。有传统运动恢复结构背景的人可能会好奇既然几何公式就能解出结构和运动为什么还要神经网络这恰恰是理解这篇工作价值点的关键——它不是扔掉几何而是把几何公式嵌进网络训练过程当作约束用深度网络的强表达能力补足传统几何方法在低纹理、重复纹理、大弱纹理区域稳定性差的短板。结构在这里就是连接学习与几何的一座桥。2. 免费监督信号几何一致性是怎么把视频变成训练集的2.1 视图合成一句话讲清楚自监督循环如果要用一句话概括整套训练框架我会说让网络学会“用一个画面解释另一个画面”。具体展开是这样的对于视频中的某一帧作为目标帧取它前后的相邻帧作为源帧。网络用一个深度子网络预测目标帧每个像素的深度用一个位姿子网络预测目标帧和源帧之间的相对相机运动。有了深度和位姿就能在源帧上采样像素颜色把它们映射到目标帧的位置合成一张伪目标帧。这个合成过程在图形学里叫视图合成在深度学习里通常用可微的双线性采样实现从而让误差梯度能从像素值一路反传到深度图和位姿上。光度误差计算的是目标帧真实像素和合成图像像素的差异用逐像素颜色差加结构相似度加权混合。如果网络预测的深度和位姿完全准确合成图像应该和目标帧高度一致。任何不一致都被当作“预测错了”的信号反馈给网络。这个过程实际上是在告诉网络你给出的深度和位姿解释必须能够重建出和真实视频一致的画面否则就不是一个符合几何结构的解释。这个循环的妙处在于它对网络施加了极其严格的自洽约束而且对数据集没有任何标注要求只要视频连续帧间有足够的重叠视野。2.2 三种常用的结构先验光靠光度误差训练大胆的做法往往会失败因为单纯像素颜色差异存在大量病态解比如一堵白墙在任意深度下重建出来都差不多。所以实际有效的方法是叠加结构先验。第一类是边缘感知平滑约束它利用的是场景空间连续性。具体做法是在深度图的梯度项前面乘一个基于输入图像梯度的衰减系数——图像边缘区域衰减系数小允许深度跳变平坦区域衰减系数大强制深度平滑。我通常在逆深度空间做这个约束因为逆深度在均匀场景中变化更线性数值稳定性更好这也是在这类任务中普遍采用的固化技巧。平滑约束看起来朴素却直接决定了深度图的质量权重设置一定要小心调太大深度图会糊成一片调太小深度图又显得粗糙噪点多。第二类是几何重投影约束它对应视频帧间时序结构。深度和位姿不是两个独立变量它们共同决定像素映射关系。同一个深度值配上不同的位姿投影到目标帧的位置完全不同。网络可以试图用错误的深度配合错误的位姿来“凑”出对的光度损失几何重投影约束通过强制深度和位姿联合重建来打掉这类简并解。实际工程中这个约束就体现在前向重投影加反向重投影的一致性上可以递归地将多帧图像统一到同一个坐标框架下做校验。第三类是多尺度结构约束。直接用原始分辨率算光度损失梯度感受野有限低纹理大块区域误差难以收敛。常见的做法是构造图像金字塔在每个尺度上都计算深度图、位姿和光度损失。低分辨率尺度提供大范围的粗糙结构高分辨率尺度提供细节边缘多尺度叠加既加速收敛又提升深度图的整体一致性。这种思路在传统光流估计里同样普遍属于把成熟经验迁到深度学习训练中的典型操作。2.3 运动物体和遮挡如何被结构约束处理单目视频里不全是静态场景经过的车辆、行人都会破坏二维像素运动与相机运动之间的简单对应关系。如果强行对动态物体像素施加静态几何重建约束网络会在深度图上把动态物体“摊”到背景里或者糊成一片造成深度估计错误。结构约束并不能自动把动态物体识别出来需要额外机制。一种常用手段是让网络额外预测一个像素级的运动物体掩膜掩膜置信度高的区域不参与光度损失计算相当于显式告诉网络“这里是违反刚性结构的不要用几何去解释它。” 更优雅的做法是对每个像素同时尝试用深度驱动的静态重投影结果和直接学习的光流结果来重建图像哪个重建误差更小就把哪个当作监督信号这个“取最小值”的思路可以在不需要显式掩膜的情况下自动躲开运动物体区域。我在实际使用中两者的效果差异并不悬殊显式掩膜在运动物体较多、较复杂的数据上更稳定而求最小值方案则少了一个需要调权重、容易过拟合的辅助头实现更简洁尤其适合作为初始版本跑通全流程。3. 从零搭建一套单目视频无监督深度估计系统3.1 数据准备与预处理数据准备的核心是构建训练样本对。我用的方案是从长视频序列中按固定间隔采样连续三个片段当前帧作为目标帧两侧各取一帧作为源帧。采样间隔不能太大否则相邻帧之间视野重叠太少重建难度陡增也不能太小否则运动量不足光度损失区分度不高网络学不出有效信息。一个稳妥的经验是先把相机内参矩阵提前标定好并固定住训练时直接把内参输入位姿和深度子网络让整个过程在已知投影参数的条件下工作。如果内参未知又想训练也可以把内参矩阵设计成可学习参数收敛后能恢复出大概的焦距和主点位置但训练稳定性会明显下降初学者不建议一上来就这样做。预处理环节最重要的是去除运动模糊严重的帧、曝光异常帧以及相邻帧内容完全不重叠的过渡段。无监督训练对输入图像质量比监督训练敏感得多因为监督信号本身来自像素一致性图像质量差等于监督信号本身就带噪声。我常用一个非常简单但有效的筛选逻辑计算相邻帧的光流幅度直方图如果平均像素位移太小或者有效像素比例太低就把这个样本对丢弃等于人为保证了训练样本的运动覆盖范围。3.2 网络设计深度子网络和位姿子网络整套框架两个子网络各司其职。深度子网络输入单帧图像输出同分辨率的逆深度图。编码器采用带残差连接的卷积网络逐级下采样解码器通过上采样与跳跃连接逐步恢复高分辨率输出。输出层的激活函数非常关键常用softplus或sigmoid再缩放确保逆深度始终为正数因为物理上深度不可能是负数。为什么不直接回归深度而是回归逆深度这和成像的几何特性有关相同绝对误差对近处物体和远处物体的影响完全不同逆深度变化曲线更平缓数值稳定性更好而且逆深度在远距离上趋向于零用有界激活函数也更容易拟合。位姿子网络输入的是目标帧和源帧的通道拼接张量输出一个六维相对位姿向量前三维是旋转的轴角表示后三维是平移向量。旋转用轴角表示而不是旋转矩阵因为轴角维度低、约束少网络更容易回归。平移一般取单位方向向量因为单目估计本质上存在尺度不确定性网络无法同时确定真实平移距离和真实深度绝对值只能估计它们的相对比例关系。这种尺度模糊是单目几何的固有问题靠网络结构无法根除只能通过损失设计和归一化手段保持训练过程中的一致性。3.3 损失函数光度项、平滑项、结构项损失函数是整套训练的核心通常按权重组合三部分。光度项用颜色差和结构相似度加权混合颜色差取L1范数比L2更鲁棒因为L2会过度惩罚图像中少数高亮像素的偏差拉崩整个训练结构相似度则用来保护图像纹理和局部亮度结构防止生成图像看起来平滑但细节丢失。实际计算时对彩色图在三个通道上平均然后以0.85:0.15的比例把结构相似度损失和L1损失混合这个比例是实践中很稳的默认值可以直接作为开局参数。平滑项放在逆深度图上使用输入图像梯度作衰减公式表达为平滑权重乘以逆深度梯度的平方。我习惯对四个方向的梯度同时计算因为只算横向和纵向会在对角线方向留下明显的锯齿深度伪影。结构项则是一类可选的校正项用于把深度和位姿推算出来的三维一致性再拉回到同一参考框架下比如让静态区域的深度与位姿投影深度保持一致。它对精度提升有帮助但会引入更多超参数如果只是起步阶段我建议先固定结构项权重为零把光度项和平滑项调稳后再逐步添加。3.4 训练参数与多尺度技巧训练参数这块我常用的基础配置是先固定分辨率在长边640、短边192左右批量大小为4优化器用Adam初始学习率设为1E-4每20个训练轮次衰减0.5倍。训练轮次一般在50到100之间具体取决于数据集规模和计算资源。超过这个幅度之后损失曲线通常已经进入平台期再训练容易把网络推到过度自信的局部最优产生背景深度塌缩一类的问题。多尺度技巧是提升训练稳定性的重要手段。我把输入图像和深度图同时构建成四层金字塔从最粗糙尺度到最精细尺度分别计算光度损失然后全部累加。粗糙尺度梯度平滑、覆盖范围大帮助网络快速建立全局结构精细尺度提供高频细节让深度边缘更锐利。多尺度训练对低纹理区域的效果尤其明显因为大块平坦区域的像素匹配在同尺度下存在严重多解性但下采样后视野变大匹配歧义被显著削弱。实际效果上加多尺度损失后深度图的整体轮廓完整度通常会有肉眼可辨的提升。4. 实验怎么看指标、可视化与代表性结果4.1 量化指标到底在比什么做深度估计实验总是免不了面对一堆指标缩写。绝对相对误差把每个像素的深度预测误差除以真值深度再平均它的含义是相对误差比例越接近零越好平方相对误差对大误差更敏感少数离群点就会把它拉得很高均方根误差和它的对数变体衡量绝对误差水平阈值准确率统计预测深度与真值深度比值落在某个倍数范围内的像素比例一般报告1.25、1.25平方、1.25立方三档这个指标更直观地反映深度比例正确性比前两类指标更接近人眼判断。这套无监督方法在公开驾驶数据集上的表现大致能达到监督方法的七到八成精度。这个差距要理性看待尤其要注意的是无监督方法完全没看任何真值标注还能在泛化性上占据优势。用别的数据集做跨域测试时监督方法经常出现系统性偏差而无监督模型因为只依赖光度一致性对场景风格的依赖更小反而更耐迁移。我没有引用具体数字因为不同数据切分、不同图像分辨率下结果差别很大读者真正要记住的是排序逻辑而非绝对值。4.2 可视化深度图怎么判断好坏定量指标之外深度图可视化是最直接的质量判断手段。好的深度图应该具备三个特征整体轮廓完整近处物体和远处天空背景层次分明边缘清晰物体边界与图像颜色边缘对齐平坦区域平滑干净没有雪花状噪声和条带伪影。我常用的可视化方式是把逆深度图用对数映射转为伪彩色图显示因为原始逆深度值分布严重偏向零附近直接线性映射会丢失近处细节对数映射能把近处和远处的层次都清楚地展示出来。如果深度图和真值图做差额可视化边缘处有细线状残差是正常现象因为真值深度传感器和相机之间有标定误差物体边缘在空间上是跳跃的。真正需要警惕的是大面积块状残差尤其是图像纹理很弱的区域这说明平滑约束权重过大或者多尺度约束缺失深度图被“抹平”了。另一个常见问题是深度图整体偏灰、动态范围小通常是输出层被归一化到过窄范围导致的可以把输出激活函数的缩放范围调大。4.3 什么样的场景最容易翻车单目无监督深度估计有三个显著弱点。第一个是场景中大量出现动态物体车流、行人成群穿过画面结构约束在这些像素上完全失效处理不好就会把车辆深度错误地吸收到背景平面上。第二个是重复纹理与弱纹理环境比如同色系路面、大面积白墙、隧道走廊像素匹配多解性极其严重方便起见可以用“白墙挑战”这个说法去理解——无论网络预测这面墙在哪个深度重建出来的颜色都一样如果没有平滑约束帮助网络根本不知道墙到底离自己多远。第三个是光照突变比如进出隧道的一瞬间帧与帧之间的整体亮度变化会直接破坏光度一致性让网络误以为有巨大的伪深度运动。针对这些坑实际做法上至少要准备三手方案运动物体多的时候把最小值重投影机制或显式掩膜打开弱纹理场景提高平滑约束权重同时把多尺度金字塔层数加一层光照突变场景对图像做逐帧亮度归一化或者在采样时尽量避开临时光照剧变的片段。这三个方面每一条都能单独拎出来做详细实验但掌握好最基本的手段已经能避免九成的低质量训练结果。5. 实操踩坑记录训练无监督深度估计的九宗罪5.1 常见问题一览表在实际训练这套框架的过程中我踩过不少坑也有很多同行问过相似的问题。这里把出现频率最高的几类问题整理成一个速查表训练遇到异常时可以按表排查。现象可能原因处理手段训练几百步损失纹丝不动输入图像没有归一化到合理范围或学习率过大导致震荡检查图像预处理和初始学习率降到1E-5试跑几百步深度图一片糊平滑权重太大或分辨率过低把平滑权重降为原来的五分之一提高输入分辨率深度图出现大面积近处黑斑动态物体干扰光度损失把物体深度拉向背景打开最小值重投影机制或增加显式运动掩膜训练损失下降但深度图明显有错误层次相机内参设置错误焦距方向与真实值偏差大逐项校验内参标定结果尤其在广角相机上同一序列不同帧深度尺度跳变尺度不确定性问题在批训练中表达得不够一致固定同一批样本的深度归一化方式或在损失中加入跨帧深度一致性图像边缘处深度出现描边伪影平滑约束的梯度方向计算不全对角线方向无约束对四个方向梯度都计算平滑损失光度损失曲线震荡剧烈数据里有曝光或运动模糊异常帧用平均光流幅度做样本筛选剔除异常样本对表格只是排查入口还要结合损失曲线和重建图的具体形态做判断。大多数情况下先看重建图像是否清晰再决定动哪个权重比盲目调参高效得多。5.2 从损失曲线到深度图的排查顺序我的排查流程基本固定遇到训练效果不好先不看深度图先看光度损失曲线。如果训练收敛但重建图像里目标帧和合成帧之间仍然存在大面积错位首先怀疑位姿子网络没有训好停掉平滑项、纯用光度项跑到前期看重建图是否能在静态区域接近真实画面。如果重建图没问题再打开平滑项观察深度图连续性和物体边界逐个因素叠加定位问题出在哪一个环节。很多人在开始阶段直接看最终深度图被大量伪影干扰容易误判模型整体性能。实际上分量排查法非常有效把平滑权重设为0多尺度只保留最粗糙一层这样训练一轮得到的就是一个“结构雏形图”虽然粗糙但轮廓正确。然后一层层加回细节模块每一步都保留可对比的中间模型出现质量倒退时就锁定是某一步引入的问题。这种从粗到细的训练排查方式比一次性堆满所有技巧更快可靠。5.3 我保留的几个实用小技巧最后分享几个我在多轮实战后沉淀下来的技巧算是对整套训练流程的补充。第一个技巧是给训练数据做简单在线增强例如随机水平翻转和轻微颜色抖动。水平翻转天然提供了位姿俯仰角的正负对称样本对位姿子网络收敛有明显帮助颜色抖动则提升网络对光照变化的鲁棒性。但注意不要做重度几何变形比如随机裁剪缩放那会破坏相机内参的一致假设反而让光度损失失真。第二个技巧是周期性地保存完整重建图不只是深度图。重建图和原图叠在一起看能立刻暴露深度估计错误的具体来源——是运动物体遮挡还是低纹理区域匹配失败还是位姿漂移。把这些失败样本按类别存下来等于给自己建立了一个定制化的class-specific错误集后期调优时目标清楚很多。第三个技巧关于学习率衰减策略。无监督深度估计的损失面非常不平坦固定的学习率在后期容易出现平台期。我会在前三分之一训练轮次保持较大学习率快速进入合理区域然后用余弦式衰减把学习率慢慢压到很低最后几百个轮次再冻结学习率做微调。这个策略比均匀指数衰减在实际训练中更容易获得稳定的深度图。第四个技巧是如果数据中有大段静止画面务必剔除。相机完全静止时相邻帧之间没有视差光度损失无法约束深度网络只能靠平滑项“猜”出全图均值长时间混合这种样本会显著拉低整体深度结构质量。我自己踩过这个坑后会在数据筛选阶段用图像差分方差做一道过滤静止帧比例从源头压到最低。这套无监督单目视频方法的框架能力边界我很清楚它解决的是“没有真值也能学深度和运动”的问题但并不意味着可以零成本替代一切有监督方案。实际使用时我更倾向于把它当作深度估计与视觉里程计落地的前置模块先跑通无监督基线把几何结构这条链路打通再根据具体任务注入少量真值或者语义标签做领域微调等于是用更少的人工标注拿到一个基础性能不错的模型。如果你正要上手这个方向我建议按这篇文章的顺序先把数据筛选、网络结构、损失权重三件事做到及格再去尝试更花哨的结构变体。扎实的基线永远比复杂的魔改更能说明问题。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号