MegaDepth性能评估指南:RMSE与SDR指标计算完全教程
MegaDepth性能评估指南:RMSE与SDR指标计算完全教程
【免费下载链接】MegaDepthCode of single-view depth prediction algorithm on Internet Photos described in "MegaDepth: Learning Single-View Depth Prediction from Internet Photos, Z. Li and N. Snavely, CVPR 2018".项目地址: https://gitcode.com/gh_mirrors/me/MegaDepth
MegaDepth是一个基于单视图图像的深度预测算法,能够从互联网照片中学习深度估计。本指南将详细介绍如何使用MegaDepth项目中的工具计算RMSE(均方根误差)和SDR(相对深度排序误差)这两个关键性能指标,帮助你全面评估模型的深度预测能力。
准备工作:环境与数据
在开始性能评估前,请确保已正确安装MegaDepth项目。首先克隆仓库:
git clone https://gitcode.com/gh_mirrors/me/MegaDepth项目中提供了多个演示图像,这些图像可用于测试深度预测效果。例如下面这张罗马斗兽场的照片,后续将展示如何对这类场景进行深度评估:
图1:用于深度预测的罗马斗兽场图像,MegaDepth能从中估计出精确的深度信息
RMSE指标计算:量化深度误差
RMSE(Root Mean Square Error)是衡量预测深度与真实深度之间差异的常用指标,值越小表示预测越精确。
运行RMSE评估工具
MegaDepth提供了专门的RMSE计算脚本rmse_error_main.py,执行以下命令即可开始评估:
python rmse_error_main.py该脚本会加载测试数据集(包括风景和人像两种类型),并输出平均RMSE值。关键代码位于rmse_error_main.py的test函数中:
def test(model): total_loss = 0 toal_count = 0 model.switch_to_eval() # 处理风景类图像 for i, data in enumerate(test_dataset_l): stacked_img = data['img_1'] targets = data['target_1'] rmse_loss, count = model.evaluate_sc_inv(stacked_img, targets) total_loss += rmse_loss toal_count += count # 处理人像类图像 # ... 类似处理代码 ... print('average RMSE loss is', total_loss/float(toal_count))RMSE计算原理
RMSE的核心计算逻辑在models/HG_model.py的rmse_Loss方法中实现:
def rmse_Loss(self, log_prediction_d, mask, log_gt): N = torch.sum(mask) log_d_diff = log_prediction_d - log_gt log_d_diff = torch.mul(log_d_diff, mask) s1 = torch.sum(torch.pow(log_d_diff,2))/N s2 = torch.pow(torch.sum(log_d_diff),2)/(N*N) data_loss = torch.sqrt(s1 - s2) return data_loss该方法通过计算预测深度与真实深度的对数差异,再进行平方和平均运算,最终得到平方根作为RMSE值。
SDR指标计算:评估相对深度排序
SDR(Sorting Depth Ratio)衡量模型对图像中不同区域深度关系的判断能力,即模型能否正确判断两个点中哪个更近。
运行SDR评估工具
使用项目提供的SDR_compute.py脚本进行SDR指标评估:
python SDR_compute.py该脚本会输出三种SDR结果:Equal SDR(等深度误差)、Unequal SDR(不等深度误差)和总体SDR,如以下代码所示(来自SDR_compute.py):
print("=========================================================SDR Summary =====================") print("Equal SDR:\t" , float(error_list[0])/ float(total_list[0])) print("Unequal SDR:\t" , float(error_list[1])/ float(total_list[1])) print("SDR:\t" , float(error_list[2])/ float(total_list[2]))SDR计算原理
SDR的计算核心位于models/HG_model.py的computeSDR方法和batch_classify方法。系统会对图像中的点对进行深度比较:
def batch_classify(self, z_A_arr, z_B_arr, ground_truth ): threashold = 1.1 depth_ratio = torch.div(z_A_arr, z_B_arr) estimated_labels = torch.zeros(depth_ratio.size(0)) estimated_labels[depth_ratio > (threashold)] = 1 estimated_labels[depth_ratio < (1/threashold)] = -1 # 计算误差... return error_list, count_list通过设定阈值(1.1),系统将深度比值转换为分类标签,再与真实标签比较计算误差率。
结果分析与可视化
评估完成后,你可以对比不同场景下的性能指标。例如,城市夜景场景可能会有不同的深度预测难度:
图2:城市夜景图像,包含复杂的深度关系,可用于测试MegaDepth在复杂场景下的性能
一般来说:
- RMSE值低于0.3表示模型预测精度较高
- SDR值低于0.2表示模型对相对深度关系的判断较为准确
总结与进阶
通过rmse_error_main.py和SDR_compute.py两个工具,你可以全面评估MegaDepth模型的深度预测性能。这两个工具分别从绝对误差和相对关系两个维度提供了量化指标,帮助你了解模型在不同场景下的表现。
如果需要进一步优化性能,可以查看models/HG_model.py中的网络结构实现,或调整options/目录下的参数配置文件,探索不同参数对模型性能的影响。
【免费下载链接】MegaDepthCode of single-view depth prediction algorithm on Internet Photos described in "MegaDepth: Learning Single-View Depth Prediction from Internet Photos, Z. Li and N. Snavely, CVPR 2018".项目地址: https://gitcode.com/gh_mirrors/me/MegaDepth
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考