集智书童 | 从RAW到RGB的完美转换:RealCamNet 端到端摄像头成像 Pipeline 提升成像性能 !

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。

原文链接:从RAW到RGB的完美转换:RealCamNet 端到端摄像头成像 Pipeline 提升成像性能 !

近年来,神经摄像头成像管线的最新进展表明取得了显著的进步。然而,实际成像 Pipeline 仍然面临包括系统组件缺乏联合优化、计算冗余和光学畸变(如镜头阴影)在内的挑战。因此,作者提出了一种端到端的摄像头成像 Pipeline (RealCamNet),以提高实际场景下的摄像头成像性能。作者的方法与传统的、分阶段的图像信号处理方法有所不同,而是采用端到端架构。

这种架构可以实现整个 Pipeline 内的联合优化,并恢复坐标偏置的畸变。RealCamNet旨在从RAW转换为RGB的高质量转换和紧凑图像压缩。

具体而言,作者深入分析了坐标相关的光学畸变,例如暗角和暗阴影,并设计了一种新的坐标感知畸变恢复(CADR)模块来恢复坐标偏置的畸变。

此外,作者还提出了一种坐标独立的映射压缩(CIMC)模块来实现色调映射和冗余信息压缩。现有数据集存在对齐错误和过于理想化的条件,使其不适合训练实际场景下的成像 Pipeline 。

因此,作者收集了一个实际场景下的成像数据集。实验结果表明,RealCamNet实现了最佳率失真性能和较低的推理延迟。

1 Introduction

高效成像和压缩技术对于互联网和多媒体行业至关重要。随着数字内容的指数级增长,同时保持图像质量但减小文件大小的技术变得至关重要。这些进步不仅通过确保快速加载图像和视频来提高用户体验,而且还可以节省存储空间并降低数据传输成本。此外,这些技术对于支持高级应用如自动驾驶和远程感知、推动技术创新以及满足多媒体处理日益增长的需求是不可或缺的。因此,开发更高效成像和压缩方法对于推动行业进步并满足现代技术的需求至关重要。

在传统的实际相机成像 Pipeline 中,为了进行图像信号处理(ISP),采用了复杂且专有的硬件过程,包括去噪、去偏色、色调映射和图像压缩等步骤,如图1(a)所示。 Pipeline 中的每个步骤都是单独设计的,这导致了错误累积,并阻止了系统达到最优状态。

大多数传统方法在ISP Pipeline 中的每个步骤都使用启发式方法得出解决方案,这需要调整大量参数。此外,ISP处理流程中会累积错误,影响成像质量。

过去十年,深度神经网络得到了迅速发展,并在图像分类、目标检测[27, 46]、图像和视频增强、自然语言处理等领域发挥了重要作用。研究行人还提出了一系列基于神经网络的图像信号处理方法。近年来,研究行人[15, 23]试图构建基于深度神经网络的摄像头成像系统,设计用于去噪、去偏色、色调映射和压缩的模型,显著提升了整个系统性能。然而,为每个功能(例如,去噪、去偏色)构建独立的神经网络,阻止了系统的联合优化,并引入了计算冗余,如图1(b)所示。

因此,一些方法出现了,试图构建一个单一的神经网络来完成ISP所需的功能。这是一个好主意,但由于所考虑的情况过于简单,设计的ISPNet不能现实地应用。

针对这些问题,作者提出了一种名为RealCamNet的框架,该框架将真实相机图像信号处理和图像压缩过程整合到端到端的深度神经网络框架中。这种统一的方法不仅减少了计算冗余,而且通过网络参数的联合优化,提高了图像质量和压缩效率,这是以前隔离的设计方法无法实现的。

作者的起点是构建一个基于神经网络的实时摄像头处理 Pipeline ,模拟现实应用中常见的功能,从而建立一个可靠且实用的端到端成像系统。为此,作者对成像和压缩过程中的每个步骤的原则和缺陷进行了分析。

作者的RealCamNet整体框架如图1(d)所示,其中作者设计了一个端到端的深度神经网络来实现RAW-Bitstream-RGB图像压缩过程。图1(a)和图1(b)所示的串行框架导致了每个模块的累积误差以及潜在的全局非最优结果。图1(c)直接构建神经网络实现了诸如去混色和色调映射等操作,但整体联合优化仍未实现。

在作者的RealCamNet中,作者设计了一个全局和局部感知成像流水线模块,以模拟成像流水线中的过程,如全局和局部色调映射、去噪、脱敏和图像特征压缩。

作者对摄像机成像技术的调查发现,光学系统的不完善会导致数字信号失真。在光学摄像机成像中,由于光学系统及其传感器固有的特性,坐标相关的失真会显著影响图像质量。这包括由于传感器敏感性变化或光学系统照度不均匀导致的坐标相关噪声,以及由于镜头设计和光线入射角导致的边缘亮度降低,还有由于组件叠加导致的CMOS的不均匀加热引起的暗影。图2中显示了这些失真。为了减轻这些失真并提高图像质量,需要进行复杂的图像处理。作者引入了一个简洁、有效的坐标感知失真校正模块,旨在识别并校正各种坐标相关的失真,从而增强视觉感知和成像质量。

之前的RAW-RGB数据集要么包含过于简单的ISP处理(仅包括几种过程,如解色移),要么存在对齐问题,不能用于训练可用于真实场景的相机成像 Pipeline 。为了训练作者的RealCamNet,作者构建了一个新的RAW-RGB数据集,可以直接学习真实相机的复杂ISP过程。

总之,作者的贡献有四方面:

  1. 首先,作者构建了一个深度神经网络成像系统,并展示了端到端联合优化的性能改进。

  2. 作者深入分析了坐标相关的光学畸变,例如眩光和暗影,并设计了一种新颖的坐标感知畸变恢复(CADR)模块,用于修复坐标偏差畸变。

  3. 作者设计了一个坐标独立的映射压缩(CIMC)模块,实现全局和局部色调映射、去噪、去伪彩和图像特征压缩功能,从而减少计算冗余。

  4. 作者构建了一个新的真实场景图像数据集,为统一的端到端神经成像流水线提供了基准。

2. Preliminary

Traditional Image Signal Processing

传统上,图像信号处理(ISP)负责从RAW捕获中重构RGB图像。在传统的相机 Pipeline 中,采用复杂的专有硬件过程进行图像信号处理。这个过程包括多个步骤,如去噪、去偏移、缺陷像素校正和色调映射,等等。每个模块都需要单独调整和优化,同时考虑级联错误调整。

Learning-based Image Signal Processing

深度学习技术的进步使得研究行人通过神经网络来提升ISP(图像传感器阵列)流水线。局部网络解决方案分割功能,如色调映射(Shi等人,2017年)和去噪 ,使得模块解耦,但同时也使ISP的整体优化变得复杂。全面的神经网络方法替代了整个ISP流水线,简化了计算并实现了系统 Level 的优化。然而,这些方法尚未得到充分评估,ISP流水线也未得到全面分析。

Learning-based Image Compression

在基于学习的图像压缩中,Balle等人首次采用了编码器-解码器架构和熵编码来进行潜在特征表示,从而实现模型优化。Balle等人在2018年通过自适应的方式和方差减少了潜在特征的冗余。Cheng等人 通过使用高斯混合模型(GMM)和超先验参数改进了准确性。

Minnen等人 进一步采用熵编码中的自回归模型,降低了冗余,但自回归方法的顺序限制了并行处理。这促使了类似于分组超通道式和棋盘式自回归模型的开发,以提高速度而不牺牲压缩效率。

3. Methodology

Problem Formulation

摄像机成像 Pipeline 通过一个结构化的过程将RAW图像转换为压缩RGB格式。这个过程包括三个主要阶段:从RAW到RGB的转换,将RGB图像压缩成位流,以及将位流解压缩成RGB图像。目的是在优化存储和传输效率的同时保持图像质量。正式地,该 Pipeline 由以下操作序列描述:

Architecture of RealCamNet

为了提高摄像机成像 Pipeline 的性能,作者提出了一种名为_RealCamNet_的端到端流程,该流程专为实际场景下的摄像机成像设计。该流程将编码器和解码器组件集成在一起,以便有效地进行图像处理。_RealCamNet_的操作框架如下:

在解码阶段,熵模型首先将比特流转换为潜在特征。这些特征通过 ConCat 的通道空间注意力(CSA)模块处理,从紧凑的潜在特征中恢复详细的图像信息。最后,使用UnpixelShuffle模块根据这些特征重构RGB图像。

如图3所示,本全框架展示了实时摄像头网络(RealCamNet)的详细信息,该网络由三个主要部分组成:编码器、熵模型和译码器,这三个部分均采用端到端的方式进行联合训练。

Coordinate-Aware Distortion Restoration

作者提出了所 Proposal 的坐标感知失真恢复(CADR)模块的详细架构,如图3(b)所示。CADR模块通过集成当前像素坐标来实现有效的坐标感知,从而促进坐标依赖失真恢复的学习。

为了克服这一局限性,作者提出了一种简单的坐标嵌入方法,以捕捉RAW图像的真实全局坐标。这意味着需要修改坐标计算方法。这种坐标嵌入方法使作者的CADR能够准确感知像素的空间位置,从而有效地恢复与坐标相关的畸变。

Color Prior Encoder

Channel-Spatial Attention

信道-空间注意力(CSA)机制是坐标独立映射压缩(CIMC)模块的重要组成部分。受传统视频压缩中帧内编码原理的启发,CSA旨在识别并利用特征表示中的非局部冗余性,从而实现更高效的压缩。在编码器中,CSA利用注意力机制在空间和通道维度上聚合信息,从而减少冗余数据,并将特征压缩成有利于改进压缩效果的紧凑表示。在解码阶段,CSA在从压缩特征集中重构非局部参考特征方面发挥关键作用。这一功能对于恢复重构图像的质量以及确保输出与原始输入的保真度至关重要。

3.5.1. Detail of CSA

该方法将信道和空间注意力相结合,提高特征细化程度,并促进RAW图像特征向紧凑的RGB潜在表示的转换。结果是改进了重建质量且降低了冗余度,这对于高效的图像处理任务至关重要。

Coordinate-Independent Mapping Compression

3.6.1. Overview of Cimc

坐标独立的映射压缩( CIMC )模块旨在将RAW图像特征压缩为紧凑的RGB潜在表示。通过采用注意力机制和特征变换, CIMC 旨在提高重建质量并减少数据冗余。

CIMC 包括三个关键组件:通道-空间注意力(CSA)模块、局部特征转换(LFT)模块和全局特征转换(GFT)模块。LFT 和 GFT 可以利用 CPE 模块提取的颜色先验进行色调映射。CSA 可以促进潜在特征的有效压缩,如图3(d)所示。

3.6.2. Details of Cimc

4. Experiment

Implementation Details

Metrics

Rate-Distortion Performance

在PyNet+VTM作为基准的情况下,作者使用多种指标深入研究每个 Pipeline 的性能差异,计算在指标-比特率曲线上BD(Bjontegaard Delta)指标,包括BD-PSNR,BD-MSSSIM,BD-ΔE和BD-LPIPS。实际数据表明,在作者的RealCamNet中,在相同的比特率下,超越了传统的多阶段,基于学习的 Pipeline ,在PSNR上提高了2.26dB,在MS-SSIM上提高了0.71dB,在LPIPS上提高了0.01,在ΔE上提高了0.9187。此外,与结合了Cascaded Universal Video Coding(VVC)框架的学习型ISPNet相比,作者的方法在比特率相当的情况下,在PSNR等指标上始终表现出优越性能,这进一步强调了作者所提出方法的鲁棒性和稳定性。

为了阐明RealCamNet的性能,作者根据速率-失真曲线计算了BD-Rate,与现有最佳 Pipeline 相比,BD-Rate有了显著提升,提高了9.53%。这些结果,如表1所示,强调了作者的方法在测试集上的全面性能优势。

Ablation Studies of CIMC

在图6(c)中,作者评估了CIMC模块的有效性,该模块包括CSA、LFT和GFT组件。CIMC模块通过新颖的LFT和GFT增强色调映射,同时使用CSA优化特征压缩。表2中呈现了CIMC及其各个CSA、LFT和GFT组件的定量分析。

Ablation Studies of CADR

为了证明作者提出的坐标感知失真修复模块(CADR)CADR的有效性,作者将没有CADR模块的模型与添加了CADR模块的模型进行了比较。结果如图6(c)所示。添加作者的CADR模块带来了巨大的改进。作者在表2中展示了BD-PSNR上的定量增益。

Complexity and Qualitative Results.

作者比较了不同方法计算复杂性。如表6(a)和图6(b)所示,作者的方法可以在推理速度为16.8fps的情况下解码分辨率为1024  x 1024的图像。作者的方法不仅实现了优越的性能,而且还展示了更低的计算复杂性和更快的推理速度。

Visual Results

图7展示了作者方法生成的重构图像与Pipeline-1(ISPNet与经典VVC标准相结合,VTM 12.1)和Pipeline-2(ISPNet与基于学习压缩网络相结合)的对比。作者的方法在保留细微纹理方面表现出色,如图中更清晰的羽状边缘所示,同时实现了更高的色彩保真度。

Comparison results with traditional ISP pipeline

图4附录部分展示了使用RawPy(Song等人,2017年)的结果。尽管RawPy广泛使用,但通常比现代基于学习的算法表现更差。有关详细定量分析,请参阅表3,其中作者的方法在结合MLIC时显著优于RawPy。尤其是在无参考质量指标CLIPIQA中,该指标更适合RawPy通常产生的低亮度图像。

Receptive Field Analysis

作者通过计算每个模块的有效感受野来分析每个模块的有效性。对于不同输入的感受野的分析表明,模型对全局下采样RAW的输出涵盖全局感受野(图8(b)),从而在整张图像之前提取全局颜色。此外,对裁剪RAW的输出表现出非局部感受野(图8(c)),这说明CS(Channel Spatial Attention)能够利用非局部信息来增强潜在的紧凑性。相比之下,坐标嵌入与输入感受野局部相关(图8(d)),因为感知当前位置的坐标信息可以实现高质量的位置相关畸变恢复。

5. Conclusion

这项研究揭示了一种创新的全端到端实时摄像头成像流水线,在性能和效率方面超越了现有方法,并开创了成像流水线设计的新基准。

通过对ISP和压缩工作流程的详细分析,作者引入了一个独立于坐标的映射压缩模块,旨在优化特征压缩和色调映射,并专门设计了一个坐标感知的恢复模块,用于恢复特定坐标的畸变。

为摄像头成像流水线评估而制作的定制数据集设置了一个强大的基准,推动了未来的研究。

作者的全面评估不仅证实了该流水线的有效性,还强调了它有可能彻底改变未来的数字成像技术。

参考文献

[0]. An End-to-End Real-World Camera Imaging Pipeline.

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

<think>好的,我现在遇到了一个C++的类型转换错误,具体是关于ob::Device转换到ob::Pipeline的问题。我需要仔细分析这个问题,找出可能的原因和解决方法。 首先,我应该确认这两个类型之间的转换是否被官方支持。ob::Device和ob::Pipeline可能属于不同的类层次结构,没有直接的继承关系,所以显式或隐式的类型转换可能不可行。用户可能在代码中尝试了强制转换,比如static_cast或者C风格的转换,导致编译器报错。 接下来,我需要回忆Orbbec SDK的常见用法。通常,Device对象用于管理硬件设备,而Pipeline用于处理数据流。正确的做法可能是通过Pipeline的初始化方法来传入Device,而不是直接转换类型。例如,查看SDK文档是否有类似Pipeline::start(Device& device)这样的方法。 然后,考虑代码示例。用户可能在写类似这样的代码: ob::Device device = context.queryDevice(); ob::Pipeline pipeline = static_cast<ob::Pipeline>(device); // 错误 这会导致类型不匹配的错误。正确的做法应该是创建Pipeline实例,并用Device来配置它,比如: ob::Pipeline pipeline(context); pipeline.start(device->getDeviceInfo()); 或者可能需要将Device的信息传递给Pipeline的初始化参数。 另外,检查是否有函数需要Device的指针或引用作为参数,而不是直接转换类型。例如,Pipeline的构造函数可能需要一个DeviceInfo对象,通过device->getDeviceInfo()获取。 还需要考虑内存管理的问题,确保Device对象在Pipeline使用期间有效,避免悬垂指针。如果SDK要求Pipeline管理Device的生命周期,可能需要使用能指针或者传递设备信息而不是设备对象本身。 可能的解决方案包括: 1. 使用Pipeline的构造函数或start方法,接受Device或DeviceInfo作为参数。 2. 检查SDK文档中Pipeline和Device的关系,是否有组合或依赖关系。 3. 避免直接类型转换,改用正确的API调用来关联Device和Pipeline。 最后,验证解决方案。编写测试代码,按照正确的API用法创建Pipeline,并确保没有类型转换错误。如果仍有问题,可能需要查看编译错误的具体信息,确认是否有其他隐藏的问题,比如头文件包含不全或命名空间错误。</think>### 关于`ob::Device`到`ob::Pipeline`类型转换错误的解决方案 在Orbbec SDK的C++编程中,`ob::Device`和`ob::Pipeline`是两种不同的类型,直接进行类型转换会导致编译错误。以下是分步解决方案: #### 1. **理解类型关系** - **`ob::Device`**:表示物理设备(如深度相机),用于硬件交互(如获取设备信息、传感器配置等)[^1]。 - **`ob::Pipeline`**:数据流处理管道,负责管理数据流的启停、帧同步等操作[^2]。 - **关键点**:两者没有继承关系,无法直接通过强制转换(如`static_cast`)关联。 #### 2. **正确初始化`ob::Pipeline`** 通过`ob::Context`获取设备后,应将设备信息传递给`Pipeline`的初始化逻辑: ```cpp #include <libobsensor/ObSensor.hpp> // 创建上下文 ob::Context context; // 获取设备列表 auto devices = context.queryDevices(); if (devices->size() > 0) { // 获取第一个设备 auto device = devices->getDevice(0); // 创建Pipeline并绑定设备 ob::Pipeline pipeline(context); pipeline.start(device->getDeviceInfo()); // 传递设备信息,而非直接转换类型 } ``` #### 3. **验证设备绑定** 通过`Pipeline`的方法检查设备状态: ```cpp auto streamProfileList = pipeline.getStreamProfileList(OB_SENSOR_DEPTH); if (streamProfileList->count() > 0) { // 成功获取设备配置 auto depthProfile = streamProfileList->getProfile(0); pipeline.start(depthProfile); } ``` #### 4. **避免的典型错误** **错误示例**: ```cpp ob::Device* device = context.queryDevice(); ob::Pipeline pipeline = static_cast<ob::Pipeline>(device); // 编译错误:类型不兼容 ``` **修正方法**:使用设备信息初始化`Pipeline`,而非直接转换类型。 #### 5. **扩展:设备与管道的交互** 若需在运行时动态切换设备,需先停止当前管道: ```cpp pipeline.stop(); device = context.queryNewDevice(); // 获取新设备 pipeline.start(device->getDeviceInfo()); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值