☰
DIODE数据集深度解析:室内外稠密深度与法线估计的基准评测指南
2026/10/5 9:59:10 网站建设 项目流程

1. 为什么我盯上了DIODE这个数据集

做三维视觉这几年,我越来越觉得深度估计领域有个尴尬的局面:室内数据集和室外数据集各玩各的,而且各自都有明显短板。NYUv2太老,分辨率低,深度图还是Kinect那一代主动立体传感器的产物,噪声大得离谱;ScanNet虽然是室内重建的标杆,但它更偏SLAM,深度是融合出来的,用来训练单目深度估计总觉得不"干净";室外场景基本绕不开KITTI,可KITTI的深度由激光雷达投影而来,稀疏得很,天空、玻璃这类区域全是空洞,训练出来的模型一到无纹理区域就抓瞎。

所以当我看到DIODE这个名字的时候,第一反应是:这玩意儿到底能补上哪些坑?

DIODE的全称是Dense Indoor/Outdoor DEpth,论文地址在CVPR 2019,由普林斯顿、斯坦福等机构的研究者放出。它的定位非常明确:提供一个同时覆盖室内和室外场景、深度密集且精度极高、还额外带平面法线标注的RGB-D数据集。你可能觉得"RGB-D数据集不是烂大街了吗",但DIODE有几个戳中我痛点的特征:激光扫描仪采集的高质量深度、不成对室内外场景、以及训练/验证/测试的规范划分。这几个特征叠加在一起,让我觉得它特别适合用来验证单目深度估计和平面法线估计的跨域泛化能力。

这篇博文会按我的实际使用路径来写,从数据集的动机和内容拆解,到地面真值是怎么生成的,再到我拿它训练模型的完整流程,最后是踩坑记录。如果你正在做单目深度估计、法线估计、3D重建,或者想找一个相对"干净"的基准来评估自己的模型,这篇文章应该能帮你省不少时间。

先给个结论:DIODE不是一个大而全的数据集,它的样本量不算夸张,但它的价值在于"精度"和"多样性"的平衡。你拿它做预训练可能不如某些大规模数据集来得资源充足,但拿它做基准评测、做跨域泛化测试,是非常合适的。

2. DIODE到底解决了哪些老数据集的顽疾

要理解DIODE的价值,得先看看它出生之前大家手里都是些什么货。

2.1 室内数据集的精度天花板

室内深度估计最常用的NYUv2,深度是用微软Kinect v1采集的。Kinect v1是结构光方案,对光照敏感,在阳光直射或者黑色吸光物体面前基本失效,深度图自带系统性噪声和边缘漂移。而且NYUv2的深度和RGB存在配准误差,很多像素对不齐,你训练的时候还要额外做个对齐处理。

后来ScanNet用Kinect融合出更稠密的深度,但那是用TSDF融合出来的"重建结果",虽然看起来完整,却丢失了原始测量信息,边缘会出现"抹平"现象。对单目深度估计来说,这种"看起来好但实际是重建过的"标签,反而会把模型教坏——模型会学着预测"重建后的平滑深度",而不是"物理世界的真实深度"。

2.2 室外数据集的稀疏与不完整

室外场景,大家惯用KITTI。KITTI的深度是Velodyne激光雷达扫出来的,一帧只有大约十几万个点,投影到图像上覆盖率不到30%。而且远处的点越来越稀疏,反射弱的物体(黑色车漆、玻璃)几乎没有点。你用这种标签训练模型,只能对"激光雷达能看到的区域"做监督,空洞区域只能放任不管。

这就导致一个很实际的问题:你在KITTI上训练的模型,到了无激光点覆盖的天空、玻璃幕墙、水面这些区域,深度预测完全是"放飞自我"。模型根本没有见过这些区域的地面真值,你怎么能指望它输出合理的深度。

2.3 室内外分离带来的跨域鸿沟

更头疼的是,几乎没有哪个数据集能把室内和室外场景统一起来。你训练一个室内模型,拿到室外一测,光照、尺度、物体类别全变了,性能断崖式下降;反过来也一样。这种"场景域差异"其实比传感器差异更致命,因为模型在训练时根本没有学习到"室外的世界长什么样"。

DIODE的做法很直接:我就是要把室内和室外塞进同一个数据集,而且深度都用激光扫描仪采集,精度一致,标注协议一致。这样你在上面训练模型,至少能保证室内外数据分布一致,至于模型能不能泛化,那就是模型的问题了,不是数据集的问题。

2.4 平面法线:很多任务的隐形基础

还有一个容易被忽略的痛点:当时几乎没有公开的、带高质量平面法线标注的大规模数据集。法线是理解三维几何的重要中间表示,但手工标注法线几乎不可能,只能靠深度图推。而如果深度图本身噪声大,推出来的法线也一团糟。DIODE的深度是激光扫描的,噪声极低,从它推导出来的法线标注质量自然高出一个档次。

所以DIODE本质上不是简单地把RGB和深度拼在一起,它是在"传感器精度"和"标注丰富度"两个维度上同时做了提升。这个定位让它和NYUv2、ScanNet、KITTI等老字号拉开了差距。

数据集场景深度传感器深度质量稀疏度法线标注室内外统一
NYUv2室内Kinect v1低,噪声大较稠密无否
ScanNet室内Kinect 融合中,过度平滑稠密无否
KITTI室外Velodyne高但不全稀疏无否
DIODE室内+室外Faro激光扫描高稠密有是

3. DIODE数据集的内容拆解与文件格式踩点

DIODE刚发布那会儿下载需要填表申请,现在流程顺畅多了。我拿到手的目录结构大概长这样:

DIODE/ train/ indoor/ scene_00001/ scan_001/ colors.png depth.tiff normal.tiff mask.png config.json ... outdoor/ ... val/ indoor/ outdoor/

3.1 RGB图与深度图的组织方式

每个样本的核心是三个文件:RGB图(colors.png)、深度图(depth.tiff)、法线图(normal.tiff),外加一个mask.png和config.json。

RGB图是标准的JPG转存PNG,尺寸通常是1024x768,画质足够用来提取特征。深度图是单通道的TIFF,像素值直接就是物理距离,单位米,用float32存。注意,这里不是像NYUv2那样把深度缩放到0-255或0-1,而是原始米制值,你读取之后不需要反归一化,直接拿来算loss就行。这一点很关键,很多刚上手的朋友习惯性地把图像归一化到0-1,结果深度全乱了。

mask.png表示像素是否有效。在物体边缘、深度跳变处、激光扫描不到的远距离区域,mask会置为0。训练时你这个位置如果算loss,网络会被不存在的深度值误导。所以读数据时务必要把mask乘进去,或者在loss里做Masked Reduction。

config.json里存的是相机内参和每张图像对应的姿态信息。通常包括fx、fy、cx、cy这类参数。你可能觉得这些参数可有可无,但如果你要做投影、做点云融合、做相机坐标系与世界坐标系的转换,内参就是命根子。

3.2 法线图TIF怎么读、值是什么

法线图也是TIFF,三个通道分别是法线向量的x、y、z分量,同样是float32。读取之后每个像素代表该位置表面的单位法线向量,分量的值域在-1到1之间。

我在PIL和OpenCV之间对比过,PIL的Image.open对多通道float TIFF支持不太好,OpenCV的cv2.imread倒是能读,但默认会把通道顺序变成BGR,如果你需要按RGB理解法线分量,记得转换。另外我发现用tifffile库读取最稳,它能把float32的TIFF原样读出来,不会自作主张做缩放或类型转换。

法线的坐标系是相机坐标系,z轴指向相机正前方,x轴向右,y轴向下。做可视化的时候,通常会把法线从[-1,1]映射到[0,1]再输出成图像,否则屏幕上看就是一片黑的。

3.3 场景多样性分布到底怎么样

DIODE的训练集大约有两万多张图像,验证集约670张。这个数量级跟ImageNet那种动辄百万的数据集没法比,但DIODE的重点不是堆量,而是堆多样性。室内场景覆盖会议室、卧室、教室、走廊、咖啡厅、实验室等;室外场景覆盖沙漠、雪地、森林、城市街道、郊外公路等。

我个人特别看重室外场景的多样性。KITTI基本就是德国卡尔街头的固定路线,场景单一到让人崩溃;DIODE的室外场景是天南海北攒出来的,不同天气、不同光照、不同植被覆盖,这对模型的泛化能力是实打实的考验。

还有个细节:DIODE的室内和室外样本并不是成对的——也就是说,不是同一个场景既拍室内又拍室外,而是"室内是一批场景,室外是另一批场景"。这个设计可以避免模型看到同一个物理场景的室内外版本而产生隐式关联。

3.4 测试集为什么不公开

DIODE的测试集不随包发布,官方预留了一部分数据作为测试集,要求你训练完后把预测结果打包发给作者,由作者在官方测试集上评估后返回分数。

这个机制在学术界挺常见,CSRNet、一些医学影像竞赛都有类似做法。好处是防止建模者用测试集反复调参、导致过拟合到测试分布;坏处是你没法离线快速验证,每次想要一个官方分数都得发邮件。

如果你是正经做对比实验,建议先按照验证集标准流程把评估pipeline跑通,最后要发结果了再去找作者要测试集通道。如果只是想练手、做自用评测,验证集已经够用了,没必要折腾测试集。

4. 地面真值是怎么来的:激光扫描与法线生成管线

这一个章节我花了不少时间去扒资料,因为只有搞清楚地面真值的生成方式,你才知道哪些误差是数据本身的,哪些是你的模型带来的。

4.1 室内和室外的扫描策略

DIODE的深度是由Faro Focus 3D激光扫描仪采集的。这种设备属于相位式激光扫描仪,精度在毫米级,远高于Kinect和一般的ToF深度相机。室内场景通常架几个扫描站,每个站扫描360度全景,然后用标靶球做多站配准,把不同站点的点云融合成一个完整的室内三维模型。室外因为范围大、遮挡多,需要的站点更多,甚至在部分区域使用无人机挂载扫描仪或者结合地面站做补扫。

我理解这种方式就像"测绘级的三维重建"——不是消费级传感器随手一拍,而是用工程级设备仔仔细细地把空间量出来。所以DIODE的深度图在平面区域上会非常平滑,在边缘处也不会出现微软Kinect那种"光晕"式伪影。

当然,激光扫描也不是万能的。玻璃、镜面、高反光表面依然会丢点;超远距离(比如几十米外的天空)依然没有深度;极细的物体(电线、树枝)在扫描分辨率不足时也会变成噪声点。这些物理限制在mask.png里会体现出来。

4.2 深度图如何从点云变成像素图

扫描得到的是三维点云,要变成像素对齐的深度图,需要把点云投影到相机坐标系。DIODE的做法是:先用扫描仪内部参数把点云转换到相机坐标系,再用相机内参将三维点投影到图像平面,对每个像素取最近点的深度值。

这个过程听起来简单,但里面有个难点是遮挡处理。激光扫描仪能看到的位置,未必能被拍摄RGB的相机看到——因为两个传感器的位置不完全重合,物体边缘会互相遮挡。DIODE对这类遮挡像素的处理是直接置为invalid,宁缺毋滥。这个"宁缺毋滥"的设计我很欣赏,它避免了很多数据集里"深度与RGB边缘错位"的脏标签。

4.3 平面法线标注是独立生成的、还是从深度推的

法线标注不能靠人手工画,因为人无法逐像素判断三维朝向。DIODE的做法是基于已经射出来的高精度深度图,用局部平面拟合的方式计算每个像素的切平面,然后取切平面的法线方向。

具体做法是:对每个像素,取它周围一个邻域内的三维点,用最小二乘法拟合一个平面,平面的法向量就是这个像素的法线。邻域窗口太小,噪声敏感;窗口太大,边缘会被拉平。DIODE在窗口选择和边缘保护上做了权衡,生成后再配合人工抽检,确保法线标注质量。

这意味着法线图并不是完全独立的"另一个传感器信号",而是从深度派生出来的。不过因为深度足够干净,派生的法线依然吊打从消费级深度图推出来的法线。

4.4 坐标系的坑你需要现在记住

法线是在相机坐标系下的,深度是在相机坐标系下的,但点云生成的原始坐标是世界坐标系。如果你做的是单目深度估计,相机的位姿是未知的,用到的深度和法线都在相机坐标系里,此时直接用即可。

但如果你做的是多视角重建、SLAM、或者需要跨视角一致性的任务,请务必先读config.json里面的外参,把法线和深度转换到共享的世界坐标系再做后续处理。我见过不止一个项目在法线评估时忽略了坐标变换,结果法线误差虚高,怎么调loss都不见降——不是模型问题,是评估坐标系弄错了。

5. 拿DIODE训练单目深度估计:我的完整pipeline

接下来是我实际用DIODE训练单目深度估计模型的过程,可能不是最先进的方案,但胜在稳定可复现。更适合想快速验证自己想法、又不想在数据预处理上耗太多时间的同行参考。

5.1 数据加载与预处理

我习惯用PyTorch的Dataset类做数据封装。每次迭代读取一个样本的RGB、深度、法线、mask,然后做统一处理:

第一步,把RGB和深度都缩放到统一尺寸。DIODE原始是1024x768,直接丢进模型太吃显存。我一般缩放到256x192或320x240。注意缩放时不要只做插值,深度的插值最好用最近邻或双线性加mask处理,否则物体边缘的深度会被平均到前景背景之间,产生"中间值"这种不存在的深度。

第二步,把深度取log,这在单目深度估计里几乎是标配操作。因为深度的标度范围很大,室内0.5米到10米,室外几米到上百米,线性损失会被远处的大数值主导,取log后整个尺度空间更均匀,有利于训练。预测时再exp回来就行。

第三步,对RGB做normalize,用ImageNet的均值和标准差。深度不需要normalize,但要注意mask掉无效像素。

核心的读取代码大概长这样:

import cv2 import numpy as np import tifffile def load_diode_sample(rgb_path, depth_path, normal_path, mask_path): rgb = cv2.imread(rgb_path) rgb = cv2.cvtColor(rgb, cv2.COLOR_BGR2RGB) depth = tifffile.imread(depth_path).astype(np.float32) normal = tifffile.imread(normal_path).astype(np.float32) mask = cv2.imread(mask_path, cv2.IMREAD_UNCHANGED) mask = (mask > 0).astype(np.float32) return rgb, depth, normal, mask

这里尤其注意,depth和normal不要用cv2.imread去读,除非你确定cv2版本对float TIFF的处理符合预期。tifffile库是更安全的选择,读出来的数组维度是(H,W)和(H,W,3)。

5.2 网络结构与loss选择

我在DIODE上验证过两类网络:

一类是经典的单目深度估计网络,编码器用ResNet50或更轻量的EfficientNet,解码器用多尺度特征融合模块,最后输出单通道深度。loss我用尺度不变损失(Scale-Invariant Loss,简写SILog)加一点点L1作为辅助。

另一类是同时预测深度和法线的多任务网络,共享编码器,分两个解码头。这个结构很有意思——深度和法线本身就是同一几何表面的两种表达,共享编码器能让两个任务互相正则化。室内外场景对深度尺度不敏感的时候,法线通过提供局部几何约束,可以显著提升深度边缘的锐度。

loss方面,深度用SILog,法线用角度余弦距离配合mask,两个loss相加作为总损失。

epoch我一般设置50到80个。DIODE样本量不大,训练一轮很快,几小时到一天就能看到效果。不需要像ImageNet那样跑个把月。

5.3 训练策略与超参数调优

学习率我习惯用1e-4起步,配合余弦退火。batch size根据显存来定,如果输入尺寸是256x192,ResNet50编码器,batch size 32在单张24G显卡上跑得动。

数据增强方面,我建议适度使用。随机水平翻转可以放心用,但随机裁切要小心——深度的分布和图像的构图强相关,裁切过于激进会导致尺度混乱。color jitter在RGB上可以用一点,但强度别太大,否则法线监督和深度监督的意义会削弱。

最重要的一个训练策略是:室内外样本要按比例混合。我试过两种极端方案,一种是纯室内训练、室外评估,结果RMSE直接爆炸;另一种是随机混合训练,室内外精度都能在接受范围内。混合比例上,室内和室外各占50%起步,室外占比略高一点更稳,因为室外的深度尺度大、样本方差高,需要更多样本让模型学会这个尺度范围。

5.4 评估指标:你该看哪些数

DIODE的官方评估关注两类指标:深度和法线。

深度指标常用:绝对相对误差(AbsRel)、均方根误差(RMSE)、阈值准确率(如a1、a2、a3)。AbsRel对近距离敏感,RMSE对远距离的大误差敏感,两个搭配着看比较全面。

法线指标常用:均值角度误差、中位数角度误差、RMSE角度误差,以及11.25度/22.5度/30度阈值下的准确率。这三个阈值对应的语义是:误差小于11.25度属于优秀,小于22.5度属于合格,小于30度勉强能用于下游任务。

我自己跑完一个模型后的验证集表现大概是:AbsRel在0.15左右,RMSE在0.8左右,法线约50%像素在11.25度阈值内。这个数字不算顶尖,但考虑到我用的backbone并不大,而且没有做任何后处理,效果已经够我开始下一步实验了。

5.5 为什么我不建议直接在DIODE上预训练再微调

预训练再微调几乎是现在的标配做法,但在DIODE上要注意一个问题:DIODE的样本量不算大,预训练效果不见得比在更大的数据集上训练更好。我尝试过先在DIODE上预训练然后迁移到NYUv2,效果没有比直接从头训练在NYUv2上好。

反过来,先在NYUv2上预训练再在DIODE上微调,效果倒是有提升。这说明DIODE的定位更像"精调/基准评估"而非"大而全的预训练源"。如果你想追求最优效果,建议用MiDaS这类在混合大规模数据上训练的权重做初始化,再在DIODE上微调,效果会比较理想。

6. 平面法线估计任务:DIODE最值钱的部分

如果只把DIODE当深度数据集用,我觉得有点浪费。它的平面法线标注才是真正稀缺的资源。

6.1 为什么法线标注这么难找

三维视觉需要很多种标注,深度标注虽然贵但好歹有传感器可以生成——激光雷达、ToF相机都能出深度。但法线标注呢?没有哪个传感器能直接输出法线图。法线只能通过对深度求导、对点云拟合平面来得到,而这个计算过程本身就对深度噪声极其敏感。你在Kinect的深度图上硬算法线,得到的图会有大量椒盐噪声,根本无法用于训练。

所以一个数据集只要法线标注质量高,它的价值就翻了一倍。DIODE的法线不是随手算出来的,而是在高质量激光深度上做了局部平面拟合、再经过滤波和人工抽检的产物。拿它做监督信号,训练出来的法线估计网络才真正学得到几何规律。

6.2 法线估计的评估到底怎么算

其实法线估计的loss设计有很多讲究。最简单的做法是对预测法线和真实法线做点积,让点积尽量接近1,等价于最小化两向量夹角的余弦loss。但cosine loss有个缺陷:当两个法线方向完全相反时(差180度),点积是-1,Loss是2,但这在物理上是少见的情况。实际场景里更常见的是预测法线在平面上打了个小角度偏差,cosine loss梯度够用,但不够锐利。

我看很多论文会用加权的cosine loss,比如对平坦区域加大权重、对边缘区域降低权重,因为边缘处的法线本身有歧义,怎么预测都容易被惩罚。DIODE数据集没有给这个权重图,需要自己做边缘检测来生成。

评估时还需要特别注意mask。DIODE的法线图有大量无效像素,这些像素你在评估时必须剔除。

6.3 法线与深度联合训练的实际收益

我在实验中比较了"纯深度监督"和"深度加双任务监督"两种方案。单看深度指标,双任务监督并不一定能稳赢纯深度监督,甚至某些epoch下纯深度监督的RMSE还更低。但如果看法线指标,双任务监督显著提升了法线预测质量,而法线质量的提升会直接反馈到深度边缘和平面区域的平滑性上。

这个现象的底层逻辑是:深度中的平面区域,在纯深度监督下只能让输出深度尽量接近标签,但网络没有显式的"平面一致性"约束;加入法线监督后,网络被强制执行法线对齐,而法线对齐在几何上就等价于深度平面的方向一致,于是深度图在平坦区域变得更加干净,边缘也更加锐利。

所以我现在的做法是:深度和法线一起输出、一起监督,尽管模型比单任务版本多一点参数量,但综合收益是正的。

6.4 法线特征还能做哪些下游应用

法线估计不只是"看起来好看"的中间结果,它可以直接用在下游任务上:

  • 三维重建:法线能帮助点云补全和曲面重建,常规的深度图在物体表面不平整时会产生大量噪声法线,导致Marching Cubes重建出的曲面坑坑洼洼;在深度之外额外加上法线作为正则项,可以显著提升重建表面的平滑度。
  • 平面检测:室内场景的墙面、桌面、天花板都是大平面,平面法线聚类后可以快速找出这些结构。做AR应用时,平面检测是放置虚拟物体的基础。
  • 光照估计:法线方向配合RGB像素亮度,可以反推环境光照方向和强度,这在虚拟物体插入真实场景时特别有用。
  • 抓取规划:机器人的机械臂抓取物体时,需要知道接触面的法线方向来调整抓手姿态,否则抓取容易打滑。

7. 实测中的踩坑清单,建议直接收藏

这部分是我实际使用DIODE时遇到的问题,有些坑在官方文档里没有详细说明,花了我不少时间排查。

7.1 TIFF文件读取的坑

我第一次用OpenCV直接读depth.tiff时,读出来的深度值范围完全不对,整个深度图偏暗,最大值只有几米。后来才发现是OpenCV在读取16位或32位TIFF时自动做了某种缩放,把实际值映射到了0-255显示范围内。

所以请务必区分"图像显示"和"数据读取"这两个概念。如果在Jupyter Notebook里直接用plt.imshow(depth)看效果,会看到全黑图,这并不代表数据有问题,而是你没做可视化映射。正确的检查方式是:

import numpy as np import tifffile import matplotlib.pyplot as plt depth = tifffile.imread('depth.tiff') print('min:', depth.min(), 'max:', depth.max()) plt.imshow(depth, cmap='turbo', vmin=0, vmax=10)

可视化归可视化,训练时直接拿原始float数据去计算loss即可。

7.2 无效像素mask的坑

DIODE的mask文件用0和1表示像素是否有有效深度。但法线的无效像素和深度的无效像素并不完全一致。有些像素深度有效、但法线因为边缘邻域不足被判为无效;反过来也有法线有效、深度因超出传感器范围被判无效的情况。

这意味着你在做多任务训练时,深度loss和法线loss要各用各的mask,不能共用一个全局mask。我之前图省事共用一个mask,结果法线任务在边缘像素上一直被错误监督,法线准确率始终上不去。

7.3 深度尺度与室内外分布的坑

室内深度的数量级是0.5到10米,室外是1米到100米以上。如果你用线性loss直接训练混合数据,模型会本能地偏向学习"把深度预测得偏大",因为这样能降低室外样本的损失。这就是为什么我前面强调要么做log变换、要么使用尺度不变损失。

另外,如果你想只做室内评估,建议在训练时适当增加室内样本的采样权重。比如室内室外比例设置为6:4,而不是自然地1:1。这本质上是一个数据重采样问题,不光是DIODE,任何混合域数据集都会遇到。

7.4 相机内参不是理所当然的中心居中

DIODE的config.json里给出的fx、fy、cx、cy是真实的相机内参,cx和cy不一定正好是图像宽高的一半。如果你在代码里硬编码crop中心、或者假设cx=512、cy=384,在做坐标映射时就会产生系统性偏差。

我建议把config.json里的内参解析后存成tensor,在数据加载阶段就随样本一起送入模型或评估函数。这样既可以支持后续的3D投影任务,也方便你做数据增强时的内参联动变换。

7.5 关于测试集提交的流程提醒

DIODE官方测试集需要发邮件提交,我实际走了一遍流程发现并不复杂。你需要在官网填一个表格,写明自己的单位、模型类型、预测结果格式,他们会回复你测试集的使用方式和提交规范。预测结果通常需要打包成指定格式,逐图像提交深度预测值和法线预测值。

注意:提交时需要保证预测结果的分辨率和原图一致(1024x768),如果我在训练时用的是低分辨率输入,预测后需要上采样回原始尺寸。我在第一次提交时忽略了这一点,结果还是用原始分辨率重新推理了一遍。

7.6 场景级过拟合的隐患

DIODE的训练集场景数量有限,模型很容易记住特定场景的背景纹理,而不是真正学会推断几何。我的一个实验里,模型在训练集上的AbsRel低到0.08,但验证集上却高达0.2,这个gap明显是过拟合。

缓解办法:一是加强数据增强,在RGB上加更强的光照扰动;二是在训练时随机mask掉输入图像的一部分区域,迫使模型依赖上下文信息而不是局部纹理匹配;三是坚持用室内外混合的策略,让模型不能依赖单一场景的纹理分布。

8. 在DIODE之外,我的一些延伸思考

DIODE这个数据集给我的最大启发是:数据集的价值不取决于规模,而取决于"这个数据让模型学明白了什么"。两万张图和两百万张图相比,虽然数量上有数量级差异,但两万张经过精心标注、覆盖室内外、深度和法线成对出现的数据,有时候反而比两百万张粗糙采集的数据更能说明问题。

最近两三年,单目深度估计领域的预训练数据集越来越多,比如MiDaS混合了多个数据集、Depth Anything也走了大规模数据路线。DIODE在这种趋势下略显"小而美",但它在cross-domain评估中的作用依然无可替代。我至今依然会拿DIODE的验证集来检验一个模型有没有真正理解三维几何,而不是只记住训练集的分布。

另外我注意到,DIODE的室外场景对很多自动驾驶模型是很好的"未知环境压力测试"。你在校园道路、城市街区数据上训练出来的深度模型,直接拿到沙漠、雪地、森林这种DIODE室外场景上测一测,泛化能力的底牌立刻暴露。

最后给想用DIODE的同行一个建议:不要只把它当成一个"下载完就跑个模型"的标准数据集,建议你花点时间把法线可视化出来,和深度图叠加着看一遍。当我第一次把DIODE某室内场景的深度和法线做成3D点云渲染出来的时候,那种"标签竟然能这么干净"的感受,远远比任何数字指标都更有冲击力。

这也是我为什么愿意花这么多篇幅去分析它——在一个标签质量参差不齐的时代,DIODE提供了一个难得的"校准基准"。你拿它训练出来的模型,不一定是最能刷分的,但一定是最能反映"真实世界几何误差"的。对我这种需要把模型部署到实际场景里的工程师来说,这一点比什么都重要。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询