0

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

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

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

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

在此处输入图像描述

[训练结果_2]-->>[5]

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

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)
4

1 回答 1

0

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

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

于 2020-11-02T12:16:00.987 回答