Learning a Deep Convolutional Network for Image Super-Resolution

2024-08-27 00:08

本文主要是介绍Learning a Deep Convolutional Network for Image Super-Resolution,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Abstract

我们提出了一种单图像超分辨率(SR)的深度学习方法。 我们的方法直接学习低/高分辨率图像之间的端到端映射。 该映射表示为深度卷积神经网络(CNN),它将低分辨率图像作为输入并输出高分辨率图像。 我们进一步表明,传统的基于稀疏编码的SR方法也可以被视为深度卷积网络。但与分别处理每个组件的传统方法不同,我们的方法共同优化所有层。 我们的深CNN具有轻质结构,同时展示了最先进的修复质量,并实现了实际在线使用的快速速度。

1 Introduction

单图像超分辨率(SR)[11]是计算机视觉中的经典问题。 最近用于单图像超分辨率的最先进方法大多是基于示例的。 这些方法要么利用相同图像[7,10,23]的内部相似性,要么学习外部低分辨率和高分辨率样本对的映射函数[2,4,9,13,20,24 {26,28]。 基于外部示例的方法通常提供有丰富的样本,但是受到有效且紧凑地建模数据的困难的挑战。

基于稀疏编码的方法[25,26]是基于外部示例的图像超分辨率的代表性方法之一。 该方法涉及其管道中的几个步骤。 首先,从图像中密集地提取重叠的patch并进行预处理(例如,减去平均值)。 然后,这些patch由低分辨率字典编码。稀疏系数被传递到高分辨率字典中以重建高分辨率patch。 聚合(或平均)重叠的重建patch以产生输出。 以前的SR方法特别注重学习和优化词典[25,26]或其他建模方法[4,2]。 但是,管道中的其余步骤很少在统一优化框架中进行优化或考虑。

在本文中,我们显示上述管道相当于深度卷积神经网络[15](更多细节见第3.2节)。 受此事实的启发,我们直接考虑卷积神经网络,它是低分辨率图像和高分辨率图像之间的端到端映射。 我们的方法与现有的基于外部示例的方法基本不同,因为我们的方法没有明确地学习用于对patch空间建模的字典[20,25,26]或流形[2,4]。这些是通过隐藏层隐式实现的。 此外,patch提取和聚合也被公式化为卷积层,因此参与优化。 在我们的方法中,整个SR管道通过学习完全获得,几乎没有前/后处理。

我们将所提出的模型命名为超分辨率卷积神经网络(SRCNN)。 拟议的SRCNN具有几个吸引人的特性。 首先,它的结构在设计时考虑到了简单性,并且与最先进的基于实例的方法相比,提供了更高的准确性。 图1显示了一个例子的比较。 其次,通过适度数量的滤波器和层,我们的方法即使在CPU上实现了实际在线使用的快速速度。我们的方法比一系列基于示例的方法更快,因为它是完全前馈的,并且不需要解决任何使用上的优化问题。 第三,实验表明,当(i)更大的数据集可用时,和/或(ii)使用更大的模型时,可以进一步改善网络的恢复质量。 相反,较大的数据集/模型可能对现有的基于示例的方法提出挑战。

总的来说,这项工作的贡献主要有三个方面:
1、我们提出了一种用于图像超分辨率的卷积神经网络。 网络直接学习低分辨率图像和高分辨率图像之间的端到端映射,除了优化之外几乎没有预处理/后处理。

2、我们建立了基于深度学习的SR方法和传统的基于稀疏编码的SR方法之间的关系。 这种关系为网络结构的设计提供了指导。
3、我们证明深度学习在超分辨率的经典计算机视觉问题中是有用的,并且可以实现良好的质量和速度。

2 Related Work

Image Super-Resolution
一类最先进的SR方法[9,4,25,26,24,2,28,20]学习低/高分辨率patch之间的映射。 这些研究在如何学习紧凑字典或流形空间以关联低/高分辨率patch以及如何在这样的空间中进行表示方案方面存在差异。在Freeman等[8]的开创性工作中,字典直接表示为低/高分辨率的patch对,输入patch的最近邻居在低分辨率空间中找到,其相应的高分辨率patch用于重建。Chang等[4]介绍了一种流形嵌入技术作为NN策略的替代方法。 在Yang等人的著作[25,26]中,上述NN对应进展到更复杂的稀疏编码公式。 这种基于稀疏编码的方法及其若干改进[24,20]是当今最先进的SR方法之一。 在这些方法中,patch是优化的重点; patch提取和聚合步骤被视为前/后处理并单独处理。

Convolutional Neural Networks
卷积神经网络(CNN)可以追溯到几十年前[15]并且最近表现出爆炸性的普及,部分原因在于其在图像分类方面的成功[14]。 在这一进展中,有几个因素至关重要:(i)现代强大GPU的有效训练实施[14],(ii)整流线性单元(ReLU)[18]的提议,它使收敛更快,同时仍然表现良好质量[14],以及(iii)轻松访问大量数据(如ImageNet [5])以训练大型模型。 我们的方法也受益于这些进步。

Deep Learning for Image Restoration
已经有一些使用深度学习技术进行图像恢复的研究。 多层感知器(MLP),其所有层都是完全连接的(与卷积相反),用于自然图像去噪[3]和后去模糊去噪[19]。 与我们的工作更密切相关的是,卷积神经网络应用于自然图像去噪[12]并消除噪声模式(污垢/雨)[6]。这些恢复问题或多或少都是去噪驱动的。 相反,在我们所知的情况下,图像超分辨率问题并没有见证深度学习技术的使用。

3 Convolutional Neural Networks for Super-Resolution
3.1 Formulation

考虑一个低分辨率图像。 我们首先使用双三次插值将其上采样到所需的大小,这是我们执行的唯一预处理。 将插值图像表示为Y.我们的目标是从Y恢复与地面实况高分辨率图像X尽可能相似的图像F(Y)。为了便于呈现,我们仍称Y为低分辨率 虽然它与X具有相同的大小,但我们希望学习映射F,它在概念上由三个操作组成:

1. Patch extraction and representation:该操作从低分辨率图像Y中提取(重叠)补丁,并将每个补丁表示为高维向量。 这些向量包括一组特征图,其数量等于向量的维数。

2. Non-linear mapping:该操作非线性地将每个高维向量映射到另一个高维向量上。 每个映射的矢量在概念上是高分辨率patch的表示。 这些向量包括另一组特征映射。

3. Reconstruction:该操作聚合上述高分辨率patch表示以生成最终的高分辨率图像。 预计该图像与地面实况X相似。

我们将证明所有这些操作形成卷积神经网络。 图2中描述了网络的概述。接下来,我们详细说明了每个操作的定义。

Patch extraction and representation 

图像恢复中的流行策略(例如,[1])是密集地提取patch,然后通过一组预先训练的基础(例如PCA,DCT,Haar等)来表示它们。这相当于通过一组过滤器对图像进行卷积,每个过滤器都是基础。在我们的表述中,我们将这些基础的优化包括在网络的优化中。形式上,我们的第一层表示为操作F1:

F_{1}(Y)=max(0,W_{1}*Y+B_{1})

其中W1和B1分别代表滤波器和偏置。 这里W1的大小为c×f1×f1×n1,其中c是输入图像中的通道数,f1是滤波器的空间大小,n1是滤波器的数量。直观地,W1在图像上应用n1个卷积,并且每个卷积具有内核大小c×f1×f1。 输出由n1个特征映射组成。
B1是n1维向量,其每个元素与滤波器相关联。我们在滤波器响应上应用整流线性单元(ReLU,max(0; x))。

Non-linear mapping

第一层为每个patch提取n1维特征。在第二操作中,我们将这些n1维向量中的每一个映射为n2维向量。这相当于应用具有1×1的平凡空间支持的n2个滤波器。 第二层的操作是:

F_{2}(Y)=max(0,W_{2}*F_{1}(Y)+B_{2})

这里,W2的大小为n1×1×1×n2,B2为n2维。每个输出n2维向量在概念上是将用于重建的高分辨率patch的表示。

可以添加更多卷积层(其空间支持为1×1)以增加非线性。 但这会显着增加模型的复杂性,因此需要更多的训练数据和时间。 在本文中,我们选择在此操作中使用单个卷积层,因为它已经提供了引人注目的质量。

Reconstruction

在传统方法中,经常对预测的重叠高分辨率patch进行平均以产生最终的完整图像。 平均可以被视为一组特征图上的预定义滤波器(其中每个位置是高分辨率patch的展平矢量形式)。 由此推动,我们定义卷积层以产生最终的高分辨率图像:

F(Y)=W_{3}*F_{2}(Y)+B_{3}

这里W3的大小为n2×f3×f3×c,B3是c维向量。

如果高分辨率patch的表示位于图像域中(即,我们可以简单地重塑每个表示以形成patch),我们期望滤波器就像平均滤波器一样; 如果高分辨率patch的表示在某些其他域中(例如,根据某些基础的系数),我们预期W3的行为类似于首先将系数投影到图像域上然后求平均。 无论哪种方式,W3都是一组线性滤波器。

有趣的是,尽管上述三种操作都是由不同的直觉驱动的,但它们都导致与卷积层相同的形式。 我们将所有三个操作放在一起并形成卷积神经网络(图2)。 在此模型中,将优化所有过滤权重和偏差。
尽管整体结构简洁,但我们的SRCNN模型是通过吸取超分辨率显着进步所带来的丰富经验而精心开发的[25,26]。 我们将在下一节详细介绍这种关系。

3.2 Relationship to Sparse-Coding-Based Methods
我们证明了基于稀疏编码的SR方法[25,26]可以被视为卷积神经网络。 图3显示了一个例子。
在基于稀疏编码的方法中,让我们考虑从输入图像中提取f1×f1低分辨率patch。 该patch按其均值减去,然后投影到(低分辨率)字典上。 如果字典大小为n1,这相当于在输入图像上应用n1个线性滤波器(f1×f1)(平均减法也是线性运算,因此可以被吸收)。 这被示为图3的左侧部分。

然后将稀疏编码求解器应用于投影的n1系数(例如,参见特征符号求解器[17])。 该求解器的输出为n2个系数,在稀疏编码的情况下通常为n2 = n1。 这些n2系数是高分辨率patch的表示。 在这个意义上,稀疏编码求解器表现为非线性映射运算符。参见图3的中间部分。然而,稀疏编码求解器不是前馈,即,它是迭代算法。 相反,我们的非线性算子是完全前馈的,可以有效地计算。 我们的非线性算子可以被认为是像素方式的完全连接层。

然后将上述n2个系数(在稀疏编码之后)投影到另一个(高分辨率)字典上以产生高分辨率的patch。 然后对重叠的高分辨率patch进行平均。 如上所述,这相当于n2特征图上的线性卷积。 如果用于重建的高分辨率patch的大小为f3×f3,则线性滤波器具有大小为f3×f3的等效空间支持。 请参见图3的右侧部分。

上面的讨论表明,基于稀疏编码的SR方法可以看作是一种卷积神经网络(具有不同的非线性映射)。 但并非所有操作都在基于稀疏编码的SR方法的优化中考虑过。 相反,在我们的卷积神经网络中,低分辨率字典,高分辨率字典,非线性映射,以及平均减法和平均,都涉及要优化的滤波器。 因此,我们的方法优化了包含所有操作的端到端映射。

上述类比也可以帮助我们设计超参数。 例如,我们可以将最后一层的滤波器大小设置为小于第一层的滤波器大小,因此我们更多地依赖于高分辨率patch的中心部分(如果f3 = 1,我们是使用没有平均的中心像素)。 我们也可以设置n2 <n1,因为它预计会更稀疏。 典型设置为f1 = 9,f3 = 5,n1 = 64,n2 = 32(我们在实验部分评估更多设置)。

3.3 Loss Function
学习端到端映射函数F需要估计参数\Theta =\{}{W_{1},W_{2},W_{3},B_{1},B_{2},B_{3}\}。 这是通过最小化重建图像F(Y;θ)和相应的地面实况高分辨率图像X之间的损失来实现的。给定一组高分辨率图像\{X_{i}\}及其对应的低分辨率图像\{Y_{i}\},我们使用Mean Squared Error(MSE)作为损失函数:

L({\Theta})=\frac{1}{n}\sum_{i=1}^{n}||F(Y_{i};\Theta)-X_{i}||^{2}

其中n是训练样本的数量。 使用标准反向传播的随机梯度下降使损失最小化[16]。
使用MSE作为损失函数有利于高PSNR。 PSNR是用于定量评估图像恢复质量的广泛使用的度量,并且至少部分地与感知质量相关。 值得注意的是,如果仅可导出损失函数,则卷积神经网络不排除使用其他类型的损失函数。

如果在训练期间给出了更好的感知动机度量,则网络可以灵活地适应该度量。我们将来会研究这个问题。 相反,对于传统的手工制作方法而言,这种灵活性通常很难实现。

4 Experiments

Datasets

为了与传统的基于示例的方法进行公平比较,我们使用与[20]中相同的训练集,测试集和协议。 具体而言,训练集由91个图像组成。 Set5 [2](5个图像)用于评估上采样因子2,3和4的性能,Set14 [28](14个图像)用于评估上采样因子3。除了91图像训练集之外,我们还在第5.2节中研究了更大的训练集。

Comparisons

我们将SRCNN与最先进的SR方法进行比较:Yang等人的SC(稀疏编码)方法[26],基于K-SVD的方法[28],NE + LLE(邻域嵌入+局部) 线性嵌入)[4],NE + NNLS(邻域嵌入+非负最小二乘)[2],以及ANR(锚定邻域回归)方法[20]。 这些实现都来自作者提供的公开代码。 对于我们的实现,训练使用cuda-convnet包[14]实现。

Implementation Details

根据3.2节,我们在主要评估中设置f1 = 9,f3 = 5,n1 = 64和n2 = 32。 我们将在第5节中评估替代设置。对于每个上采样因子2、3、 4,我们为该因子训练特定网络。

在训练阶段,地面实况图像{Xi}被准备为从训练图像中随机裁剪的32×32像素子图像。 通过子图像,我们的意思是这些样本被视为小图像而不是patch,因为patch是重叠的并且需要一些平均作为后处理但是子图像不需要。 为了合成低分辨率样本{Yi},我们通过适当的高斯核模糊子图像,通过上采样因子对其进行子采样,并通过双三次插值将其放大到相同的因子。91个训练图像提供大约24,800个子图像。 子图像是从原始图像中以14的步幅提取的。我们尝试了更小的步幅但没有观察到显着的性能改进。 根据我们的观察,训练集足以训练拟议的深层网络。 在GTX 770 GPU上进行大约三天的训练(8\times 10^{8}反向传播)。

在[20]之后,我们在实验中只考虑亮度通道(在YCrCb颜色空间中),因此在第一层/最后一层中c = 1。 两个色度通道是双三次上采样的,仅用于显示,但不用于训练/测试。 注意,我们的方法可以扩展到通过设置c = 3直接训练彩色图像。我们在本文中使用c = 1主要是为了与以前的方法进行公平比较,因为它们中的大多数仅涉及亮度通道。

为了避免训练期间的边界效应,所有卷积层都没有填充,网络产生较小的输出(20×20)。MSE损失函数仅通过{Xi}的中心20×20裁剪与网络输出之间的差异来评估。 在处理测试图像时,卷积神经网络可以应用于任意大小的图像。在测试期间,所有卷积层都被赋予足够的零填充,因此输出图像与输入的大小相同。 为了解决边界效应,在每个卷积层中,每个像素的输出(在ReLU之前)由有效输入像素的数量归一化,这可以预先计算。

通过从具有零均值和标准偏差0.001(和偏差为0)的高斯分布中随机绘制来初始化每个层的滤波器权重。 前两层的学习率为10-4,最后一层的学习率为10-5。 我们凭经验发现,最后一层中较小的学习速率对于网络收敛很重要(类似于去噪情况[12])。

4.1 Quantitative Evaluation

如表1和2所示,所提出的SRCNN在所有实验中产生最高的平均PSNR。 请注意,我们的SRCNN结果基于8×108反向传播的检查点。具体来说,如表1(Set5)所示,SRCNN实现的平均增益分别为0.51 dB,0.47 dB和0.40 dB,高于下一个最佳方法ANR [20],对所有三个放大因子均有影响。我们注意到由于测试样本的数量有限,Set5可能不是最终的测试集,但结果表明所提出的模型可以很好地处理不同的放大因子。 在较大的Set14数据集上,我们的SRCNN始终优于其他方法(平均≥0.3dB)。 当我们使用SSIM [22,21]作为性能指标时,观察到类似的趋势,其结果可在补充文件中找到。值得指出的是,SRCNN在学习阶段的最初阶段超过了双三次基线(见图1),并且在适度训练的情况下,SRCNN优于现有的最先进方法(见图6)。 然而,表现远非趋同。 我们推测,如果训练时间更长,可以获得更好的结果(见图6)。 在5.2节中,我们将展示我们的方法也受益于更多的训练数据。

图7,8和9示出了通过放大因子3的不同方法的超分辨率结果。可以观察到,SRCNN产生比其他方法更锐利的边缘,而没有任何明显的图像伪影。尽管具有最佳的平均PSNR值,但是所提出的SRCNN在图像"婴儿"和"头部"来自Set5时没有达到最高的PSNR。 尽管如此,我们的结果仍然具有视觉吸引力(见图10)。

4.2 Running time

图4显示了几种最先进方法的运行时间比较,以及它们的恢复性能。 所有基线方法都是从相应作者的MATLAB实现中获得的,而我们的是在C ++中。 我们使用同一台机器(Intel CPU 3.10 GHz和16 GB内存)分析所有算法的运行时间。 我们的方法在Set14中平均每个图像需要0.39秒(表2),而其他方法则慢几倍甚至几个数量级。注意速度差距主要不是由不同的MATLAB / C ++实现引起的; 相反,其他方法需要解决使用上的复杂优化问题(例如,稀疏编码或嵌入),而我们的方法是完全前馈的。 我们还注意到,我们的方法的处理时间与测试图像分辨率高度线性,因为所有图像都经历相同数量的卷积。

5 Further Analyses

5.1 Learned Filters for Super-resolution

图5显示了通过上采样因子2在91个图像(24,800个子图像)上训练的学习的第一层滤波器的示例。请参考我们公布的关于上采样因子3和4的模式的实现。有趣的是,每个学习的滤波器具有其特定的功能。 例如,滤波器a和f类似于拉普拉斯高斯滤波器,滤波器b,c和d类似于不同方向上的边缘检测器,并且滤波器e类似于纹理提取器。 我们观察到一些死滤波器,它们的权重几乎都是零,类似于[27]中观察到的那些。 然而,在训练时间足够长的情况下,某些死滤波器中可能会出现模式。 我们将在未来的工作中调查这一现象。

5.2 Learning Super-resolution from ImageNet

如文献所示,深度学习通常受益于大数据训练。 在上述实验中,我们使用由91个图像组成的标准训练集,以确保与现有方法的公平比较。 在本节中,我们展示了我们的深层模型可以在大型训练集的情况下获得更好的性能。 我们使用来自ILSVRC 2013 ImageNet检测训练分区的总共395,909张图像进行SRCNN学习。 使用33的步幅将这些图像分解成超过500万个子图像。我们使用与上述实验相同的网络设置,即f1 = 9,f3 = 5,n1 = 64和n2 = 32。ImageNet上的训练时间与91张图像上的训练时间大致相同,因为反向传播的数量是相同的。 在Set5上使用升级因子3测试实验。在ImageNet上训练的测试收敛曲线和其他方法的结果如图6所示。可以观察到,具有相同数量的反向传播(即,8×10^8), SRCNN + ImageNet达到32.52 dB,高于在91幅图像(或24,800个子图像)上训练的原始SRCNN产生的32.39 dB。 结果肯定地表明,使用更大和更多样化的图像训练集可以进一步提高SRCNN性能。

5.3 Filter Number

与其他CNN结构[14]相比,我们使用相对较小的网络规模来实现超分辨率的最先进性能。 一般而言,如果我们扩大网络规模,性能仍会提高,例如: 以运行时为代价添加更多图层和过滤器。 在这里,我们评估使用不同数量的过滤器的性能。 具体来说,基于我们的网络默认设置为n1 = 64且n2 = 32,我们进行了两个额外的实验:(i)一个是更大的网络,n1 = 128,n2 = 64,(ii)另一个网络更小,n1 = 32 并且n2 = 16。与5.2节类似,我们还在ImageNet上训练两个模型,并在Set5上使用上采样因子3进行测试。结果如表3所示。很明显,使用更多滤波器可以实现卓越的性能。 然而,如果需要快速恢复速度,则优选小的网络规模,其仍然可以实现比现有技术更好的性能。

5.4 Filter Size

在本节中,我们将检查网络对不同过滤器大小的敏感度。 在之前的实验中,我们将第一层的滤波器大小设置为f1 = 9,将最后一层的滤波器大小设置为f3 = 5.这里,我们将滤波器大小放大到f1 = 11和f3 = 7.所有其他设置保持不变 第5.2节。 Set5的上采样因子3的结果为32.57 dB,略高于5.2节中报告的32.52 dB。这表明相当大的过滤器尺寸可以抓住更丰富的结构信息,从而产生更好的结果。 然而,使用更大的过滤器大小,部署速度也会降低。 因此,网络规模的选择应始终是性能和速度之间的权衡。

6 Conclusion

我们为单图像超分辨率(SR)提出了一种新颖的深度学习方法。 我们表明,传统的基于稀疏编码的图像超分辨率方法可以重新表述为深度卷积神经网络。 所提出的方法SRCNN学习低分辨率图像和高分辨率图像之间的端到端映射,除了优化之外几乎没有额外的前/后处理。SRCNN采用轻质结构,性能优于最先进的方法。 我们推测通过探索网络中更多的隐藏层/过滤器以及不同的x训练策略,可以进一步提高性能。 此外,所提出的结构具有简单性和鲁棒性的优点,可以应用于其他低级视觉问题,例如图像去模糊或同时SR +去噪。 人们还可以调查网络以应对不同的上采样因子。

 

 

 

这篇关于Learning a Deep Convolutional Network for Image Super-Resolution的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

问:Super与this在Java中有什么区别?

this: this 关键字用于引用当前对象。它通常用于区分成员变量和方法参数或局部变量。在实例方法中,this 指向调用该方法的对象。在构造函数中,this 指向正在被初始化的对象。 super: super 关键字用于引用父类(超类)的构造函数、方法或变量。在子类的构造函数中,super() 用于调用父类的构造函数。在子类的方法中,super.methodName() 用于调用父类的方法。

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

MTK Android P/Q system/vendor/super快速打包

一、Android 新版本默认开启了动态分区,把system vendor  product等分区打包成一个super分区。这对于我们使用替换分区的方法来排查问题不是很方便,直接替换一个super也不知道到底是哪个部分导致的。所以我们需要自己制作super.img来缩小范围。下面讲讲如何快速生成system、vendor、super,以及vbmeta(校验image,不匹配可能会导致不开机) 二

深度学习--对抗生成网络(GAN, Generative Adversarial Network)

对抗生成网络(GAN, Generative Adversarial Network)是一种深度学习模型,由Ian Goodfellow等人在2014年提出。GAN主要用于生成数据,通过两个神经网络相互对抗,来生成以假乱真的新数据。以下是对GAN的详细阐述,包括其概念、作用、核心要点、实现过程、代码实现和适用场景。 1. 概念 GAN由两个神经网络组成:生成器(Generator)和判别器(D

? extends T 和 ? super T分别是什么意思?有什么不同?

<? extends T>首先你很容易误解它为继承于T的所有类的集合,这是大错特错的,相信能看下去你一定见过或用过List<? extends T>吧?为什么我说理解成一个集合是错呢?如果理解成一个集合那为什么不用List<T>来表示?所以<? extends T>不是一个集合,而是T的某一种子类的意思,记住是一种,单一的一种,问题来了,由于连哪一种都不确定,带来了不确定性,所以是不可能通过add