Audio Bit Depth Super-Resolution with Neural Networks

作者:Thomas Liu、Taylor Lundy、William Qi

摘要

Audio Bit Depth Super-Resolution是一个尚未通过深度学习的视角来研究的问题,目前使用的有效方法很少。在本文中,我们提出了一种基于WavaNet结构来实现低分辨率8位音频输入的升级,从而产生高保真16位输出,(将语音从8kHz音频,转化为16kHz音频)。消除了过程中的噪声和artifacts(伪影)。我们还探索了几种不同的方法来提高该问题的计算可操作性,并对每种方法的优缺点进行了深入的分析。

1 引言

在语音信号处理领域,存在着大量的上采样和超分辨率问题,有待于通过深度学习的视角来研究。与视觉领域相比,语音信号处理相对缺乏进展的一个主要原因是处理高维音频数据的固有困难。为了减轻这种高维的诅咒所带来的计算负担,以前许多基于学习的信号处理方法都将重点放在使用time-frequency(时频)音频表示(如频谱图)作为输入[15,1,16]。

近年来,基于WaveNet的[12]方法的结果表明,在合理的内存约束下,确实可以直接对原始音频输入进行操作。通过改进对数据中时间信息的访问,这些产生式[8,7]和判别式[9]方法已经能够利用有价值的时间相关特征,例如信号相位,扩展了机器学习技术可以解决的音频任务的范围。

Audio Bit Depth Super-Resolution任务中从时间信息的可用性中受益。本文中使用的Bit-Depth是指用于表示音频信号中每个采样的位数。重要的是,该变量控制音频信号能够表示的音量范围(动态范围),在判断音频质量方面起着重要作用。由于更大动态范围的精度表示需要在每个采样点使用更多的bit,因此通常必须在音频文件的大小和保真度之间进行权衡。通常执行的下采样操作包括从24位录音室质量输入下采样到16位CD质量输出,以及从16位缩小到8位音频。

由于许多压缩音频编码都是有损压缩的[2],从低分辨率音频输入中恢复高保真音频是一个定义不清且很难解决的问题。为了减轻分辨率降低的负面影响,人们已经提出了许多技术。一种方法,oversampling,牺牲音频bit-rate(比特率)和信号噪声,以换取更高的模拟音频比特深度。另一种方法,dithering,在下采样步骤引入噪声,以增加低分辨率(lr)信号的感知动态范围。到目前为止,我们还没有发现任何利用深度网络通过学习lr输入和hr源音频之间的关系,来提高音频比特深度的方法。

即使应用了这些降噪技术,源音频信号和压缩音频信号之间在数量和质量上仍然存在显著差异。我们假设通过利用原始音频格式固有的时间依赖性,我们可以通过超分辨lr信号的bit-depth来进一步减小信号质量的差异。这种从8位输入到16位输出的映射可以使用我们称之为DBSR的WaveNet架构的改进版本以有监督的方式学习。

这种方法的成功依赖于音频信号中语义结构的存在,而语义结构在不同的音频源之间可能存在差异。为了探究这个问题,我们对我们的模型进行了评估,评估对象是两种不同的常见的音频、音乐和语音类别。

2 相关工作

音频生成已经在不同但相关的任务上进行了探索,如文本到语音、音频去噪和带宽扩展。WaveNet架构[12]是与PixelCNN[13]等效的音频域。Wavenet已经演示了高质量的音频生成,使用一个dilated(扩张)的CNN结构来保留一个大的接收域,同时仍然保持每秒包含16,000个样本的原始音频波形的计算可处理性。WaveNet最初的论文关注的是文本到语音的合成,而派生工作已经在诸如音乐生成[3]和音频去噪[9]等任务上尝试使用该架构。

与我们的任务最相关的衍生工作是Rethage等人所做的语音去噪工作。与位深超分辨率相似,语音去噪需要输入和输出样本之间一对一对应的判别模型,而不是原始Wavenet结构的自回归性质。此外,由于问题的判别性质,在预测过程中有可能放松WaveNet的因果约束,以及对未来时间步长的输入样本的条件。与自回归生成不同的是,在测试期间,未来的样本根本不存在,而我们的鉴别位深超分辨率问题,来自过去和未来的样本都可能提供有价值的上下文信息。

基于RNNs的网络结构,传统上是序列数据的自然拟合,也得到了探索。值得注意的是,SampleRNN[6]提出了一个分层的GRU模型,在使用更简单的网络和提供更快的推理的同时,生成与wavenet质量相当的音频。这种层次结构试图解决经验表明的接收能力较差的RNNs领域,否则,在几秒钟的音频中包含数万个样本,就会出现问题。

需要注意的一个问题是,由于评估16位以上的softmax分布(每个样本的概率为65536)是困难的,原始WaveNet和SampleRNN都产生8位音频作为输出,将输出降低到每个样本只有256个概率。由于大多数现代音频都是16位编码的,并且在传统的8位音轨(如视频游戏音乐)上存在一个有趣的探索位深度超分辨率的用例,因此我们寻求一种可处理性产生16位输出的方法。PixelCNN++[10]中针对类似的过像素图像生成任务,提出了一种潜在的解决方案,即使用离散逻辑混合对256路(本例中为65536路)分类分布进行建模。在并行化WaveNet优化[13]中,采用该技术进行音频生成,生成高保真的16位语音剪辑,目前部署在谷歌Assistant中。

图1 WaveNet架构的高级概览

3 Bit-Depth Super Resolution

3.1 设置

给出一个低分辨率信号x,bit depth b1,我们的模型的目标是重建一个高分辨率版本的y,位深b2 > b1。例如,如果x是压缩到8位深度的音乐样本,发出可听到的嘶嘶声,动态范围减小;y将是一个高分辨率的16位重建的原始音轨。

为了恢复未定义的信号,我们尝试学习高分辨率信号y的一个模型p(yjx),条件是它的低分辨率输入x。由于我们的模型是完全卷积的,所以它能够放大任意长度的音频样本。

3.2 结构

我们的模型结构与Rethage等人使用的用于音频去噪的修改过的WaveNet在结构上类似,两个模型都是由包含多层扩张卷积块构建的。这些扩张的卷积通过跳过某些频率的输入样本来增加接受域。从第一层的扩张量为1开始(相当于标准卷积),并在每一层将扩张系数加倍,只使用线性增长的层数,模型的接受域就可以呈指数增长。这与CNNs中的池化层类似,但保留了输入维度,这一点很重要,因为音频的输出长度必须与输入匹配。我们详细介绍了对WaveNet所做的修改,以使该问题适应位深超分辨率。

3.2.1 判别预测

与原WaveNet的自回归性质不同,原WaveNet学习在给定所有先前样本的情况下预测下一个样本,而位深超分辨率问题需要一个判别模型,在该模型中,训练每个输入样本输出一个样本。在这种情况下,预测仅以输入样本为条件,并进一步影响网络的变化,包括非因果性和更大的卷积核。

3.2.2 非因果扩张

来自Rethage [9]语音去噪模型的BDSR中包含的WaveNet修改之一是消除了因果关系。 由于因果卷积迫使每个时间步的预测仅依赖于前一时间步的输入,我们发现这对于bit depth向上缩放任务来说是不必要的。 与wavenet最初设计的音频生成任务不同,从一开始就可以获得整个输入音频信号。 这是在模型中通过将感知区域的时间向前移动一半大小来实现的,将过去样本的输入源仅改变为过去和未来的50/50混合样本。

3.2.3 平滑卷积核

由于我们的模型不再是自回归的,预测也不再依赖于以前的输出,因此可能会在输出中引入不连续,从而导致对音频伪影的感知。为了防止这种情况发生,我们将跳过连接输出上的1x1卷积更改为3x1卷积[9],这样可以使输出更加平滑。内核大小的这种变化是图2中所示的WaveNet模型的高级概述的唯一变化。

图2 扩大的因果卷积层的一个例子,其步长呈指数增长

3.2.4 非线性激活

我们模型架构的其余组件类似于WaveNet的原始实现。我们使用的是由PixelCNN[13]首次引入的非线性激活函数,其性能优于通常的校正线性激活(ReLU)函数。BDSR中使用的激活函数定义为

$$z=tanh(W_{f,k}*x)*\sigma (W_{g,k}*x)$$

其中x为输入,w为一组学习参数;k表示当前层的索引,f和g表示滤波器或门。我们还利用参数化的skip(跳过)连接,通过将在较低层学习到的表示直接传播到输出[9]来训练更深层次的模型。

3.3 高分辨率生成和损失

在音频的许多领域中,16位深度通常是准确再现没有伪影和缺陷的声音所需的最小深度。然而,由于在每个时间步上都有大量可能的值,使用16位音频通常会非常昂贵。原始的WaveNet模型通过使用u-law压缩的预处理步骤将输入量子化到8位来解决这个问题。相反,BDSR直接操作低质量的8位音频输入,并试图学习到HR 16位音频的映射。

在过去,直接从8位或更低的音频输入生成16位音频在计算上是困难的,因为这需要将65536-way分类分布作为输出。包含个可能amplitudes(振幅)中的每一个的概率,每秒钟需要产生16000个音频分布,每个样本一个。这给运行在16位音频上的模型带来了巨大的计算负担,影响了训练和推理。我们探讨了两种实际预测16位音频输出的方法。

3.3.1 Logistic混合近似

第一种方法是通过近似表示具有低维混合分布的振幅范围的65536-way分类分布来表示缩放问题。我们早期的实验使用了离散的logistic混合似然损失(PixelCNN++[10]引入)。这将模拟16位音频的完整分类分布,只包含10个逻辑分布(每个分布包含u、pi、s,总共30个输出通道,而不是65536)。在以前的工作中,这种类型的损失已被证明在建模3通道可视输出和16位音频输出时都是有效的,后者被用于google的WaveNet并行实现中[7]。在实践中,尽管节省了大量内存,但是很难实现输出干净的训练,我们最终将注意力转移到下一个方法上,该方法显示了更好的结果。

3.3.2 Delta预测

产生16位预测的另一种方法的一个观察结果是,在16位音频序列h到8位序列 l 的最合理的下采样过程中,时间t处振幅的信息丢失受到限制,使得$h_t=l_t*256\pm d$,其中$d<\frac{2^{16}}{2^8}$。当我们校准8位和16位音频并检查振幅差异的范围时,这是直观的真实情况,并经经验验证。如果我们将此问题建模为学习此约束下的下采样过程的逆映射,我们可以简化预测任务,只预测低分辨率8位序列和16位高分辨率序列之间的增量。我们的目标是尽可能准确地预测-256到255之间512个振幅增量中的一个。

3.3.3 真实值预测

  作为delta预测的扩展,我们将输出直接建模为-256到255之间的实值,而不是离散的512-way分类分布,从而获得了更好的性能。该方法对信号的去噪效果良好[9]。除了略微减小模型大小外,使用实值预测还可以增强输出分布的平滑性,因为相邻的振幅值意味着音频质量的相似性。我们通过实验验证了背景噪声的大小与预测与源音频之间增量的均方误差密切相关。

4 结果和评估

  我们项目的目标是证明深度神经网络在音频位深超分辨率方面的有效性。我们希望证明我们提出的模型能够优于现有的使用恒定比例因子将信号从低分辨率域天真地映射到高分辨率域的方法,这种方法不会恢复任何额外的音频细节。

4.1 设置

4.1.1 数据库

  我们在两个数据集上对所有模型进行了评估:VCTK数据集[14],其中包含108位不同演讲者44小时的数据;Mehri Piano数据集[6],其中包含10小时的贝多芬奏鸣曲。为了从16位原始信号中产生低分辨率音频信号,我们在将信号降级为所需的低频信号比之前应用抖动。

  根据文献[4]中的实验结构,我们评估了BDSR模型在两种状态下的几种变体。在单说话人任务中,该模型对VCTK说话人1前223段(30分钟音频)录音进行了训练,并对最后8段录音进行了测试。在钢琴任务中,我们使用88%-6%-6%的标准训练/验证/测试分割来评估BDSR在不同类型音频中的泛化能力。

  不幸的是,由于时间限制,另外一项旨在通过对前99名VCTK说话人的样本进行训练和对其余8名演讲者进行测试,来评估BDSR在多说话人之间的泛化能力没有得到评估。不过,这将成为未来探索的一个很好的起点。

4.1.2 方法

  为了对BDSR通过位深超分辨率恢复音频细节的能力进行无偏量化比较,在生成的样本y和源音频x之间选择并计算峰值信噪比(PSNR)度量。

$$PSNR(x,y)=10\log \frac{MAX_v^2}{||x-y||_2^2}$$

  虽然PSNR是在图像和音频域内评估超分辨率性能的一个广泛报道的度量标准[11,4],但它在评估感知质量方面已被证明并非完全准确[5]。因此,我们还根据基线手动评估生成样本的感知质量,以便更好地理解由各种模型学习的映射。

4.2 结果

  我们在Mehri Piano和VCTK语音数据集上测量了比特深度超分辨率后的峰值信噪比,详见表1。较高的PSNR值与较低的均方误差相关,因此应该对应于更接近源音频的输出。在我们的评估中,我们将BDSR变体输出的PSNR与原始放大的8位音频基线进行比较。

  如表1所示,使用delta BDSR模型预测分类分布不会导致基线超过结果。我们假设这个模型的不显著的性能可以归因于输出的不连续性,导致更大的感知噪声。尽管结果表明该模型对delta的预测相对准确,但人类的感知测试表明,该模型往往无法消除噪声,只能将其转化为更结构化的形式。也就是说,与8位输入音频的静态背景噪声相比,超分辨率16位音频显示出与声道的响度相关的动态噪声。

表1 在Mehri piano和VCTK数据集上的位深超分辨率性能(以PSNR度量)比较。评价方法包括初始上标基线、接受域为12280的delta BDSR、接受域为3080的delta BDSR和实值输出的BDSR。

  将接受域从3080增加到12280并没有导致超分辨率质量有任何实质性的改善。事实上,具有较大接受域的等效模型在PSNR指标上的表现更差。我们推测,由于向下采样过程中引入的artifacts (人工制品)的局部性质,为模型提供更多的长期数据没有帮助,并且可能会阻碍工件减少中的性能。具有非常大的接受域的模型需要显著更多的参数,从而在没有提供更多有用信息的情况下减少训练时间。这种差异在Mehri数据集中表现得尤为明显,12280的接收域覆盖了几乎1秒的音频,比区分钢琴音符和噪音所需的时间长得多。相比之下,VCTK的语音剪辑具有不太一致的本地音频特性,长期的关系可能为清除有损噪声伪影提供更多的好处。

  在我们的实值输出实验中,我们观察到比基线更好的PSNR,并且在8位音频和超分辨率16位音频之间进行了双盲听力测试,背景噪声的尖锐程度有细微但一致的降低。由于时间和信用的限制,我们提前终止了培训。然而,观察到在训练结束时验证损失和PSNR评分仍在近似线性地下降,我们相信进一步的训练(总共大约一周的训练)将进一步改善结果,使其在人耳中不那么微妙。

4.3 早期实验

  在我们演示的早期实验中,我们遇到了虚假的高PSNR分数,这是因为在从音频(通常是从曲目开始)生成训练和验证片段时没有过滤出音频的安静部分。显然,这些部分更容易正确预测,并导致过度拟合,当我们试图使验证剪辑多样化时,这种拟合效果并没有得到很好的推广。我们已经纠正了这个问题,在我们确定经常包含高活动的轨道中间部分进行训练。

  由于数据集中的音频片段足够多样化和密集,提案中预测全音频波形为幅度步长的分类分布的原始模型在合理的训练时间内表现不佳。这部分是由于分类输出分布的噪声,部分是由于模型花费大量时间学习简单地复制输入的质量,更不用说改进它了。

  这些观察结果促使我们的实验转向实值预测和增量预测,分别解决了这两个问题。

  实数空间的固有连续性使得模型比分类输出在更短的时间内产生更好的结果。尽管通常对输出分布形状的假设较少,但事实证明,在对概念上连续的振幅空间建模时,不相交的类别适得其反,而且不直观(尽管在压缩计算机表示中进行了离散化)。

  Delta预测减少了输出参数,并消除了冗余,这些冗余导致在匹配标识映射的质量之前花费了大量的训练时间。

4.4 zero shot音频超分辨率

  受Shocher等人在图像零镜头超分辨率[11]中的工作启发,我们还研究了单个音频样本中位深尺度内复发的发生率。为此,我们尝试在没有任何额外训练数据或预训练模型的情况下提高音频样本的位深。

  仅使用一个LR输入样本,就可以通过向下缩放生成一个增强的训练数据语料库。在我们的实验中,我们通过将原始的低分辨率信号从8位降低到6位和4位来实现这一点。然后对模型进行训练,将4位信号重构为6位信号,将6位信号重构为8位信号。这种方法背后的假设是,通过学习如何在较低的尺度上提升位深,经过训练的网络将能够推广和有效地提升输入LR样本到所需的输出保真度。

  不幸的是,零杆训练方法在实践中被证明是不成功的。即使在生成的训练集上训练超过100个纪元,损失也无法收敛。此外,产生的样本往往退化,含有大量的可听噪声。这表明在单个音频样本中没有跨位深的内部递归。

5 总结

  在本文中,我们对WaveNet架构进行了成功的修改,使其能够通过增加位深来提高音频的峰值信噪比。膨胀卷积和修正后的损失函数的组合使得模型即使在较大的接收域也能保持计算上的可行性。我们的模型能够在口语和音乐数据集上产生令人信服的定性和定量结果。该模型可用于多种应用场合,这些场合可以提供内存,以换取动态范围的增加和信号噪声的降低。有希望的例子包括重建无损音乐文件和提高语音识别的录制质量。

参考文献

[1] D. Amodei, S. Ananthanarayanan, R. Anubhai, J. Bai, E. Battenberg, C. Case, J. Casper, B. Catanzaro, Q. Cheng, G. Chen, et al. Deep speech 2: End-to-end speech recognition in english and mandarin. In International Conference on Machine Learning, pages 173 182, 2016.
[2] B. D Alessandro and Y. Q. Shi. Mp3 bit rate quality detection through frequency spectrum analysis. In Proceedings of the 11th ACM Workshop on Multimedia and Security, pages 57 62. ACM, 2009.
[3] J. Engel, C. Resnick, A. Roberts, S. Dieleman, D. Eck, K. Simonyan, and M. Norouzi. Neural audio synthesis of musical notes with wavenet autoencoders. arXiv preprint arXiv:1704.01279, 2017.
[4] V. Kuleshov, S. Z. Enam, and S. Ermon. Audio super resolution using neural networks. arXiv preprint arXiv:1708.00853, 2017.
[5] C. Ledig, L. Theis, F. Husz ar, J. Caballero, A. Cunningham, A. Acosta, A. Aitken, A. Tejani, J. Totz, Z. Wang, et al. Photo-realistic single image super-resolution using a generative adversarial network. arXiv preprint, 2016.
[6] S. Mehri, K. Kumar, I. Gulrajani, R. Kumar, S. Jain, J. Sotelo, A. Courville, and Y. Bengio. Samplernn: An unconditional end-to-end neural audio generation model. arXiv preprint arXiv:1612.07837, 2016.
[7] A. v. d. Oord, Y. Li, I. Babuschkin, K. Simonyan, O. Vinyals, K. Kavukcuoglu, G. v. d. Driessche, E. Lockhart, L. C. Cobo, F. Stimberg, et al. Parallel wavenet: Fast high-fidelity speech synthesis. arXiv preprint arXiv:1711.10433, 2017.
[8] T. L. Paine, P. Khorrami, S. Chang, Y. Zhang, P. Ramachandran, M. A. Hasegawa-Johnson, and T. S. Huang. Fast wavenet generation algorithm. arXiv preprint arXiv:1611.09482, 2016.
[9] D. Rethage, J. Pons, and X. Serra. A wavenet for speech denoising. arXiv preprint arXiv:1706.07162, 2017.
[10] T. Salimans, A. Karpathy, X. Chen, and D. P. Kingma. Pixelcnn++: Improving the pixelcnn with discretized logistic mixture likelihood and other modifications. arXiv preprint arXiv:1701.05517, 2017.
[11] A. Shocher, N. Cohen, and M. Irani. zero-shot superresolution using deep internal learning. arXiv preprint arXiv:1712.06087, 2017.
[12] A. Van Den Oord, S. Dieleman, H. Zen, K. Simonyan, O. Vinyals, A. Graves, N. Kalchbrenner, A. Senior, and K. Kavukcuoglu. Wavenet: A generative model for raw audio. arXiv preprint arXiv:1609.03499, 2016.
[13] A. van den Oord, N. Kalchbrenner, L. Espeholt, O. Vinyals, A. Graves, et al. Conditional image generation with pixel-cnn decoders. In Advances in Neural Information Processing Systems, pages 4790 4798, 2016.
[14] C. Veaux, J. Yamagishi, K. MacDonald, et al. Cstr vctk corpus: English multi-speaker corpus for cstr voice cloning toolkit. 2017.
[15] F. Weninger, H. Erdogan, S. Watanabe, E. Vincent, J. Le Roux, J. R. Hershey, and B. Schuller. Speech enhancement with lstm recurrent neural networks and its application to noise-robust asr. In International Conference on Latent Variable Analysis and Signal Separation, pages 91 99. Springer, 2015.
[16] W. Xiong, J. Droppo, X. Huang, F. Seide, M. Seltzer, A. Stolcke, D. Yu, and G. Zweig. The microsoft 2016 conversational speech recognition system. In Acoustics, Speech and Signal Processing (ICASSP), 2017 IEEE International Conference on, pages 5255 5259. IEEE, 2017.
[17] L.-C. Yang, S.-Y. Chou, and Y.-H. Yang. Midinet: A convolutional generative adversarial network for symbolicdomain music generation. In Proceedings of the 18th International Society for Music Information Retrieval Conference (ISMIR2017), Suzhou, China, 2017.

Audio Bit Depth Super-Resolution with Neural Networks的更多相关文章

  1. ASRWGAN: Wasserstein Generative Adversarial Network for Audio Super Resolution

    ASEGAN:WGAN音频超分辨率 这篇文章并不具有权威性,因为没有发表,说不定是外国的某个大学的毕业设计,或者课程结束后的作业.或者实验报告. CS230: Deep Learning, Sprin ...

  2. Speech Super Resolution Generative Adversarial Network

    博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/10874993.html 论文作者:Sefik Emre Eskimez , Kazuhito K ...

  3. [C4] Andrew Ng - Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization

    About this Course This course will teach you the "magic" of getting deep learning to work ...

  4. [C3] Andrew Ng - Neural Networks and Deep Learning

    About this Course If you want to break into cutting-edge AI, this course will help you do so. Deep l ...

  5. A Beginner's Guide To Understanding Convolutional Neural Networks(转)

    A Beginner's Guide To Understanding Convolutional Neural Networks Introduction Convolutional neural ...

  6. (转)A Beginner's Guide To Understanding Convolutional Neural Networks

    Adit Deshpande CS Undergrad at UCLA ('19) Blog About A Beginner's Guide To Understanding Convolution ...

  7. Introduction to Deep Neural Networks

    Introduction to Deep Neural Networks Neural networks are a set of algorithms, modeled loosely after ...

  8. 深度卷积神经网络用于图像缩放Image Scaling using Deep Convolutional Neural Networks

    This past summer I interned at Flipboard in Palo Alto, California. I worked on machine learning base ...

  9. (zhuan) Building Convolutional Neural Networks with Tensorflow

    Ahmet Taspinar Home About Contact Building Convolutional Neural Networks with Tensorflow Posted on a ...

随机推荐

  1. 集合系列 List(三):Vector

    Vector 的底层实现以及结构与 ArrayList 完全相同,只是在某一些细节上会有所不同.这些细节主要有: 线程安全 扩容大小 线程安全 我们知道 ArrayList 是线程不安全的,只能在单线 ...

  2. 电话面试总结(问的很细).md

    String 和其他基本类型有什么区别 Tip 基本类型有几种 为什么要给String创建一个常量池而不给其他类创建常量池 常量池的定义是什么 垃圾回收机制是如何运行的 对新生代和老年代不同的处理机制 ...

  3. Vue仿微信app页面跳转动画

    10:14:11独立开发者在开发移动端产品时,为了更高效,通常会使用Web技术来开发移动端项目,可以同时适配Android.iOS.H5,稍加改动还可适配微信小程序. 在使用Vue.js开发移动端页面 ...

  4. 编程题及解题思路(1,String)

    题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,F ...

  5. unity_UGUI养成之路03

    关卡分页设计 功能1:通过直接滑动: 添加自动排序组件 设置通过添加组件设置内容的滑动,多余内容的隐藏   功能2:通过点击下面的圆圈滑动 上述代码实现: using UnityEngine;usin ...

  6. Leetcode之回溯法专题-212. 单词搜索 II(Word Search II)

    Leetcode之回溯法专题-212. 单词搜索 II(Word Search II) 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单 ...

  7. Vue 应用 nginx 配置 前后端不分离模式

    一.先在官网下载nginx 软件,解压后放在软件盘中如D盘 将nginx 文件夹拖到编译器中,打开conf 文件夹中的 nginx.conf 文件,找到其中的server {} 配置项,默认35 行. ...

  8. 第二篇 特征点匹配以及openvslam中的相关实现详解

    配置文件 在进入正题之前先做一些铺垫,在openvslam中,配置文件是必须要正确的以.yaml格式提供,通常需要指明使用的相机模型,ORB特征检测参数,跟踪参数等. #==============# ...

  9. Allegro PCB导入DXF文件详解

    一:导入方法 1.确认Allegro PCB的单位精度设置和DXF文件保持一致(一般情况下DXF文件用mm,Allegro文件用mil). 2. 在Allegro中点击File→Import→DXF… ...

  10. Flask大型项目框架结构理解

    导语:前段时间学习狗书的flask大型项目框架结构的时候有点混乱,到现在也知道是个啥了,想着,把关系理一理,写一篇博客.也方便后来学习的人查阅.以下是我创建项目时候的结构. myproject --- ...