论文阅读:Real-time Controllable Denoising for Image and Video
这篇文章是 CVPR 2023 的一篇文章,探讨了在图像与视频降噪中,如何实时控制降噪强度的问题。
Abstract
图像或者视频降噪,是在细节与平滑度之间的一个微妙的平衡,因为噪声与细节都属于高频信息,降噪在去除噪声的同时,也会对纹理细节造成一定的损害,而且最终的图像效果与人的主观感受有关,所以降噪强度也是一个众口难调的问题。所以文章的主旨非常明确,就是要做可控的降噪,而且是实时可控。这个在传统的降噪方法中,可以通过调整算法中的某些超参进行控制。不过对于目前主流的神经网络一类的方法来说,调整降噪强度,需要每次重新跑一遍推理,这个对于实时性要求很高的场景来说,这种耗时是很难接受的。所以这篇文章提出了一种可以实时控制降噪程度的方法,方法的名字也很直白,Real-time Controllable Denoising (RCD),这个方法可以只用一次推理,实现不同程度的降噪水平。RCD 主要是把降噪网络的最后一层的输出,通常是一个单一的 noise map,替换成了一个轻量级的模型,该模型可以输出多个 noise maps。而且文章作者设计了一种新的噪声去相关的处理方式,以保证输出的多个 noise map 是正交的,类似一组正交基,然后任意的降噪强度,可以由这组正交集插值表示。这个过程不依赖网络,也不需要网络的推理。这个类似一个 plug-and-play 的模块,可以接在不同的降噪模型上面使用,并取得很好的降噪效果。
Methods
Conventional Deep Denoising
文章先大概介绍了一下之前基于深度学习的降噪方法,主要是基于学习的方法,利用神经网络强大的特征学习能力,去实现传统方法中的滤波方法。绝大部分降噪方法通过回归预测一个噪声图来构建清晰图与噪声图之间的关系。特别的,给定一张输入的噪声图 I n \mathbf{I}_n In 以及一个模型, M : R H × W × C → R H × W × C \mathcal{M}: \mathbb{R}^{H \times W \times C} \rightarrow \mathbb{R}^{H \times W \times C} M:RH×W×C→RH×W×C,我们可以预测清晰图与噪声图之间满足如下关系: I c = I n + M ( I n ) \mathbf{I}_c = \mathbf{I}_n + \mathcal{M}(\mathbf{I}_n) Ic=In+M(In), M \mathcal{M} M 表示神经网络模型,通过学习优化的方法更新模型的参数。这种方法我们可以看到,最终输出的是单张清晰图像,无法显式地进行降噪的调整。
- 图2
图 2 展示了文章的 RCD 方法与传统的可控降噪方法之间的根本差异。与依赖控制网络的传统方法相比,RCD 流程生成了强度/级别不同的可编辑噪声,通过外部参数提供显性的控制,并实现了无网络的实时降噪编辑。RCD 提供的实时编辑功能为许多以前使用传统技术无法实现的应用创造了新的机会,例如在线视频降噪编辑,甚至在播放过程中(例如,为 ISP 调优工程师进行手机摄像头视频质量调优),以及在端侧设备和嵌入式系统上部署可控降噪。由于 RCD 的编辑阶段仅涉及图像插值,用户可以在性能较低的设备上编辑他们想要的结果,而无需使用 GPU/DSP。
Pipeline Overview
接下来作者介绍文章的方法,Real-time Controllable Denoising (RCD),整体的算法框架如图 3 所示,
- 图 3
RCD 包括三部分:
- 第一部分是一个 backbone 网络, M b : R H × W × C → R H × W × L C \mathcal{M}_b: \mathbb{R}^{H \times W \times C} \rightarrow \mathbb{R}^{H \times W \times LC} Mb:RH×W×C→RH×W×LC,这个网络会生成多张不同噪声水平的 noise maps,其中 L 表示定义好的噪声水平数量
- 第二部分是一个噪声解耦模块,将 backbone 网络输出的各个 noise maps 进行正交化,这样可以方便后面的调整
- 第三部分是一个 AutoTune 模块,给定一组控制参数,生成最好的降噪效果
假设 backbone 网络输出一组噪声图 noise maps, { N i } i = 1 L \{\mathcal{N}_i\}_{i=1}^{L} {Ni}i=1L,这组噪声图会经过后面的 Noise Decorrelation (ND) 模块,将噪声图正交化,类似生成一组基, { N ~ i } i = 1 L \{\tilde{\mathcal{N}}_i\}_{i=1}^{L} {N~i}i=1L,然后对 noise map 的这组基进行线性叠加,可以得到不同程度的降噪结果
I c = I n + ∑ i = 1 L c ˉ i N ~ i (1) \mathbf{I}_c = \mathbf{I}_n + \sum_{i=1}^{L} \bar{c}_i \tilde{\mathcal{N}}_i \tag{1} Ic=In+i=1∑LcˉiN~i(1)
其中, ∑ i = 1 L c ˉ i = 1 \sum_{i=1}^{L} \bar{c}_i = 1 ∑i=1Lcˉi=1
Multi-level Noise Generation
给定一张输入的噪声图像 I n \mathbf{I}_n In,backbone 网络的目标是输出一组 noise maps, { N i } i = 1 L \{\mathcal{N}_i\}_{i=1}^{L} {Ni}i=1L,这组噪声图对应事先定义好的噪声水平,比如噪声水平为 { 5 , 10 , 15 , . . . , 60 } \{5, 10, 15, ..., 60\} {5,10,15,...,60},因此,可以定义如下:
σ ( N i ) = l i , ∀ i ∈ 1 , 2 , . . . , L (2) \sigma(\mathcal{N}_i) = l_i, \forall i \in 1, 2, ..., L \tag{2} σ(Ni)=li,∀i∈1,2,...,L(2)
其中, σ \sigma σ 表示噪声水平的估计,计算每张 noise map 的标准差,为了得到多张 noise maps,文章在设计 backbone 网络的时候,把最后一层的卷积层做了替换,每个噪声水平的 noise map 通过如下的归一化形式得到:
N i = l i M b ( I n ) i σ ( M b ( I n ) i ) , ∀ i ∈ 1 , 2 , . . . , L (3) \mathcal{N}_i = l_i \frac{\mathcal{M_b}(\mathbf{I}_n)^{i}}{\sigma(\mathcal{M_b}(\mathbf{I}_n)^{i})}, \forall i \in 1, 2, ..., L \tag{3} Ni=liσ(Mb(In)i)Mb(In)i,∀i∈1,2,...,L(3)
其中, M b ( I n ) ∈ R H × W × L C \mathcal{M_b}(\mathbf{I}_n) \in \mathbb{R}^{H \times W \times LC} Mb(In)∈RH×W×LC 是网络的输出, M b ( I n ) i ∈ R H × W × C \mathcal{M_b}(\mathbf{I}_n)^{i} \in \mathbb{R}^{H \times W \times C} Mb(In)i∈RH×W×C 表示某个噪声水平下的在通道维度的分量,那么式 3 得到的 N i \mathcal{N}_i Ni 可以看成是某个噪声水平下的 noise map。
文章也提到说,不同于之前的一些控制降噪程度的方法隐式地在网络中进行插值,文章提出的方法,通过求出不同噪声水平的 noise maps,然后可以显示地线性插值得到不同程度的降噪,通过这种方法,可以通过改变加权系数 c c c 从而实现快速实时的交互式可控降噪。
不过,因为网络直接输出的noise maps N i \mathcal{N}_i Ni 一般来说是高度相关的,这对于 noise map 的线性加权带来很多问题,为了让每个 noise map 之间的相关性尽量减少,文章提出了 Noise Decorrelation (ND) 模块。
Noise Decorrelation
Noise Decorrelation 模块是用来对 backbone 网络进行正则,以使得网络可以生成不同噪声水平的 noise maps。这个模块本身没有额外的参数,主要是通过统计计算,以让 N i \mathcal{N}_i Ni 之间尽量不相关,即, c o v ( N i , N j ) ≈ 0 , ∀ i , j ∈ { 1 , 2 , . . . , L } \mathbf{cov}(\mathcal{N}_i, \mathcal{N}_j) \approx 0, \forall i, j \in \{1, 2,..., L \} cov(Ni,Nj)≈0,∀i,j∈{1,2,...,L},其中 c o v \mathbf{cov} cov 表示求两个向量的协方差系数。
对于每个 noise map N i \mathcal{N}_i Ni,先进行维度变换, N i ∈ R 1 × M \mathcal{N}_i \in \mathbb{R}^{1 \times M} Ni∈R1×M,其中, M = H W C M=HWC M=HWC,相当于将之前的一个张量重新变成一个一维向量,然后将 L L L 张 noise map 叠在一起,得到 N ∈ R L × M \mathbf{N} \in \mathbb{R}^{L \times M} N∈RL×M,然后计算协方差矩阵, Σ = 1 M − 1 ( N − N ˉ ) ( N − N ˉ ) T {\Sigma} = \frac{1}{M-1}(\mathbf{N} - \bar{\mathbf{N}})(\mathbf{N} - \bar{\mathbf{N}})^{T} Σ=M−11(N−Nˉ)(N−Nˉ)T,其中, N ˉ \bar{\mathbf{N}} Nˉ 表示均值向量。
为了实现 Noise Decorrelation,文章求解了协方差矩阵的逆开根号矩阵 Σ − 1 / 2 {\Sigma}^{-1/2} Σ−1/2,这个求解为了提升效率,文章使用了牛顿迭代法:
Σ 0 = I Σ k = 1 2 ( 3 Σ k − 1 − ( Σ k − 1 ) 3 Σ ) , k = 1 , 2 , . . . T (4) \Sigma_0 = \mathbf{I} \\ \Sigma_k = \frac{1}{2}(3\Sigma_{k-1} - (\Sigma_{k-1})^3\Sigma), k=1,2,...T \tag{4} Σ0=IΣk=21(3Σk−1−(Σk−1)3Σ),k=1,2,...T(4)
其中, T T T 表示总的迭代次数,文章中提到 T 一般取 3 或者 4 基本可以收敛到合理范围。求得 Σ − 1 / 2 {\Sigma}^{-1/2} Σ−1/2 的近似值之后,可以得到解耦后的 noise map, N ~ = N Σ − 1 / 2 \tilde{\mathbf{N}} = \mathbf{N} \Sigma^{-1/2} N~=NΣ−1/2,然后将 N ~ \tilde{\mathbf{N}} N~ 进一步做变换,得到 L L L 张可编辑的 noise map, N ~ i \tilde{\mathcal{N}}_i N~i, 解耦后的 nosie map 有非常好的线性性质,可以满足如下的式子:
V a r ( ∑ i = 1 L c i N ~ i ) = ∑ i = 1 L c i 2 V a r ( N ~ i ) (5) \mathbf{Var}(\sum_{i=1}^{L} c_i \tilde{\mathcal{N}}_i) = \sum_{i=1}^{L} c_i^2 \mathbf{Var}(\tilde{\mathcal{N}}_i) \tag{5} Var(i=1∑LciN~i)=i=1∑Lci2Var(N~i)(5)
公式 5 展示了最终的噪声水平与控制参数 c i c_i ci 之间的关系,除此之外,Noise Decorrelation 模块可以促使模型取学习不同水平下的噪声形式,以增强降噪模型的表达能力。图 4 展示了 ND 模块如何发挥作用。有了 ND 模块作为正则, ∣ Σ ∣ F |\Sigma|_F ∣Σ∣F 可以趋近于 0,从而可以让模型通过线性加权得到想要的噪声强度,如果没有 ND 模块,噪声水平难以保证与想要的设定值一致。
- 图 4
AutoTune Module
有了上面介绍的 Noise Decorrelation 模块输出的 noise maps,接下来 AutoTune 模块将预测一组模型建议的控制参数 { c i } i = 1 L \{c_i\}_{i=1}^{L} {ci}i=1L 进而生成最终的降噪效果。用户可以在这组控制参数的基础上,进行调整,从而得到不同强度的降噪结果。AutoTune 模块也是一个非常轻量化的模块,直接用一个单层的模型,利用 t-softmax 激活函数进行计算:
c i = e A ( f ) i τ ∑ j = 1 n A ( f ) j τ c_i = \frac{e^{ \frac{\mathcal{A(f)_i}}{\tau}} }{\sum_{j=1}^{n} \frac{\mathcal{A(f)_j}}{\tau}} ci=∑j=1nτA(f)jeτA(f)i
其中 A \mathcal{A} A 表示一个 NN 网络层, f f f 表示输入的特征图, τ = 0.05 \tau = 0.05 τ=0.05 表示温度系数,为了让 backbone 模型尽量高效,文章直接用未曾归一的模型输出作为特征图,如图 3 中的模块 C 所示。
New Cardinality for Denoising Control
与之前仅仅调节噪声强度的方法不同,文章提出的 RCD 方案可以让用户在给定噪声强度的情况下,通过调节 { c i } \{c_i\} {ci} 进一步优化降噪结果,只要关于噪声水平 l i l_i li 关于 c i c_i ci 的加权平均和是固定的,公式 5 已经证明,当 ∑ i = 1 L c i 2 V a r ( N ~ i ) = ∑ i = 1 L c i 2 l i 2 \sum_{i=1}^{L} c_i^2 \mathbf{Var}(\tilde{\mathcal{N}}_i) = \sum_{i=1}^{L} c_{i}^{2}l_{i}^{2} ∑i=1Lci2Var(N~i)=∑i=1Lci2li2 不变的时候,那么最终输出结果的方差 V a r ( ∑ i = 1 L c i N ~ i ) \mathbf{Var}(\sum_{i=1}^{L} c_i \tilde{\mathcal{N}}_i) Var(∑i=1LciN~i) 也是固定的,在保持 ∑ i = 1 L c i 2 l i 2 \sum_{i=1}^{L} c_{i}^{2}l_{i}^{2} ∑i=1Lci2li2 不变的情况下,通过改变 l i l_i li,即引入不同噪声水平的 noise map N i \mathcal{N}_i Ni,可以优化得到不同的降噪结果。
Optimization Targets
为了让模型对不同的噪声水平的组合 ∑ i = 1 L c i N ~ i \sum_{i=1}^{L} c_i \tilde{\mathcal{N}}_i ∑i=1LciN~i 都有一个好的降噪效果,我们采用了一种多级并行训练策略,通过最小化每个级别噪声输出与真实噪声之间的差异来实现,即:
L l e v e l = 1 L ∑ i = 1 L L ( I g t , I n + N ~ i ) (6) \mathcal{L}_{level} = \frac{1}{L} \sum_{i=1}^{L} \mathcal{L}(\mathbf{I}_{gt}, \mathbf{I}_n + \tilde{\mathcal{N}}_i) \tag{6} Llevel=L1i=1∑LL(Igt,In+N~i)(6)
结合 AutoTune 模块的输出,最终总的 loss 函数为:
L t o t a l = λ L l e v e l + L ( I g t , I n + ∑ i = 1 L c ˉ i N ~ i ) (7) \mathcal{L}_{total} = \lambda \mathcal{L}_{level} + \mathcal{L}(\mathbf{I}_{gt}, \mathbf{I}_n + \sum_{i=1}^{L} \bar{c}_i \tilde{\mathcal{N}}_i) \tag{7} Ltotal=λLlevel+L(Igt,In+i=1∑LcˉiN~i)(7)
其中, λ = 0.1 \lambda = 0.1 λ=0.1 表示两种 loss 的权重分配。
文章在仿真的高斯分布噪声以及真实噪声分布的数据集上都进行了实验。
相关文章:
论文阅读:Real-time Controllable Denoising for Image and Video
这篇文章是 CVPR 2023 的一篇文章,探讨了在图像与视频降噪中,如何实时控制降噪强度的问题。 Abstract 图像或者视频降噪,是在细节与平滑度之间的一个微妙的平衡,因为噪声与细节都属于高频信息,降噪在去除噪声的同时&…...
【Kubernetes】虚拟 IP 与 Service 的代理模式
虚拟 IP 与 Service 的代理模式 1.userspace 代理模式2.iptables 代理模式3.IPVS 代理模式 由于 Service 的默认发布类型是 ClusterlP,因此也可以把 ClusterIP 地址叫作 虚拟 IP 地址。在 Kubernetes 创建 Service 时,每个节点上运行的 kube-proxy 会自动…...
深度学习·Pytorch
以下代码源自李沐 自定义模块类 继承module类 继承nn.Module重写构造函数前向传播 class MLP(nn.Module):# 用模型参数声明层。这里,我们声明两个全连接的层def __init__(self):# 调用MLP的父类Module的构造函数来执行必要的初始化。# 这样,在类实例…...
fastzdp_sqlmodel新增get_first和is_exitsts方法
说明 经过fastzdp_login的整合,我们发现,fastzdp_sqlmodel还可以继续封装两个便捷的方法。 get_first:获取查询结果集中的第一条数据is_exitsts:判断数据是否已存在 封装get_first方法 def get_first(engine, model, query_di…...
嵌入式软件--数电基础 DAY 3
一、二进制 (1)文字表述 二进制数只能取0,1两个数字,逢二进一。 通过二进制表达文字。如战争时代的电报。 通过电灯泡的亮灭传递出信息。可以对灯亮和灯灭富裕一些含义,就能传达出想要的消息。 这就是编码和解码两…...
【生成式人工智能-十五-经典的影像生成方法-GAN】
经典的影像生成方法-GAN GANDiscriminatorGenerator还需要加入额外信息么 GAN可以加在其他模型上面我们可以用影像生成模型做什么? 前面讲过VAE和Flow-based以及diffusion Model ,今天讲最后一种经典的生成方法GAN。 GAN 前面讲的几种模型都是用加入额外…...
python 已知x+y=8 求x*y*(x-y)的最大值
先用导数求解 已知xy8 求xy(x-y)的最大值 令y8-x 则 f(x)x⋅(8−x)⋅(x−(8−x))x⋅(8−x)⋅(2x−8) 导数方程为 f(x)-3x^2 24x - 32 求方程 − 3 x 2 24 x − 32 0 -3x^2 24x - 32 0 −3x224x−320 的根。 首先,我们可以尝试对方程进行因式分解。观察…...
windows平台的postgresql主从数据库流备份
主: 操作系统:windows10 数据库版本:postgresql-16.2 ip:192.168.3.254 从: 操作系统:windows10 数据库版本:postgresql-16.2 ip:192.168.3.253 配置主库 配置 pg_hba.conf 文件 在 pg 的安装目录下,找到 …...
Spring 常见设计模式
什么是设计模式? 设计模式(Design pattern)是为解决软件设计中通用问题而被提出的一套指导性思想。它是一种被反复验证、经过实践证明并被广泛应用的代码设计经验和思想总结,可以帮助开发者通过一定的模式来快速的开发高质量、可维…...
优化大量数据导出到Excel的内存消耗(二):如果数据超出Excel单表上限,则进行分表
优化前:优化大量数据导出到Excel的内存消耗_大文件异步导出 内存占用高-CSDN博客 写Excel文件报错:Invalid row number (1048576) outside allowable range (0..1048575) 写入Excel时遇到IllegalArgumentException,原因是超出允许的最大行数…...
rustrover打开会报Error: Invalid toolchain
如果 cargo --version 正常输出,但在使用 RustRover 时出现“Invalid toolchain”错误,可能是由于 RustRover 工具链配置有问题或路径指向错误。 解决步骤: 1. 检查 RustRover 的工具链配置 打开 RustRover,进入 Preferences 或…...
docker-compose 安装canal
创建 Canal 配置文件 /conf/canal.properties mkdir -p conf/ touch /conf/canal.properties # canal.properties# tcp bind ip canal.ip 0.0.0.0 canal.port 11111 canal.metrics.pull.port 11112# zookeeper 集群配置 canal.zkServers canal.zookeeper.sessionTimeout…...
Unity动画模块 之 3D Rig页签
本文仅作笔记学习和分享,不用做任何商业用途本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1.Rig页签 Rig 选项卡 - Unity 手册,rig是设置骨骼与替身系统的,工作流程如下 Avatar是什么…...
【蓝桥杯冲刺省一,省一看这些就够了-Java版本】蓝桥杯日期问题相关模板以及练习题
蓝桥杯历年省赛真题 点击链接免费加入题单 日期问题 java.time Java 中用于处理日期和时间的主要类位于 java.time 包中。以下是一些常用的类和其功能的简要介绍: LocalDate:表示日期。它提供了获取年、月、日以及日期之间比较的方法。 LocalDate to…...
【经典算法】BFS_FloodFill算法
目录 1, 算法介绍2,算法原理和代码实现(含题目链接)733.图像渲染200.岛屿的数量695.岛屿的最大面积130.被围绕的区域 3, 算法总结 1, 算法介绍 FloodFill(洪水灌溉) 算法介绍: 假设一个 4 * 4 的方格代表一块土地&am…...
RocketMQ之Topic主题详解
Topic概念定义 主题:RocketMQ中消息传输和存储的顶层容器,用于标识同类业务中逻辑的消息,可理解为消息的分类,主题消息的分类取决于业务,要发送的业务消息最好单独是一个Topic主题,以保证互相不被干扰Topi…...
实战OpenCV之图像显示
基础入门 OpenCV提供的功能非常多,图像显示是最基础也是最直观的一部分。它让我们能够直观地看到算法处理后的效果,对于调试和验证都至关重要。在OpenCV中,图像显示主要依赖于以下四个关键的数据结构和函数。 1、Mat类。这是OpenCV中最基本的…...
I2C的10-bit地址空间
10-bit地址空间: I2C支持 10-bit的设备地址,此时的时序如下图所示: 在 10-bit地址的 I2C系统中,需要两个帧来传输 slave的地址。第一个帧的前 5个 bit固定为 b11110,后接 slave地址的高 2位,第 8位仍然是 …...
TinyWebserver的复现与改进(6):定时器处理非活动连接
如果客户端长时间没有动作,会占用了许多连接资源,严重影响服务器的性能。因此需要通过实现一个服务器定时器,处理这种非活跃连接,释放连接资源。 定时器处理流程 SIGALARM触发:整个流程开始于一个 SIGALARM 信号&…...
ThinkPHP5 5.0.23 远程代码执行漏洞
目录 1、启动环境 2、漏洞利用 3、更改传参方式 4、修改参数 5、发送数据 1、启动环境 docker-compose up -d 2、访问靶机ip端口号8080 2、漏洞利用 使用burpsuite抓包软件抓包 3、更改传参方式 将 GET传参改为POST传参 4、修改参数 url参数 /index.php?scaptcha post参…...
C++鼠标键盘操作自动化
C鼠标键盘操作自动化 #pragma once #include <Windows.h> enum KEYS{A 65,W87,S83,D68,SHIFTVK_LSHIFT,ALT18,Tilde 126,//~TABVK_TAB,B66,SPACEVK_SPACE,ESCVK_ESCAPE,Q81 }; enum MOUSE {ML,MW,MR//左,中,右 }; class simulator//模拟器 { pu…...
多个主流Python GUI库全面解析,助你用Python轻松构建精美界面
Python 作为一门易学易用的编程语言,在各个领域都拥有广泛的应用。而 GUI (Graphical User Interface) 编程更是让 Python 变得更加灵活,可以帮助我们创建各种各样的桌面应用,为用户提供直观的交互体验。本文将介绍几个Python GUI 编程中常用…...
Kotlin学习-01创建kotlin学习
安装idea https://www.jetbrains.com/zh-cn/ 创建项目 选择kotlin 修改Main.kt fun main() {print("Hello World!") }运行...
Java、python、php版的企业单位考勤打卡管理系统的设计与实现(源码、调试、LW、开题、PPT)
💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…...
在IntelliJ IDEA中使用Git推送项目
去gitee网站注册用户 gitee网站地址:https://gitee.com/ github网站地址:https://github.com/ 一、创建仓库 以下以gitee为例进行介绍,github操作雷同。 1、创建仓库 点击页面右上方的"“并选择"创建仓库” 2、设置仓库相关信息 首先输入仓库名&…...
CNN代码实战
CNN的原理 从 DNN 到 CNN (1)卷积层与汇聚 ⚫ 深度神经网络 DNN 中,相邻层的所有神经元之间都有连接,这叫全连接;卷积神经网络 CNN 中,新增了卷积层(Convolution)与汇聚(…...
迁移学习代码复现
一、前言 说来可能令人难以置信,迁移学习技术在实践中是非常简单的,我们仅需要保留训练好的神经网络整体或者部分网络,再在使用迁移学习的情况下把保留的模型重新加载到内存中,就完成了迁移的过程。之后,我们就可以像训练普通神经网络那样训练迁移过来的神经网络了。 我们…...
Elasticsearch(ES)常用命令
常用运维命令 一、基本命令1.1、查看集群的健康状态1.2、查看节点信息1.3、查看索引列表1.4、创建索引1.5、删除索引1.6、关闭索引1.7、打开索引1.8、查看集群资源使用情况(各个节点的状态,包括磁盘,heap,ram的使用情况࿰…...
C/C++ 不定参函数
C语言不定参函数 函数用法总结 Va_list 作用:类型定义,生命一个变量,该变量被用来访问传递给不定参函数的可变参数列表用法:供后续函数进调用,通过该变量访问参数列表 typedefchar* va_list; va_start 作用ÿ…...
C语言——函数专题
1.概念 在C语言中引入函数的概念,有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码,这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数:库函数和自定义函数。 2.库函数 C语言国际标准ANSIC规定了一些常…...
springboot打可执行jar包
1. pom文件如下 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><m…...
【SQL】科目种类
目录 题目 分析 代码 题目 表: Teacher ------------------- | Column Name | Type | ------------------- | teacher_id | int | | subject_id | int | | dept_id | int | ------------------- 在 SQL 中,(subject_id, dept_id) 是该表的主键。 该表…...
【深度学习】【语音】TTS,最新TTS模型概览,扩散模型TTS,MeloTTS、StyleTTS2、Matcha-TTS
文章目录 基础介绍对比基础介绍 MeloTTS: MeloTTS 是 MyShell.ai 开发的一个多语言语音合成模型,支持包括英语、西班牙语、法语、中文、日语和韩语等多种语言。它以高质量的语音合成为特色,尤其擅长处理中英混合内容。该模型优化了在 CPU 上的实时推理能力,使其在多种应用场…...
【论文笔记】LION: Linear Group RNN for 3D Object Detection in Point Clouds
原文链接:https://arxiv.org/abs/2407.18232 简介:Transformer在3D点云感知任务中有二次复杂度,难以进行长距离关系建模。线性RNN则计算复杂度较低,适合进行长距离关系建模。本文提出基于窗口的网络线性组RNN(即对分组…...
打造高可用集群的基石:深度解析Keepalived实践与优化
高可用集群 集群类型 集群类型主要分为负载均衡集群(LB)、高可用集群(HA)和高性能计算集群(HPC)三大类。每种集群类型都有其特定的应用场景和优势。 1. 负载均衡集群(LB) 负载均衡集…...
Web大学生网页作业成品——环保主题介绍网页网站设计与实现(HTML+CSS)(5个页面)
🎉🎉🎉 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…...
Qt登录窗口设计
widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标类 #include <QPushButton> #include <QLineEdit> //行编辑 #include <QLabel> #include <QTextEdit> #include <QMovie>class Widge…...
探索数据矿藏:我的AI大模型与数据挖掘实战经验分享
🚀 探索数据矿藏:我的AI大模型与数据挖掘实战经验分享 💖 前言:数据的金矿,AI的翅膀 在人工智能的浪潮中,我有幸作为项目负责人,带领团队深入挖掘数据的潜力,利用AI大模型的力量&am…...
linux C语言strcat函数及相关函数
讯飞星火 strcat函数是C语言中的一个字符串处理函数,用于将一个字符串追加到另一个字符串的末尾。它的原型如下: char *strcat(char *dest, const char *src);参数说明: dest:目标字符串,即要将src字符串追加到这个字符串的末尾。src:源字符串,即要追加到dest字符串末…...
使用 sort 进行文本文件处理
sort 使用经验笔记 一、简介 sort 是一个命令行工具,用于对文本文件中的行进行排序。它广泛应用于 Unix/Linux 系统中,可以用来对文件的内容进行简单的排序操作,也可以与其他命令结合使用来完成更复杂的任务。 二、基本用法 排序文件: sor…...
HarmonyOS笔记4:从云数据库获取数据
移动应用获取数据的方式主要有: 1.从网络中获取数据接口API。 2.从华为云数据库获取云数据库的资源。 3.从移动终端直接获取本地的数据 在HarmonyOS笔记3中已经完成了方式一从网络中获取数据接口API的方式。在本篇笔记中,将讨论从云数据库中获取数据。 因…...
QT5生成独立运行的exe文件
目录 1 生成独立运行的exe文件1.1 设置工程Release版本可执行文件存储路径1.2 将工程编译成Release版本 2 使用QT5自带的windeployqt拷贝软件运行依赖项3 将程序打包成一个独立的可执行软件exe4 解决QT5 This application failed to start because no Qt platform plugin could…...
LabVIEW光纤水听器闭环系统
开发了一种利用LabVIEW软件开发的干涉型光纤水听器闭环工作点控制系统。该系统通过调节光源频率和非平衡干涉仪的光程差,实现了工作点的精确控制,从而提高系统的稳定性和检测精度,避免了使用压电陶瓷,使操作更加简便。 项目背景 …...
Shell——流程控制语句(if、case、for、while等)
在 Shell 编程中,流程控制语句用于控制脚本的执行顺序和逻辑。这些语句包括 if、case、for、while 等,它们的使用可以使脚本实现更复杂的逻辑。以下是它们的详细说明和语法结构: 1. if 语句 if 语句用于条件判断,执行符合条件的…...
【redis的大key问题】
在使用 Redis 的过程中,如果未能及时发现并处理 Big keys(下文称为“大Key”),可能会导致服务性能下降、用户体验变差,甚至引发大面积故障。 本文将介绍大Key产生的原因、其可能引发的问题及如何快速找出大Key并将其优…...
HighPoint SSD7749M2:128TB NVMe 存储卡实现28 GB/s高速传输
HighPoint Technologies推出了一款全新的SSD7749M2 RAID卡,能够在标准的桌面工作站中安装多达16个M.2 SSD,实现高达128TB的闪存存储。该卡通过PCIe Gen4 x16接口提供高达28 GB/s的顺序读写性能。这些令人瞩目的性能规格伴随着高昂的价格标签。 #### 技术…...
ARM 裸机与 Linux 驱动对比及 Linux 内核入门
目录 ARM裸机代码和驱动的区别 Linux系统组成 内核五大功能 设备驱动分类 内核类型 驱动模块 驱动模块示例 Makefile配置 命令 编码辅助工具 内核中的打印函数 printk 函数 修改打印级别 编辑 打印级别含义 驱动多文件编译 示例 模块传递参数 命令行传递参数…...
0101DNS TCP fallback on UDP query timeout disabled-redission-中间件
文章目录 1.问题描述2.临时解决方案 结语 1.问题描述 Springcloud 项目,微服务模块使用redission,启动报错 DNS TCP fallback on UDP query timeout disabled. Upgrade Netty to 4.1.105 or higher.相关软件版本如下 软件版本描述springboot2.7.18spr…...
位运算
x1010 原码:000...1010 (一共32位) 反码:111...0101 (~x) 补码:111...0110 (反码1)(-x) 1、n 的二进制表示中第 k 位是几 #include<iost…...
MemFire Cloud是否真的可以取代后端
近年来,随着前端技术的迅速发展,前端工程师们越来越多地开始思考一个问题:“我还能不能不依赖后端?” 这种想法并非空穴来风,尤其是随着像MemFire Cloud这样的工具出现,它不仅能让开发者在没有后端的情况下…...