- 博客(70)
- 收藏
- 关注
原创 解决:VSCode 转到定义 (Go to Definition) 失效,代码高亮失效,自动补全失效,代码格式化失效
解决:VSCode 转到定义 (Go to Definition) 失效,代码高亮失效,自动补全失效,代码格式化失效
2024-02-21 17:53:08
3070
原创 解决:VSCode 连接服务器时出错:Could not establish connection to : XHR failed;附带:VSCode 历史版本下载方法
【代码】解决:VSCode 连接服务器时出错:Could not establish connection to : XHR failed;附带:VSCode 历史版本下载方法。
2024-02-02 11:41:52
2950
原创 KMP算法总结
要在文本串 text 中找出第一次出现模式串 pattern 的下标,即文本查找,可以用KMP算法先看一个例子:如果要进行暴力匹配,可以用双指针法"""双指针法, t_idx=0, p_idx=0- 当 t_idx
2024-01-26 00:08:30
466
原创 解决:soundfile打开opus文件出错: File contains data in an unimplemented format.
【代码】解决:soundfile打开opus文件出错: File contains data in an unimplemented format.
2023-12-18 10:18:08
830
原创 深入理解Transformer,兼谈MHSA(多头自注意力)、Cross-Attention(交叉注意力)、LayerNorm、FFN、位置编码
【代码】深入理解Transformer,兼谈MHSA(多头自注意力)、Cross-Attention(交叉注意力)、LayerNorm、FFN、位置编码。
2023-11-27 09:50:38
8676
原创 语音信号处理——噪声抑制
噪声抑制技术用于消除背景噪声,改善语音信号的信噪比和可懂度,让人和机器听的更清楚常见的噪声种类:人声噪声、街道噪声、汽车噪声噪声抑制方法的分类:按照输入通道数分:单通道降噪、多通道降噪按照噪声统计特性分:平稳噪声抑制、非平稳噪声抑制按照降噪方法分:被动降噪、主动降噪下面介绍的方法用于单通道的、被动的、平稳噪声抑制。
2023-05-31 16:48:10
1797
原创 自适应滤波方法——LMS算法
自适应滤波器处理语音信号时,不需要实现知道输入信号和噪声的统计特性,滤波器自身能够在工作过程中学习或估计信号的统计特性,并以此为依据调整自身参数,以达到某种准则/代价函数下的最优滤波效果。对于一些应用(如系统辨识、预测、去噪等),无法事先知道需要操作的参数,必须使用自适应的系数进行处理,这种情况下通常使用自适应滤波器。每个Y(k)的长度为2N,输出序列y(k)的N点线性卷积等于Y(k)经过傅里叶逆变换的后N个点。非自适应滤波器:具有静态滤波器系统的数字滤波器,静态系数构成了滤波器的传递函数。
2023-05-30 15:21:38
2988
原创 二叉树总结
本文是二叉树的大总结,二叉树和链表都是特殊的数据结构,题目问到这两种结构,基本套路就这么多链表可参考链表LeetCode总结本文尽可能采用迭代法,便于理解二叉树节点结构体要会背int val;TreeNode(按照解法来分类讲解110.平衡二叉树本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。"""后序遍历- 当前节点的高度=1+max(左子树高度,左子树高度)- 为了定位左右子树, 需要记录左右子树的节点个数 cnt- 访问。
2023-04-09 20:09:35
563
原创 cuDNN与TensorRT:【作业】第一章
流水线前传机制(Pipeline Forwarding)指的是操作数转发(Operand Forwarding)(或数据转发(Data Forwarding)),是CPU中的一种优化机制,以限制由于流水线失速(Pipeline Stall)而发生的性能缺陷。Pipeline Stall指的是当前操作,必须等待尚未完成的较早操作的结果,才能进行。从上述例子可见,同样的指令,经过Pipeline Forwarding之后,所需步骤缩减了,从而对应的机器周期也缩减了。
2023-03-23 00:13:58
841
1
原创 双指针法(快慢指针和对撞指针)总结
双指针法的题目非常多,主要分为快慢指针和对撞指针,通常能够将On2O(n^2)On2的时间复杂度,变为OnO(n)On的时间复杂度,且空间复杂度为O1O(1)O1,因此面试考察概率大上述链表相关的题目,206、19、02.07、142,可参考链表LeetCode总结。
2023-03-21 22:38:57
278
原创 链表LeetCode总结
链表题目需要注意的点ListNode结构体要会背int val;} };// 结尾记得加分号先判断head节点是否为nullptr,再进入下一步有效性判断:要对cur取next,就要先判断cur是否为nullptr,再取next善用dummy哨兵节点和pre指针使用pre,cur,next,next2指代已有节点,使用temp指代新建节点一轮处理完后,更新指针基本处理模板if(!cur = next;链表题目常用方法与概念快慢指针,注意有效性判断。
2023-03-12 23:10:20
159
原创 二分查找创新性总结
二分查找适用范围可随机访问的数据结构数据已经有序要查找的值只有一个上述的前四题都可直接使用二分查找,第五题要求查找上限和下限,可以通过两个二分查找实现二分查找易错点容易导致重复递归边界条件不容易确定本文的创新在于:将二分查找作为一个限定范围的工具,不要求二分查找直接给出结果,而是将结果范围限制在三个值中,然后对三个值进行判断,从而无需考虑边界条件,大大降低思考难度。
2023-03-12 21:49:17
693
原创 Git实用指令记录
注意:clone包含.git文件夹,如果我们已经做了很多修改,那么.git文件夹会非常大,因为保存了以前的commit,可以采用–depth=1来限制只提取最近一次commit,并采用–branch来指定分支。解决方法:在git-bash右键->Options->Text,修改Local为zh_CN,Character set为UTF-8,还可以Select,修改字体大小。成功下载该仓库该分支的代码到本地了,是放在一个文件夹里面的,这个文件夹里除了.git文件夹,其他都称为。Windows路径无效问题。
2023-02-14 17:16:43
535
原创 树莓派安装虚拟键盘,解决虚拟键盘乱码问题,解决MIPI DSI触摸屏触控漂移问题
当我们买了触摸屏后,会发现没有键盘,还是无法输入,因此需要虚拟键盘。如果你的语言和地区是中文,那么安装虚拟键盘后可能显示乱码,所以还需要安装中文字体。如果你用的是树莓派的MIPI DSI触摸屏,出现触控漂移或者显示不正常的问题,需要进入`boot`目录下的`config.txt`文件,把`dtoverlay=vc4-fkms-v3d`注释掉,应该有两句,确保都注释掉。然后重启。
2023-02-10 00:38:40
3478
3
原创 解决UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x8c in position : illegal multibyte sequence
错误原因:python会把在我们在交互式环境下输入的命令,都保存到`C:\Users\dedsec\.python_history`文件下(可以用命令`os.path.expanduser('~/.history')`获取该文件路径),每次启动交互式环境就会读取这个文件,使我们能调用历史命令,不过如果输入了中文,则会出现无法读取的问题 - 解决方案:如果不想修改源代码中`for line in open(filename, 'r'):`的编码格式,可以用记事本打开`C:\Users\dedsec\.pyt
2023-02-08 13:30:46
3752
原创 python setup.py bdist_wheel生成wheel文件,示例:安装webrtcvad
webrtcvad因此需要利用setup.py进行安装本文还提供了Python3.7下,webrtcvad的最新版本(2.0.11.dev0,最后一次更新是2021年2月)的win_amd64和linux_armv7l架构wheel文件的下载链接链接:https://pan.xunlei.com/s/VNNarY2ackt_NZSmMRcOja8eA1 # 提取码:wj6g。
2023-02-05 22:22:47
4925
原创 树莓派4B(armv7l,arm32)buster安装PyTorch、torchvision、torchaudio、onnxruntime
在树莓派4B 32位buster 上安装PyTorch及其小伙伴,以及onnxruntime,需要先安装依赖,然后安装在对应系统架构下(准确来说是linux_armv7l架构)编译得到的wheel文件对于linux_armv7l,我只找到最高0.7.2的torchaudio和最高1.8.1的onnxruntime,据说0.8.x及之后的torchaudio无法在linux_armv7l上编译0.7.x的torchaudio。
2023-02-05 21:36:15
5475
11
原创 解决Microsoft Visual C++ 14.0 or greater is required
最终正解:直接安装工作负荷中的“使用C++的桌面开发”,如果系统盘位置不够,记得修改安装位置,直接把最前面的盘符改了就行,我是C盘改成D盘。该工具和安装Visual Studio所用的工具很像,但是用上述链接下载得到的工具,开启后会跳转到下列界面。从而可以直接安装Visual Studio生成工具,而不需要安装Visual Studio。接下来选择哪些进行安装才是关键。安装完成后重启,继续。
2023-02-04 23:50:34
931
原创 树莓派(armv7l,arm32)buster配置Python虚拟环境、安装PyQt5、安装PySide2、ui和rc文件导出为py文件
【代码】树莓派(armv7l,arm32)buster配置Python虚拟环境、安装PyQt5、安装PySide2、ui和rc文件导出为py文件。
2023-01-22 23:37:24
3509
1
原创 说话人识别损失函数的PyTorch实现与代码解读
说话人识别中的损失函数分为基于多类别分类的损失函数,和端到端的损失函数(也叫基于度量学习的损失函数),关于这些损失函数的理论部分,可参考说话人识别中的损失函数本文主要关注这些损失函数的实现,此外,文章说话人识别中的损失函数中,没有详细介绍基于多类别分类的损失函数,因此本文会顺便补足这一点本文持续更新。
2023-01-18 02:09:31
1531
原创 说话人识别中的Temporal pooling(时序池化)
Temporal pooling(时序池化)是说话人识别神经网络中,声学特征经过frame-level变换之后,紧接着会进入的一个layer。目的是将维度为bsFT(bs,F,T)bsFT的特征图,变换成维度为bsF(bs,F)bsF的特征向量在这个过程中,T这个维度,也就是frame的个数,消失了,因此时序池化本质上可以看作:从一系列frame的特征中,挖掘出最能代表特征图信息的特征,并且要把长度可变的frame序列,变换为固定长度的特征向量。
2023-01-15 01:49:12
2505
1
原创 深入理解ECAPA-TDNN——兼谈Res2Net、ASP统计池化、SENet、Batch Normalization
ECAPA-TDNN是说话人识别中基于TDNN的神经网络,是目前最好的单体模型之一关于TDNN,可以参考深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构。
2023-01-10 02:51:04
10608
10
原创 说话人识别中的分数规范化(Score Normalization)
在说话人辨认任务中,我们会将待验证的话语ttt与已注册的话语集合e1e2ene1e2...en,计算相似度,得到se1tse2tsentse1tse2t...sent,其中的最大值seits(e_i,t)seit,会与阈值ththth比较seit≥tht属于说话人iseittht不属于任何一个说话人。
2023-01-08 20:47:15
1241
原创 深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构
TDNN(Time Delay Neural Network,时延神经网络)是用于处理序列数据的,比如:一段语音、一段文本将TDNN和统计池化(Statistics Pooling)结合起来,正如x-vector的网络结构,可以处理任意长度的序列TDNN出自x-vector出自。
2023-01-01 16:38:38
10493
5
原创 说话人识别中的数据预处理和数据增强
解决方案是:利用源领域的语音和文本数据,合成目标领域的语音数据。合成的数据并不是真正的目标领域数据,而是一种近似(Proxy)数据。上述的时频域增强和时域增强,提高了录音设备和声学环境的多样性。那么对于说话人和文本的多样性,就需要用到语音合成增强方法。语音合成增强的核心在于,利用多说话人语音合成模型,输入说话人嵌入码和文本内容,就能合成对应的语音。关于多说话人语音合成模型,可参考。
2022-12-24 21:13:42
2255
原创 说话人识别中的数据需求
机器学习领域名言“Garbage In, Garbage Out!”不论神经网络多么先进,如果输入是垃圾,那么输出也一定是垃圾在说话人识别领域,所需的最小数据单元,包括:一段只包含单一说话人语音的音频,被称为Utterance(话语)该段音频的说话人标签,能够唯一地在整个数据集中标识该说话人怎么样的数据不是Garbage呢?或者说,如何评价一个数据集的质量呢?有以下这些指标:说话人的数量每个说话人的话语个数文本的多样性口音和语调的多样性录音设备和声学环境的多样性。
2022-12-23 21:29:58
860
原创 说话人识别中的损失函数
损失函数多说话人交叉熵输入单个话语两个话语三个话语N+1N+1N+1个话语N×MN \times MN×M个话语中心点使用否否否使用一个说话人的中心点使用一个batch中所有说话人的中心点实现方式SoftmaxBCE对比BCE对比或Softmax。
2022-12-23 00:52:37
1556
原创 说话人识别神经网络推理方式
说话人识别是一个序列总结(Sequence Summarization)任务,输入是音频(或者说,声学特征的序列),输出是说话人的嵌入码,有的神经网络可以输入一对音频,直接输出这对音频的相似度分数。与之相对的,语音识别任务是一个序列转导(Sequence Transduction)任务。上述两个任务都有一个共同的挑战:序列的长度是不定的。推理方式各帧独立的逐帧推理固定窗推理全序列推理滑动窗推理基本思想逐帧独立推理将窗中的所有帧堆叠在一起进行推理。
2022-12-21 20:18:52
1040
2
原创 深入理解Self-attention(自注意力机制)
输入的特点是一个向量序列序列的长度是可变的例如:对于音频数据,STFT之后,得到每个帧的特征,这些帧在时间维度上构成序列输出类型有三种对序列中的每一个向量,都有一个对应的输出,比如说要对一段语音里的每个词,都判断词性。此时输出序列和输入序列长度相同只需要输出一个向量,比如说话人识别、音频事件分类输出序列的长度不能确定,比如语音识别、机器翻译接下来专注于介绍第一种输出类型,这种任务通常被称为序列标注(Sequence Labeling)
2022-12-21 16:30:22
2055
原创 因子分析、联合因子分析(JFA)、i-vector
方法GMMGMM-UBMGMM-SVMJFAi-vector动机将每个说话人用一个GMM来表征对所有说话人样本训练一个UBM,利用UBM自适应每个GMM的参数将每个话语样本都用一个GMM来表征,说话人成为SVM的一个类将超向量分解成说话人因子和信道因子将超向量分解成整体因子,再进行信道补偿优点根据中心极限定理,GMM拟合潜力强每个GMM都同源,具有可比性,对于样本较少的说话人,也能自适应出一个GMM利用了SVM这一强大的分类器对超向量进行了降维,去除了部分信道信息。
2022-12-18 18:29:34
1280
原创 GMM、GMM-UBM、GMM-SVM
在GMM-UBM框架下,每个说话人都可以被一个超向量表征,因此利用非线性支持向量机来对这些超向量进行分类,下面简述GMM-SVM方法(以后可能会出一期深入理解SVM)E步骤:计算每个样本,到每个高斯分量上的概率,由于高斯分量已经有参数,所以此时的概率是在具有先验知识的前提下得到的,因此是后验概率。一个说话人识别系统通常包括:声学特征提取、说话人编码器、说话人注册数据库、说话人验证/辨认等,如下图所示(图源:语音之家)。本文要介绍的GMM、GMM-UBM、GMM-SVM就属于说话人编码器的范畴。
2022-12-17 15:53:06
821
原创 ROC与AUC,DET与EER,minDCF,Identification Accuracy
DET曲线尝试用对数刻度,从而看起来更接近直线。注意:必须要先寻找使。
2022-12-13 20:49:50
798
1
原创 深入理解MFCC(梅尔频率倒谱系数)
取得13个系数后,还会在时序上,对13个系数求一阶差分和二阶差分,二阶差分等价于对一阶差分求一阶差分。表示第n帧的13个系数,将一阶差分和二阶差分与原函数值拼接起来,得到39个系数。通常选取前12个系数,再拼接一个当前frame的能量,共13个。MFCC的输出可以表示为一个二维数组,shape为。越靠前的系数,包含越多的基频和共振峰的信息。,由于是二维数组,所以可以用热力图可视化。
2022-12-11 22:07:11
26404
5
原创 深入理解梅尔刻度、梅尔滤波器组和梅尔时频谱图
读取一段音频,使用短时傅里叶变换,得到普通的时频谱图,然后绘制梅尔滤波器组,值得注意的是,librosa的梅尔滤波器组函数还带有权重归一化功能,即对一个三角形滤波器的每个权重,都除以该三角形的面积,如果不希望进行该归一化,设置参数。从公式可见,对数部分可以以自然对数为底数,也可以以10为底数,不同的底数对应不同的系数,要确定当前的系数,只需要代入(1000Hz, 1000mel)即可。其中,m是当前滤波器的序号,表征了当前的时间段,k是当前频率的序号,表征了当前正在对哪一频率的。
2022-12-10 18:23:48
7356
原创 深入理解傅里叶变换(四)
说话人识别常用参数:采样率sr=16kHz,frame-size占据25ms,即400个采样点,可取成sr//40,hop-size占据10ms,即160个采样点,取成sr//100,由于需要用fft,所以分帧之后,frame-size会扩充到512个采样点,扩充采样点不影响帧数,只影响frequency-bins。再次强调,式子中的N = frame-size = window-size,m是当前窗口的序号,第一个窗口序号为0,H = hop-size,w(n)是窗函数。
2022-12-09 14:26:56
4278
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人