论文阅读:Computational Long Exposure Mobile Photography (一)

news2024/11/26 10:46:15

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章,介绍如何在手机摄影中实现长曝光的一些拍摄效果。

Abstract

长曝光摄影能拍出令人惊叹的影像,用运动模糊来呈现场景中的移动元素。它通常有两种模式,分别产生前景模糊或背景模糊效果。前景模糊图像通常是用安装在三脚架上的相机拍摄的,描绘的是移动的前景元素(如丝般的流水或光轨)呈现出模糊效果,而背景景观则非常清晰。背景模糊图像(也称为平移摄影)是在相机追踪移动主体时拍摄的,从而得到主体清晰而背景因相对运动而模糊的图像。这两种技术都极具挑战性,并且需要额外的设备和高超的技巧。
本文介绍了一种计算式连拍摄影系统,它运行在手拿式智能手机的相机应用程序中,只需按下快门按钮就能全自动地实现这些效果。我们的方法首先检测并分割出显著主体。我们对多帧画面中的场景运动进行追踪并对齐图像,以保持所需的清晰度并产生具有美感的运动拖影。我们拍摄一组曝光不足的连拍照片,并选择输入帧的子集,无论场景或相机的运动速度如何,这些子集都能产生长度可控的模糊拖影。我们预测帧间运动并合成运动模糊来填补输入帧之间的时间间隙。最后,我们将模糊图像与正常曝光的清晰图像合成,以保证面部或场景中几乎没有移动的区域的清晰度,并生成最终的高分辨率和高动态范围(HDR)照片。我们的系统使原本只有专业人士才能掌握的能力得以普及,让大多数普通摄影爱好者也能使用这种创意风格。

  • 图 1
    按下快门按钮时,我们的智能手机相机系统在几秒钟内捕获、处理并输出常规照片和长曝光对应的照片,如上图所示。手持拍摄的前景模糊示例如(a)所示,在没有精确跟踪的情况下拍摄的背景模糊示例如(b)所示。我们的计算长曝光摄影管线完全自动地处理这两种用例。

Introduction

手机摄影在消费者的日常生活中无处不在,并且正在逐渐取代传统摄影。通过使用连拍和后期处理技术,现代手机的成像流程能够产生非常高质量的结果,提供高动态范围色调映射、出色的低光拍摄性能并模拟景深虚化(散景)效果,而这些在以前只有使用更大、更重的相机和镜头才能实现。

尽管有这些显著的改进,但长曝光移动摄影仍然没有得到很好的处理。现有的解决方案无法帮助用户拍出移动场景元素模糊而静态场景元素清晰的效果。这种清晰与模糊的对比是一张引人入胜的照片的关键特性,而仅仅通过延长手持相机传感器的曝光时间是无法实现这种效果的。

传统的长曝光摄影通常根据场景和情况以以下两种方式之一进行。一种方法是在清晰的背景上产生前景模糊效果(例如如丝般的瀑布、光轨等),这需要使用很长的曝光时间,可能长达几秒。这就需要使用三脚架,因为即使是轻微的相机抖动也会导致不希望出现的背景清晰度损失。此外,必须在镜头上添加一个中性密度(ND)滤镜,以避免传感器曝光过度。
第二种方法称为平移摄影,它呈现出的效果是移动主体清晰,而背景由于相对于主体的运动而模糊。实现这种效果的方法是用相机追踪移动主体,同时保持快门打开,适度增加曝光时间(例如半秒),并稍微缩小光圈以避免图像曝光过度。摄影师必须尽可能精确地追踪主体的运动,以避免不希望出现的主体清晰度损失,同时还要在正确的时刻按下快门按钮。
这两种方法都需要高超的技巧、大量的练习,并且要考虑到场景的移动速度来手动选择相机快门速度才能达到理想的效果。

本文的主要贡献是一个计算式长曝光移动摄影系统,该系统有两种变体,使上述两种应用场景得以普及。它在谷歌 Pixel 6 和 7 智能手机上以一种名为 “运动模式” 的新相机模式实现,用户无需使用三脚架或镜头滤镜,也无需精确追踪或完全追踪移动主体就能轻松拍摄出这些效果。我们的方法在每种变体中都是全自动的端到端流程:用户选择希望生成前景模糊还是背景模糊效果后,只需用户按下快门按钮就能生成 1200 万像素的长曝光照片,同时补偿相机和/或主体的运动,从而保留所需的背景和主体的清晰度。整个系统的主要组成部分如下:

  • 拍摄和选帧策略,产生与场景或相机速度无关的标准化模糊拖影长度;
  • 结合注视显著性与人和宠物面部区域预测的主体检测,以及对其运动的追踪;
  • 输入图像的对齐,以消除相机抖动,在存在移动的前景元素时稳定背景,或者在产生令人满意的背景运动模糊拖影的同时消除主体运动。
  • 密集运动预测和模糊合成,跨越多个高分辨率输入帧,并生成保留高光的平滑弧形运动模糊轨迹。

此外,文章的系统架构包含多个神经网络,在计算和内存预算受限的移动设备上能够高效运行,实现了高动态范围(HDR)成像流程,仅需几秒就能生成相关的常规照片和长曝光照片。

System Overview

  • 图 2
    在这里插入图片描述
    我们的系统逐步处理原始的突发图像,在这个图表上从左到右,首先在低分辨率(8 倍下采样)下进行初始主体预测、特征跟踪、运动分析和运动预测。图像也在半分辨率(2 倍下采样)下进行处理以合成运动模糊,然后再上采样回全 1200 万像素分辨率以进行合成和色调映射得到最终结果。

文章整体的系统示意图如图 2 所示。所捕获的原始图像流通过四个阶段以两种不同分辨率逐步处理,每个阶段对应于图 2 中的一行:初始主体检测、运动分析、运动预测和渲染。
初始显著性和面部预测阶段计算用于主体检测的主要信号,生成归一化权重图。运动分析阶段负责对与检测到的主体或背景相对应的一组特征点进行追踪和对齐,并基于运动统计数据选择帧。运动预测阶段预测密集的线性核和权重图,这些图在渲染阶段用于生成跨越给定输入帧对的平滑运动模糊。最后的合成阶段对最终结果进行分层处理,同时保留最终图像中重要区域的清晰度。

前三个阶段将经过色调映射并转换为 sRGB 的图像作为输入,这些图像被下采样 8 倍至 504×376 的低分辨率。选择这种分辨率是为了在处理帧时实现低延迟,运算耗时主要由密集运动预测神经网络决定。这也确保了感受野能够覆盖输入全分辨率图像中大多数实际的运动差异。然而,最后一个阶段使用特意曝光不足的连拍原始图像,并将其转换为 16 位线性 RGB。高比特深度对于在渲染过程中保留场景的高动态范围是必要的,即避免高光过饱和和阴影中的条纹伪影。图像被下采样 2 倍,这是一种折中的做法,既能在最终结果中保留足够的细节,又能在减少内存占用的情况下运行。

增量处理循环在每次迭代时对一个额外的连拍帧进行转换和下采样,将其输入到我们流程的最后三个阶段,从而得到一个累积平均的运动模糊图像。当达到帧选择标准(通过对运动模糊拖影长度进行估计)时,循环停止。然后我们合成最终结果,同时将图像上采样回全分辨率。在流程末尾,图像会被转换为低动态范围的 8 位表示形式,通过色调映射来保留场景的高动态范围视觉外观。

Implementation

Busrt Capture

我们的相机系统以每秒 30 帧的速率拍摄画面,采用全自动光圈、快门速度和对焦设置。这些设置可能会根据画面中的场景变化进行动态调整,而且除了场景突然变化的情况外,我们的系统都能很好地运行。

在背景模糊的情况下,我们以有快速移动的近处主体的场景为目标。当按下快门按钮时,最近拍摄的帧被用作基础帧来生成常规曝光图像,因为它描绘了用户所选择的动作的顶点。然后,我们的算法可能会选择过去多达 8 个额外的帧来产生背景模糊效果。

在生成前景模糊效果时,我们以场景运动速度范围大得多的场景为目标,包括慢速和远距离移动的内容。为了产生引人注目的效果,这需要根据场景运动将拍摄时长延长至几秒。当按下快门按钮时,我们利用通过相机取景器看到的最后 5 帧快速分析场景运动统计数据,并自动确定后续拍摄时长,目的是满足我们的帧选择标准。我们使用接下来几节中描述的运动追踪和图像对齐的轻量级变体(其运行时间在 50 毫秒以内)来计算场景速度的估计值。根据这个估计值,在恒定速度假设下,我们很容易推导出能产生所需模糊拖影长度的拍摄时长。考虑到最长可达 7 秒的延长拍摄时长,我们还得出了一个帧处理速率,以便选择多达 12 个拍摄帧的均匀分布子集进行处理,在计算预算和合适的时间采样率之间取得平衡。被选中用于处理的拍摄帧被排队,以便由后续阶段立即进行并行处理,从而隐藏拍摄过程中的部分处理延迟。

Automatic Subject Detection

在背景模糊的情况下,我们希望主体固定,而其背后的世界其余部分呈现模糊效果。因此,我们会自动检测和追踪主要主体,并对输入帧进行对齐以抵消主体的运动。主体被表示为一个权重图,并用于求解反向主体运动对齐。
首先通过注意力显著性这一代理任务来预测主要主体。对于此任务,我们使用一个对移动端友好的、带有跳跃连接的 3 层 U - Net,其编码器由 15 个具有 10 个基础通道的 BlazeBlock 组成,相应的解码器由可分离卷积和双线性上采样层构成。它是从在 SALICON 数据集 上训练的一个更大的模型中提炼出来的。为了聚焦于我们信号中的显著性峰值,我们将预测值重新归一化到区间 [0, 1],并将低于阈值(我们根据经验选择 0.43)的值置零。
显著性信号往往在主体中心达到峰值,所以我们用面部信号对其进行补充,这有助于保持主体面部的清晰,这对于具有复杂关节运动的主体尤为重要。我们通过首先预测人、猫和狗的面部区域来计算面部信号,然后使用平滑阶跃衰减(smootherstep falloff)对所得区域进行羽化处理,最后用一个全主体分割对其进行掩蔽。
我们如下组合显著性和面部信号,以生成每个像素权重为𝑤 = 𝑠(1 + 𝑓) 的主体权重图,其中𝑠∈[0, 1] 是显著性信号值,𝑓∈[0, 1] 是面部信号值,随后将其重新归一化到区间 [0, 1]。

Motion Tracking

我们使用一个基于 [Grundmann 等人,2011] 的特征跟踪库来提取用于后续图像对齐的运动轨迹。运动轨迹统计数据也用于选择帧,以确定场景中何时已经捕获到足够的运动。
背景模糊中的主体跟踪需要在主体上有高浓度的轨迹,以实现稳定、高质量的对齐。作为一种延迟优化措施,我们对图像网格(每个网格单元为 5×5 像素)进行 rejection sampling,以生成密度与主体权重图成比例的特征轨迹。我们只尝试在这样的网格单元中提取特征轨迹:其中采样得到的均匀随机变量 𝑣∈[0, 1] 小于该网格位置对应的平均轨迹权重。

Image Alignment

根据特征轨迹对应关系,我们首先估计全局变换,以便将所有帧与参考帧对齐。这消除了整体相机运动,包括用于跟踪对象的手持抖动和扫动。剩余的图像对齐阶段则取决于所需的运动模糊效果:前景模糊或背景模糊。为了便于说明,我们选取一个示例场景,它可以呈现为如下两种情况之一:如图 3 所示,一辆出租车驶过繁忙的城市十字路口。

  • 图 3
    在这里插入图片描述

城市场景。上图:交通在繁忙的城市十字路口移动,前景运动向量(红色)和背景运动向量(绿色)。下图:我们的前景模糊(左)和背景模糊(右)结果。

  • 前景模糊

为了使背景尽可能清晰,我们必须考虑诸如视差、滚动快门和镜头畸变等空间效应。在应用全局变换之后,我们计算一个残差向量,它是变换后的跟踪特征与其在基准帧中对应位置之间的位置差。然后,我们利用这些残差来估计图像上顶点网格的局部细化变换。由此产生的空间变化扭曲消除了背景中的运动,同时保留了前景中的运动,从而产生如图 3(左下角)所示的清晰背景。

我们放置网格和估计局部变换的方法是类似的,但我们对各点进行均匀加权,并在局部相似性变换估计过程中对纳入的点采用硬性截止,以获得更好的性能。这种估计由每个顶点的支撑半径控制(在图 4 中显示为品红色圆圈),即特征点到顶点的最大距离,超过这个距离的特征点将不被纳入局部细化估计。我们发现,将这个半径设置为网格单元尺寸的 1.5 倍,并采用 8×6 个单元的网格尺寸,足以使局部细化变换在整个视场内平滑变化,同时又足够小,使得来自场景不同部分的不同场景对象不会相互影响。将估计出的变换应用于每个顶点,进而生成一个空间变化的网格,使任意帧的背景与参考帧的背景对齐。为了优化延迟,通过向 GPU 传递局部二维位移矢量纹理,将该网格的应用合并到下游渲染阶段。

  • 图 4
    在这里插入图片描述
    空间变化的扭曲。左上图:在一个网格顶点(橙色)的支持区域(品红色)内的背景流向量(绿色)对其局部位移(黄色)有贡献。右上图:得到的网格和空间变化的扭曲,将背景与参考帧的背景对齐。仅使用单个全局单应性变换的前景模糊结果(左下图)和使用我们的空间变化网格扭曲的前景模糊结果(右下图)。插图以 5 倍放大显示。

  • 背景模糊

在这种情况下,如图 3(右下角)所示,我们希望前景尽可能清晰。我们使用主体遮罩来选择与前景主体相对应的特征轨迹子集。以此为起点,我们进一步使用谱聚类来选择最显著的运动簇,以帮助辨别要跟踪的正确运动片段并去除异常值 [Porikli 2004]。这对于有关节运动的主体(例如跑步者,其四肢的运动与躯干不同)特别有用。
我们目标函数的目的是平衡两个目标:(1) 主体清晰度:使显著点对应关系的整体重投影误差最小化;(2) 时间平滑性:使变换后的背景运动矢量尽可能与前一时间步的运动矢量平行。

给定一对具有点对应关系 x i x_i xi x j x_j xj的帧 i i i j j j,我们定义一个相似变换,它将二维点从帧 i i i 到帧 j j j 进行均匀缩放( s j , i ∈ R 1 s_{j,i} \in \mathbb{R}^{1} sj,iR1)、旋转( R j , i ∈ S O ( 2 ) \mathbf{R}_{j,i} \in SO(2) Rj,iSO(2))和平移( t j , i ∈ R 2 t_{j,i} \in \mathbb{R}^{2} tj,iR2),如下所示:

x ^ j = s j , i R j , i x i + t j , i (1) \hat{x}_{j} = s_{j,i}\mathbf{R}_{j,i}x_i + t_{j,i} \tag{1} x^j=sj,iRj,ixi+tj,i(1)

为了简化,省略下标,目标函数可以定义为如下:

min ⁡ s , R , t λ f E f ( s , R , t ) + λ b E b ( s , R , t ) (2) \min_{s, R, t} \lambda_f E_f(s, R, t) + \lambda_b E_b(s, R, t) \tag{2} s,R,tminλfEf(s,R,t)+λbEb(s,R,t)(2)

λ f , λ b \lambda_f, \lambda_b λf,λb 是相对的权重系数, E f E_f Ef 是主体清晰度,针对前景点 x ∈ X f x \in X_f xXf 定义的,它是变换后点对应关系(使用公式 1)重投影误差的 L2 范数:

E f ( s , R , t ) = ∑ x ∈ X f ∥ x j − s R x i − t ∥ 2 (3) E_f(s, R, t) = \sum_{x \in X_f} \left \| x_{j} - sRx_i - t \right \|_2 \tag{3} Ef(s,R,t)=xXfxjsRxit2(3)

背景项 E b E_b Eb 被用作一种时间平滑先验,用于对与前一帧对中相应向量不平行的背景流向量进行惩罚。给定三个不同的帧索引 i,j 和 k 它利用向量点积作为平行性度量来定义,如下所示:

E b ( s i , k , R i , k , t i , k ) = ∑ x ∈ X b smooth L 1 ( ∣ v i , j ⋅ v j , k ∣ ∥ v i , j ∥ ∥ v j , k ∥ ) (4) E_b(s_{i,k}, R_{i,k}, t_{i,k}) = \sum_{x \in X_b} \text{smooth}_{L_1} (\frac{\left | v_{i,j} \cdot v_{j, k} \right|}{\left \| v_{i,j} \right \| \left \| v_{j,k} \right \| }) \tag{4} Eb(si,k,Ri,k,ti,k)=xXbsmoothL1(vi,jvj,kvi,jvj,k)(4)

其中 v p , q = x ^ q − x q v_{p,q} = \hat{x}_q - x_q vp,q=x^qxq 是参考帧 q 中的一个点与其来自帧 p 的变换后点对应关系之间的方向位移向量。采用 [Huber 1964] 中的平滑-L1 损失函数来防止优化过程中梯度消失。

smooth L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e (6) \text{smooth}_{L1}(x) = \left\{\begin{matrix} 0.5x^2 & if \left | x \right | < 1 \\ \left | x \right| - 0.5 & otherwise \end{matrix}\right. \tag{6} smoothL1(x)={0.5x2x0.5ifx<1otherwise(6)

不失一般性,我们选择 i =0 作为固定的参考帧索引,并在公式 4 中设置 k=j+1,以便在对帧序列进行单次正向遍历中,对每一对新的帧(j,j+1)增量式地估计变换。我们使用 Ceres 库 [Agarwal 等人,2022] 来解决这个非线性优化问题。我们分别为 λ f \lambda_f λf λ b \lambda_b λb 使用值 1 和 10,以平衡这两个误差项的影响。

未完待续:

Computational Long Exposure Mobile Photography (二)

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

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

相关文章

数据结构与算法 - 基础

本文首发于 个人博客 程序 数据结构 算法 其实很多同学知道数据结构与算法很重要&#xff0c;但是却不明觉厉。 这里我们看一个简单的题&#xff1a; 对自然数从1到100的求和 最简单的设计无非是&#xff1a; void addNum () { int total 0; for (int i 1; i < 1…

算法简介:动态规划

动态规划 1. 动态规划2. 案例2.1 旅游行程最优化 1. 动态规划 背包问题&#xff1a;背包可以容纳的重量是4磅&#xff0c;吉他为1磅&#xff0c;价值1500元&#xff1b;音响为4磅&#xff0c;价值3000元&#xff1b;笔记本电脑为3磅&#xff0c;价值为2000元。如何在背包中放入…

GPU 学习笔记四:GPU多卡通信(基于nccl和hccl)

文章目录 一、前沿1.1 背景回顾1.2 XCCL在AI通信架构中的位置和作用 二、英伟达GPU通信 nccl2.1 NCCL简介2.2 通信模式2.2.1 通信模式分类2.2.2 通信模式分析2.2.3 通信nccl编程实例 2.3 NCCL通信算法2.3.1 环形算法 ring algorithm2.3.2 树形算法 tree algorithm 防止遗忘和后…

最新PHP校园源码系统开发(多客社区校园系统源码全套APP源码附搭建教程)

最新PHP校园源码系统开发、多客社区校园系统源码以及全套APP源码附搭建教程的需求 一、最新PHP校园源码系统开发 技术栈选择&#xff1a; 后端&#xff1a;PHP&#xff08;建议使用PHP 7.2或更高版本&#xff09;数据库&#xff1a;MySQL&#xff08;建议使用MySQL 5.6或更高版…

Netty 组件介绍 - ByteBuf

直接内存&堆内存 ByteBuf buffer ByteBufAllocator.DEFAULT.heapBuffer(10);ByteBuf byteBuf ByteBufAllocator.DEFAULT.directBuffer(10); 组成 ByteBuf维护了两个不同的索引&#xff0c;一个用于读取&#xff0c;一个用于写入。 写入 内存回收 堆内存使用的是JVM内…

Java项目实战II基于Java+Spring Boot+MySQL的高校办公室行政事务管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在高等教育…

word mathml 创建粗体字母快捷键

在 mathml 中达到latex中 \mathbf{A} 的效果 由于word本身不支持这个命令&#xff0c;所以打算用快捷键实现 快捷键的功能是加粗光标前一个字目 1. Alt F8 打开宏&#xff0c;如果打不开可以尝试 Alt Fn F8 2. 输入 BoldPreviousCharacter 新建宏&#xff1a; Sub Bold…

redis实现分布式锁,go实现完整code

Redis分布式锁 Redis 分布式锁是一种使用 Redis 数据库实现分布式锁的方式&#xff0c;可以保证在分布式环境中同一时间只有一个实例可以访问共享资源。 实现机制 以下是实现其加锁步骤&#xff1a; 获取锁 在 Redis 中&#xff0c;一个相同的key代表一把锁。是否拥有这把锁&…

flink 自定义kudu connector中使用Metrics计数平均吞吐量,并推送到自定义kafkaReporter

文章目录 前言1. Registering metrics2. Metrics 的类型2.1 counter2.2 Gauge2.3 Histogram2.4 meter 3. 指标划分3.1 指标所属的范围3.2 默认所属 4. 自定义kudu connector中使用Metrics4.1 sink算子继承RichFunction4.2 注册指标4.3 计数逻辑4.4 自定义Reporter&#xff0c;推…

柯桥日语培训|N1常考语法:~(よ)うが/(よ)うと——“无论……都……”

&#xff5e;&#xff08;よ&#xff09;うが&#xff0f;&#xff08;よ&#xff09;うと 接续&#xff1a;動意向形&#xff0f;イ形→かろう&#xff0f;名、ナ形→だろう・であろう&#xff0b;が&#xff0f;と 说明&#xff1a;表示假定条件的逆接&#xff0c;无论前项如…

一个基于Zookeeper+Dubbo3+SpringBoot3的完整微服务调用程序示例代码

一、关于 Dubbo3 的一些优化改进介绍 Dubbo3 的官方文档地址&#xff1a; https://cn.dubbo.apache.org/zh-cn/overview/what/overview/ 其针对一些问题进行了优化和改变。个人整理3个小的方面&#xff1a; 1. 在服务注册方面使用 DubboService 注解&#xff0c;不再使用 Servi…

电能表预付费系统-标准传输规范(STS)(33)

6.5.4.4 Key rotation process 按键旋转过程 The entire key is rotated one bit position to the left as illustrated in Figure 15.整个密钥向左旋转一个位&#xff0c;如图15所示。 6.5.4.5 Worked example to generate TokenData for a TransferCredit token using the S…

时序数据库是什么:概念、特点与分类简析

时序数据与时序数据库的“保姆级”科普&#xff01; 作为将数据价值转化为产能能效的“核心大脑”&#xff0c;数据库的发展依然处于加速期&#xff0c;面向不同数据类型的数据库类型也在不断增加。 在众多细分领域数据库类型中&#xff0c;伴随制造业数字化转型的行业趋势和多…

【创建型】单例模式

单例模式使用的场景&#xff1a;需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即&#xff1a;重量级对象)&#xff0c;但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等) 1. 饿汉式&#xff08;静态常量&#xf…

6.0、静态路由

路由器最主要的功能就是转发数据包。路由器转发数据包时需要查找路由表&#xff08;你可以理解为地图&#xff09;&#xff0c;管理员可以直接手动配置路由表&#xff0c;这就是静态路由。 1.什么是路由&#xff1f; 在网络世界中&#xff0c;路由是指数据包在网络中的传输路…

工业通信网关的各项功能解析-天拓四方

在工业自动化和智能制造的浪潮中&#xff0c;工业通信网关作为连接工业现场与互联网的重要桥梁&#xff0c;发挥着至关重要的作用。它不仅实现了不同网络协议之间的转换&#xff0c;还在数据采集、设备控制、网络管理等方面展现出强大的功能。 一、协议转换功能 工业通信网关…

数据结构与算法——Java实现 53.力扣938题——二叉搜索树的范围和

生命的意义 在于活出自我 而不是成为别人眼中的你 —— 24.11.3 938. 二叉搜索树的范围和 给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1&#xff1a; 输入&#xff1a;root [10,5,15,3,7,null,18], low 7, high 15 …

TensorRT-LLM的k8s弹性伸缩部署方案

Scaling LLMs with NVIDIA Triton and NVIDIA TensorRT-LLM Using Kubernetes | NVIDIA Technical Blog 一共涉及4个k8s组件&#xff1a; 1. Deployment&#xff1a;跑起来N个pod&#xff1b;指定NVIDIA官方的triton&trt-llm的docker image&#xff0c;指定好model放在哪个…

高亮无惧烈日,强力巨彩租赁屏点亮户外“视”界

在户外显示领域&#xff0c;一款性能出色、适应性强、维护便捷的租赁屏无疑是众多主办方和广告商的首选。强力巨彩旗下的幻云系列租赁屏具备画面清晰、无水波纹、性能稳定、高亮度等诸多优势&#xff0c;可应用于各大户外显示场所&#xff0c;是户外租赁屏市场的明星产品。   …

批量删除redis数据【亲测可用】

文章目录 引言I redis客户端基础操作key的命名规则批量查询keyII 批量删除key使用连接工具进行分组shell脚本示例其他方法III 知识扩展:控制短信验证码获取频率引言 批量删除redis数据的应用: 例如缓存数据使用了新的key存储,需要删除废弃的key。RedisTemplate的key序列化采…