ICRA 2023 | 首个联合暗光增强和深度估计的自监督方法STEPS

news2025/2/24 0:14:03

原文链接:https://www.techbeat.net/article-info?id=4629
作者:郑宇鹏

本文中,我们提出了STEPS,第一个自监督框架来联合学习图像增强和夜间深度估计的方法。它可以同时训练图像增强网络和深度估计网络,并利用了图像增强的中间量生成了一个像素级mask来抑制过曝和欠曝区域。通过大量的实验研究表明,我们的方法在这两种区域取得了更好的效果。此外,我们提出了一个增强到显示风格的仿真数据集CRALA-EPE,它以低成本、稠密的ground truth为室外场景的深度估计任务提供了更多的可能。
在这里插入图片描述

论文链接:
https://arxiv.org/abs/2302.01334
代码链接:
https://github.com/ucaszyp/STEPS

一、 简介

近年来,基于图像的自监督深度估计方法不仅所需的硬件成本低,而且不需要真值的标注,因此受到了广泛的关注。该类方法本质上依赖于相邻帧光度一致性的假设,通过合成图和目标图的光度误差进行模型的训练。

然而在夜间环境下,图像中包含了大量的欠曝和过曝区域,它们在相邻帧之间有较明显的差异,同时掩盖了对应区域的有效信息,如图1(a)的第一行所示。我们在nuScenes数据集的测试集上评测了基线方法RNW预测的深度值和真值的均方根误差值(RMSE),同时我们人工挑选了其中100多个过曝和欠曝的场景,做了如图1(b)所示的统计结果。可以看出,在这两种特殊场景下,RNW的表现要低于平均水平,可视化效果如图1(a)的第二行所示。
在这里插入图片描述
图1 夜间深度估计的挑战。(a)第一行,nuScenes数据集中过曝和欠曝的场景;第二行,RNW预测的深度图;第三行,STEPS预测的深度图。(b)过曝(Overexposed),欠曝(Underexposed)和测试集平均(Avg)的RMSE。

针对欠曝的区域,前人提出了先进行图像增强再做深度估计的方法。虽然他们提出了各种有监督的夜间图像增强方法,但在具有挑战性的驾驶场景中的泛化性能并不令人满意,而且需要一定量的人工标注。针对过曝区域对深度估计的影响的研究还较少。为此,我们提出了STEPS,第一个自监督联合学习夜间图像增强和深度估计的方法,同时不使用任何ground truth。

此外,针对欠曝和过曝区域,我们提出了不确定像素掩膜策略。它基于图像增强的中间产物来过滤影响深度估计的图像区域,从而将两个自监督任务紧密地结合在一起。对比图1(a)的第二行和第三行可以明显发现,受益于我们的框架和策略,STEPS在欠曝和过曝区域的表现要优于基线方法。最后,我们还提出了CARLA-EPE,一个基于CARLA仿真器的增强到现实风格的夜间数据集。它具有密集的深度图的标注,且更接近现实的图像风格,为深度估计任务带来更多的可能性。

二、方法

模型架构

如前所述,夜间图像增强可以提高输入图像的质量,以帮助进行深度估计。但是有监督的夜间图像增强在本质上受到数据集自身分布的限制。因此,我们提出了一个以自监督的方式联合训练深度估计和图像增强的框架,如图2所示。它包含自监督图像增强模块(SIE),夜间自监督深度估计模块,由目标帧( I t I_t It)经过SIE生成的光照图 x t x_t xt)将两个模块联系在一起。
在这里插入图片描述
图2 整体模型架构

自监督图像增强模块

根据Retinex理论,给定一个低光图像 I I I ,可以通过
在这里插入图片描述
得到增强图像,其中 x x x 是光照图,图像增强最重要的部分, I ′ I' I 是反射图,也被认为是得到的增强图像。一个不准确的照明估计可能会导致过度增强的结果。为了提高性能稳定性和减少计算负担,我们采用SCI的自校准模块结构进行阶段级照明估计。

如图2底部所示,给定输入的图像,如 I t I_t It,增强过程可以表示为:
在这里插入图片描述
其中n(0<n<3)为级数, E \mathscr{E} E C \mathscr{C} C 分别表示光照估计模块和校准模块。 对于第n级, E \mathscr{E} E C \mathscr{C} C 是通过以下步骤实现的:
在这里插入图片描述
其中, Φ E \Phi_E ΦE Φ C \Phi_C ΦC 是可训练网络,分别用于估计光照图 x n t x_n^t xnt 和生成校准残差图 r e s t n res^n_t restn。校正模块重新生成伪夜间图像,使SIE可以分几个级应用,经验校正带来更快的收敛速度和更好的增强效果。

训练时,我们使用与SCI相同的损失函数,即保真度损失平滑损失。保真度损失的原理是对于夜间图像,光照分量在很大程度上与输入图像相似损失,它可以表示为:
在这里插入图片描述
平滑度损失是一种一致性正则化损失,可以表示为:
在这里插入图片描述
其中 κ i , j \kappa_{i,j} κi,j 高斯核的权重, W ( i ) {W}(i) W(i) 是以像素 i i i 为中心的 5 × 5 5 {\times} 5 5×5 大小的窗口, x ( i ) x(i) x(i) 表示光照图 x x x 在像素 i i i 处的值。

夜间自监督深度估计模块

自监督深度估计首先由Sfm-learner提出,它的关键思想是从给定源帧( I s I_s Is)根据几何约束重建目标帧 I t I_t It)。 具体来说,给定已知的摄像机内参矩阵 K K K、可训练网络 Φ d : R H × W × 3 → R H × W \Phi_{d}: \mathbb{R}^{H\times W\times 3} \rightarrow\mathbb{R}^{H\times W} Φd:RH×W×3RH×W 预测 I t I_t It 的深度图 D t D_t Dt 和可训练网络 Φ p : R H × W × 6 → R 4 × 4 \Phi_{p}: \mathbb{R}^{H\times W\times 6} \rightarrow\mathbb{R}^{4\times4} Φp:RH×W×6R4×4 预测的 I s I_s Is I t I_t It 之间的相对位姿 P t → s ∈ R 4 × 4 P_{t \to s} \in\mathbb{R}^{4\times4} PtsR4×4 I t I_t It 中的每一个点 p t p_t pt 都可以投影到 I s I_s Is 中的 p s p_s ps 上,投影公式表示为:
在这里插入图片描述
其中, ∼ \sim 表示齐次等价。此时,我们可以利用下面的公式从 I s I_s Is 中重建出目标帧,重建的目标帧记作 I t ^ \hat{I_t} It^
在这里插入图片描述
其中, < ⋅ > \big < \cdot \big > 是STN提出的可微双线性插值, p r o j ( ⋅ , ⋅ , ⋅ ) \rm proj(\cdot,\cdot,\cdot) proj(,,) 表示公式 ( 7 ) (7) (7)

自监督训练的损失函数是 I t I_t It 与重建帧 I t ^ \hat{I_t} It^ 之间的光度误差。我们采用MonoDepth2的方法,将L1损失和SSIM损失函数合并为光度损失函数 L p \mathcal{L}_p Lp,其定义为:
在这里插入图片描述
其中 α \alpha α 是超参数,通常设置为0.85。另外,我们遵循MonoDepth2,通过加强预测深度图的平滑性来避免深度歧义,即
在这里插入图片描述
由于夜间图像质量较差,公式 ( 9 ) (9) (9) 的梯度带有从噪声。为了缓解这种情况,我们在RNW的基础上引入了一个预训练的白天深度估计模型 Φ d D \Phi^D_{d} ΦdD ,并通过一种对抗的方式指导夜间模型的训练。构造夜间深度估计网络 Φ d N \Phi^N_{d} ΦdN 作为生成器,通过训练使其预测值 D t D_t Dt Φ d D \Phi^D_{d} ΦdD 的输出值 D d D_d Dd 不可区分。 基于Patch-GAN的鉴别器 Φ A \Phi_{A} ΦA 是一个可训练的网络,它来区分 D d D_d Dd D t D_t Dt Φ d N \Phi^N_{d} ΦdN Φ A \Phi_{A} ΦA 是通过最小化对抗式损失函数来训练的,该函数表示为
在这里插入图片描述
其中, ∣ I d ∣ |I_d| Id ∣ I t ∣ |I_t| It 是白天和夜间训练图像的数量, D d = Φ d D ( I d ) D_d = \Phi^D_{d}(I_d) Dd=ΦdD(Id) , D t = Φ d N ( I t ) D_t = \Phi^N_{d}(I_t) Dt=ΦdN(It)

联合训练

两个模块联合训练的过程如图2所示,SIE的第一级的输出的增强结果 I t ′ I'_t It I s ′ I'_s Is 作为深度估计模块的输入。公式 ( 8 ) (8) (8) ( 9 ) (9) (9) ( 10 ) (10) (10) ( 11 ) (11) (11) 中,目标帧 I t I_t It 和重建帧 I t ^ \hat{I_t} It^ 分别被增强的目标帧 I t ′ I'_t It 和增强源帧 I s ′ I'_s Is 重建后图像 I t ′ ^ \hat{I'_t} It^ 所取代。

基于统计的光照不确定性mask

如文章开头所描述,夜间图像通常包含欠曝和过曝的区域,这些区域会丢失重要的细节信息,导致估计的深度值不准确。而且,过曝区域往往与汽车的运动(如车灯)相关联,这也违反了自监督深度估计中的光照一致性假设。因此,我们需要设计某种机制来滤除这些区域去训练的影响。经研究发现,SIE 可以预测一个光照图 x t x_t xt ,以确定每个像素的颜色的增强比。如图3所示,欠曝区域的比值较大,过曝区域的比值较小。如果我们用这个来衡量每个像素在光度损失中的重要性,则可以最大可能减小这两个区域对训练的影响。

注意,我们给不确定区域每个像素点一个置信度,希望它们能参与到训练中,而非直接强硬地全部遮盖掉。

具体来说,我们定义了一个不确定映射 M u c ∈ R H × W M_{uc} \in \mathbb{R}^{H\times W} MucRH×W ,它在欠曝和过曝区域中给出了低置信度,在合理区域中给出了高置信度 M u c M_{uc} Muc 表示为:
在这里插入图片描述
其中 a a a b b b 是基于统计的光照值处于合理区域的上下界, p p p q q q 是衰减系数。如图3所示,直观地看,这个函数看起来像一个桥,它利用光照图生成不确定mask。

这个建模源于我们对两个夜间数据集光度图的统计,它可以遮掩过曝和欠曝区域的像素,又不会过多遮掩过对训练有帮助的像素点。
在这里插入图片描述
图3 M u c M_{uc} Muc 的原理。 (a)光照图 x t x_t xt 。 (b) M u c M_{uc} Muc 函数,该函数可以柔和地屏蔽过曝和弱曝区域。 © 不确定mask的可视化

三、实验

数据集

我们在nuScence数据集和RobotCar数据集上和其他方法做了比较。此外,针对真实数据集成本高、深度图稀疏以及仿真器数据域与现实数据域差异大的痛点,我们提出了增强到现实风格的仿真数据集CARLA-EPE

nuScenes-Night

nuScenes是一个大规模的自动驾驶数据集。它包含多种天气环境下复杂的道路场景,十分具有挑战性。

RobotCar-Night

RobotCar数据来源于RobotCar团队一年的时间内在各种天气下频繁地穿越牛津市中心的同一条路线时的驾驶记录,包括车辆上的6个摄像头数据以及激光雷达、GPS和INS数据。

CARLA-EPE

上述两个数据集的真实深度均来自激光雷达,然而,激光雷达数据的采集是昂贵的,并且只能提供稀疏的深度图。为此,我们将目光放在了仿真数据上。RGB图像和相应的密集深度图可以很容易地在仿真器(例如CARLA)中收集,但仿真图像和真实图像之间的分布差异极大地影响了训练模型在真实场景中的应用。因此,我们提出了一个基于CARLA和增强图片真实感的网络EPE的夜间深度估计数据集CARLA-EPE,它可以提供密集的深度真值迁移到真实风格的图像,如图4所示。
在这里插入图片描述
图4 EPE增强后的图像(CRALA-EPE)与增强前(CRALA)的对比。

实验结果

如表1所示,我们在nuScenes数据集和RobotCar数据集上均达到了SOTA,在准确率和误差上均有显著的提升。在更具挑战性的nuScenes数据集上,我们的a1相较于baseline提升了16.2%,abs_rel相较于baseline降低了10.4%。
在这里插入图片描述
表1 nuScenes数据集和Oxford数据集的定量结果。

可视化结果

如图5所示,蓝色方框展示了基线方法受到过曝的影响,预测了错误的深度。 红色方框还表明基线方法在欠曝区域错误地估计物体深度。由于我们的方法提出了新的框架和自适应掩膜的策略,因此可以使模型在这两种区域中预测出更合理的深度。
Alt
图5 可视化结果。

四、总结与展望

我们提出了STEPS,第一个自监督框架来联合学习图像增强和夜间深度估计的方法。它可以同时训练图像增强网络和深度估计网络,并利用了图像增强的中间量生成了一个像素级mask来抑制过曝和欠曝区域。通过大量的实验研究表明,我们的方法在这两种区域取得了更好的效果。此外,我们提出了一个增强到显示风格的仿真数据集CRALA-EPE,它以低成本、稠密的ground truth为室外场景的深度估计任务提供了更多的可能。

参考文献

[1] nuscenes: A multimodal dataset for autonomous driving: https://www.nuscenes.org
[2] Regularizing Nighttime Weirdness: Efficient Self-supervised Monocular Depth Estimation in the Dark: https://arxiv.org/abs/2108.03830
[3] Regularizing Nighttime Weirdness: Efficient Self-supervised Monocular Depth Estimation in the Dark: https://arxiv.org/abs/2108.03830
[4] The retinex theory of color vision.: https://lambentresearch.com/color/docs/LandRetinex.pdf
[5] Toward Fast, Flexible, and Robust Low-Light Image Enhancement: https://openaccess.thecvf.com/content/CVPR2022/html/Ma_Toward_Fast_Flexible_and_Robust_Low-Light_Image_Enhancement_CVPR_2022_paper.html
[6] Unsupervised Learning of Depth and Ego-Motion from Video: https://arxiv.org/abs/1704.07813
[7] Spatial transformer networks: https://arxiv.org/abs/1506.02025
[8] Digging Into Self-Supervised Monocular Depth Estimation: https://arxiv.org/abs/1806.01260
[9] Image-to-Image Translation with Conditional Adversarial Networks: https://arxiv.org/abs/1611.07004
[10] Enhancing photorealism enhancement: http://vladlen.info/papers/EPE.pdf

Illustration by nanoagency from IconScout

-The End-

关于我“门”

将门是一家以专注于发掘、加速及投资技术驱动型创业公司的新型创投机构,旗下涵盖将门创新服务、将门-TechBeat技术社区以及将门创投基金。
将门成立于2015年底,创始团队由微软创投在中国的创始团队原班人马构建而成,曾为微软优选和深度孵化了126家创新的技术型创业公司。
如果您是技术领域的初创企业,不仅想获得投资,还希望获得一系列持续性、有价值的投后服务,欢迎发送或者推荐项目给我“门”:
bp@thejiangmen.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA程序设计】(C00103)基于Springboot+Thymeleaf智能分类的相册管理系统——有文档

基于SpringbootThymeleaf智能分类的相册管理系统——有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于SpringbootThymeleaf智能分类的相册管理系统共分为二个角色&#xff1a;系统管理员、用户 管理员角色包含以下功能&#xff1a; 登录、用户管理&#xff08;增…

LeetCode-131. 分割回文串

目录题目思路回溯题目来源 131. 分割回文串 题目思路 切割问题类似组合问题。 例如对于字符串abcdef&#xff1a; 组合问题&#xff1a;选取一个a之后&#xff0c;在bcdef中再去选取第二个&#xff0c;选取b之后在cdef中再选取第三个…。切割问题&#xff1a;切割一个a之后&…

现在的00后,实在是太卷了

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里条…

ES mapping 详解

nested 类型&#xff1f;&#xff1f;&#xff1f; _all _routing; ES-mapping Elasticsearch根据业务创建映射mapping结构分析&#xff1a;keyword和text&#xff08;一&#xff09;_elasticsearch keyword mapping_周全全的博客-CSDN博客 0.Mapping样例 {"mapping…

【微信小程序】--JSON 配置文件作用(三)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…

【Vue源码解析】Vue虚拟dom和diff算法

Vue虚拟dom和diff算法1. 简介2. 搭建环境1. 安装snabbdom2. 安装webpack5并配置3、函数3.1 虚拟节点vnode的属性3.2 使用h函数 创建虚拟节点3.3 使用patch函数 将虚拟节点上DOM树3.4 h函数嵌套使用&#xff0c;得到虚拟DOM树&#xff08;重要&#xff09;3.5 patchVnode函数3.6…

Mac 上搭建 iOS WebDriverAgent 环境

文章目录Mac环境搭建配置 Xcode 生成 WDA常见问题brew 安装失败Mac环境搭建 macOS 系统电脑&#xff1a;12.6.2 Xcode&#xff1a;14.0.1&#xff08;xcodebuild -version&#xff09; appium Desktop&#xff1a;1.21.0 (下载链接) Appium Desktop 1.22.0 &#xff0c;从该版…

Redis 高级数据类型

文章目录一、Bitmaps&#xff1a;属性状态统计二、HyperLogLog&#xff1a;基数统计三、GEO&#xff1a;地理位置信息计算提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 一、Bitmaps&#xff1a;属性状态统计 Bitmaps类型&#xff1a; 统计一…

数据结构:循环队列的实现(leetcode622.设计循环队列)

目录 一.循环队列简单介绍 二.用静态数组实现循环队列 1.数组循环队列结构设计 2.数组循环队列的堆区内存申请接口 3.数据出队和入队的接口实现 4.其他操作接口 5.数组循环队列的实现代码总览 三.静态单向循环链表实现循环队列 1.链表循环队列的结构设计 2.创建静…

Nginx第二讲

目录 二、Nginx02 2.1 keepalived和heartbeat介绍 2.1.1 两者的介绍 2.1.2 keepalived简介 2.1.3 VRRP协议与工作原理 2.1.4 Keepalvied的工作原理 2.2 安装环境及keepalived 2.3 启动与验证keepalived 2.4 keepalived测试 2.4.1 环境准备 2.4.2 配置keepalived 2.…

守护最后一道防线:Coremail邮件安全网关推出邮件召回功能

根据Coremail邮件安全大数据中心2022年Q4季报显示&#xff0c;2021年CAC识别钓鱼邮件1.81亿&#xff0c;2022年上升至2.25亿&#xff0c;增幅高达24.1%。 这表明2022年平均每天有61万7088封钓鱼邮件被接收及发出&#xff0c;企业用户面临潜在经济损失不可估量。 尤其是活跃至今…

Linux中安装JDK

Linux中安装JDK一 、下载JDK包1、下载网址2、往下翻&#xff0c;找到 java83、继续往下翻找到要下载的版本 64位linux版本二 上传jdk安装包三 开始安装整体过程1、解压文件2、查看解压文件3、进入解压文件夹确认4、配置环境变量5、重新加载环境变量6、确认安装成功一 、下载JDK…

Leetcode11. 盛最多水的容器

一、题目描述&#xff1a; 给定一个长度为 nnn 的整数数组 heightheightheight 。有 nnn 条垂线&#xff0c;第 iii 条线的两个端点是 (i,0)(i, 0)(i,0) 和 (i,height[i])(i, height[i])(i,height[i]) 。 找出其中的两条线&#xff0c;使得它们与 xxx 轴共同构成的容器可以容…

【C++】类与对象(引入)

目录 前言 类的引入 类的定义 封装与访问限定符 封装 访问限定符 类的实例化 类的大小 this指针 特性 前言 &#x1f3b6;我们都知道&#xff0c;C语言是面向过程的编程&#xff0c;而C是面向对象的编程&#xff0c;更多体现在编程的关注点上。 &#x1f3b6;就拿洗…

ES6--class类(详解/看完必会)

目录 1、基本概念 2、基本用法 3、class与构造函数的区别 4、constructor的使用 5、自定义方法 6、extends和super &#xff08;1&#xff09;问题一&#xff1a;我们想要在点击按钮二的时候改变字体大小&#xff0c;如何写呢&#xff1f; &#xff08;2&#xff09;问…

【极海APM32替代笔记】低功耗模式配置及配置汇总

【极海APM32替代笔记】低功耗模式配置及配置汇总 文章总结&#xff1a;&#xff08;后续更新以相关文章为准&#xff09; 【STM32笔记】低功耗模式、WFI命令等进入不了休眠的可能原因&#xff08;系统定时器SysTick一直产生中断&#xff09; 【STM32笔记】HAL库低功耗模式配置…

万字长文解析!复现和使用GPT-3/ChatGPT,你所应该知道的

关于作者 英文原版作者&#xff1a;杨靖锋&#xff0c;现任亚马逊科学家&#xff0c;本科毕业于北大&#xff0c;硕士毕业于佐治亚理工学院&#xff0c;师从 Stanford 杨笛一教授。 杨昊桐 译&#xff0c;王骁 修订 感谢靳弘业对第一版稿件的建议&#xff0c;感谢陈三星&am…

timm使用swin-transformer

1.安装 pip install timm2.timm中有多少个预训练模型 #timm中有多少个预训练模型 model_pretrain_list timm.list_models(pretrainedTrue) print(len(model_pretrain_list), model_pretrain_list[:3])3加载swin模型一般准会出错 model_ft timm.create_model(swin_base_pat…

Head First设计模式---4.工厂方法模式

2.1工厂方法模式 亦称&#xff1a; 虚拟构造函数、Virtual Constructor、Factory Method 工厂方法模式是一种创建型设计模式&#xff0c; 其在父类中提供一个创建对象的方法&#xff0c; 允许子类决定实例化对象的类型。 [外链图片转存失败,源站可能有防盗链机制,建议将图片…

Linux 终端复用器Tmux

目录 Tmux讲解 配置tmux 配置tmux会话 配置tmux窗口&#xff08;在会话界面进行配置&#xff09; 配置tmux面板 配置窗口共享同步 Tmux讲解 RHEL5/6/7使用的是screen软件包 RHEL8使用的是tumx软件包&#xff08;功能更强大&#xff0c;更易用&#xff09; tmux的三个基本…