Frequency-Aware Self-Supervised Monocular Depth Estimation——论文笔记

本文探讨了自监督深度估计算法中的光度重构误差问题,尤其是在高频区域的不确定性。为解决这一问题,文章提出了Ambiguity-Masking和Auto-Blur策略。Ambiguity-Masking通过梯度权重因子减少高频区域的歧义,而Auto-Blur则使用低通滤波器平滑边缘,改善损失函数的反馈。实验表明这两种方法能有效提升深度估计的准确性。
部署运行你感兴趣的模型镜像

参考代码:freq-aware-depth

1. 概述

介绍:在自监督深度估计算法中采用光度重构误差作为约束函数,但是这个约束函数却是存在不足的,也就是损失的大小在某些区域不能真实反应深度预测的误差大小,如图像中的高频区域,从而给整体算法Loss带来歧义(深度估计误差于光度重构误差的比例不正相关)。对于这个问题文章提出了两种策略去缓解高频区域处不确定性带来的歧义:1)Ambiguity-Masking:通过感知图像中的高频信息分布(图像梯度变化),给光度重构误差增加一个权重因子,从而缓解高频信息处Loss的不确定性。2)Auto-Blur:在图像梯度的指引下设计一个低通的高斯滤波器,用于平滑图像中的边缘区域,使得损失更能真实反馈重构的质量。

在自监督深度估计中,对图像中物体的边缘细节放大,并与对应的Loss分布可视化得到下图:
在这里插入图片描述
在上图(b)中可以看到loss倾向于在边缘区域产生更大的损失,这也表达了边缘处的损失并不能很好反应实际深度预测的质量。将图像中目标对应边缘进行放大得到图(c),可以看到由于分辨率的问题,其在边缘位置处的一些像素并不是能很准确进行区域划分,这也就导致了对应高频区域上loss存在歧义。这篇文章也对此提出了两点对应的策略用于缓解该问题。

2. 方法设计

2.1 整体pipeline

文章的整体pipeline见下图所示:
在这里插入图片描述
从上图可以看出文章在原本自监督深度估计方法的基础上,增加Ambiguity-Masking用于缓解高频区域loss歧义带来的影响,增加Auto-Blur缓解图像高频区域带来的损失跳变和歧义。

这里令网络 t t t时刻估计出的深度为 D t D_t Dt,到时刻 t + n t+n t+n的位姿关系为 T t → t + n T_{t\rightarrow t+n} Ttt+n,对应的相机内参为 K K K,则图像的冲投影采样描述为:
⊗ = p r o j ( D t , T t → t + n , K ) \otimes=proj(D_t,T_{t\rightarrow t+n},K) =proj(Dt,Ttt+n,K)
对于图像在X和Y方向上梯度描述为:
∇ u ± ( i , j ) = I ( i , j ) − I ( i ± 1 , j ) \nabla_{u\pm}(i,j)=I(i,j)-I(i\pm1,j) u±(i,j)=I(i,j)I(i±1,j)
∇ v ± ( i , j ) = I ( i , j ) − I ( i , j ± 1 ) \nabla_{v\pm}(i,j)=I(i,j)-I(i,j\pm1) v±(i,j)=I(i,j)I(i,j±1)
在Auto_Blur中使用两个方向的梯度:
∇ ± ( i , j ) = ∣ ∣ ∇ u ± ( i , j ) , ∇ v ± ( i , j ) ∣ ∣ 2 \nabla_{\pm}(i,j)=||\nabla_{u\pm}(i,j),\nabla_{v\pm}(i,j)||_2 ±(i,j)=∣∣u±(i,j),v±(i,j)2
在Ambiguity-Masking中使用合成梯度:
∇ ( i , j ) = ∣ ∣ ∇ u + ( i , j ) − ∇ u − ( i , j ) 2 , ∇ v + ( i , j ) − ∇ v − ( i , j ) 2 ∣ ∣ 2 \nabla(i,j)=||\frac{\nabla_{u+}(i,j)-\nabla_{u-}(i,j)}{2},\frac{\nabla_{v+}(i,j)-\nabla_{v-}(i,j)}{2}||_2 (i,j)=∣∣2u+(i,j)u(i,j),2v+(i,j)v(i,j)2

2.2 Ambiguity-Masking

记使用的梯度为 F t \mathcal{F}_t Ft,使用二值掩膜 u u u表示在水平和垂直方向上梯度相反的高频区域:
u = [ ∇ u + ⋅ ∇ u − < 0   ∨   ∇ v + ⋅ ∇ v − < 0 ] , [ ⋅ ] i s   I v e r s o n   b r a c k e t u=[\nabla_{u+}\cdot\nabla_{u-}\lt0\ \vee\ \nabla_{v+}\cdot\nabla_{v-}\lt0], [\cdot] is\ Iverson\ bracket u=[u+u<0  v+v<0],[]is Iverson bracket
之后得到在时刻 t t t下的不确定性图:
A t = u ⊙ F t \mathcal{A}_t=u\odot\mathcal{F}_t At=uFt
对于在时刻 t + n t+n t+n重构得到的图像其不确性图经过采样之后描述为:
A ˉ t + n = ⟨ A t + n , ⊗ t + n ⟩ \bar{\mathcal{A}}_{t+n}=\langle\mathcal{A}_{t+n},\otimes_{t+n}\rangle Aˉt+n=At+n,t+n
最后将上述两者取最大值得到最后的不确定性图:
A t m a x = m a x ( A ˉ t + n , A t ) \mathcal{A}^{max}_t=max(\bar{\mathcal{A}}_{t+n},\mathcal{A}_t) Atmax=max(Aˉt+n,At)
之后得到于光度重构误差加权的权重二值mask:
A t p e = [ A t m a x < δ ] \mathcal{A}^{pe}_t=[\mathcal{A}^{max}_t\lt\delta] Atpe=[Atmax<δ]
其中, δ = 0.3 \delta=0.3 δ=0.3。同时可以使用下面指数的形式计算权重:
A t p e = e − γ A t m a x ,   γ = 3 \mathcal{A}^{pe}_t=e^{-\gamma\mathcal{A}^{max}_t},\ \gamma=3 Atpe=eγAtmax, γ=3

2.3 Auto_Blur

记使用的梯度也为 F t \mathcal{F}_t Ft,则定义高频掩膜(阈值 λ = 0.2 \lambda=0.2 λ=0.2):
M i s − h f − p i x e l ( p ) = [ F t ( p ) > λ ] \mathcal{M}_{is-hf-pixel}(p)=[\mathcal{F}_t(p)\gt\lambda] Mishfpixel(p)=[Ft(p)>λ]
依据上述高频掩膜定义,在大小为 s = 9 s=9 s=9的区域上确定高频区域(阈值为 η = 60 \eta=60 η=60):
M i s − h f − p i x e l a v g ( p ) = 1 s ∗ s ∑ q ∈ N s ∗ s ( p ) M i s − h f − p i x e l ( q ) \mathcal{M}_{is-hf-pixel}^{avg}(p)=\frac{1}{s*s}\sum_{q\in N_{s*s}(p)}\mathcal{M}_{is-hf-pixel}(q) Mishfpixelavg(p)=ss1qNss(p)Mishfpixel(q)
M i s − h f − a r e a ( p ) = [ M i s − h f − p i x e l a v g ( p ) > η % ] \mathcal{M}_{is-hf-area}(p)=[\mathcal{M}_{is-hf-pixel}^{avg}(p)\gt\eta\%] Mishfarea(p)=[Mishfpixelavg(p)>η%]
对于一张图像的高斯模糊,其数学表达定义为:
I t g b = ∑ q ∈ N ( p ) w g b ( q ) I t ( q ) I_t^{gb}=\sum_{q\in N(p)}w^{gb}(q)I_t(q) Itgb=qN(p)wgb(q)It(q)
w g b ( q ) = 1 2 π σ e − Δ x 2 + Δ y 2 2 σ 2 w^{gb}(q)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{\Delta_x^2+\Delta_y^2}{2\sigma^2}} wgb(q)=2π σ1e2σ2Δx2+Δy2
则添加图像高频信息因子,得到新的滤波函数:
I t a b ( p ) = w b l u r ( p ) I t g b ( p ) + ( 1 − w b l u r ( p ) ) I t ( p ) I_t^{ab}(p)=w_{blur}(p)I_t^{gb}(p)+(1-w_{blur}(p))I_t(p) Itab(p)=wblur(p)Itgb(p)+(1wblur(p))It(p)
其中的加权因子为:
w b l u r ( p ) = M i s − h f − p i x e l a v g ( p ) M i s − h f − a r e a ( p ) w_{blur}(p)=\mathcal{M}_{is-hf-pixel}^{avg}(p)\mathcal{M}_{is-hf-area}(p) wblur(p)=Mishfpixelavg(p)Mishfarea(p)
添加Auto-Blur之后深度误差曲线趋于于全监督曲线接近,达到对高频噪声的抑制作用,见下图所示:
在这里插入图片描述

2.4 消融实验

上述两种高频信息处理策略对性能带来的影响:
在这里插入图片描述
其它一些超参数带来的影响:
在这里插入图片描述

3. 实验结果

在现有方法上带来的性能提升:
在这里插入图片描述
不同数据集下均表明文章方法的有效性:
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

Frequency - Aware Transformer 在学习型图像压缩中具有重要的应用。学习型图像压缩旨在利用深度学习技术来实现高效的图像压缩,而 Frequency - Aware Transformer 为这一领域带来了新的思路和方法。 Transformer 架构本身具有强大的建模长距离依赖关系的能力,在自然语言处理等领域取得了巨大成功。在图像压缩中,Frequency - Aware Transformer 能够关注图像的频率信息。图像的频率信息包含了图像的纹理、细节等特征,不同频率成分对图像的视觉感知和压缩性能有着不同的影响。 Frequency - Aware Transformer 可以通过对图像的频率成分进行分析和处理,更好地捕捉图像的特征分布。例如,在低频部分,它可以更有效地保留图像的整体结构和主要信息;在高频部分,它能够对图像的细节和纹理进行精细建模,从而在压缩过程中根据不同频率成分的重要性进行有针对性的处理,提高压缩效率和重建图像的质量。 在编码阶段,Frequency - Aware Transformer 可以将图像转换到频率域,对频率系数进行编码。通过学习频率系数之间的关系,它能够生成更紧凑的表示,减少数据量。在解码阶段,利用学到的频率信息和模型参数,将编码后的信息还原为图像。 以下是一个简单的伪代码示例,展示 Frequency - Aware Transformer 在图像压缩中的大致流程: ```python import torch import torch.nn as nn # 定义 Frequency - Aware Transformer 模块 class FrequencyAwareTransformer(nn.Module): def __init__(self, d_model, nhead, num_layers): super(FrequencyAwareTransformer, self).__init__() self.transformer_encoder = nn.TransformerEncoder( nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead), num_layers=num_layers ) def forward(self, x): # 假设 x 是图像的频率系数 encoded = self.transformer_encoder(x) return encoded # 模拟图像压缩过程 def image_compression(image): # 将图像转换到频率域(这里简化为示例) frequency_coefficients = torch.fft.fft2(image) # 调整频率系数的形状以适应 Transformer 输入 frequency_coefficients = frequency_coefficients.view(-1, frequency_coefficients.size(-1)) # 初始化 Frequency - Aware Transformer fat = FrequencyAwareTransformer(d_model=256, nhead=8, num_layers=6) # 编码频率系数 encoded_coefficients = fat(frequency_coefficients) # 这里可以添加量化和熵编码步骤来进一步压缩数据 # 为了简化,省略这些步骤 return encoded_coefficients # 示例图像 image = torch.randn(256, 256) compressed = image_compression(image) print(compressed.shape) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值