如何使用掩蔽法在 KITTI 数据集上训练单幅图像深度估计

Posted

技术标签:

【中文标题】如何使用掩蔽法在 KITTI 数据集上训练单幅图像深度估计【英文标题】:How to train on single image depth estimation on KITTI dataset with masking method 【发布时间】:2021-01-09 07:10:10 【问题描述】:

我正在研究深度学习(监督学习),以从单目图像估计深度图像。 并且数据集目前使用的是 KITTI 数据。 RGB 图像(输入图像)用于 KITTI Raw 数据,来自following link 的数据用于ground-truth。

在通过设计一个简单的encoder-decoder网络来学习模型的过程中,效果不是很好,所以正在做各种尝试。

在寻找各种方法时,我发现groundtruth只能通过mask来学习有效区域,因为有很多无效区域,即不能使用的值,如下图所示。

所以,我是通过屏蔽学习的,但我很好奇为什么这个结果不断出现。

这是我的代码训练部分。 我该如何解决这个问题。

for epoch in range(num_epoch):
model.train() ### train ###
for batch_idx, samples in enumerate(tqdm(train_loader)):
    x_train = samples['RGB'].to(device)
    y_train = samples['groundtruth'].to(device)

    pred_depth = model.forward(x_train)
    valid_mask = y_train != 0     #### Here is masking 

    valid_gt_depth = y_train[valid_mask]
    valid_pred_depth = pred_depth[valid_mask]

    loss = loss_RMSE(valid_pred_depth, valid_gt_depth)

【问题讨论】:

我已经有一个多月没有解决同样的问题了。如果你知道,请帮忙。 @prost “直接添加图片”是什么意思?我的实验结果真的很糟糕,你有什么办法解决这个问题吗? 对我来说,现在你的帖子看起来好多了。 【参考方案1】:

据我了解,您正在尝试从 RGB 图像作为输入来估计深度。这是一个不适定问题,因为同一个输入图像可以投影到多个合理的深度值。您需要集成某些技术来估计 RGB 图像的准确深度,而不是简单地在 RGB 图像与其对应的深度图像之间进行 L1 或 L2 损失。

我建议您阅读一些关于从单个图像估计深度的论文,例如:Depth Map Prediction from a Single Image using a Multi-Scale Deep Network,他们使用网络首先估计给定图像的全局结构,然后使用第二个网络来细化局部场景信息。他们没有像您那样采用简单的 RMSE 损失,而是使用尺度不变的误差函数来测量点之间的关系。

【讨论】:

以上是关于如何使用掩蔽法在 KITTI 数据集上训练单幅图像深度估计的主要内容,如果未能解决你的问题,请参考以下文章

如何在 LFW 数据集上训练 CNN?

深度学习笔记:利用预训练模型之特征提取训练小数据集上的图像分类器

组合两个预训练模型的输出(在不同数据集上训练)并使用某种形式的二元分类器来预测图像

)-在ImageNet数据集上训练AlexNet

我想在 UCF_CC_50 数据集上训练 CSRNet 模型,该数据集的图像总数为 50。并面临类似的问题

YOLOv8已至,精度大涨!教你如何在自定义数据集上训练它