【论文解读】Real-ESRGAN:使用纯合成数据训练真实世界的超分辨率图像

图一是4种超分方法的对比效果 。

0 摘要

        尽管在盲超分辨率方面已经进行了许多尝试,以恢复具有未知和复杂退化的低分辨率图像,但它们仍然远远不能解决一般的真实世界退化图像。在这项工作中,我们将强大的 ESRGAN 扩展到一个实际的恢复应用程序(即 Real-ESRGAN),该应用程序使用纯合成数据进行训练。具体来说,引入了高阶退化建模过程,以更好地模拟复杂的现实世界退化。我们还考虑了合成过程中常见的振铃和过冲伪影。此外,我们还采用了具有频谱归一化的 U-Net 判别器来提高判别器能力并稳定训练动态。广泛的比较表明,其视觉性能优于先前在各种真实数据集上的工作。我们还提供高效的实现,以动态合成训练对。

1 引言

        单图像超分辨率(SR)[13, 10, 27]是一个活跃的研究课题,旨在从低分辨率(LR)图像中重建高分辨率(HR)图像。自SRCNN的开创性工作[9]以来,深度卷积神经网络(CNN)方法为SR领域带来了蓬勃发展。 然而,大多数方法[21,27,20,25,50]假设一个理想的双三次下采样核,这与实际退化不同。这种退化不匹配使得这些方法在实际场景中不切实际。

        相反,盲超分辨率 [35, 2, 56] 旨在恢复遭受未知和复杂退化的低分辨率图像。 根据潜在的退化过程,现有的方法可以大致分为显式建模和隐式建模。经典的退化模型[11,29],由模糊、下采样、噪声和JPEG压缩组成(详见第3.1节),在显式模型[56,16,34]中被广泛采用。然而,现实世界的退化通常过于复杂,无法用多个退化的简单组合进行建模。因此,这些方法在实际样本中很容易失败。 隐式建模方法[54,12,46]利用数据分布学习和生成对抗网络(GAN)[14]来获得退化模型。然而,它们仅限于训练数据集内的退化,并且不能很好地泛化到分布外的图像。鼓励读者参考最近的一项盲目SR调查[28],以获得更全面的分类法。  

        这促使我们扩展经典的“一阶”退化模型为真实世界退化的“高阶”退化建模,即用几个重复的退化过程对退化进行建模,每个过程都是经典的退化模型。 根据经验,我们采用二阶降解过程,在简单性和有效性之间取得良好的平衡。 最近的一项研究[55]也提出了一种随机洗牌策略来合成更实际的退化。然而,它仍然涉及固定数量的降解过程,并且所有洗牌的降解是否有用尚不清楚。相反,高阶退化建模更加灵活,并试图模拟真实的退化生成过程。我们在合成过程中进一步加入了sinc滤波器,以模拟常见的振铃和过冲伪影。

        由于降解空间比ESRGAN大得多,因此训练也变得具有挑战性。具体来说,1)判别器需要更强大的能力来区分真实性和复杂的训练输出,而判别器的梯度反馈需要更准确才能增强局部细节。因此,我们将ESRGAN中的VGG式鉴别器改进为U-Net设计[41,52,39]。 2)U-Net结构和复杂的退化也增加了训练的不稳定性。 因此,我们采用频谱归一化(SN)正则化[37,41]来稳定训练动力学。配备专门的改进,使我们能够轻松训练我们的 Real-ESRGAN,并在局部细节增强和伪影抑制之间取得良好的平衡。

        总而言之,在这项工作中,1)我们提出了一个高阶退化过程来模拟实际退化并利用sinc滤波器来模拟常见的振铃和过冲伪影。 2)我们采用了一些必要的修改(例如,具有光谱归一化的U-Net判别器)来增加判别器的能力并稳定训练动态。3)使用纯合成数据训练的Real-ESRGAN能够还原大多数真实世界的图像,并实现比以往作品更好的视觉表现,使其在实际应用中更具实用性

2 相关工作

        自SRCNN [9, 10]以来,图像超分辨率场[21, 24, 45, 17, 25, 27, 58, 22, 44, 57, 7, 30]经历了各种发展。为了获得视觉上令人愉悦的结果,生成对抗网络[15]通常被用作损失监督,以推动解更接近自然流形[26,40,50,49]。大多数方法都假设使用双三次下采样内核,并且在实际图像中通常会失败。最近的工作还包括图像修复的强化学习或GAN的先验[53,6,47]。

        在盲SR方面已经有几次很好的探索。第一类涉及显式退化表示,通常由两个部分组成:退化预测和条件恢复。 上述两个组件可以单独执行[2,56]或联合(迭代)[16,34,46]。 这些方法依赖于预定义的降解表示(例如,降解类型和水平),并且通常考虑简单的合成降解。此外,不准确的退化估计将不可避免地导致伪影。

        另一类是获取/生成尽可能接近真实数据的训练对,然后训练一个统一的网络来解决盲SR。训练对通常是 1) 用特定的相机捕获,然后进行繁琐的对齐 [5, 51];2)或直接从循环一致性损失的未配对数据中学习[54,33];3)或用估计的模糊核和提取的噪声补丁进行合成[60,19]。然而,1)捕获的数据仅局限于与特定相机相关的退化,因此不能很好地泛化到其他真实图像;2)使用未配对的数据学习细粒度退化具有挑战性,结果通常不令人满意。退化模型。 经典的降解模型[11,29]在盲SR方法[56,16,34]中被广泛采用。然而,现实世界的退化通常过于复杂,无法明确建模。因此,隐式建模试图学习网络内的退化生成过程[54,12,46]。在这项工作中,我们提出了一种灵活的高阶退化模型来合成更实际的退化。

3 方法论

3.1 经典退化模型

        Blind SR 旨在从具有未知和复杂退化的低分辨率图像中恢复高分辨率图像。通常采用经典的退化模型[11,29]来合成低分辨率输入。通常,真值图像 y 首先与模糊核 k 进行卷积。然后,执行比例因子 r 的下采样操作。低分辨率 x 是通过添加噪声 n 获得的。最后,还采用了JPEG压缩,因为它在真实世界的图像中被广泛使用。

x = D(y)=[(y\circledast k)\displaystyle \displaystyle \vee_{k}+n]_{JPEG}

注意:由于没有找到合适下采样符号,故使用V来表示 。

D表示退化过程。我们将简要的回顾下这些常用的退化方法。详细设置在第 4.1 节中指定。更多描述和示例在附录A中。

        模糊。 我们通常将模糊退化建模为使用线性模糊滤波器(内核)的卷积。 各向同性和各向异性高斯滤波器是常见的选择。 对于核大小为 2 t + 1 的高斯模糊核 k,其 (i, j) ∈ [ − t, t ] 元素从高斯分布中采样,形式为:

k(i,j)=\frac{1}{N}exp(-\frac{1}{2}C^{T}\sum^{-1}C), C=[i,j]^T

其中 Σ 是协方差矩阵; C为空间坐标; N 是归一化常数。 协方差矩阵可以进一步表示如下:

其中\sigma_{1}\sigma_{2}是沿两个主轴的标准差(即协方差矩阵的特征值);θ 是旋转度。当\sigma_{1}=\sigma_{2} 时,k 是各向同性的高斯模糊核;否则 k 是各向异性核。 

        讨论。 尽管高斯模糊核被广泛用于模拟模糊退化,但它们可能并不能很好地接近真实的相机模糊。 为了包含更多样化的核形状,我们进一步采用了广义高斯模糊核[31]和平台形分布。它们的概率密度函数 (pdf)分别为\frac{1}{N}exp(-\frac{1}{2}(C^{T}\sum^{-1}C)^{\beta})\frac{1}{N}\frac{1}{1+(C^{T}\sum^{-1}C)^{\beta}}\beta为形状参数。据经验,我们发现包括这些模糊内核可以为一些真实样本产生更清晰的输出。

        噪声。 我们考虑两种常用的噪声类型,1)加性高斯噪声和2)泊松噪声。加性高斯噪声具有等于高斯分布的概率密度函数。 噪音强度由高斯分布的标准差(即\sigma值)控制。当RGB图像的每个通道都有独立的采样噪声时,合成噪声为彩色噪声。我们还通过对所有三个通道使用相同的采样噪声来合成灰噪声[55,38]。

        泊松噪声服从泊松分布。 它通常用于近似模拟由统计量子涨落引起的传感器噪声,即在给定曝光水平下感测到的光子数量的变化。泊松噪声的强度与图像强度成正比,不同像素处的噪声是独立的。

        调整大小(缩减采样)。 下采样是在SR中合成低分辨率图像的基本操作。更一般地说,我们考虑下采样和上采样,即调整大小操作。 有几种调整大小算法 - 最近邻插值、面积调整大小、双线性插值和双三次插值。不同的调整大小操作会带来不同的效果 - 有些会产生模糊的结果,而有些可能会输出过于清晰的图像并伴有过冲伪影。

        为了包含更多样化和更复杂的调整大小效果,我们从上述选项中考虑随机调整大小操作。 由于最近邻插值引入了错位问题,因此我们排除了这个问题,只考虑面积、双线性和双三次运算

        JPEG 压缩。 JPEG 压缩是数字图像的一种常用的有损压缩技术。 它首先将图像转换为 YCbCr 色彩空间,并对色度通道进行下采样。然后将图像分成 8 × 8 个块,每个块使用二维离散余弦变换 (DCT) 进行变换,然后对 DCT 系数进行量化。 有关JPEG压缩算法的更多细节,请参见[43]。JPEG 压缩通常会引入令人不快的块伪影。

        压缩图像的质量由质量因子 q ∈ [0, 100] 决定,其中较低的 q 表示较高的压缩比和较差的质量。我们使用 PyTorch 实现 - DiffJPEG [32]

3.2 高阶退化模型

        当我们采用上述经典退化模型合成训练对时,训练后的模型确实可以处理一些真实样本。然而,它仍然无法解决现实世界中一些复杂的劣化问题,尤其是未知的噪声和复杂的伪影(见图3)。这是因为合成的低分辨率图像与逼真的退化图像仍然有很大的差距。因此,我们将经典的退化模型扩展到高阶退化过程,以模拟更实际的退化。

图片解释:用二阶退化过程来模拟更真实的退化,其中的每个退化过程都是由经典的退化步骤组成的。列出了模糊、调整大小、噪点和 JPEG 压缩的详细选项。我们还采用sinc滤波器来合成常见的振铃和过冲伪影。

 图片解释:使用经典退化模型的合成数据训练的模型可以解析一些真实样本(左)。然而,它们会放大噪点或为复杂的真实图像引入振铃伪像(右)。放大以获得最佳视野。

        一些基本的退化过程可视为一阶建模。然而,现实生活中的退化过程是多种多样的,通常包括一系列程序,包括相机成像系统、图像编辑、互联网传输等。例如,当我们想从互联网上恢复低质量的图像下载时,其潜在的降级涉及不同降级过程的复杂组合。 具体来说,原始图像可能是多年前用手机拍摄的,这不可避免地包含相机模糊、传感器噪声、低分辨率和 JPEG 压缩等退化。 然后通过锐化和调整大小操作对图像进行编辑,带来过冲和模糊伪影。 之后,它被上传到一些社交媒体应用程序,这引入了进一步的压缩和不可预测的噪音。由于数字传输也会带来伪影,当图像在互联网上多次传播时,这个过程变得更加复杂。

        如此复杂的劣化过程无法用经典的一阶模型进行建模。因此,我们提出了一个高阶退化模型。 n阶模型涉及n个重复的降解过程(如式5所示),其中每个降解过程采用经典的降解模型(式1),具有相同的过程,但具有不同的超参数。请注意,这里的“高阶”与数学函数中使用的“高阶”不同。 它主要是指同一操作的执行时间。[55]中的随机洗牌策略还可以包括重复的退化过程(例如,双重模糊或JPEG)。但我们强调,高阶退化过程是关键,这表明并非所有洗牌退化都是必要的。为了将图像分辨率保持在合理范围内,方程1中的下采样操作被随机调整大小操作所取代。 根据经验,我们采用了二阶退化过程,因为它可以在保持简单性的同时解决大多数实际情况。图 2 描绘了纯合成数据生成流水线的整体流水线。

         值得注意的是,改进的高阶退化过程并不完美,无法覆盖现实世界中的整个退化空间。相反,它只是通过修改数据合成过程来扩展先前盲SR方法的可求解退化边界。图 11 中提供了几种典型的限制场景。

3.3 振铃过冲伪影

        振铃伪影通常表现为图像中锐化过渡附近的杂散边缘。它们在视觉上看起来像边缘附近的带状或“幽灵”。过冲伪影通常与振铃伪影结合在一起,表现为边沿过渡处的跳跃增加造成这些伪影的主要原因是信号在没有高频的情况下受到带宽限制。这些伪影很常见,通常由锐化算法、JPEG压缩等产生。 图5(上图)显示了一些存在振铃和过冲伪影的真实样本。

图片解释: Real-ESRGAN 采用与 ESRGAN 相同的生成器网络。对于× 2 和 × 1 的比例因子,它首次采用像素解洗操作来减小空间大小并将信息重新排列到通道维度

 图片解释:上图:真实样本出现振铃效应和过冲伪影。 下图:sinc内核(内核大小为21)和相应过滤图像的示例。放大以获得最佳视野。

        我们采用sinc滤波器(一种切断高频的理想化滤波器)来合成训练对的振铃和过冲伪影。 sinc 滤波器内核可以表示为,该公式的实现来源于image processing - 2-d circularly symmetric low-pass filter - Signal Processing Stack Exchange:

        式中 ( i, j ) 为核坐标; ω 为截止频率;J_{1}是第一类的一阶贝塞尔函数。图5(下图)显示了具有不同截止频率的sinc滤波器及其相应的滤波图像。据观察,它可以很好地合成振铃效应和过冲伪影(尤其是由过度锐利的效果引入)。这些伪影在视觉上与图5(上图)中前两个真实样本中的伪影相似。

我们在两个地方采用sinc滤波器:模糊过程和合成的最后一步。最后一个 sinc 滤波器和 JPEG 压缩的顺序是随机交换的,以覆盖更大的退化空间,因为某些图像可能首先被过度锐化(带有过冲伪影),然后JPEG 压缩;而有些图像可能会先进行 JPEG 压缩,然后进行锐化操作。

3.4 网络和训练

        ESRGAN生成器。我们采用与ESRGAN[50]相同的生成器(SR网络),即具有多个残差中残差密集块(RRDB)的深度网络,如图4所示。 我们还扩展了原始的 × 4 ESRGAN 架构,以执行比例因子为 × 2 和 × 1 的超分辨率。 由于 ESRGAN 是一个繁重的网络,我们首先采用像素解洗(像素洗牌的逆运算 [42])来减小空间大小并扩大通道大小,然后再将输入馈送到主 ESRGAN 架构中。因此,大多数计算是在较小的分辨率空间内进行的,这可以减少GPU内存和计算资源消耗。

 

图片解释: 具有频谱归一化的 U-Net 鉴别器架构

具有频谱归一化 (SN) 的 U-Net 鉴别器。由于Real-ESRGAN旨在解决比ESRGAN大得多的退化空间,因此ESRGAN中鉴别器的原始设计不再适用。 具体来说,Real-ESRGAN 中的判别器需要更大的判别能力来处理复杂的训练输出。除了区分全局样式外,它还需要为局部纹理生成准确的渐变反馈。受 [41, 52] 的启发,我们还将 ESRGAN 中的 VGG 式鉴别器改进为具有跳跃连接的 U-Net 设计(图 6)。UNet 输出每个像素的真实值,并可以向生成器提供详细的每个像素反馈。

同时,U-Net结构和复杂化也增加了训练的不稳定性。我们采用频谱归一化正则化[37]来稳定训练动态。此外,我们观察到光谱归一化也有利于缓解GAN训练引入的过于尖锐和烦人的伪影。通过这些调整,我们能够轻松训练RealESRGAN,并在局部细节增强和伪影抑制之间取得良好的平衡。

训练过程。分为两个阶段。首先,我们用 L1 损失训练一个面向 PSNR 的模型。得到的模型由Real-ESRNet命名。然后,我们使用经过训练的面向PSNR的模型作为生成器的初始化,并使用L1损失、感知损失[20]和GAN损失[14,26,4]的组合来训练Real-ESRGAN。

4 实验

4.1 数据和实现

训练细节。和ESRGAN类似,我们采用DIV2K [1]、Flickr2K [45]和OutdoorSceneTraining [49]数据集进行训练。训练的HR patch size为256,我们使用 4 个 NVIDIA V100 GPU 训练模型,总批次大小为 48 个。我们使用Adam优化器[23]。 Real-ESRNet 从 ESRGAN 进行了微调,以实现更快的收敛。 我们训练 Real-ESRNet 进行 1000 K 次迭代,学习率为2\times10^{-4},同时训练 Real-ESRGAN 进行 400 K 次迭代,学习率为 1\times10^{-4}。 我们采用指数移动平均线 (EMA) 进行更稳定的训练和更好的表现。 RealESRGAN 使用 L1 损失、感知损失和 GAN 损失的组合进行训练,权重分别为 { 1 , 1 , 0 . 1 } 。 我们使用 { conv1, ...conv5} 特征图(权重 { 0 . 1 , 0 . 1 , 1 , 1 , 1 } ) 在预训练的 VGG19 网络 [20] 中激活函数之前作为感知损失。我们的实现基于BasicSR [48]。

退化详细过程。我们采用二阶退化模型,在简单性和有效性之间取得良好的平衡。 除非另有说明,否则这两个降级过程具有相同的设置。采用高斯核、广义高斯核和平台形核,概率为{0 . 7 , 0 . 15 , 0 . 15 } 。模糊核大小是从 { 7 , 9 , ...21 } .模糊标准差 σ 取样自 [0 . 2 , 3] ( [0 . 2 , 1 . 5] 用于第二次降解过程)。 形状参数β分别从[0. 5,4]和[1,2]中采样广义高斯核和高原形核。我们还使用概率为 0.1 的 sinc 内核。我们跳过了第二次模糊退化,概率为 0.2。

        我们采用高斯噪声和泊松噪声,概率为 { 0 . 5 , 0 . 5 } 。噪声sigma范围和泊松噪声标度分别设置为[1, 30]和[0.05, 3](第二次退化过程为[1,25]和[0.05,2.5])。灰度噪声概率设置为 0.4。JPEG 压缩质量系数设置为 [30 , 95]。最终应用sinc滤波器的概率为0.8。更多详细信息可以在已发布的代码中找到

训练配对池。为了有效提高训练效果。所有降级过程都是在 PyTorch 中通过 CUDA 加速实现的,因此我们能够动态合成训练对。然而,批处理限制了批次中合成降解的多样性。例如,批次中的样本不能具有不同的调整大小比例因子。因此,我们采用训练对池来增加批量中的降解多样性。在每次迭代中,从训练对中随机选择训练样本,形成训练批次。我们在实现中将池大小设置为 180。

在训练期间锐化真实目标图像。我们进一步展示了一种训练技巧,可以在视觉上提高清晰度,同时不引入可见的伪像。 锐化图像的典型方法是采用后处理算法,例如非锐化遮罩 (USM)。但是,此算法往往会引入过冲伪影。根据经验发现,在训练过程中锐化地面实况图像可以更好地平衡锐度和过冲伪影抑制。我们将使用锐化地面实况图像训练的模型表示为 Real-ESRGAN +(比较如图 7 所示)。

4.2 对比实验

        与现有作品的比较 我们将 Real-ESRGAN 与几种最先进的方法进行了比较,包括 ESRGAN [50]、DAN [34]、CDC [51]、RealSR [19] 和 BSRGAN [55]。我们使用真实世界的图像在几个不同的测试数据集上进行了测试,包括RealSR [5]、DRealSR [51]、OST300 [49]、DPED [18]、ADE20K验证[59]和来自互联网的图像。由于现有的感知质量指标不能在细粒度尺度上很好地反映人类的实际感知偏好[3],我们在图7中提供了几个具有代表性的视觉样本。定量结果也包含在附录中。B 供参考。

        从图 7 中可以看出,我们的 Real-ESRGAN 在去除伪影和恢复纹理细节方面都优于以前的方法。Real-ESRGAN+(使用锐化地面实况进行训练)可以进一步提高视觉清晰度。 具体来说,第一个样本包含过冲伪影(字母周围的白边)。 直接上采样将不可避免地放大这些伪影(例如,DAN 和 BSRGAN)。Real-ESRGAN考虑了这些常见的伪影,并使用sinc滤波器对其进行仿真,从而有效地消除了振铃和过冲伪影。第二个样品包含未知和复杂的降解。大多数算法无法有效地消除它们,而使用二阶退化过程训练的 Real-ESRGAN 可以。 Real-ESRGAN 还能够为真实世界的样品恢复更逼真的纹理(例如,砖块、山脉和树木纹理),而其他方法要么无法消除退化,要么添加不自然的纹理(例如,RealSR 和 BSRGAN)。

图片解释: 对几个具有代表性的真实世界样本进行定性比较,上采样比例因子为 4。 我们的 Real-ESRGAN 在去除伪影和恢复纹理细节方面都优于以前的方法Real-ESRGAN+(使用锐化真实目标进行训练)可以进一步提高视觉清晰度。其他方法可能无法去除过冲(第一个样本)和复杂的伪影(第二个样本),或者无法恢复各种场景(第 3、4、5 个样本)的真实和自然纹理。( 放大以获得最佳视野 )

图片解释: 顶部:带和不带(放大以获得最佳视图)阶次降级过程的真实 ESRNet 结果。 底部:带和不带 sinc 滤波器的 Real-ESRNet 结果。放大以获得最佳视野

4.3 消融研究

        二阶退化模型。 我们在Real-ESRNet上对降解进行消融研究,因为它更可控,更能反映降解的影响。我们将Real-ESRNet中的二阶过程替换为经典的退化模型来生成训练对。如图8(上图)所示,使用经典一阶退化模型训练的模型不能有效去除墙上的噪点或麦田中的模糊,而Real-ESRNet可以处理这些情况。

        SINC滤波器。如果在训练过程中未使用sinc滤波器,则恢复的结果将放大输入图像中存在的振铃和过冲伪影,如图8(底部)所示,尤其是在文本和线条周围。相比之下,使用 sinc 滤波器训练的模型可以消除这些伪影。

        具有SN正则化的U-Net鉴别器。我们首先采用 ESRGAN 设置,包括 VGG 式鉴别器及其损失权重。然而,从图9中我们可以观察到,这个模型无法恢复详细的纹理(砖块和灌木丛),甚至在灌木丛的树枝上带来了令人不快的伪影。使用U-Net设计可以改善局部细节。然而,它引入了不自然的纹理,也增加了训练的不稳定性。 SN正则化可以改善恢复的纹理,同时稳定训练动态。

        更复杂的模糊内核。 我们在模糊合成中去除了广义高斯核和平台形核。如图 10 所示,在一些真实样本上,该模型无法像 RealESRGAN 那样去除模糊并恢复锐利边缘。然而,在大多数样本上,它们的差异很小,这表明广泛使用的具有高阶退化过程的高斯核已经可以覆盖较大的真实模糊空间。由于我们仍然可以观察到稍微好一点的性能,因此我们在 Real-ESROGAN 中采用了那些更复杂的模糊内核。

图片解释:图9是鉴别器的消融效果对比。图10是使用更多模糊核(广义模糊核和平台形核)进行消融。图 11:局限性:1) 扭曲的线条;2)GAN训练引起的令人不快的伪影;3)未知和分布外的降解。

4.4 不足

        尽管 Real-ESRGAN 能够恢复大多数真实世界的图像,但它仍然有一些局限性。 如图11所示,1)由于混叠问题,一些修复的图像(尤其是建筑物和室内场景)有扭曲的线条。2)GAN训练在某些样本上引入了令人不快的伪影。3)它无法消除现实世界中分布外的复杂退化。更糟糕的是,它可能会放大这些伪影。这些缺点对Real-ESRGAN的实际应用影响很大,在今后的工作中亟待解决。

5 总结

        在本文中,我们使用纯合成训练对训练实用的 Real-ESRGAN 进行真实世界的盲超分辨率训练为了合成更实际的退化,我们提出了一种高阶退化过程,并采用sinc滤波器来模拟常见的振铃和过冲伪影我们还利用具有频谱归一化正则化的 U-Net 判别器来提高判别器能力并稳定训练动态。使用合成数据训练的 Real-ESRGAN 能够增强细节,同时消除大多数真实世界图像的恼人伪影。

附录材料:待补充......

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

85基于Matlab的交通设施识别

基于Matlab的交通设施识别。 GUI设计图像处理, 基于数字图像处理,设计实现一个自然场景下公路交通限速标志分割和识别的程序。要求系统具有界面,并实现以下功能: 1)读入自然场景下包含交通标志的图像; 2)对…

Java多线程并发中部分不并发的问题

写Java实验发现个有意思的问题 三个线程,一个线程打印字符a,一个线程打印字符b,另一个线程打印数字,多次运行结果都是先打印混合输出的ab,完了再打印数字 有图有真相,我运行了10次 完整的代码是这个 clas…

win10下载Remix IDE桌面版以及空白页面的解决

文章目录 Remix IDE 的下载Remix IDE 空白页面的解决 Remix IDE 的下载 到 github 地址 https://github.com/ethereum/remix-desktop/releases 选择exe文件或根据自己电脑版本选择对应的zip文件进行下载,然后正常安装即可。 Remix IDE 空白页面的解决 有时打开Remix…

7 通用数字量输入输出GPIO

文章目录 7.0 GPIO概念7.1 GPIO工作原理7.2 GPIO寄存器以及编程7.2.5 GPIO寄存器编程设置与应用 7.3 GPIO跑马灯7.3.1 LED 输出初始化7.3.2 跑马灯输出实验7.3.3 按键输入实验 7.0 GPIO概念 GPIO(general purpose intput output)是通用输入输出端口的简…

记一次Kotlin Visibility Modifiers引发的问题

概述 测试环境爆出ERROR告警日志java.lang.IllegalStateException: Didnt find report for specified language,登录测试环境ELK查到如下具体的报错堆栈日志: java.lang.IllegalStateException: Didnt find report for specified language at com.aba.…

7000字详解 动态代理(JDK动态代理 CGLIB动态代理)与静态代理

代理模式 1. 代理模式 概念2. 静态代理3. 动态代理3.1.JDK动态代理3.2.CGLIB动态代理3.3. JDK动态代理和CGLIB动态代理区别 4.静态代理和动态代理区别5.篇末 1. 代理模式 概念 代理模式是一种设计模式。 使用代理对象来替代真实对象,用代理对象去访问目标对象。这样…

笔记(三)maxflow push relabel与图像分割

笔记(三)maxflow push relabel与图像分割 1. Push-Relabel算法思想2.Push-Relabel算法原理示意图3.Push-Relabel算法具体实例4. push relabel与图割 1. Push-Relabel算法思想 对于一个网络流图: 该算法直观可以这样理解,先在源节点处加入充足…

WordPress无需插件禁用WP生成1536×1536和2048×2048尺寸图片

我们在使用WordPress上传图片媒体文件的时候,是不是看到媒体库中有15361536和20482048的图片文件,当然这么大的文件会占用我们的服务器空间,如何禁止掉呢? function remove_default_image_sizes( $sizes) {unset( $sizes[1536x15…

人力资源管理后台 === 组织架构

目录 1.组织架构-树组件应用 2.组织架构-树组件自定义结构 3.组织架构-获取组织架构数据 4.组织架构-递归转化树形结构 5.组织架构-添加子部门-新建弹层组件 6.组织架构-添加子部门-表单结构 7.组织架构-添加子部门-表单基本校验 8.组织架构-添加子部门-表单业务校验 9…

ATK-ESP8266 WIFI模块串口通信通用实现方案

ATK-ESP8266 WIFI模块是一种常用的无线模块,它可以通过串口与外部设备进行通信,实现数据的收发和控制。本文将介绍一种通用的实现方案,帮助您在项目中使用ATK-ESP8266 WIFI模块进行串口通信。 【方案概述】 这个通用实现方案涵盖了ATK-ESP82…

VMWare虚拟机ubuntu克隆打不开

ubuntu克隆打不开 复制的存有ubuntu克隆的文件夹,导入vmware打不开 说找不到这个文件,那就到目录把它的删掉 的删掉 换000001.vmdk后缀的

Android 10.0 mtp模式下连接pc后显示的文件夹禁止删除copy重命名功能实现

1.前言 在10.0的系统开发中,usb连接pc端的时候有好几种模式,在做otg连接pc端的时候,改成mtp模式的时候,在pc端可以看到产品设备 的显示的文件夹的内容,对于产品设备里面的文件在pc端禁止做删除重命名拷贝等操作功能的实现 2.mtp模式下连接pc后显示的文件夹禁止删除copy重命…

在我国干独立游戏开发有多难?

游戏独立开发在中国,一直以来都是一条充满挑战的道路。尽管有着无限的激情和创意,但面对市场、资金、政策等多方面的困难,许多独立开发者在这条路上艰难前行。 首先,市场竞争激烈是中国游戏独立开发者面临的首要挑战。随着游戏产…

Unsupervised MVS论文笔记(2019年)

Unsupervised MVS论文笔记(2019年) 摘要1 引言2 相关工作3 实现方法3.1 网络架构3.2 通过光度一致性学习3.3 MVS的鲁棒光度一致性3.4 学习设置和实施的细节3.5.预测每幅图像的深度图 4 实验4.1 在DTU上的结果4.2 消融实验4.3 在ETH3D数据集上的微调4.4 在…

BUUCTF [MRCTF2020]Ez_bypass 1

题目环境:F12查看源代码 I put something in F12 for you include flag.php; $flagMRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}; if(isset($_GET[gg])&&isset($_GET[id])) { $id$_GET[id]; $gg$_GET[gg]; if (md5($id) md5($gg) && $id ! $gg) { …

显示Excel功能区或工具栏的方法不少,其中快捷方式最快

Microsoft Excel是Office套件中最复杂的工具之一,它提供了大量功能,其中大部分都是使用工具栏操作的。缺少工具栏使Excel很难完成工作。 如果Excel中没有这些关键元素,你将无法快速完成工作,因此,可以理解的是&#x…

算法基础之合并集合

合并集合 核心思想:并查集: 1.将两个集合合并2.询问两个元素是否在一个集合当中 基本原理:每个集合用一棵树表示 树根的编号就是整个集合的编号 每个节点存储其父节点&#xff0c;p[x]表示x的父节点 #include<iostream>using namespace std;const int N100010;int p[N];…

RESTful API 架构快速入门 Flask实现

RESTful 简介 1.1 为什么要使用 RESTful 架构&#xff1f; Representational State Transfer&#xff08;REST&#xff09;是一种面向资源的架构风格&#xff0c;广泛应用于网络服务的设计和开发。使用RESTful架构有以下几个优点&#xff1a; 简单性和可扩展性&#xff1a; RE…

springboot 拦截器中使用@Value注解为null

拦截器中获取配置参数为null 代码如下&#xff1a; 解决方式一&#xff1a; 检查你的WebMvcConfigurer实现类&#xff0c;比如我的是CCBWebMvcConfig 将拦截器以bean的形式注入&#xff1a; 我之前的写法是new 一个放进去的&#xff0c;这种会导致Value为null AutowiredJSCCB…

图像分割模型及架构选型介绍(MMSegmentation|sssegmentation等)

参考&#xff1a; https://zhuanlan.zhihu.com/p/618226513 0. 图像分割概述 图像分割通过给出图像中每个像素点的标签&#xff0c;将图像分割成若干带类别标签的区块&#xff0c;可以看作对每个像素进行分类。图像分割是图像处理的重要组成部分&#xff0c;也是难点之一。随…
最新文章