超分之ESRGAN

  • Esrgan:增强型超分辨率生成对抗网络
  • Esrgan: Enhanced super-resolution generative adversarial networks.
  • In: ECCVW. (2018)
  • Xintao Wang, Ke Yu, Shixiang Wu, Jinjin Gu, Yihao Liu,Chao Dong, Yu Qiao, and Chen Change Loy.

文章目录

      • 摘要
      • 一、引言
      • 二、相关工作
      • 三、Methods
        • 3.1 网络结构(Network Architecture)
        • 3.2 相对辨别器(Relativistic Discriminator)
        • 3.3 感知损失(Perceptual loss)
        • 3.4 网络插值(Network Interpolation)
      • 四、实验
        • 4.1 实验细节
        • 4.2 数据集
        • 4.3 定性分析
        • 4.4 消融实验
        • 4.5 网络插值
      • 五、结论
      • 六、支撑材料

摘要

  • 首先介绍了SRGAN的缺点:
    • SRGAN生成的SR图像的细节经常伴随着令人不愉快的伪影。(unpleasant artifacts)
  • 然后针对SRGAN三个关键组成部分,进一步研究并改进:
    1. 网络结构
      • 引入了没有BN层的Residual-in-Residual Dense Block(RRDB)作为基本网络构建单元。
    2. 对抗损失
      • 借用了relativistic GAN的思想,让辨别器预测相对真实值(ralative realness)而不是绝对真实值(absolute value)。
    3. 感知损失
      • 使用激活前的特征来计算感知损失,这可以为亮度一致性和纹理回复提供更强的监督。

一、引言

详细介绍了针对SRGAN的三个改进:

  1. 网络结构(network architecture):
    • 通过==引入Residual-in-Residual Dense Block(RDDB)==来改进网络结构:
      • RDDB结合了多级残差网络和密集连接,而密集块中的密集连接正是为了避免正反向传递过程中的信息丢失问题(图像信息、梯度),从而使网络具有更高的容量并且更容易训练。
      • 更多的层和连接总是可以提高性能。
    • 移除Batch Normalization(BN)层
      1. 移除BN层实现了稳定的训练和一致的性能。
      2. 有助于提高泛化能力。
      3. 减少计算复杂度和内存的使用。
      • `在训练期间,BN层是通过使用每个batch的均值和方差对特征进行归一化;而在测试时, BN则使用整个训练数据的均值和方差完成对测试数据的归一化。这便出现了一个问题:用训练数据的均值和方差来估计测试数据的均值和方差是否合理?
        • 答案往往是否定的,当训练和测试数据集的统计数据差距很大时,BN层往往会引入一些令人不快的伪影,并限制其泛化能力。
        • 通过实验发现,当再GAN框架下训练更深的网络时,BN层更有可能会带来伪影,这也违反了训练过程中对稳定性能的需求。
    • 使用残差缩放(residual scaling)较小的初始化(smaller initialization)
      • 能够促进训练非常深的网络
      • 这主要是借用了EDSR、Inception-v4的网络思想
      • redisual scaling:通过学习到的残差乘上一个0~1的常数,然后再和主通路上的特征信息做加法,有利于增强网络的稳定性。
      • smaller initialization: 初始查参数方差越小,残差结构的网络越容易训练。
  2. 对抗损失(adversarial loss):
    • ==使用相对平均GAN(Relativistic average GAN)(RaGAN)==来改进辨别器:
      • 它学习判断“一张图像是否比另一张更真实”,而不是“一张图像是真还是假”。
      • 实验表明,这种改进有助于学习更清晰的边缘和更详细的纹理。
      • `SRGAN的对抗损失目的是:让真实图像的判决概率更接近1,让生成图像的判决概率更接近与0。而改进的ESRGAN的目标是:让生成图像和真实图像之间的距离保持尽可能大。
      • 这是引入了真实图像和生成图像见的相对距离(Relativbistic average GAN,RaGAN),而不是SRGAN中的衡量0和1之间的绝对距离。
      • 具体来说,ESRGAN的目的是:让真实图像的判决分布减去生成图像的平均分布,在对上述结果做sigmoid,使得结果更接近于1;让生成图像的判决分布减去真实图像的平均分布,在对上述结果做sigmoid,使得结果更接近于0。
  3. 感知损失(perceptual loss):
    • (基于特征空间计算,而非像素空间)
    • 通过==在激活前使用VGG features ==(而不是像SRGAN中在激活后使用VGG特征)来改进感知损失:
      • 凭经验发现,这中调整后的感知损失提供了更清晰的边缘和令人视觉愉悦的结果。
      • `激活层后的特征图有更稀疏的特征,越深的网络越明显。稀疏的特征会导致更弱的监督,从而网络性能变得更差。
      • 使用激活后得特征图计算感知损失会使得重建图像得亮度和ground-truth图像不一致。
        大量实验表明,增强型 SRGAN(称为 ESRGAN)在清晰度和细节方面始终优于最先进的方法。
  • 关于PIRM-SR Challenge 中的感知损失设计:
    • 文章中提到了新的图像质量评估标准(无参照评估):Ma’s score 和NIQE,计算公式为:perceptual index(即PI) = 1/2 ((10 − Ma) + NIQE), PI值越小,感知质量越好
      在这里插入图片描述

    • 上图中,对于不同的评价标准而言,PSNR and SSIM越高越好,而RMSE and PI越低越好。可以看出,虽然EDSR and RCAN的RMSE很低,但PI却很高,说明感知质量并不好,ESRGAN则相反。

    • 最后,为了平衡感知质量和PSNR指标,作者提出了网络插值。这能够调整重建风格和光滑度。同时,作者将在3.4节对比网络插值和基于像素空间的图像插值的关系。

二、相关工作

该部分主要列出了当年的一些trick

  1. 整体网络结构:
    • 深度卷积神经网络:SRCNN、
    • 深度残差神经网络:VDSR、
    • 拉普拉斯金字塔结构:LapSRN、
    • 残差块:SRGAN、
    • 递归学习:DRCN、DRRN、
    • 稠密连接网络:MemNet、
    • 深的反向投影:DBPN、
    • 残差稠密网络:RDN、
    • 移除BN层的残差块:EDSR、
    • 带有通道注意力的深度网络:RCAN、
    • SR中的强化学习:
      • Crafting a toolchain for image restoration by deep reinforcement learning
    • SR中的无监督学习:
      • Unsupervised image super-resolution using cycle-in-cycle generative adversarial networks
  2. 深度网络的稳定训练方法:
    • 残差通道:
    • 残差缩放:
    • 移除BN层的网络参数初始化方法
    • residual-in-residual dense block替换残差块
  3. 基于感知损失的方法
    • 目标是最小化特征空间的误差而不是像素空间的误差。
  4. 判别损失
    • 相关性判别器作为优化目标,不仅增加了生成数据为真的概率,也减小了真实数据为真的概率。
  5. 评价指标
    • 否定了PSNR 和SSIM。肯定了基于人类感知的无线照评价方法Ma’s score和NIQE,从而根据这种评价标准创建了perceptual index(PI)评价方法。

三、Methods

网络络目标为提升图片的整体感知质量,主要涉及四个方面:

  1. 网络结构;
  2. 判别器;
  3. 感知损失;
  4. 网络插值(平衡感知质量和PSNR).
3.1 网络结构(Network Architecture)

主要对生成器G的结构进行改进:

  1. 移除BN层
    1. 移除BN层的原因:
      • 删除 BN 层可以在不同的面向 PSNR 的任务(包括 SR 和去模糊 )中提高性能并降低计算复杂性。
    2. BN层的原理:
      • BN 层在训练期间使用批次中的均值和方差对特征进行归一化,
      • 并在测试期间使用整个训练数据集的估计均值和方差。
      • 当训练和测试数据集的统计数据差异很大时,BN 层往往会引入令人不快的伪影并限制泛化能力。
    3. BN层对于GAN网络的缺点:
      • 当网络更深并在 GAN 框架下训练时,使用BN层更有可能出现伪影(伪影偶尔会出现在迭代和不同设置中,违反了训练过程中稳定性能的需求)。
    4. 移除BN层的优势:
      • 删除了 BN 层以实现稳定的训练和一致的性能
      • 去除 BN 层有助于提高泛化能力并减少计算量
  2. 将原始的residual block(RB)替换为Residual-in-Residual Dense Block (RRDB)这样的RRDB既融合了多级残差网络的思想,也融合了密集连接的思想。
    • RRDB块的网络结构如下:
      • RRDB采用了两层残差结构,RRDB结构由一个大的残差结构构成,主干部分由3个 RDB(Residual Dense Block)密集残差块构成,将主干网络的输出与残差边叠加。
      • 在程序中,每个RDB块都有5个卷积,然后通过torch.cat函数,将卷积的通道数相叠加,所以卷积的通道数由num_feat,叠加变成num_feat + 4 * num_grow_ch,利用最后一个卷积将通道数调整为num_feat ,通过x5 * 0.2 + x构建残差边。
      • (RDB)Residual Dense Block结构相当于将Residual block (ResBlock)与Dense block密集块相结合,通过密集连通卷积层提取丰富的局部特征,从先前RDB的状态直接连接到当前RDB的所有层,然后利用RDB的局部特征融合自适应地从先前和当前的局部特征中学习更有效的特征,使训练更加稳定。
  3. 改进trick(用于促进训练非常深的网络)
    1. 残差缩放(residual scaling):
      • 在将残差添加到主网络之前,通过乘以0到1之间的常数来缩小残差防止不稳定的途径。
    2. 较小的初始化(smaller initialization):
      • 当初始参数方差变小时,残差架构更容易训练。
        在这里插入图片描述

ESRGAN仍然使用SRGAN网络的高层架构设计,网络共由3部分组成:

  1. 浅层特征抽取层,提取浅层特征。低分辨率图像进入后会经过一个卷积+RELU函数,将输入通道数调整为64。
  2. 深层特征抽取层:包含然N个RDB(Residual Dense Block)密集残差块和一个残差边,每个RDB都包含5个卷积+RELU。
  3. 上采样重建层,然后进入上采样部分,在经过两次上采样后,原图的高宽变为原来的4倍,并且实现分辨率的提升。
    在这里插入图片描述
3.2 相对辨别器(Relativistic Discriminator)

基于相对 GAN 增强了判别器:
- SRGAN中标准的辨别器D:为了让真实图像的判别结果的概率更趋近于1(真),让生成图像的判别结果的概率更趋近于0(假)。
- ESRGAN中的相对平均辨别器D(RaD):让生成图像和真实图像之间的距离保持尽可能大。
![[Pasted image 20230915215014.png]]

参数解释:
- x r x_r xr:真实数据,即 x i : L R 图像 x_i: LR图像 xi:LR图像
- x f x_f xf:假数据, x f = G ( x i ) : S R 图像 x_f = G(x_i): SR图像 xf=G(xi):SR图像
- σ \sigma σ:sigmoid函数:x–> -∞时, σ \sigma σ(x)–>0,x–> +∞时, σ \sigma σ(x)–>1。
- C(x):未变换的鉴别器输出
- E x i E_{x_i} Exi:对小批量中所有 真数据/假数据 取平均值的操作。
- D R a D_{Ra} DRa:相对平均鉴别器RaD

  • 辨别器RaD原理:
    • 首先需要明确的是:判别器对真实数据判决的原始值大于对虚假数据判决的原始值
    • 因此考虑第一个等式左侧: [ C ( R e a l ) − E x f [ C ( F a k e ) ] > 0 [C(Real) - E_{x_f}[C(Fake)] >0 [C(Real)Exf[C(Fake)]>0, 且差值越大,表明二者距离越远,也就是该差值经过sigmoid后的值就越接近于1,这就将真实图片和生成图片很好的区分开;
    • 考虑第二个等式左侧: [ C ( F a k e ) − E x r [ C ( R e a l ) ] < 0 [C(Fake) - E_{x_r}[C(Real)] <0 [C(Fake)Exr[C(Real)]<0,且差值越大(负的越多),表明二者距离越远,也就是改差值经过sigmoid后的值越接近于0,这就将真实图片和生成图片很好的区分开。
  • 辨别器RaD的数学表达式:
    • L D R a = − E x r [ l o g ( D R a ( x r , x f ) ) ] − E x f [ l o g ( 1 − D R a ( x f , x r ) ) ] ( 1 ) L^{Ra}_{D} = - \mathbb E_{x_r}[log(D_{Ra}(x_r,x_f))] - \mathbb E_{x_f}[log(1-D_{R_a}(x_f,x_r))]\quad\quad (1) LDRa=Exr[log(DRa(xr,xf))]Exf[log(1DRa(xf,xr))](1)
  • 生成器的目标损失函数(正好与辨别器相反):
    • L G R a = − E x r [ 1 − l o g ( D R a ( x r , x f ) ) ] − E x f [ l o g ( D R a ( x f , x r ) ) ] ( 2 ) L^{Ra}_{G} = - \mathbb E_{x_r}[1 - log(D_{Ra}(x_r,x_f))] - \mathbb E_{x_f}[log(D_{R_a}(x_f,x_r))]\quad\quad (2) LGRa=Exr[1log(DRa(xr,xf))]Exf[log(DRa(xf,xr))](2)
  • 直观的角度上解释:
    • 因为辨别器是为了更好的区分真实图像和生成图像,而生成器是为了更难区分真实图像和生成图像。
    • 由于生成器的优化函数中同时涉及生成数据 x f x_f xf和真实数据 x r x_r xr,所以生成器在对抗训练中受益于生成数据和真实数据的梯度,更有利于梯度的生成,可以更有利于生成图像中的边缘和细节信息。(而在 SRGAN 中只有生成的部分生效
    • 相对鉴别器有助于学习更清晰的边缘和更详细的纹理
3.3 感知损失(Perceptual loss)
  • 两大缺点(使用VGG激活层后的特征计算感知损失)

    1. 激活后的特征非常稀疏,尤其是在非常深的网络之后;而稀疏激活提供了弱监督,从而导致性能较差。
    2. 与真实图像相比,使用激活后的特征也会导致重建亮度不一致
      ![[Pasted image 20240124151555.png|500]]
  • 改进:

    • 在VGG激活层前获取的感知损失 L p e r c e p L_{percep} Lpercep(通过计算抽象出来的SR和HR的特征图间的距离),而非传统的SRGAN在激活层后计算感知损失。
  • 生成器的优化函数表达式: L G = L p e r c e p + λ L G R a + η L 1 ( 3 ) L_G = L_{percep}+λL^{Ra}_{G} + \eta L_1\quad\quad\quad (3) LG=Lpercep+λLGRa+ηL1(3)

  • 符号含义:

  • L p e r c e p L_{percep} Lpercep:在激活之前的感知损失

  • L 1 = E x i ∣ ∣ G ( x i ) − y ∣ ∣ 1 L_1 = \mathbb E_{x_i}||G(x_i) - y||_1 L1=Exi∣∣G(xi)y1:( L 1 范数 L_1范数 L1范数)评估生成图像 G ( x i ) G(x_i) G(xi)和真实图像y之间的距离。

  • λ 、 η \lambda、\eta λη:平衡不同损失项的系数。

3.4 网络插值(Network Interpolation)

目的:
- 消除基于GAN方法中的令人不快的噪声,同时保持良好的感知质量。
原理:
- 首先训练一个基于PSNR的网络 G P S N R G_{PSNR} GPSNR
- 然后通过微调获得一个基于GAN的网络 G G A N G_{GAN} GGAN
- 然后对这两个网络的所有相应参数进行插值,得到插值模型 G I N T E R P G_{INTERP} GINTERP
公式如下: θ G I N T E R P = ( 1 − α ) θ G P S N R + α θ G G A N ( 4 ) \theta^{INTERP}_{G} = (1 - \alpha)\theta^{PSNR}_{G} +\alpha\theta^{GAN}_{G}\quad\quad\quad(4) θGINTERP=(1α)θGPSNR+αθGGAN(4)符号含义:

  • θ G I N T E R P 、 θ G P S N R 、 θ G G A N \theta^{INTERP}_{G}、\theta^{PSNR}_{G}、\theta^{GAN}_{G} θGINTERPθGPSNRθGGAN:分别是 G I N T E R P 、 G P S N R 、 G G A N G_{INTERP}、G_{PSNR}、G_{GAN} GINTERPGPSNRGGAN的参数。
  • α ∈ [ 0 , 1 ] \alpha \in [0,1] α[0,1]:插值参数。

网络插值的优点:
1. 插值模型能够为任何可行的 α 生成有意义的结果,而不会引入伪影。
2. 可以持续平衡感知质量和保真度,而无需重新训练模型。

是否还有其他平衡方法?
1. 对输出图像(pixel by pixel)逐元素进行插值,但是无法在噪声和模糊之间实现良好的平衡:
- 因为,插值后的图像,要么太模糊,要么带有伪影的噪声。
2. 调整内容损失和对抗损失的权重参数(公式3中的 λ 、 η \lambda、\eta λη):
- 这种方法需要调整损失权重和微调网络,因此实现图像风格的持续控制的成本太高。

四、实验

4.1 实验细节
  • 缩放因子: 4×
  • LR获取方式:
    • matlab 双三次插值下采样
  • mini-batch size: 16
  • HR patch: 128×128
  • 网络的深度与patch的大小成正比:
    • 训练更深的网络受益于更大的 patch ,因为扩大的感受野有助于捕获更多语义信息。
    • 但是会花费更多的训练时间, 并消耗更多的计算资源。
  • 训练分为两个过程:
    1. 首先,训练具有 L1 损失的 PSNR 导向模型;
      • 学习率: 2 × 1 0 − 4 2 ×10^{-4} 2×104,每 2 × 1 0 5 2×10^{5} 2×105学习率衰退2倍
    2. 然后,使用经过训练的 PSNR 导向模型作为生成器的初始化。
      • 学习率: 1 × 1 0 − 4 1×10^{-4} 1×104,分别在50K, 100K,200K,300K时减半
      • 公式三中, λ = 5 × 1 0 − 3 , β = 1 × 10 − 2 \lambda=5×10^{-3}, \beta=1×10{-2} λ=5×103,β=1×102
    • 具有逐像素损失的预训练有助于基于 GAN 的方法获得更美观的结果
      • 原因如下:
        (1)它可以避免生成器出现不期望的局部最优
        (2)预训练后,判别器一开始就收到了相对较好的超分辨率图像,而不是极端的假图像(黑色或噪声图像)这有助于它更专注于纹理判别
  • 优化器:Adam, β 1 = 0.9 , β 2 = 0.999 \beta_1 = 0.9,\beta_2 = 0.999 β1=0.9β2=0.999
    • 交替优化生成器和判别器直至模型收敛。
  • 两种生成器结构:
    1. 含有16个Residual Block,与SRGAN类似。
    2. 使用23个RRDB,更深的模型。
4.2 数据集
  • 训练集:
    1. DIV2K:800张2K分辨率的图像
    2. Flickr2K :2650 张 2K 高分辨率图像
    3. OutdoorSceneTraining (OST)
  • 测试集:
    • set5、Set14 、BSD100 、Urban100 以及 PIRM-SR 挑战赛中提供的 PIRM 自验证数据集。
4.3 定性分析

![[Pasted image 20240124201125.png|500]]

4.4 消融实验
  1. 删除BN层
    • 首先删除所有 BN 层,以获得稳定一致的性能,且不会出现伪影。它不会降低性能,而是节省计算资源和内存使用。
    • 当网络更深、更复杂时,具有 BN 层的模型更有可能引入令人不快的伪影。
  2. 使用激活之前的特征作为感知损失
    • 使用激活之前的特征会导致更准确的亮度分布,更接近真实情况。
    • 在激活之前使用特征有助于产生更锐利的边缘和更丰富的纹理,因为激活前的密集特征提供了更强的纹理。监督比稀疏激活所能提供的监督要多。
  3. 使用相对判别器 R a G A N R_aGAN RaGAN
    • 有利于学习更清晰的边缘和更详细的纹理
  4. 使用RRDB作为生成器的基本块
    • 使用所提出的 RRDB 的更深模型可以进一步改善恢复的纹理, 因为深层模型具有捕获语义信息的强大表示能力, 同时更深的模型可以减少令人不快的噪声。
4.5 网络插值
  1. 纯基于 GAN 的方法:
    • 产生清晰的边缘和更丰富的纹理,但存在一些令人不快的伪影。
  2. 纯基于 PSNR 的方法:
    • 输出卡通风格的模糊图像。
  3. 通过采用网络插值:
    • 可以减少令人不快的伪影,同时保留纹理。
    • 同时,网络插值策略提供了平衡感知质量和保真度的平滑控制。
  4. 图像插值无法有效消除这些伪影。

五、结论

  1. 首先,强调ESRGAN实现了SOTA,并且在PIRM-SR挑战赛中获得感知指数第一名。
  2. 然后,说明了本论文的创新点:
    1. ESRGAN包含多个没有 BN 层的 RDDB 块
    2. 采用了包括残差缩放较小初始化在内的有用技术来促进所提出的深度模型的训练。
    3. 使用相对论 GAN 作为判别器,它学习判断一幅图像是否比另一幅图像更真实,指导生成器恢复更详细的纹理。
    4. 使用激活前的特征来增强感知损失,这提供了更强的监督,从而恢复更准确的亮度和真实的纹理。****

六、支撑材料

  1. 重点实验了BN层带来的伪影。
  2. 重点实验了较小的初始化残差缩放这两种有用的技术,来简化非常深的网络的训练,
  3. 针对不同的数据集,测试了RSRGAN的泛化性。
  4. 重点实现了HR图像的patch size对模型性能的影响。
  5. 更多地可视化了其他测试集的定性实验结果,

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

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

相关文章

科大讯飞 再次引爆Ai

去年「科大讯飞版ChatGPT」星火大模型刚上线的时候&#xff0c;小编给大家推荐过一波&#xff0c;演示了其强大的功能&#xff0c;不少小伙伴都立马申请体验了一把&#xff0c;有小伙伴还私信我说功能非常强大&#xff0c;工作效率提高不少&#xff0c;支持国产大模型之类赞扬。…

西安石油大学C++上机实验汇总

考试题难度就像第三章第五章课后题的难度 基础知识一定要掌握&#xff01;&#xff01;&#xff01; 上机一&#xff1a;类与对象程序设计&#xff08;2 学时&#xff09; 上机目的 掌握声明类的方法。掌握类和类的成员的概念以及定义对象的方法。掌握构造函数和析构函数的…

elementplus 中 DatePicker 日期选择器样式修改无效

问题 遇到一个需求需要修改 DatePicker 日期选择器的样式&#xff0c;在添加了 scoped 属性的 style 标签&#xff0c;并且使用了 deep 样式穿透的情况下并不能修改其样式。 原因 DatePicker 日期选择器弹出面板默认挂载在 body 上&#xff0c;所以在组件中添加了 scoped 属…

Java日期和时间学习记录2

1、Java的LocalDate类当前时间往未来几天和过去时间几天 import java.time.LocalDate;public class Main {public static void main(String[] args) {// 获取当前日期LocalDate currentDate LocalDate.now();System.out.println("当前日期&#xff1a;" currentDa…

【Fooocus 深度学习】SDXL,AIGC生图,源码解读

文章目录 使用通配符增加prompt多样性Fooocus的风格实现 使用通配符增加prompt多样性 prompt和negative_prompt都可以通过apply_wildcards函数来实现通配符替换&#xff0c;apply_wildcards会从txt中随机找一个出来。 promptsunshine, river, trees, __artist__ task_prompt …

vue2、vue3,生命周期详解

一、Vue2.x Vue2的生命周期 是指Vue实例从创建到销毁的整个过程中&#xff0c;会经历一系列的阶段和回调函数。它分为8个阶段&#xff0c;包括了组件的创建、挂载、更新和销毁等过程。 1、beforeCreate: 在实例初始化之后&#xff0c;但在数据观测和事件配置之前被调用。此…

使用ffmpeg转换索尼老DV拍摄的VOB文件为mp4

一些背景故事 最近对象想用 CCD 拍照录像&#xff0c;家里刚好有一台快 20 年前的索尼 DV DCR-DVD653E&#xff0c;就是电池老化充不进去电了。 翻出来之后还感慨了一下&#xff1a;当年没有网购&#xff0c;价格不透明&#xff1b;有些地方也没有官方店&#xff0c;只有一两家…

Linux笔记之bash脚本中的-e、和

Linux笔记之bash脚本中的-e、&和&& code review! 文章目录 Linux笔记之bash脚本中的-e、&和&&1.&和&&2.-e 1.&和&& 在Linux bash脚本中&#xff0c;&符号有几个不同的用途&#xff0c;这里列举了一些常见的情况&#xf…

js中的内置对象、数学对象、日期对象、数组对象、字符串对象

js中的对象&#xff08;三种&#xff09;&#xff1a; 自定义对象 car、computer DOM对象 div、p BOM对象 window、console 内置对象 数学对象 Math &#xff08;object类型&#xff09; 1、圆周率 Math.PI 2、向下取整(返回值) Math.floor() 3、向上取整(返回值) M…

年少不知 Base 好,错把总包当成宝。。

今天聊一个很现实的话题&#xff1a;选 offer 对比薪资时&#xff0c;我强烈建议以 Base 为主&#xff0c;而不是总包。 为什么&#xff1f;且听鱼皮娓娓道来。 注意&#xff0c;以下为个人观点&#xff0c;仅供参考&#xff01; 首先明确 Base 和总包的概念&#xff1a; Base&…

某马头条——day11+day12

实时计算和定时计算 流式计算 kafkaStream 入门案例 导入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusions><exclusion><artifactId>connect-json</artifactId&…

美,英,法,德、意大利和西班牙的geojson,以及区域json

美&#xff0c;英&#xff0c;法&#xff0c;德、意大利和西班牙的geojson文件 json地址 https://pan.baidu.com/s/1nio1bV_j-jAEVqgEHXWsNw?pwdqwer#list/path/GEOJSON 感谢大佬提供的 大佬连接 大佬的知乎原地址 国内geojson获取工具地址 http://da![在这里插入图片描述](h…

【江科大】STM32:I2C通信外设(硬件)

在将2C通信外设之前&#xff0c;我们先捋一捋&#xff0c;串口的相关特点来和I2C进行一个对北比。 首先&#xff1a; 1,大部分单片机&#xff0c;设计的PCB板均带有串口通信的引脚&#xff08;也就是通信基本都借助硬件收发器来实现&#xff09; 2.对于串口的异步时序&#xff…

韩国访问学者申请注意事项

随着国际交流的增加&#xff0c;韩国成为许多学者追求学术深造的热门目的地之一。如果你计划成为一名韩国访问学者&#xff0c;以下是知识人网小编整理的一些需要注意的事项&#xff0c;以确保你的申请顺利进行。 1.详细了解目标学府&#xff1a;在开始申请之前&#xff0c;仔细…

Python进阶——文件及IO操作

一、文件的基本操作 创建文件对象和打开文件对象&#xff1a;open() def my_write():#(1)打开&#xff08;创建&#xff09;文件fileopen(Myqq.txt,w,encodingutf-8) #如果文件不存在&#xff0c;则在当前目录下创建一个文件名字为Myqq.txt#&#xff08;2&#xff09;操作文件f…

redis整合

一.redis的发布订阅 什么 是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 1、Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以…

matlab绘图杂谈-stem函数和plot函数

出发点 今天在论文中看到一副这样的图&#xff0c;它既有曲线&#xff0c;又有点&#xff0c;并且对两者都添加了图例。三条曲线应该是用plot函数绘制的&#xff0c;而target哪个绿色的圆圈&#xff0c;我的理解是用stem函数绘制的。它只是1个点&#xff0c;并且没有竖线&…

Linux文件管理技术实践

shell shell的种类(了解) shell是用于和Linux内核进行交互的一个程序&#xff0c;他的功能和window系统下的cmd是一样的。而且shell的种类也有很多常见的有c shell、bash shell、Korn shell等等。而本文就是使用Linux最常见的bash shell对Linux常见指令展开探讨。 内置shell…

ElasticSearch搜索引擎入门到精通

ES 是基于 Lucene 的全文检索引擎,它会对数据进行分词后保存索引,擅长管理大量的数据,相对于 MySQL 来说不擅长经常更新数据及关联查询。这篇文章就是为了进一步了解一下它,到底是如何做到这么高效的查询的。 在学习其他数据库的时候我们知道索引是一个数据库系统极其重要…

【基础配置】Python2/Python3并存安装配置教程

Nx01 产品简介 Python是一种高级的、解释型的、面向对象的通用编程语言&#xff0c;具有简单易学、代码可读性强、功能强大、可移植性好等特点。它可以应用于多种领域&#xff0c;如Web开发、数据科学、人工智能、机器学习、科学计算、自动化测试等。Python由Guido van Rossum于…