AI 开放平台

提供适配不同硬件平台的AI模型,探索更多端侧场景应用

基于AX650N的单目深度估计(Depth Anything)

爱芯元智: AX650N

背景

人类有两只眼睛来估计视觉环境的深度信息,但近些年越来越多的低成本机器人、VR/AR穿戴式设备却没有这样「豪华的配置」,往往只能靠单个摄像头或单张图像来估计深度。这个任务也被称为单目深度估计(Monocular Depth Estimation, MDE)。例如:

  • 机器人导航:在机器人和自动驾驶车辆中,单目深度估计可以帮助机器人或车辆理解周围环境的三维结构,从而进行路径规划、避障和精确定位;
  • 增强现实(AR)和虚拟现实(VR):在AR和VR应用中,准确的深度信息对于虚拟对象的放置、交互和视觉效果至关重要。单目深度估计可以提供必要的深度数据,以实现更自然和沉浸式的体验;
  • 计算机视觉:在计算机视觉任务中,如目标检测、图像分割和场景理解,深度信息可以提供额外的上下文,帮助算法更好地理解图像内容;
  • 3D重建:单目深度估计可以用于从单张2D图像重建3D场景,这对于文化遗产保护、城市规划和电影制作等领域非常有价值。

本篇文章“走马观花”地分享最近由香港大学、浙江大学、TikTok等机构的研究者提出的一种用于鲁棒单目深度估计的解决方案《Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data》。

同时也分享下在端侧芯片AX650N上部署效果。

Depth Anything

相比之前的工作,特别是在单目深度估计(MDE)领域,具有以下几个显著的优点:

  • 大规模未标记数据的利用:Depth Anything通过设计数据引擎收集和自动注释大规模的未标记数据,这在以往的研究中并不常见。这种策略显著扩大了数据集的规模和多样性,有助于减少模型在未知场景下的泛化误差;
  • 挑战性优化目标:通过在未标记图像上应用强扰动(如颜色失真和空间扭曲),模型被迫学习更加鲁棒的表示,这有助于提高模型在处理复杂和未知场景时的性能;
  • 语义先验的继承:Depth Anything采用了辅助特征对齐损失,使得模型能够从预训练的DINOv2编码器中继承丰富的语义信息。这种方法比传统的辅助语义分割任务更有效,因为它直接在特征空间中进行对齐,而不是在离散的类别空间中;
  • 零样本能力:Depth Anything在多个公共数据集和随机捕获的照片中展示了出色的零样本(zero-shot)深度估计能力,这表明模型能够在没有见过的数据上进行有效的深度预测;
  • 性能提升:通过微调预训练的编码器,Depth Anything在度量深度估计任务上取得了新的最先进(SOTA)结果,这表明其在实际应用中的潜力;
  • 多任务能力:Depth Anything的编码器不仅在深度估计任务上表现出色,还在语义分割任务上取得了优异的成绩,显示出其作为通用多任务编码器的潜力;
  • 模型泛化能力:论文中提到的模型在多种场景下(如低光照、复杂场景、雾天和超远距离)都表现出了良好的鲁棒性,这在以往的工作中并不常见。

总的来说,Depth Anything通过创新的数据策略和模型设计,特别是采用了DINOv2编码器进行特征提取。简单高效地提高了单目深度估计的准确性和鲁棒性,特别是在处理大规模未标记数据和未知场景时的性能。

depth-anything-perf

架构浅析

作者的工作利用标记和未标记的图像来促进更好的单目深度估计(MDE)。形式上,标记集和未标记集分别表示为Dl和Du。工作目标是从Dl学习教师模型T。然后,利用T为Du分配伪深度标签。最后,在标记集和伪标记集的组合上训练了一个学生模型S。如图提供了一个简短的说明,流水线包括如下。

  • 实线:标记的图像流;
  • 虚线:未标记的图像,特别强调大规模未标记图像的价值,S表示添加强扰动。为了使深度估计模型具有丰富的语义先验,在在线的学生模型和冻结的编码器之间强制执行辅助约束,保持语义能力。

    depth-anything-arch

作者在论文中,全面验证了Depth Anything模型在KITTI、NYUv2、Sintel、DDAD、ETH3D和DIODE上的零样本深度估计能力,并将其与最新MiDaS v3.1中的最佳DPT-BEiT_L-512模型进行了比较,效果优秀。

depth-anything-cmp

上述这些贡献共同推动了单目深度估计领域的发展,特别是在利用未标记数据和提高模型泛化能力方面。Depth Anything模型的提出,为解决实际应用中的深度估计问题提供了新的思路和方法。

接下来简单分享下该模型在爱芯派Pro(AX650N)上的部署效果。

上板示例

为了方便大家快速体验Depth Anything的效果,我们在Github上开源了对应的DEMO以及相关预编译好的NPU模型,方便大家快速体验。

DEMO包内容说明

文件名描述
ax_depth_anything基于AX650N的DEMO,NPU计算
depth_anything.jsonpulsar2 build依赖的配置文件
depth_anything_npu3_u16.axmodelNPU模型
depth_anything_vits14-sim.axmodelpulsar2 build依赖的输入ONNX模型
sacre_coeur1.jpg测试图片

上板运行

/opt/test # ./ax_depth_anything -m depth_anything_npu3_u16.axmodel -i sacre_coeur1.jpg
--------------------------------------
model file : install/bin/models/depth_anything_npu3_u16.axmodel
image file : sacre_coeur1.jpg
img_h, img_w : 518 518
--------------------------------------
Engine creating handle is done.
Engine creating context is done.
Engine get io info is done.
Engine alloc io is done.Engine push input is done.
--------------------------------------
post process cost time:9.76 ms
--------------------------------------
Repeat 1 times, avg time 56.66 ms, max_time 56.66 ms, min_time 56.66 ms
--------------------------------------
--------------------------------------

从上面可以看出,使用AX650N上的NPU运行Depth Anything耗时56 ms(目前采用的是新增的端到端U16策略,速度略低,精度有保障。U8精调版本年后更新,预计能超过30 FPS)。

输出结果

depth-anything-result

交互示例

基于ax-pipeline的实时视频处理DEMO

depth-anything-pipeline

结束语

随着Vision Transformer网络模型的快速发展,越来越多有趣的AI应用将逐渐从云端服务迁移到边缘侧设备和端侧设备。