Abstract.

图像自适应查找表 (lut) 由于其用于建模颜色变换的高效率,在实时图像增强任务中取得了巨大成功。但是,它们以耦合方式将完整的变换 (包括与颜色分量无关的部分和与分量相关的部分) 嵌入到仅一种类型的lut (1D或3D) 中。由于两个因素,该方案提出了提高模型表现力或效率的难题。一方面,一维lut提供了很高的计算效率,但缺乏颜色组件交互的关键能力。另一方面,3D lut具有增强的组件相关转换能力,但会遭受大量内存占用,高训练难度和有限的单元利用率的困扰。受图像信号处理器中传统的分而治之实践的启发,我们提出了SepLUT (可分离图像自适应查找表) 来解决上述限制。具体来说,我们将单个颜色变换分离为分别实例化为1D和3D lut的与组件无关和与组件相关的子变换的级联。以这种方式,两个子变换的能力可以相互促进,其中3D LUT补充了混合颜色分量的能力,并且1D LUT重新分配输入颜色以增加3D LUT的单元利用率,并且因此使得能够使用更轻量级的3D LUT。实验表明,所提出的方法在照片修饰基准数据集上比当前的最新技术具有增强的性能,并在gpu和cpu上实现了实时处理。

1 Introduction

查找表 (LUT) 是一种有前途的数据结构,可以通过用廉价的数组缓存和索引代替昂贵的运行时计算来有效地进行特定的转换。它会在输入的采样域上预先计算函数的输出,并通过有效的查找和插值操作来评估相同的函数。LUTs被广泛用于优化图像信号处理器 (ISP) 中的色彩变换,这是相机成像管道和许多显示设备中的关键组件。为了将传感器信号转换为人类可感知的数字图像,典型的ISP遵循分而治之的原理,利用1D和3D两种类型的lut来处理不同的变换 [15]。1D lut适用于不需要三个颜色分量之间相互作用的独立于分量的变换,例如白平衡,伽马校正,亮度调节和对比度拉伸。3D LUTs进一步实现了不同颜色分量的混合,从而支持更复杂的分量相关变换,如色调和饱和度的调整。

Lut的高效和高效激励了深度学习的最新进展,提出了可学习的,图像自适应的lut,以增强实时图像增强 [25,31,18,17,21,11,14,26,1,36,444]。但是,这些方法仅将完整的颜色变换编码为单个类型的LUTs (1D或3D),但忽略了单个模块同时对与组件无关和与组件相关的变换进行建模的有限能力。这样的范例限制了这些方法的表现力。具体来说,基于1D lut的方法缺乏交互组件信息的关键模型能力,因为它们独立地在每个颜色组件上工作。尽管基于3D lut的方法能够处理与组件无关的变换和与组件相关的变换,但它们以耦合的方式对这两个变换进行建模,从而增加了模型的能力要求。原因在于缺乏先前的独立于组件的变换,该变换可以将输入图像范围重新缩放为3D lut的归一化且在感知上均匀的色彩空间。因此,3D lut依靠增加其大小来适应输入颜色范围的多样性。例如,[36444] 采用444点3D lut,而ISP通常采用17点甚至9点3D lut [15]。较大的LUT大小引入了大量的参数,导致沉重的内存负担和高训练难度。此外,采用相对较大的LUT尺寸将导致3D LUT的单元利用率不足,因为出现在单个输入图像中的颜色通常仅占用整个颜色空间的微小子空间,从而导致模型容量的冗余。

为了同时提高模型的表达能力和效率,我们提出了一种称为可分离图像自适应查找表 (SepLUT) 的新颖框架。它将单个颜色变换解耦为分别实例化为1D和3D lut的与组件无关的子变换和与组件相关的子变换。这个想法直接受到ISP的普遍做法的推动,其中1D和3D lut共同发挥作用。如图1所示,我们遵循动态神经函数 [6] 的范例,在输入图像的下采样,固定分辨率版本上使用CNN骨干网,以预测3 × 1D LUT和3D LUT的参数。然后将两个生成的LUT顺序应用于原始输入图像-3 × 1D LUT重新缩放每个颜色通道以自适应地调整亮度/对比度,然后将3D LUT混合三个颜色分量以处理色相和饱和度。优点是双重的。一方面,3D lut可以通过颜色分量交互来补充1D lut。另一方面,1D lut可以将输入颜色重新分配到以下3D lut的特定范围中,这增加了3D lut的单元利用率,从而减少了冗余容量并实现了较小尺寸的使用。此外,LUT的输入和输出空间之间的一致性允许简单的LUT量化,从而为所提出的方法提供了显着的轻量级特性。

本文的贡献有三个方面 :( 1) 我们提出了一种新颖的观点,将单个颜色变换分为两个子变换,即与分量无关的变换和与分量相关的变换。(2) 我们提出了一个通用框架,该框架采用了1D和3D lut的级联来实例化上述两个子变换,使它们相互促进,并呈现出整体轻量级,高效率和增强的表现力。(3) 通过在公开可用的基准数据集上进行大量实验,证明了该方法的效率和有效性。

2 Related Works

2.1 Lookup Tables

查找表 (LUT) 定义由一组索引寻址的值表。它通常用作单变量或多变量函数y = f(x1,.,xn),n = 1,2,..通过枚举所有可能的输入组合 {(x1,.,xn)} 并存储相应的输出值y。之后,可以仅使用内存访问和插值来评估该函数,而无需再次执行计算。因此,LUTs通常用于计算机系统 [20,30],尤其是一些嵌入式设备 [15],以加速计算。最简单的LUT是由单个变量 (n = 1) 索引的1D LUT,它利用线性插值来生成不是表元素的特定索引的值。另一个经常使用的lut是由三个独立变量 (n = 3) 的三元组索引的3D lut,这需要更复杂的插值技术,例如三线性 [29] 和四面体 [16] 插值。根据 [15],实际ISP系统中的大多数模块都是使用1D或3D LUTs实现的,因为它们具有很高的功效和对颜色变换建模的适用性。

Learnable LUTs

ISP中lut的高效率和广泛使用也吸引了基于深度学习的图像增强方面的努力,以通过数据驱动的方法学习更强大的lut。以前的作品 [25、31、18、17、21、11、14、26、1] 主要集中在学习1D lut来模仿Photoshop和Lightroom等流行图像增强软件中的色彩调整曲线。它们对曲线的一组控制点或某些手工函数 (例如多项式函数) 的系数进行回归。但是,这些方法通常会遭受颜色通道之间缺乏相关性的困扰。最近,[36444] 将这些基于1D LUT的方法扩展到使用3D LUT。他们通过学习几个与图像无关的基础3D lut并使用与图像相关的权重将其组合来预测3D lut,从而适应不同的图像内容。3D lut考虑了颜色通道之间的关系,因此提供了更高的表现力来对更复杂的颜色变换进行建模。但是,3D LUTs的大模型容量需要大量的可学习参数,从而使这些方法遭受沉重的内存/存储占用。与以前基于单一类型的lut的工作相比,我们提出了一个更通用的框架,该框架考虑了两种类型的lut的结合,从而为上述限制提供了高级解决方案。

2.2 Image Enhancement

现有的基于学习的图像增强方法可以大致分为两种范式,即基于完全卷积网络的方法和基于颜色变换的方法。第一个范例 [5,24,8,37,35,4] 是训练全卷积网络 (FCN),该网络以密集预测方式直接从输入回归增强图像。但是,这些方法由于其沉重的计算负担和有限的可行输入分辨率,离实际应用还很遥远。相反,第二种范例将颜色转换与重型CNN模型解耦,以进行实时和高分辨率处理。具体来说,这些方法在输入图像的低分辨率,固定尺寸版本上使用cnn来预测某些特定颜色变换功能的图像自适应参数。典型的颜色变换函数包括仿射变换矩阵 [9、32、3、23],基于曲线的函数 [25、31、18、17、21、11、14、26、1],多层感知器 (MLPs) [12] 和3D LUTs [36,444]。这些学习的转换功能可以适应不同的输入图像内容,并具有很高的运行效率。其中一些在任意输入分辨率上也是灵活和可扩展的。因此,我们的工作还遵循了基于颜色变换的方案的这一思路,并构建了一个新颖的框架,该框架具有1D和3D LUTs的级联,用于实时图像增强。

3 Methods

3.1 Overall Framework

图1显示了所提出的图像增强框架的概述,该框架遵循动态神经功能的流行范例。具体而言,轻量级CNN网络被用作输入图像上的骨干网,以提取全局上下文,该全局上下文将用作生成图像内容相关的颜色变换函数的指南。颜色变换函数的形式设计为3 × 1D LUT和3D LUT的级联,旨在以解耦和顺序的方式处理与分量无关和与分量相关的变换。之后,生成的函数通过有效的查找和插值操作来提高输入的质量。

3.2 Global Image Context Analysis: Backbone Network

在建议的框架中,骨干CNN网络对于实现图像适应性至关重要。它负责通过分析输入图像X ∈ [0,1] 3 × h × w,根据图像内容预测后续1D和3D LUTs的参数。由于我们方法中的1D和3D lut都是为全局颜色变换而设计的,因此骨干网只需要捕获对输入图像的粗略理解。因此,输入图像的低分辨率版本 (例如,256 × 256) 是足够的,并且可以基本上将计算成本降低到固定水平。CNN骨干网的详细架构在表1中列出,其中m是控制每个卷积层的信道宽度的超参数。骨干网采用5个分层式卷积层将输入图像降采样为1/32分辨率。在网络的末端是平均池化层和重塑操作,该重塑操作进一步将特征图转换为紧凑的向量表示E ∈ R32m。矢量表示捕获输入图像的一些全局属性,并将被馈送到后续模块中,作为生成图像内容相关LUT参数的指南。

3.3 Component-independent Transform: 1D Lookup Tables

独立于组件的变换旨在将输入颜色重新分配到一个在感知上更均匀的空间中,从而可以增加以下3D LUT的单元利用率。在本文中,我们建议为上述目的采用3 × 1D LUT,其中分别为每个颜色通道预测三个单独的1D LUT。1D lut的元素 以图像上下文E为条件,以实现图像适应性,公式为:

其中表示通道c ∈ {r,g,b} 的So值的1D LUT。是将E作为输入并预测所有输出值的1D LUT生成器模块,其架构详见表2。请注意,sigmoid层用于将1D lut中的元素标准化为有效范围。一旦预测了1D lut,就可以通过简单的线性插值对每个像素分别执行与分量无关的变换:

其中表示由1D lut变换的中间图像。是遍历图像的索引。

它表示从s开始到t结束的整数集,即它 = {s,.,t}。

直观地说,直接应用直方图均衡化 (图像处理中的一种常规技术来调整图像对比度) 是另一种替代方法,可以作为独立于分量的变换来增加每个颜色分量的分布均匀性。但是,直方图均衡通过将输入颜色范围映射到精确的均匀分布来静态地最大化图像的熵,这不是智能的,并且在图像增强的场景中并不总是必需的。相反,通过采用数据驱动的方法来学习1D lut,我们的方法有望针对网络和每个输入图像进行图像自适应。定量比较见表4。

3.4 Component-correlated Transform: 3D Lookup Tables

在先前的与分量无关的变换之后,与分量相关的变换旨在混合和交互不同的颜色通道,以实现更复杂的颜色变换,例如色相和饱和度的改变。考虑到表现力和效率之间的平衡,我们选择3D lut来制定从三重态到另一种转换。典型的3D LUT定义了元素的3D网格,其中St表示沿每个颜色维度的值数。类似于第3.3节,应该由神经网络自动预测3D LUT中的所有元素,以考虑对各种输入图像的多样性的适应。这样的目标会形成从图像上下文E到维参数空间的映射:

其中表示尺寸为St的3D LUT。g3D是3D LUT生成器模块。为了防止涉及重大的记忆负担和训练难度,我们考虑秩因式分解将方程 (3) 中的完整映射分解为两个子映射h1和h2:

h1和h2可以用两个相应的全连接 (FC) 层实例化。与单个FC层相比,这种策略将参数数量从减少到,使变换更可行,更易于优化。详细的体系结构可以在表3中找到。

给定预测的3D LUT T3D,可以通过简单的三线性插值得出最终的增强图像

3.5 Efficient Implementation via Quantization

我们的方法还可以从模型量化技术中受益,以进一步减少内存和存储占用。具体地,LUT生成器中的FC层 (表2和表3) 等效于学习编码为可学习参数的多个独立于图像的基础LUT。FC层的输入用作图像相关系数,该系数将基本LUT线性组合到最终LUT中。请注意,LUT的输出只是LUT中元素的线性组合,并落入可以自然量化的颜色空间。因此,由于参数空间和输出空间之间的语义一致性,可以在测试时间内自然地将LUT生成器的训练参数量化为较低的位表示,而不会出现明显的性能下降。值得注意的是,由于其他图像增强方法在参数和输出空间之间的不一致,因此从模型量化技术中受益并非易事。需要更复杂的模型量化方法,但会引入繁琐的训练协议或严重损害性能。此外,由于lut和输入图像可以被量化为定点表示 (例如,8位整数),我们还可以在查找和插值过程中用定点对应物替换浮点计算,以进一步加速,如表5所示。

4 Experiments

4.1 Datasets

采用公开的MIT-Adobe FiveK [2] 和PPR10K [22] 数据集来评估所提出的方法。FiveK数据集包含5,000个带有五个手动修饰的地面真相 (A/B/C/D/E) 的rawimage。在我们的实验中选择了C版本。我们使用常用的设置 [5,36] 将数据集分成4,500图像对进行训练,其余500图像对进行测试。数据集的480P版本用于加快训练过程,而测试是在480P和原始4k分辨率上进行的。PPR10K数据集包含更大规模的11,161张原始肖像照片和3个版本的groundtruth (a/b/c)。我们遵循 [22] 中的设置,在不同的实验中利用所有三个修饰的版本作为基本事实,并将数据集分成8,875对进行训练和2,286对进行测试。对数据集的360进行实验。在 [36] 之后,针对两种典型的应用场景 (照片修饰和色调映射) 组织了实验。前者任务以相同的sRGB格式修饰输入图像,而后者将16位CIE XYZ输入图像转换为8位sRGB。我们在FiveK数据集上执行这两个任务,但仅在PPR10K上执行修饰任务,如 [22] 中所做的。至于数据增强策略,我们遵循 [36] 和 [22] 中的设置,以确保公平的比较。

4.2 Implementation Details

表1至表3显示了所提出方法中模块的实例化。骨干网的参数是随机初始化的,如 [10] 中所示。为了进行公平的比较,我们还在PPR10K数据集上使用ResNet-18 [13] 骨干网络 (使用ImageNet预先训练的 [7] 权重进行初始化) 进行实验,如 [22] 中所做的那样。至于LUT生成器,受 [36] 的启发,我们初始化3D LUT生成器以在早期训练阶段预测身份映射,以加快训练收敛。采用均方误差 (MSE) 损失以端到端的方式训练所提出的方法。我们不向预测的1D和3D lut引入任何其他约束或损失函数,希望它们可以针对网络和输入图像本身 (而不是针对任何手工制作的先验图像) 进行图像自适应。我们基于PyTorch 1.8.1 [27] 实现了我们的方法。采用标准的Adam优化器 [19] 来训练所提出的方法,在FiveK和PPR10K上的迷你批量大小分别设置为1和16。所有模型都在NVIDIA Tesla V100 GPU上以1 × 10-4的固定学习率训练400个时期。对于FiveK和PPR10K,等式 (4) 中的K分别设置为3和5,而根据实验目的设置So和St。我们在以下各节中提供它们。

4.3 Ablation Studies

在本节中,我们对FiveK数据集 (480P) 的修饰任务进行了几项消融研究,以验证所提出方法的关键组件。

Size of Lookup Tables (1) 3D LUT:

我们通过在没有1D LUT (So = 0) 和m = 8的情况下改变St来探索3D LUT大小的影响。在用于照片修饰任务的FiveK数据集 (480P) 上的实验表明,仅使用3D LUT,减小LUT大小St (从444 17到9) 可以显着减少参数数量 (从385K,106K至69K) 而没有显著的性能下降 (从25.27db,25.24db至25.21db)。这种现象表明3D LUT的容量冗余。因此,考虑到性能和模型大小之间的平衡,我们选择St = 9和St = 17作为本文的默认设置。(2) 1D LUT: 当3D LUT的大小固定时,我们还研究了不同尺寸的1D LUT的影响。如图2a所示,增加1D LUT的大小可连续提高性能,并在超过3D LUT的大小后饱和。一个可能的原因是3D LUT的精度充当瓶颈,并且将取消1D LUT引入的额外量化粒度。

Capacity of the Backbone

由于骨干网负责对输入图像进行粗略分析以指导1D和3D lut的生成,因此其容量要求应与lut的容量或大小相关。为了验证,我们通过在相同的LUT大小 (So和St) 设置下改变超参数m来烧蚀骨干网的宽度,并在图2b中报告结果。消融结果表明,增加主干的宽度并不能保证性能的提高,但可能会增加容量冗余和训练难度。此外,较大的LUT大小倾向于需要更强的骨干网。考虑到性能和内存占用之间的权衡,对于St = 9和St = 17,我们分别采用m = 6和m = 8。

Instantiation of the Component-independent Transform

在本节中,我们比较了几种变体以研究变换的正确实例化,包括直方图均衡 (HE) 变换,可学习的1D LUT和可学习的3 × 1D LUT。表4表明,3 × 1D LUT在两种不同的模型设置下表现最佳。结果表明,固定和手工制作的统一输入颜色分布的机制不能适应不同的图像内容和不同的修饰风格。因此,它不能保证图像增强任务的高级性能。可学习的1D LUT通过端到端优化避免了上述问题,并且3 × 1D LUT比单个1D LUT提供了更多的灵活性和智能。

Quantization on Lookup Tables

如第3.5节所述,我们将1D和3D LUT生成器中的参数从32位浮点数量化为8位整数。表5中的结果表明,这样的量化可以显著地减少存储/内存占用,而仅具有轻微的性能下降。值得注意的是,上述结果是通过直接量化训练模型而获得的,而无需任何微调或量化感知训练策略,证明了所提出方法的灵活性。此外,LUT量化启用了定点算法,这将我们方法的CPU推理时间从大约25ms减少到16ms。我们还将量化和定点算法应用于另一种基于3D LUT的方法 [36],并发现了类似的现象。由于可以优化1D和3D LUT变换,而 [36] 仅包括3D LUT变换,因此建议的框架在运行时方面从定点算法中受益更多。

4.4 Analysis

为了帮助直观地了解图像自适应lut的行为,我们说明了中间输出,如图3所示。可以观察到,1D LUT倾向于自适应地拉伸输入亮度和图像对比度,从而使它们处于与地面真相更相似的状态。之后,3D LUT负责改变色调并增强饱和度。此外,为了提供定量分析,我们还计算和分析了一系列训练模型的统计数据,包括3D LUTs的颜色分布和细胞利用率,如下所述。

Distribution of Each Color Component

为了定量研究一维lut对颜色分布的影响,我们比较了由不同尺寸的一维lut变换的图像M的直方图均匀性。直方图均匀性在某种程度上表示图像对比度的水平,并且可以通过图像直方图的方差来近似。图4的下一行显示了在FiveK数据集上平均的结果。随着1D LUT (So) 大小的增加,图像的每通道直方图方差减小,显示颜色分布均匀性的逐步增加。这种现象符合我们的期望,即1D LUT将以图像自适应的方式将图像对比度调整为更均匀的分布。

Cell Utilization of 3D Lookup Tables

典型的3D LUT将整个3D色彩空间离散化为单元网格。不幸的是,当转换单个输入图像时,这些单元仅被部分利用,因为输入很少包含所有可能的颜色。例如,[36] 的单元利用率 (可以看作是我们采用单个444点3D LUT的框架的特例) 仅约5.53%。为了研究1D LUT对3D LUT的细胞利用率的影响,我们对每张图像计算了有效像素落入的细胞的百分比。在FiveK数据集上平均的结果报告在图4的顶部行中。1D LUT能够激活更多的细胞以增加3D LUT的模型能力,并且随着1D LUT变得更精确 (具有更大的So),这种能力变得更强。

4.5 Comparisons with State-of-the-Arts

Quantitative and Qualitative Comparisons

为了与最新的实时方法进行比较,我们为我们的方法选择了两个典型的设置,即m = 6,So = St = 9和m = 8,So = St = 17,分别表示为我们的-S和我们的-L。表6至表8报告了PSNR,SSIM [34] 和CIE LAB色彩空间 (∆ eab) L2-distance的定量比较。所选方法的结果是通过使用其公开可用的代码和默认配置获得的。所提出的方法在参数更少的情况下明显优于其他方法。请注意,在表6中,SA-3DLUT [444] 实现了比我们的方法稍好的性能,但代价是显著的模型尺寸增加 (约37倍) 和速度降低 (约3倍,见表9)。我们还在图5中提供了一些视觉比较,其中我们的方法比其他方法产生了更多的视觉效果。例如,尽管其他方法的增强图像遭受不正确的亮度或朦胧的不良影响,但我们的方法的增强的对比度和足够的饱和度。更多定性结果请参考补充资料。

Real-time Performance Comparisons

为了证明该方法的实用性,我们评估了100图像的推理时间并报告了平均值。每个图像在不同的分辨率下测试100次,包括480P (640 × 480) 、720P (1280 × 720) 、4K (3840 × 2160) 和8K (7680 × 4320)。时间测量是在一台具有英特尔 (R) 至强 (R) 铂金8163 CPU和NVIDIA Tesla V100 GPU的机器上进行的。如表9所示,我们的方法在gpu和cpu上都大大超出了实时处理的要求。我们方法的高效率主要得益于两个因素。首先,馈送到CNN网络的下采样的固定分辨率输入使其计算成本固定且对输入分辨率不敏感。其次,LUT变换非常高效,因为它可以在gpu上并行化,并且可以从cpu上的定点算法中受益。

5 Conclusion

在本文中,我们提出了一种称为SepLUT的新颖框架,该框架同时利用两种不同类型的LUTs (1D和3D) 进行实时图像增强。它将单个颜色变换分为与组件无关和与组件相关的子变换。广泛的实验表明,这种方案有助于充分发挥两种类型的lut的功能,并具有一些有希望的特性,包括增强的表现力,高效率和轻的记忆足迹。该方法的可行性反映了分而治之的原理可以降低能力需求,简化各子模块的优化,显著提高效率。此外,适当的模块分解还可以从子模块之间的功能补充中受益,甚至可以提高整体性能。

SepLUT: Separable Image-adaptive LookupTables for Real-time Image Enhancement相关推荐

  1. image adaptive 3dlut based on deep learning

    文章目录 image adaptive 3dlut based on deep learning 1. Learning Image-adaptive 3D Lookup Tables for Hig ...

  2. ECCV2022论文列表(中英对照)

    Paper ID Paper Title 论文标题 8 Learning Uncoupled-Modulation CVAE for 3D Action-Conditioned Human Motio ...

  3. 基于AI的3DLUT系列论文分享

    目录 简介 AI3DLUT AdaInt SeqLUT 4D LUT CLUT-Net 总结 简介 在图像处理中,经常会用到3DLUT来做颜色增强或者色域映射,3DLUT插值部分基本都是硬件处理,但难 ...

  4. ECCV2022 | 开源:基于可分离级联查找表的实时图像增强方法

    近日,阿里巴巴大淘宝音视频算法与基础技术团队和上海交通大学图像所合作论文<SepLUT: Separable Lookup Tables for Real-time Image Enhancem ...

  5. 2021年9月80篇GAN/对抗论文汇总

    等你着陆![GAN生成对抗网络]知识星球! 超100篇!CVPR 2020最全GAN论文梳理!   2021年8月60篇GAN/对抗论文汇总 2021年7月100篇GAN/对抗论文汇总 2021年6月 ...

  6. erdas查看灰度直方图_ERDAS基本操作(六) —— 图像增强处理.ppt

    ERDAS基本操作(六) -- 图像增强处理 ERDAS基本操作(六);改善图像的质量,提高图像目视效果,突出所需要的信息,为进一步遥感目视判读做预处理工作 例如:图像对比度不够,图像有噪声.图像边界 ...

  7. 视频插值--Video Frame Interpolation via Adaptive Separable Convolution

    Video Frame Interpolation via Adaptive Separable Convolution ICCV2017 https://github.com/sniklaus/py ...

  8. Matlab神经网络十讲(7): Adaptive Filter and Adaptive Training

    1. Adaptive Function The function adapt can change the weight and bias of a network incrementally du ...

  9. Agent with Warm Start and Adaptive Dynamic Termination for Plane Localization in 3D Ultrasound

    目录 摘要 方法 框架 landmark感知对齐 平面特定图集构建 测试体积图集对齐 自适应动态终止 实验 Dataset Setting 参数 RL RNN(自适应动态终止Adaptive Dyna ...

最新文章

  1. Java学习总结:15
  2. cocos2d-x开发中wstring和string的转换
  3. android 视频的缩略图 缓存机制和 异步加载缩略图
  4. 【教程】HTML5+JavaScript编写flappy bird
  5. 西南交通大学计算机程序设计实验13,西南交通大学C++实验报告.doc
  6. windows设置网卡参数
  7. ListView原理简单介绍(着重介绍getView被调用的一系列过程)
  8. 科普:UTF-8 GBK UTF8 GB2312 之间的区别和关系
  9. python生成列表_python列表生成器与生成器
  10. 二分法02:寻找第一个和最后一个的满足条件的位置
  11. nali for win golang版, 显示ip 的小工具
  12. linux win10双系统启动顺序,修改双系统(win10+ubuntu)启动顺序和启动时间
  13. 一文看懂,互联网这30年!
  14. Java多线程系列--【JUC集合08】- LinkedBlockingQueue
  15. 无线破解攻击工具Aircrack-ng使用详解
  16. Docker - Dockerfile之FROM、ARG、LABEL、MAINTAINER、RUN、CMD指令详解
  17. sublime指定python版本
  18. pb调用计算机默认游览器,PB打开ole控件IE浏览器版本问题_指定Webbrowser控件所用IE内核版本(转)...
  19. 斗战神单机版正在连接服务器,斗战神登录卡在这里,又不提示登录失败或者连接超时什......
  20. php中的时间戳_php时间戳是什么

热门文章

  1. Antlr代码生成及命令行验证
  2. 计算机和教师教学的应用,计算机在教学中的应用优势
  3. 安卓测试助手2.x版本
  4. Unet论文详解U-Net:Convolutional Networks for Biomedical Image Segmentation
  5. Git和jdk1.8百度云盘分享
  6. 哈工大2021春软件构造实验
  7. 【一周头条盘点】中国软件网(2018.6.18~2018.6.22)
  8. mysql 表 注析 修改_《詩經注析(全二冊)》读后感摘抄
  9. CiteSpace文献共被引图谱含义详细解析
  10. Channel论文阅读笔记7-3之multipath interference by Jakes