论文阅读--Efficient Hybrid Zoom using Camera Fusion on Mobile Phones

2024-06-24 04:36

本文主要是介绍论文阅读--Efficient Hybrid Zoom using Camera Fusion on Mobile Phones,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是谷歌影像团队 2023 年发表在 Siggraph Asia 上的一篇文章,主要介绍的是利用多摄融合的思路进行变焦。

单反相机因为卓越的硬件性能,可以非常方便的实现光学变焦。不过目前的智能手机,受制于物理空间的限制,还不能做到像单反一样的光学变焦。目前主流的智能手机,都是采用多摄的设计,一般来说一个主摄搭配一个长焦,为了实现主摄与长焦之间的变焦,目前都是采用数字变焦的方式,数字变焦相比于光学变焦,细节会损失很多。这篇文章提出一种混合变焦的方法,就是拍摄的时候,同时获取主摄和长焦的图像,然后利用机器学习模型将两张图像对齐,并且将长焦的细节迁移到主摄上。同时,这篇文章也设计了一种自适应的融合方法,去处理两个镜头的景深差异,遮挡,匹配误差等问题,为了尽量减少两个镜头之间的域差异,文章作者还设计了一个双目的采集系统,获取真实图像的输入和GT,用于有监督的训练。最终,这篇文章的方法,可以在手机上实现对 12M 像素的图像处理耗时在 500ms 左右,相比其它 SOTA 方法,在真实场景下的效果更好。

HYBRID ZOOM SUPER-RESOLUTION

文章将主摄的图像称为 W \mathbf{W} W,长焦的图像称为 T \mathbf{T} T

这篇文章的目标是设计一个高效的算法系统,能够运行在手机设备上。由于手机设备的限制,耗时耗内存的大模型无法使用,所以需要对整个算法流程进行精细的设计。整个算法流程如图 3 所示。当用户按下拍照按钮的时候,算法系统会同时拍摄两张图像。首先利用一个粗粒度的匹配算法,将主摄图像 W \mathbf{W} W 和长焦图像 T \mathbf{T} T 对齐,然后后面再接一个局部稠密的匹配算法,比如光流。接下来,文章作者采用 UNet 模型将从 W \mathbf{W} W 中 crop 出来的图像和长焦图像 T \mathbf{T} T 中的亮度通道进行融合。最后,利用一个自适应的融合算法,将景深差异,遮挡,匹配误差等考虑进去,将融合后的图像重新贴回主摄图像 W \mathbf{W} W。整个算法系统的算法模块都尽量轻量化,以保证整个系统的效果和效率。

在这里插入图片描述

Image Alignment

Coarse alignment:文章首先将 W \mathbf{W} W 进行裁剪,让其与 T \mathbf{T} T 的 FOV 基本一致,然后将裁剪后的图像利用 bicubic 的方法上采样,让两张图像的尺寸保持一致,然后作者估计了一个 2D 的转换矩阵,将裁剪后的上采样图像与 T \mathbf{T} T 进行对齐,这个变换后的图像称为 I s r c I_{src} Isrc,同时,文章也将 T \mathbf{T} T 的颜色,利用一个颜色对齐的方式,与 I s r c I_{src} Isrc 对齐,颜色对齐后的 T \mathbf{T} T 图像称为 I r e f I_{ref} Iref

Dense alignment:做完粗对齐之后,文章接下来要做一个精对齐,需要用到稠密的光流,文章作者利用 PWC-Net 去估计 I s r c I_{src} Isrc I r e f I_{ref} Iref 之间的稠密光流,先对 I s r c I_{src} Isrc I r e f I_{ref} Iref 做一个下采样到 384 × 512 384 \times 512 384×512,然后利用 PWC-Net 估计其光流,然后将估计得到光流图上采样回原始图像尺寸。为了加速,文章中将 PWC-Net 进行了剪枝,将一些运算复杂度高的模块去除了。

Image Fusion

为了保持 W \mathbf{W} W 的颜色,文章在亮度空间进行融合,文章作者构建了一个 5 层的 UNet,将两路图像的亮度通道输入网络,此外还有前面光流估计输出的遮挡图也输入网络,最终输出得到一个灰度图像。然后这个输出的灰度图像 Y 与 UV 通道一起,做一个颜色转换,得到最终的 RGB 图像。

Adaptive Blending

前面基于 AI 的配准对齐和融合模型对大部分场景都能取得不错的效果,但是依然会有一些场景可能会在输出结果上看到明显的 artifacts。由于景深差异,遮挡,以及误匹配。因此,文章作者设计了一个策略来自适应地对 Y s r c Y_{src} Ysrc 以及 Y f u s i o n Y_{fusion} Yfusion 进行融合,这个策略就是将 defocus map,occlusion map,flow uncertainty map 以及 alignment rejection map 最终统一成一个 alpha mask,然后基于这个 alpha mask 做融合。具体框架如图 4 所示:

在这里插入图片描述

Narrow DoF on T \mathbf{T} T 一般来说,长焦的景深比主摄要小,因为一般来说景深和焦距成反比,焦距越长,景深会越浅,从论文中的图 2 可以看到,长焦的离焦区域比主摄要模糊,如果将离焦区域直接融合,会使最终的图像反而变得模糊,所以文章设计了一种方法,将 defocus map 计算出来,作为融合的引导信息。

  • Defocus map:为了估计出 defocus map,首先需要知道对焦的中心区域,同时需要知道图像中的像素相对对焦中心区域的距离,也就是深度信息,因为主摄和长焦镜头基本是平行的,根据双目视觉的测距原理,两路图像中的光流大小与视差及空间深度是成正比的。基于这个假设,文章作者提出了一种估计 defocus map 的算法,如图 5 所示。首先,根据相机的自动对焦模块,获得图像中的对焦区域 ROI,一般是一个矩形区域。然后,基于双目匹配的原理,可以认为光流反映了深度信息,进而可以假设对于静态场景来说,像素在同样的深度面上,有近似的光流。为了找到这个对焦中心,文章作者用 K-means 聚类算法对光流信息进行聚类,然后选择这个聚焦中心 x f x_f xf 作为最大聚类的中心。再利用如下的表达式,计算不同像素的光流与这个聚类中心的相对深度:

M d e f o c u s ( x ) = sigmoid ( ∥ F f w d ( x ) − F f w d ( x f ) ∥ 2 2 − γ σ f ) (1) \mathbf{M}_{defocus}(\mathbf{x}) = \text{sigmoid}(\frac{ \left \| F_{fwd}(\mathbf{x}) - F_{fwd}(\mathbf{x}_f) \right \|_{2}^{2} - \gamma}{\sigma_f}) \tag{1} Mdefocus(x)=sigmoid(σfFfwd(x)Ffwd(xf)22γ)(1)

F f w d F_{fwd} Ffwd 是前面计算的光流信息, γ \gamma γ 控制光流位移的阈值,让对焦区域容许一定的位移变化, σ f \sigma_{f} σf 控制 defocus map 的平滑程度。

  • Occlusion map:对于某些场景, W \mathbf{W} W T \mathbf{T} T 之间可能因为遮挡,存在有些区域不能在两路图像中都存在的情况,如果将这些区域进行融合,可能会产生 artifacts,所以文章作者计算了一个 Occulusion map 作为引导:

M o c c ( x ) = min ⁡ ( s ∥ W ( W ( x ; F f w d ) ; F b w d ) − x ∥ 2 , 1 ) (2) \mathbf{M}_{occ}(\mathbf{x}) = \min (s \left \| \mathbb{W}(\mathbb{W}(\mathbf{x}; F_{fwd});F_{bwd}) - \mathbf{x} \right \|_{2}, 1) \tag{2} Mocc(x)=min(sW(W(x;Ffwd);Fbwd)x2,1)(2)

其中, W \mathbb{W} W 表示双线性 warp 操作, x \mathbf{x} x 表示原始图像的二维坐标,尺度因子 s 控制 occlusion map 的强度。上面这个式子的原理,就是如果一个点在两张图像中都有,那么经过两次 warp 之后,这个点的坐标应该是保持不变的。

  • Flow uncertainty map:因为稠密的光流匹配是一个非常病态的问题,文章中将 PWC-Net 的输出做了扩展,输出了一个光流的置信度 map,这个置信度输出的是每个像素的光流向量的拉普拉斯分布,如下所示:

S ( x ) = exp ⁡ ( log ⁡ ( V a r x ( x ) ) ) + exp ⁡ ( log ⁡ ( V a r y ( x ) ) ) (3) \mathbf{S}(\mathbf{x}) = \sqrt{\exp(\log(Var_x(\mathbf{x}))) + \exp(\log(Var_y(\mathbf{x})))} \tag{3} S(x)=exp(log(Varx(x)))+exp(log(Vary(x))) (3)

M f l o w ( x ) = min ⁡ ( S ( x ) , s m a x ) / s m a x (4) \mathbf{M}_{flow}(\mathbf{x}) = \min(\mathbf{S(\mathbf{x}), s_{max}}) / s_{max} \tag{4} Mflow(x)=min(S(x),smax)/smax(4)

  • Alignment rejection map:对于配准异常区域的引导信息,文章作者也构建了一个 map,简单来说,就是将配准后的两张图的分成若干个 local patch,对每个 local patch,分别计算均值,然后对每个 local patch 里的像素,减去对应 patch 的均值之后,比较两个像素之间的差异: P δ = ( P s r c − μ s r c ) − ( P ~ r e f − μ r e f ) P_{\delta} = (P_{src} - \mu_{src}) - (\tilde{P}_{ref} - \mu_{ref}) Pδ=(Psrcμsrc)(P~refμref)

M r e j e c t ( x ) = 1 − exp ⁡ ( − ∥ P δ ( x ) ∥ 2 2 / ( σ s r c 2 ( x ) + ϵ 0 ) ) (5) \mathbf{M}_{reject}(\mathbf{x}) = 1 - \exp \left( -\left \| P_{\delta }(\mathbf{x}) \right \|_{2}^{2} / (\sigma_{src}^{2}(\mathbf{x}) + \epsilon_{0}) \right) \tag{5} Mreject(x)=1exp(Pδ(x)22/(σsrc2(x)+ϵ0))(5)

其中, σ s r c 2 ( x ) \sigma_{src}^{2}(\mathbf{x}) σsrc2(x) 表示 P s r c P_{src} Psrc 的方差, ϵ 0 \epsilon_{0} ϵ0 用来控制容许的误差。

最后的融合 map 由如下的式子求得:

M b l e n d = max ⁡ ( 1 − M o c c − M d e f o c u s − M f l o w − M r e j e c t , 0 ) (6) \mathbf{M}_{blend} = \max(1 - \mathbf{M}_{occ} - \mathbf{M}_{defocus} - \mathbf{M}_{flow} - \mathbf{M}_{reject}, 0) \tag{6} Mblend=max(1MoccMdefocusMflowMreject,0)(6)

I f i n a l = u n c r o p ( M b l e n d ⊙ I f u s i o n + ( 1 − M b l e n d ) ⊙ I f u s i o n ) (7) I_{final} = uncrop(\mathbf{M}_{blend} \odot I_{fusion} + (1 - \mathbf{M}_{blend}) \odot I_{fusion}) \tag{7} Ifinal=uncrop(MblendIfusion+(1Mblend)Ifusion)(7)

LEARNING FROM DUAL CAMERA RIG CAPTURES

最后,介绍一下文章的训练数据是怎么构建的,对于 low-lelve 的 CV 任务来说,训练数据的构建一直是个问题,如果用仿真退化的方式构造数据,可能存在域差异的问题。所以文章作者设计了一个采集数据的方式,用实际采集的数据作为训练数据。具体装置如下图所示:

在这里插入图片描述

文章中,将两部手机平行放置,这样可以同时采集到两部手机的主摄和长焦图像,这两部手机,一部可以称为主机,一部称为副机,训练的时候,主机的主摄和副机的长焦图像作为输入,而主机的长焦图像作为GT,这样既模拟了实际的两路图像,又有了实采的 GT 图像,而在实际推理的时候,可以直接将其中一部手机的主摄和长焦作为输入即可。

这篇关于论文阅读--Efficient Hybrid Zoom using Camera Fusion on Mobile Phones的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089186

相关文章

BD错误集锦1——[Hive]ERROR StatusLogger No log4j2 configuration file found. Using default configuration:

错误描述:在使用IDEA进行jdbc方式连接到hive数据仓库时,出现以下错误:                ERROR StatusLogger No log4j2 configuration file found. 问题原因:缺少log4j2.xml文件   <?xml version="1.0" encoding="UTF-8"?><Configuration><Appender

ssh在本地虚拟机中的应用——解决虚拟机中编写和阅读代码不方便问题的一个小技巧

虚拟机中编程小技巧分享——ssh的使用 事情的起因是这样的:前几天一位工程师过来我这边,他看到我在主机和虚拟机运行了两个vscode环境,不经意间提了句:“这么艰苦的环境写代码啊”。 后来我一想:确实。 我长时间以来都是直接在虚拟机里写的代码,但是毕竟是虚拟机嘛,有时候编辑器没那么流畅,在文件比较多的时候跳转很麻烦,容易卡住。因此,我当晚简单思考了一下,想到了一个可行的解决方法——即用ssh

康奈尔大学之论文审稿模型Reviewer2及我司七月对其的实现(含PeerRead)

前言 自从我司于23年7月开始涉足论文审稿领域之后「截止到24年6月份,我司的七月论文审稿GPT已经迭代到了第五版,详见此文的8.1 七月论文审稿GPT(从第1版到第5版)」,在业界的影响力越来越大,所以身边朋友如发现业界有相似的工作,一般都会第一时间发给我,比如本部分要介绍的康奈尔大学的reviewer2 当然,我自己也会各种看类似工作的论文,毕竟同行之间的工作一定会互相借鉴的,我们会学他们

芯片后端之 PT 使用 report_timing 产生报告如何阅读

今天,就PT常用的命令,做一个介绍,希望对大家以后的工作,起到帮助作用。 在PrimeTime中,使用report_timing -delay max命令生成此报告。switch -delay max表示定时报告用于设置(这是默认值)。 首先,我们整体看一下通过report_timing 运行之后,报告产生的整体样式。 pt_shell> report_timing -from start_

【论文精读】分类扩散模型:重振密度比估计(Revitalizing Density Ratio Estimation)

文章目录 一、文章概览(一)问题的提出(二)文章工作 二、理论背景(一)密度比估计DRE(二)去噪扩散模型 三、方法(一)推导分类和去噪之间的关系(二)组合训练方法(三)一步精确的似然计算 四、实验(一)使用两种损失对于实现最佳分类器的重要性(二)去噪结果、图像质量和负对数似然 论文:Classification Diffusion Models: Revitalizing

【python】python葡萄酒国家分布情况数据分析pyecharts可视化(源码+数据集+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 python葡萄酒国家分布情况数据分析pyecharts可视化(源码+数据集+论文)【独一无二】 目录 python葡

【LLM之KG】CoK论文阅读笔记

研究背景 大规模语言模型(LLMs)在许多自然语言处理(NLP)任务中取得了显著进展,特别是在零样本/少样本学习(In-Context Learning, ICL)方面。ICL不需要更新模型参数,只需利用几个标注示例就可以生成预测。然而,现有的ICL和链式思维(Chain-of-Thought, CoT)方法在复杂推理任务上仍存在生成的推理链常常伴随错误的问题,导致不真实和不可靠的推理结果。

【python】python基于akshare企业财务数据对比分析可视化(源码+数据集+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 系列文章目录 目录 系列文章目录一、设计要求二、设计思路三、可视化分析 一、设计要求 选取中铁和贵州茅

在WinCE的C#编程中,需要静态调用C++的动态库,需要添加using System.Runtime.InteropServices

using System.Runtime.InteropServices;         [DllImport("Win32DLL.dll", EntryPoint = "WriteREG_SZToRegTCHAR")]         private static extern bool WriteREG_SZToRegTCHAR(int iFlag, string regKeyP

AIGC-Animate Anyone阿里的图像到视频 角色合成的框架-论文解读

Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation 论文:https://arxiv.org/pdf/2311.17117 网页:https://humanaigc.github.io/animate-anyone/ MOTIVATION 角色动画的