源码地址:https://github.com/deezer/spleeter
pytorch版本:https://github.com/generalwave/spleeter.pytorch

前言

    spleeter是一款基于深度学习的多音轨分离软件。其使用python3.7基于tensorflow1.15版本编写。本文给出了spleeter的pytorch版本,并将官方预训练模型转化为pytorch模型。该版本经验证效果与官方版本一致。
从功能上,目前预训练模型为2stems(分离出人声/伴奏),4stems(分离出人声/伴奏/鼓/贝斯/其他),5stems(人声/鼓/贝斯/钢琴/其他)。性能上,按照spleeter的官网解释,4stems在使用GPU加速的情况下可以达到100s长度的音乐1s分离完成。从效果上来看,spleeter的各项指标均优于目前的其他开源模型。笔者测试2stems的分离效果,人声和伴奏的分离结果都还不错,两者都比较干净。
本文将介绍spleeter的设计原理,模型结构以及预测和训练的方法和在阅读代码以及实际使用时笔者的一些理解,如有错误,希望读者批评指正。同时,读者需要注意,本文所介绍的代码级别的内容均基于2stems的模型,以及默认参数设定情况的调用到的代码,其余情况未解释,另外由于spleeter一直在更新,本文行号不一定正确,仅供参考。

设计原理

    spleeter基于频域进行音轨分离。其网络结构中,每条音轨对应着一个unet网络结构。2stems对应着两个unet,4stems对应4个unet网络。unet的网络输入为音频幅度谱,输出为某条音轨的幅度谱。训练时损失函数为计算出音轨的幅度谱与标准幅度谱的L1距离。预测时稍有不同,通过多条音轨的幅度谱计算出每条音轨占据输入音频的能量比例,即每条音轨的mask,通过输入音频频谱乘以mask得到各个音轨的输出频谱,计算得到wav。
由于spleeter的训练和预测的方法有些差异,因此,笔者将分别叙述两者。
首先描述训练时的基本原理。如下图1,训练时的一组数据为(音乐,伴奏,人声),要求三者在时间轴上尽量完全一致.提取三者频谱并计算出幅度谱。将音乐幅度谱分别输入到人声unet和伴奏unet中,得到预测出的人声unet和伴奏unet,分别计算预测结果和标准结果的L1距离并取均值,作为损失函数,其中伴奏unet和人声unet内部参数会随着数据输入不断更新,此处不再赘述。
在这里插入图片描述
预测过程没有标准的人声和伴奏,只有音乐。在于预测出伴奏和人声的幅度谱之后,spleeter将两者分别进行平方,得到人声能量v_eng,和伴奏能量,a_eng,然后使用v_mask = v_eng/(v_eng+a_eng)计算出每个时刻人声在音乐的每个频带上的占比,以及使用a_mask=a_eng/(v_eng+a_eng)计算出伴奏每个时刻在音乐的每个频带上的占比。最后利用输入的音乐频谱分别乘以v_mask和a_mask得到人声和伴奏频谱,使用逆STFT得到人声和伴奏的语音。具体流程如下图:
在这里插入图片描述
此处需要介绍的一个地方为,本文的unet中,并不是存粹的一个unet结构,其中使用unet网络结构,并在最后一层使用sigmoid激活函数,计算出人声或者伴奏的mask系数,此时通过输入幅度谱乘以该系数得到了伴奏或人声的幅度谱。
笔者认为预测的时候直接获取每条音轨的mask系数乘以输入音频的频谱得到对应音轨的频谱。实验过够,从听觉来说效果还是不错的。这样的好处在于训练目标和预测目标一致,其次多条音轨之间互不影响,方便根据业务需求进行裁剪优化.

流程以及代码讲解

训练部分

   训练部分在代码上的核心逻辑与上述流程图并不一致。上述流程图描述的是单个音乐的处理过程,由于在训练的时候需要大量的数据。因此,重点在于数据集的处理,其中模型的搭建以及训练过程和所用语言和框架强相关,本文不作为重点,只是简述一下。
本部分将分为两块叙述。第一为使用部分,讲解如何使用spleeter来进行训练。分为训练时需要的命令以及对应参数解析。第二部分为训练时的核心代码讲解。

第一部分,使用篇

python3 -m spleeter train -p configs/2stems/base_config.json -d example

-m: 这是python的写法,表示指定模块,在此处表示使用spleeter模块
-p: 指定配置文件位置,详细内容见附3
-d: 指定数据集位置
此处需要解释的是,该命令表示执行spleeter的训练模型,采用2stems的配置文件,数据集的位置为本项目目录的example。在运行之前,需要在example中准备好数据集,结构无要求。因为在配置文件中会指定训练数据集和测试数据集的索引文件。具体配置文件信息以及索引文件信息参考附3的解释即可。

第二部分,代码篇

本篇将首先解析训练时的代码整体结构,而后重点分析数据集的构建部分。

代码整体结构:

训练代码使用的是tensorflow的estimator的高级api接口。一共分为三部分,分别为构建模型,构建数据集,训练以及预测.
预备知识:
模型构建: tensorflow使用tf.estimator.Estimator来构建estimator,其中model_fn参数需要给定一个函数,包含了对于训练/验证/预测时的构建的模型。三者在model_fn中,通过mode参数来进行区分[mode参数是Estimator自动填充的]。其中训练模型需要包含,损失函数(loss)和优化器.验证模型[用来在测试集合上做验证]需要给出损失函数定义[一般会看测试集上的loss],预测模型则不需要包含损失函数和优化器。
数据处理: 使用tf.estimator.TrainSpec进行训练数据处理,其中input_fn参数需要给出一个函数,并且返回值是(features, labels)的格式,同理,对于验证集合,使用的是tf.estimator.EvalSpec.
模型训练:通过tf.estimator.train_and_evaluate将参数传入即可训练,并且可以在分布式机器上直接训练,无需改动代码
注意1: partial函数[https://wiki.jikexueyuan.com/project/explore-python/Functional/partial.html],在构建数据集的时候用到了。
注意2: 在构建数据集的时候spleeter大量使用了dataset.map函数,其效果与python中的map相近,都是对每一个元素做统一的操作,其中dataset.map函数还支持使用多线程处理。
注意3: 构建数据集的时候用到了dataset.cache()函数,其将数据集缓存到硬盘中,下次使用的时候可以直接调用.
注意4: tensorflow estimator的api训练时,遍历数据集,如果数据集被遍历完,则训练停止,所以数据集处理时要使用repeat进行重复。

训练模型构建综述

代码路线: spleeter/commands/main.py[line 43]->跳转到spleeter/commands/train.py[line 80]

audio_adapter = get_audio_adapter(arguments.audio_adapter) # 读取音频的工具,这里使用ffmpeg
audio_path = arguments.audio_path # 数据集文件夹
estimator = _create_estimator(params) # 创建estimator,上述模型构建部分
train_spec = _create_train_spec(params, audio_adapter, audio_path) # 上述数据处理的训练集部分
evaluation_spec = _create_evaluation_spec( # 上述数据处理的测试集部分params,audio_adapter,audio_path)
get_logger().info('Start model training')
tf.estimator.train_and_evaluate(    # 训练以及验证estimator,train_spec,evaluation_spec)
训练时数据集构建

代码路线: spleeter/commands/train.py[line 55] -> train.py[line 71] -> train.py[line 380]

基本操作
读取数据集索引文件,原始数据分块,数据集乱序,拼接音频绝对路径,载入音频数据并提取幅度谱,转换为unit8存储,过滤掉异常值,重复数据集,规整每一组音频数据,过滤掉比较短的数据,随机截取数据,打乱数据,将数据重新映射为float32,检查shape,构造用于dataset输入的格式,分批次.
数据操作比较多,但是基本分为载入数据,乱序,提取频谱, 规整数据,缓存数据,构造符合框架需要的数据,这几个类别。
本文重点分析数据分块,提取幅度谱,缓存数据三部分。

数据分块[line: 381]
按照给定的n_chunks_per_song进行分块处理。分块规则如下:如果一块,则取中间部分20s,其余方式时,取末尾20s作为一块,然后从起始位置到最后20s部分进行平均切分,每块20s.其中n_chunks_per_song可以在配置文件中给出,默认是2.

提取幅度谱[line: 394]
载入音频,使用librosa提取频谱,提取出幅度谱。取前1024个频带,剩下的不要了,也就是高频部分不进行训练。

缓存数据[line: 403]
将幅度谱转为dB,选择出最大值,将转为出的dB限制在(maxdB-100,maxdB),将上述区间映射到0-256中,使用uint8进行存储。

预测部分

预测部分与上述预测流程图基本一致。接下来部分将按照上述预测流程图进行分析.本篇分为两部分,使用篇以及代码篇。

第一部分,使用篇

python3 -m spleeter separate -p spleeter/resources/2stems.json -i example/tt/1.m4a -o tmp

-m : 含义与训练时一致
-p: 含义与训练时一致
-i: 要进行分离的音频数据
-o: 分离出的音轨数据wav文件所在文件夹,2stems的输出为tmp/1/accompaniment.wav tmp/1/vocals.wav
上述命令是将1.m4a分离为伴奏和人声,并存放到tmp文件夹中,其伴奏为tmp/1/accompaniment.wav 人声文件为tmp/1/vocals.wav
在使用的时候,第一次会在项目目录/pretrained_models/ 下载需要的模型。可能比较大,耐心等待.
注意: 在使用的时候,最好提前安装好librosa,因为spleeter在系统安装librosa的情况下优先使用librosa进行特征提取,否则使用tensorflow进行特征提取,速度会慢很多。

第二部分,代码篇

   本篇将分析预测时的具体流程以及代码。其中,spleeter在预测时采用了大量的@property 装饰器,此时在用到变量的时候才会进行初始化。读者需要注意,可以通过点击变量,查看变量的初始化方式。
spleeter预测部分,使用在代码级别构建好模型结构,然后使用tensorflow的Saver类将模型参数载入到session中的方式。其中模型构建可以通过 self._get_builder().outputs[spleeter/separator.py line: 160],点击outputs,一步一步进行观察,即可了解到。
处理流程如流程图,主要分为,载入音乐,计算频谱,计算幅度谱,分别预测出伴奏和人声的幅度谱,分别计算出伴奏和人声的mask系数,音乐频谱乘以mask,计算得到wav。

   载入音乐
代码位置:spleeter/separator.py line: 223
通过调用系统的ffmpeg模块实现对音频的解码,载入。根据指定配置文件中的采样率(sample_rate)和通道数对音频进行重采样等处理,保证模型输入统一,要求采样率44100,双通道。

   提取频谱特征
代码位置:spleeter/separator.py line: 193
通过stft_backend选择使用tensorflow提取还是使用librosa提取stft.其中stft的帧长和帧移由指定配置文件中frame_length和frame_step指定.

   计算频谱以及幅度谱
代码位置:model/init.py line:269
此时会看到提取频谱的过程,但是如果选择使用librosa时,在计算的时候,是使用stft特征对会话中的mix_stft的tensor进行赋值,不会进行特征提取的流程。注意到幅度谱提取的时候,进行了特征转换,进行了padding和分块以及剔除了一部分特征。
特征shape由(-1, 2049, 2) -> (-1, 512, 1024, 2).此时操作按照512帧为单位进行分块,不是512倍数需要填充0进行补充,得到(-1,512, 2029,2),然后取频谱的前1024(采样率为44100时约为11kHz部分以下保留),得到(-1, 512, 1024, 2),然后利用tf.abs()计算得到幅度谱。

   模型预测
代码位置:model/init.py line:203
具体实现:spleeter/model/functions/unet.py 函数: apply_unet
网络结构见附1

   计算各个音轨mask
代码位置:model/init.py line:404
基本原理是: 对所有音轨的幅度谱做平方求和得到分母,然后每条音轨的幅度谱做平方做分子,得到每条音轨的系数。此时系数shape为(?,512,1024,2),此时对于1024->2049的操作,内部给出了两种方案,默认方案为通过补0,另一种则是通过取0-1024频段的均值作为1024-2049的参数。经过补充,以及去除分段,得到mask的shape为(?, 2049, 2),此时需要注意的是,在分块的时候进行了padding操作,所以mask的长度比频谱的长,因此需要按照频谱长度,进行截取。
通过实验发现,使用均值来进行高频补充的方案,效果不是很好,在频谱上会发现有明显的一行分隔,经过实现发现,如果取8k-11k的系数做平均,用来对11k以上做填充,其频谱比较平滑。

   计算各个音轨的输出频谱
代码位置:model/init.py line:437
输入频谱乘以各个音轨的mask即可

   计算wav
代码位置:spleeter/separator.py line: 182
使用逆STFT计算出wav

附1: Unet网络结构

CNN 卷积过程[padding=same,strides=(2,2)]
-> [(5*5卷积核,16个) -> BN -> LeakyRelu(0.2)] -conv1
-> [(5*5卷积核,32个) -> BN -> LeakyRelu(0.2)] -conv2
-> [(5*5卷积核,64个) -> BN -> LeakyRelu(0.2)] -conv3
-> [(5*5卷积核,128个) -> BN -> LeakyRelu(0.2)] -conv4
-> [(5*5卷积核,256个) -> BN -> LeakyRelu(0.2)] -conv5
-> [(5*5卷积核,512个) -> BN -> LeakyRelu(0.2)] -conv6CNN 逆卷积过程[padding=same,strides=(2,2)]
-> [(5*5卷积核,256个)-> Relu() -> BN ->drop(0.5)->concat(conv5)]
-> [(5*5卷积核,128个)-> Relu() -> BN ->drop(0.5)->concat(conv4)]
-> [(5*5卷积核,64个)-> Relu() -> BN ->drop(0.5)->concat(conv3)]
-> [(5*5卷积核,32个)-> Relu() -> BN ->drop(0.5)->concat(conv2)]
-> [(5*5卷积核,16个)-> Relu() -> BN ->drop(0.5)->concat(conv1)]
-> [(5*5卷积核,1个)-> Relu() -> BN ->drop(0.5)]-> (4*4卷积核 2个 步长->1*1,dilation_rate=(2, 2),activation='sigmoid',padding=same) // 计算出mask
-> tf.keras.layers.Multiply(input_tensor) // 计算出输出的幅度谱

附2: spleeter文件结构

在这里插入图片描述
最重要的两个文件是,标红的两个。在分析训练代码时通过spleeter/main.py作为入口文件及进行分析。在预测时,采用tests/test_separator.py进行分析。

附3: 配置文件参数解释

地址: configs/2stems/base_config.json

{"train_csv": "path/to/train.csv",  // 训练数据集的绝对路径"validation_csv": "path/to/test.csv", // 测试数据集的绝对路径"model_dir": "2stems",             // 模型文件地址,在工程目录/pretrained_models/2stems //注意:可以把预训练模型放到这里,就可以在预训练模型基础上进行训练// 或者训练过程中意外情况停掉了,此时重新执行命令,会在原有基础上继续训练    "mix_name": "mix",                 // 输入特征的名称以及读取数据集时混合好的音乐文件的前缀"instrument_list": ["vocals", "accompaniment"], // 读取数据集时人声和伴奏的前缀以及特征提取和预测时输出文件的前缀"sample_rate":44100,              // 特征提取时需要的采样率"frame_length":4096,              // 提取频谱时的帧长"frame_step":1024,                // 提取频谱时的帧移"T":512,                          // 特征输入时分块长度"F":1024,                         // 特征频谱取上限取(0-1024部分),高频部分不要了"n_channels":2,                   // 通道数量"separation_exponent":2,          // 计算mask时,每个音轨幅度谱的次方系数"mask_extension":"zeros",         // mask高频部分的策略,此时为直接给0"learning_rate": 1e-4,            // 学习率,别改太大,容易拟合不了"batch_size":4,                   // 批次大小"training_cache":"training_cache", // 提取特征后的训练集缓存文件[用以多次训练不需要重复提取特征]"validation_cache":"validation_cache", // 提取特征后的测试集缓存文件[用以多次训练不需要重复提取特征]"train_max_steps": 1000000,      // 最大训练步数"throttle_secs":300,             // 对测试集合进行预测的最短间隔,减少多个对测试集合进行预测浪费时间"random_seed":0,                 // 随机种子,本人暂时没用到"save_checkpoints_steps":150,    // 每150步保存一次模型文件"save_summary_steps":5,          // 每5步保存一次sumary文件"model":{"type":"unet.unet",      // 采取的模型结构为unet"params":{}}
}

train.csv/test.csv的文件结构

csv结构:
mix_path,vocals_path,accompaniment_path,duration列名解释:
mix_path: 音乐文件路径,会跟-d 所对应的路径进行拼接后得到绝对路径。
vocals_path: 人声文件路径,会跟-d 所对应的路径进行拼接后得到绝对路径。路径名称与instrumental_list中的名称一致
accompaniment_path: 伴奏文件路径,会跟-d 所对应的路径进行拼接后得到绝对路径。路径名称与instrumental_list中的名称一致
duration: 时长,单位是秒,并且必须写为浮点,比如20写为20.0
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. python实现最长连续递增子序列

    给定一个没有排序的整数数组,找到最长的连续递增的子序列(子数组)的长度 注意审题:该题求的是连续,故可以使用滑动窗口的方法来求解 def findlcis(alist):n=ores=0for i in range(alist):if alist[i]>alist[i-1]:n+=1res=max(res,n)else:n=1return res...

    2024/4/9 19:47:23
  2. hadoop详细笔记(十四) mapreduce数据分析案例之共同好友案例

    1数据A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D,E,F H:A,C,D,E,O I:A,O J:B,O K:A,C,D L:D,E,F M:E,F,G O:A,H,I,J2需求获取任意两个人之间的共同好友比如 A和B共同好友是: [E, C]A和C共同好友是: [D, F] B和F共同好友是: …...

    2024/4/27 15:56:32
  3. 老师,你确定Java注释不会被执行吗?(转载)

    之前在 CSDN 上分享过一篇文章,涉及到 Java 中的注释,就信誓旦旦地写了一句话:“注释是不会被执行的!”结果,有小伙伴留言说,“老师,你确定吗?” 我这个人一直有个优点,就是能听得进去别人的声音,管你是赞美的还是批评的,从来都是虚心接受。因为我相信,大多数小伙伴…...

    2024/4/22 10:10:15
  4. 非递增顺序的最小子序列[1403]

    非递增顺序的最小子序列[1403]题目题解 题目 给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。 如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。 与…...

    2024/4/27 20:42:20
  5. 笔记【5】Python学习:列表与元组

    列表 可以把一切东西打包进列表,就如一个仓库 e.g:整数、浮点数、字符串、对象 1、创建 例:创建一个普通列表除此之外,还可以创建空列表、混合列表 2、向列表添加元素 ①append() e.g:member.append(‘小明’) 就将小明添加到列表了 可通过len(member) 发现长度为4 ②exten…...

    2024/4/22 13:03:38
  6. urllib在Python2.x和Python3.x中的区别

    Python2.x中存在urllib库和urllin2库(对urllib库的扩展), Python3.x中仅存在urllib库(将python2.x中的urllib和urllib2进行合并及升级) 一、常用的变化如下: 1、在Pytho2.x中使用import urllib/urlparse,Python3.x中使用 from urllib import request,error,parse2、Pyth…...

    2024/4/19 5:24:11
  7. 服务器上Oracle System如何修改system用户密码

    1,服务器上oracle经常会使用plsql developer访问,很多时候我们用的服务器, 或者之前的密码我们并不知道,这个时候需要修改system的用户密码, 当然也可以无用户登录,但是修改必然还是好些。下面讲讲方法,windows服务器,oracle11g。windows服务器:打开cmd运行命令? 输…...

    2024/4/9 19:46:24
  8. PAT (Basic Level) Practice 1021 个位数统计

    1021 个位数统计 (15分)给定一个 k 位整数 N=d​k−1​​10​k−1​​+⋯+d​1​​10​1​​+d​0​​ (0≤d​i​​≤9, i=0,⋯,k−1, d​k−1​​>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。输入格式:每个…...

    2024/4/19 17:07:19
  9. git指南及知识点

    git指南及知识点版本回退工作区和版本库工作区 Working Directory版本库 Repository工作区和版本库穿梭撤销本地修改撤销 add分支HEAD 和 master关联一个远程库查看分支与当前位置从已有的本地分支切出新分支合并流程删除分支git stashcherry-pick远程查看远程库信息克隆某个分…...

    2024/4/19 22:41:45
  10. 物联网实训第九天

    项目名称 【苏嵌实训-嵌入式 linux C 第 9天】今日进度以及任务 Linux中多进程编程,以及线程的一些操作,线程与进程的区别。本日任务完成情况(详细说明本日任务是否按计划完成,开发的代码量) 本日任务按计划完成本日开发中出现的问题汇总 线程操作较为困难本日未解决问题 …...

    2024/4/28 3:12:16
  11. 《现代永磁控制电机原理及MATLAB仿真》 读书笔记(三)

    本读书笔记分成两部分,书籍原句摘抄和知识整理,本章感悟。 书籍原句摘抄和知识整理 第三章 三相永磁电机的矢量控制 3.1 PMSM的滞环电流控制 对于三相 PMSM 矢量控制技术而言,通常包括转速控制环、电流控制环和 PWM 控制算法 3 个主要部分 。其中,转速控制环的作用是控制电…...

    2024/4/26 8:01:47
  12. 数据分析之matplotlib 直方图(七)

    假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据? a=[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127…...

    2024/4/18 9:01:17
  13. rsync命令快速删除大目录

    在linux上有时候我们会遇到几十G的大数据量的目录想要删掉,平时我们删目录或文件使用rm -rf 命令,但是如果用来删除大目录就会很耗时,所以使用rsync命令:#先创建一个空目录 mkdir /usr/local/newdata/#执行删除,原理是用新的空目录替换要删掉的目录(/usr/local/olddata/为…...

    2024/4/25 21:46:13
  14. vue-charts的基本使用

    npm下载 npm install echarts vue-echartsvue-cli2{test: /\.js$/,loader: babel-loader, - include: [resolve(src), resolve(test)] + include: [ + resolve(src), + resolve(test), + resolve(node_modules/vue-echarts), + re…...

    2024/4/19 22:41:37
  15. git中merge了错误的分支,如何将该分支回退到merge前的状态

    如果只是merge错了分支,还未push的话,可以将该分支退回到merge前的状态 首先你需要知道merge前的状态的编码(fb07a9ac) 然后执行git reset --hard fb07a9ac这个时候就又回到merge前的状态...

    2024/4/23 10:06:58
  16. mysql服务器宕机对事务的影响以及处理方案

    现在很多公司都是启用了云服务器,虽然绝大多数情况非常可靠,但是如果万一出现宕机情况怎么处理呢?mysql中事务在宕机情况下的处理机制又是怎么样的呢?未雨绸缪,方能百战百胜:针对突然宕机的问题 不会自动继续执行,不会自动直接回滚,但是可以人工手动选择继续执行或者直…...

    2024/4/28 22:18:45
  17. 仿生实验、柔性机器人实验之磁场发生亥姆霍兹线圈

    仿生实验、柔性机器人实验之磁场发生亥姆霍兹线圈上海天端提供柔性机器人仿生实验之亥姆霍兹磁场线圈上海天端提供的柔性机器人磁场实验三维亥姆霍兹线圈 Helmholtz线圈磁场发生器,均匀区体积大,使用空间开阔,操作简便。可实现一维、二维、三维组合磁场,可提供交、直流磁场…...

    2024/4/17 15:29:50
  18. 前端面试小结2

    又面了一家公司~ 还是按照以往,来分享给大家相关的面试问题吧 不积跬步无以至千里,大家共勉 1.说一说百度搜索框的联想怎么实现的 参考:百度搜索框 (说实话上来直接这个问题……我很懵逼) 2.说一说鼠标有那些事件,比如点击click click 在元素上按下并释放任意鼠标按键。 …...

    2024/4/23 11:38:37
  19. vue -js 禁止使用空格回车

    οnkeypress=“javascript:if(event.keyCode == 32 || event.keyCode == 13)event.returnValue = false;” οnkeydοwn=“javascript:if(event.keyCode == 32 || event.keyCode == 13)event.returnValue = false;”...

    2024/4/21 21:12:27
  20. Jenkins_问题解决记录

    下载插件慢问题 进入【插件中心】,选择【高级】,找到【升级站点】,更换网址为: http://updates.jenkins.io/update-center.json...

    2024/4/19 7:55:46

最新文章

  1. CentOS命令大全:掌握关键命令及其精妙用法!

    CentOS是一种流行的开源企业级Linux发行版,它基于Red Hat Enterprise Linux (RHEL)的源代码构建。对于系统管理员和运维工程师来说,掌握CentOS的常用命令至关重要。 这些命令不仅可以帮助管理服务器,还可以进行故障排查、性能监控和安全加固等…...

    2024/4/29 0:02:24
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Next中的App Router

    在next的13版本中,推出了一个新的App路由,由React Server Components构建,它支持共享布局、内部路由、加载状态、错误处理等。 App路由的工作目录在app目录中,app目录独立于pages目录,允许你一些路由使用pages目录&…...

    2024/4/28 1:27:23
  4. WKWebView的使用

    一、简介 在iOS中,WKWebView是WebKit框架提供的一个用于展示网页内容的控件,相比UIWebView有更好的性能和功能。 以下是在iOS中使用WKWebView的基本步骤: 1.1 导入WebKit框架 import WebKit1.2 创建WKWebView实例 let webView WKWebVie…...

    2024/4/26 8:35:06
  5. 2024免费Mac苹果解压压缩包软件BetterZip5

    在2024年,对于Mac电脑用户来说,如果你想要无需解压就能快速查看压缩文档的内容,BetterZip是一个极佳的选择。这款软件不仅支持多种格式的压缩和解压,如zip、rar、7z、tar等,还具备丰富的功能和设置,包括预览…...

    2024/4/22 6:37:18
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满&#xff…...

    2024/4/28 4:04:40
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/4/28 12:01:04
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...

    2024/4/28 16:34:55
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...

    2024/4/28 18:31:47
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...

    2024/4/28 12:01:03
  11. 【Objective-C】Objective-C汇总

    方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/4/28 12:01:03
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...

    2024/4/28 12:01:03
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/4/28 16:07:14
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...

    2024/4/28 23:42:05
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/4/28 9:00:42
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/4/27 18:40:35
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/4/28 4:14:21
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/4/27 13:52:15
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...

    2024/4/27 13:38:13
  20. --max-old-space-size=8192报错

    vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...

    2024/4/28 12:00:58
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...

    2024/4/28 12:00:58
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...

    2024/4/27 22:51:49
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...

    2024/4/28 7:31:46
  24. python django 小程序图书借阅源码

    开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图&#xff0…...

    2024/4/28 8:32:05
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/4/27 20:28:35
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57