迈向更高质量的深度估计

题目: Towards High Quality Depoth Estimation

摘要

目前的深度估计从业人员大多follow the settings of specific backbone without thinking about why is that。本文将详细探索从数据(不同类型数据集加载、稳定性、预处理、数据生成),超参数设置(学习率、损失函数)到训练过程的不同技巧。通过在您的pipeline中检查这些设定,可能有助于提升自己训练模型,或是将深度估计用于downstream task的性能。

数据

图像位数问题

使用预训练框架尤其需要注意,先找到预训练数据集的图像格式。检查bit数、通道数等,一般是8bitRGB或者RGBA。使用脚本转换到对应格式后再执行推理,否则会出现推理结果混乱或者空白。这边以前写过文章处理,可以翻上去找找。

归一化问题

注意对输入、输出做归一化。尤其是在downstream task中,注意backbone的数据尺度。不同的backbone需要使用不同的归一化方式。目前已有的方式包括:max min、max、各种非线性映射、百分位数minmax。数据尺度不对,输出结果惨不忍睹。

超参数

在这里插入图片描述

训练时

出现NaN Loss

如果是用单目深度估计,一般来说多少会有的。可以自己统计一下试试,或者打印看看。

import torch
loss = torch.tensor([1.0, float('nan'), 2.0, float('nan')])
nan_count = torch.sum(torch.isnan(loss)).item()
print("NaN count:", nan_count)

三种方法:

  • 不要用 square root loss
  • 不要用 log-sigmoid function
  • 更换 variance computation
  • 使用更好的权值初始化方式,缩放至比较小的状态
  • 计算方差时候指定unbiased为否
import torch

def calculate_variance(x):
    if x.numel() == 0:
        return torch.tensor(float('nan'))
    else:
        return torch.var(x, unbiased=True)
x = torch.tensor([1, 2, 3, 4, 5])
variance = calculate_variance(x)
print("Variance:", variance)

验证时

裁切边缘

受限于镜头矫正,部分模型在边缘的准确率非常差。为了保证模型对比公平,一般会裁切掉边缘的画面。在下游任务使用时也得注意这个问题。

Reference

Analysis of NaN Divergence in Training Monocular Depth Estimation Model

https://pytorch.org/docs/stable/generated/torch.var.html
  • 32
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值