ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深度估计 DenseDepth 笔记

2021-05-30 15:03:19  阅读:340  来源: 互联网

标签:pred image SSIM 笔记 depth 深度 true DenseDepth hat


参考代码:DenseDepth
论文名称:High Quality Monocular Depth Estimation via Transfer Learning

1. 概述

导读:这篇文章是使用深度监督的方式进行训练的,文章使用在ImageNet上训练过的DenseNet-169作为编码器,之后使用shortcut链接和上采样模块(上采样操作+2个卷积层)作为解码器,从而构建一个U型的网络结构。在此基础上使用输入的深度GT作为回归目标,从而实现网络的训练。

在下图中可以将文章的方法与DRON方法(分段回归)进行比较,文章的方法更加自然和实际。
在这里插入图片描述

2. 方法设计

2.1 网络结构

文章的网络结构比较简单,是一个带shortcut链接的U型网络结构:
在这里插入图片描述
编码器是DenseNet-169(pretrained on ImageNet),解码器由上采样模块(2x上采样+2个不带BN的卷积)构成,之后在解码器的最后一个上采样模块上预测对应的深度图。

2.2 损失函数

预测得到的深度图表示为 y ^ \hat{y} y^​,对应的标注GT表示为 y y y,那么预测与回归之间的监督关系被描述为:
L ( y , y ^ ) = λ L d e p t h ( y , y ^ ) + L g r a d ( y , y ^ ) + L S S I M ( ( y , y ^ ) ) L(y,\hat{y})=\lambda L_{depth}(y,\hat{y})+L_{grad}(y,\hat{y})+L_{SSIM}((y,\hat{y})) L(y,y^​)=λLdepth​(y,y^​)+Lgrad​(y,y^​)+LSSIM​((y,y^​))
其中, λ = 0.1 \lambda=0.1 λ=0.1。对于深度本身的监督使用L1损失:
L d e p t h ( y , y ^ ) = 1 n ∑ p n ∣ y p − y ^ p ∣ L_{depth}(y,\hat{y})=\frac{1}{n}\sum_{p}^n|y_p-\hat{y}_p| Ldepth​(y,y^​)=n1​p∑n​∣yp​−y^​p​∣
在此基础上引入梯度损失:
L g r a d ( y , y ^ ) = 1 n ∑ p n ∣ g x ( y p , y ^ p ) ∣ + ∣ g y ( y p , y ^ p ) ∣ L_{grad}(y,\hat{y})=\frac{1}{n}\sum_p^n|g_x(y_p,\hat{y}_p)|+|g_y(y_p,\hat{y}_p)| Lgrad​(y,y^​)=n1​p∑n​∣gx​(yp​,y^​p​)∣+∣gy​(yp​,y^​p​)∣
边界平滑损失:
L S S I M ( y , y ^ ) = 1 − S S I M ( y , y ^ ) 2 L_{SSIM}(y,\hat{y})=\frac{1-SSIM(y,\hat{y})}{2} LSSIM​(y,y^​)=21−SSIM(y,y^​)​
使用上面的损失函数在深度很大的时候会带来整体损失函数增大很多,因此文章使用场景的最大深度 m m m对需要回归的深度信息进行归一化操作,从而训练的GT被描述为:
y = m y y=\frac{m}{y} y=ym​

对应部分的损失实现为:

# https://github.com/ialhashim/DenseDepth/blob/master/loss.py
def depth_loss_function(y_true, y_pred, theta=0.1, maxDepthVal=1000.0/10.0):
    
    # Point-wise depth
    l_depth = K.mean(K.abs(y_pred - y_true), axis=-1)

    # Edges
    dy_true, dx_true = tf.image.image_gradients(y_true)
    dy_pred, dx_pred = tf.image.image_gradients(y_pred)
    l_edges = K.mean(K.abs(dy_pred - dy_true) + K.abs(dx_pred - dx_true), axis=-1)

    # Structural similarity (SSIM) index
    l_ssim = K.clip((1 - tf.image.ssim(y_true, y_pred, maxDepthVal)) * 0.5, 0, 1)

    # Weights
    w1 = 1.0
    w2 = 1.0
    w3 = theta

    return (w1 * l_ssim) + (w2 * K.mean(l_edges)) + (w3 * K.mean(l_depth))

文章方法得到的结果对比:
在这里插入图片描述

标签:pred,image,SSIM,笔记,depth,深度,true,DenseDepth,hat
来源: https://blog.csdn.net/m_buddy/article/details/117395196

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有