Wespeaker框架训练(1)

news2024/12/25 8:55:55

1. 数据集准备(Data preparation)

进入wespeaker目录文件/home/username/wespeaker/examples/voxceleb/v2

对run.sh文件进行编辑

vim run.sh

可以看到run.sh里面的配置内容

#数据集下载,解压
stage=1
#插入噪音,制作音频文件
stop_stage=2
#数据集放置的源目录,这里要求数据集放在run.sh所在目录下data/download_data文件夹中
data=data
#shard格式
data_type="shard"  # shard/raw

在运行run.sh 时的起始stage 和结束stage,默认两个都设置为-1

  • stage 1&2 是数据集的处理、目录制作,
  • stage 3 模型训练,
  • stage 4 用训练的模型提取embedding,
  • stage 5 计算余弦相似度、EER、minDCF,
  • stage 6 将上一步计算结果归一化,
  • stage 7 导出模型,
  • stage 8 对模型做fine-tune。

shard格式:raw 格式的音频未经过分片、拆分,就是原本下载解压后的文件,训练时只能逐个读取音频,适用于数据集较小时;shard 将会把音频打包成若干个分片,每个分片包含了多个音频,在模型训练读数据时每次能读入一批数据,减少了磁盘IO 次数,但是将音频打包成分卷,占
据更大的存储空间,当数据集较大时利用shard 格式能显著提高训练速度。

1.1 run.sh stage 1处理

if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
  echo "Prepare datasets ..."
#这里传入参数stage=2,stop_stage=4,与run.sh中的stage无关
  ./local/prepare_data.sh --stage 2 --stop_stage 4 --data ${data}
fi

这里如果stage = 1,则会执行./local/prepare_data.sh 并传入参数 stage =2 , stop_stage =4,这里的stage与run.sh中的stage 无关。

在prepare_data.sh文件中

  • stage 1: 下载数据包,合并分包并做md5校验
  • stage 2: 解压数据包,放在指定目录下
  • stage 3: Convert voxceleb2 wav format from m4a to wav using ffmpeg.
  • stage 4: Prepare wav.scp for each dataset

./local/prepare_data.sh文件


data=`realpath ${data}`
download_dir=${data}/download_data
rawdata_dir=${data}/raw_data

# stage 1主要是下载文件,包括musan.tar.gz, rirs_noises.zip, vox1_test_wav.zip vox1_dev_wav.zip, and vox2_aac.zip
if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
  echo "Download musan.tar.gz, rirs_noises.zip, vox1_test_wav.zip, vox1_dev_wav.zip, and vox2_aac.zip."
  echo "This may take a long time. Thus we recommand you to download all archives above in your own way first."

  ./local/download_data.sh --download_dir ${download_dir}
fi

可以看到在prepare_data.sh文件中,输入的stage =1,则执行download_data.sh文件。

./local/download_data.sh中下载vox2_dev_acc分卷为例

if [ ! -f ${download_dir}/vox2_aac.zip ]; then
  echo "Downloading vox2_aac.zip ..."
  for part in a b c d e f g h; do
#下载分卷
    wget --no-check-certificate https://thor.robots.ox.ac.uk/~vgg/data/voxceleb/vox1a/vox2_dev_aac_parta${part} -P ${download_dir} &
  done
  wait
#合并分卷
  cat ${download_dir}/vox2_dev_aac* >${download_dir}/vox2_aac.zip
#md5校验
  md5=$(md5sum ${download_dir}/vox2_aac.zip | awk '{print $1}')
  [ $md5 != "bbc063c46078a602ca71605645c2a402" ] && echo "Wrong md5sum of vox2_aac.zip" && exit 1
fi

注意:这里如果已经自己下载分卷,则在命令行单独对分卷进行合并,以及md5校验,无需下载数据包。

修改过无需下载的./local/download_data.sh版本如下:

download_dir=data/download_data

#. tools/parse_options.sh || exit 1

[ ! -d ${download_dir} ] && mkdir -p ${download_dir}

#if [ ! -f ${download_dir}/musan.tar.gz ]; then
  echo "Downloading musan.tar.gz ..."
#  wget --no-check-certificate https://openslr.elda.org/resources/17/musan.tar.gz -P ${download_dir}
  md5=$(md5sum ${download_dir}/musan.tar.gz | awk '{print $1}')
  [ $md5 != "0c472d4fc0c5141eca47ad1ffeb2a7df" ] && echo "Wrong md5sum of musan.tar.gz" && exit 1
#fi

#if [ ! -f ${download_dir}/rirs_noises.zip ]; then
  echo "Downloading rirs_noises.zip ..."
#  wget --no-check-certificate https://us.openslr.org/resources/28/rirs_noises.zip -P ${download_dir}
  md5=$(md5sum ${download_dir}/rirs_noises.zip | awk '{print $1}')
  [ $md5 != "e6f48e257286e05de56413b4779d8ffb" ] && echo "Wrong md5sum of rirs_noises.zip" && exit 1
#fi

#if [ ! -f ${download_dir}/vox1_test_wav.zip ]; then
  echo "Downloading vox1_test_wav.zip ..."
#  wget --no-check-certificate https://thor.robots.ox.ac.uk/~vgg/data/voxceleb/vox1a/vox1_test_wav.zip -P ${download_dir}
  md5=$(md5sum ${download_dir}/vox1_test_wav.zip | awk '{print $1}')
  [ $md5 != "185fdc63c3c739954633d50379a3d102" ] && echo "Wrong md5sum of vox1_test_wav.zip" && exit 1
#fi

#if [ ! -f ${download_dir}/vox1_dev_wav.zip ]; then
  echo "Downloading vox1_dev_wav.zip ..."
#  for part in a b c d; do
#    wget --no-check-certificate https://thor.robots.ox.ac.uk/~vgg/data/voxceleb/vox1a/vox1_dev_wav_parta${part} -P ${download_dir} &
#  done
#  wait
  cat ${download_dir}/vox1_dev* >${download_dir}/vox1_dev_wav.zip
  md5=$(md5sum ${download_dir}/vox1_dev_wav.zip | awk '{print $1}')
  [ $md5 != "ae63e55b951748cc486645f532ba230b" ] && echo "Wrong md5sum of vox1_dev_wav.zip" && exit 1
#fi

#if [ ! -f ${download_dir}/vox2_aac.zip ]; then
  echo "Downloading vox2_aac.zip ..."
#  for part in a b c d e f g h; do
#    wget --no-check-certificate https://thor.robots.ox.ac.uk/~vgg/data/voxceleb/vox1a/vox2_dev_aac_parta${part} -P ${download_dir} &
#  done
#  wait
  cat ${download_dir}/vox2_dev_aac* >${download_dir}/vox2_aac.zip
  md5=$(md5sum ${download_dir}/vox2_aac.zip | awk '{print $1}')
  [ $md5 != "bbc063c46078a602ca71605645c2a402" ] && echo "Wrong md5sum of vox2_aac.zip" && exit 1
#fi

echo "Download success !!!"

注:在手动Cat分卷合并过程中,需要注意空格,如cat vox2_dev_aac* > vox2_aac.zip,“>”号前后需要有空格保留。

1.2 run.sh运行

在运行前需要安装ffmpeg和lmdb安装包。

ffmpeg安装

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

tar zxvf yasm-1.3.0.tar.gz

cd yasm-1.3.0

./configure

make && make install

wget http://www.ffmpeg.org/releases/ffmpeg-3.4.4.tar.gz

tar -zxvf ffmpeg-3.4.4.tar.gz

cd ./ffmpeg-3.4.4

./configure --enable-ffplay --enable-ffserver

make && make install

安装完成,使用以下命令查看

ffmpeg --version

设置run.sh 起始stage 和结束stage分别为1和2;

# run.sh

stage=1
stop_stage=2
bash run.sh

程序自动运行以下步骤:

(1) prepare_data.sh—stage 2 解压数据集

对上述的VoxCeleb1 和2、RIRS_NOISES 和MUSAN 噪声集分别做解压,prepare_data.sh
的stage 2 在download_data/所在目录data/下新建一个rawdata_dir/文件夹,然后解压到该目
录。

(2) prepare_data.sh—stage 3 Convert voxceleb2 wav format from m4a to wav using ffmpeg

(3) prepare_data.sh—stage 4 制作音频数据集索引

为每个数据集准备wav.scp,其在data/目录下新建musan、rirs、voxceleb_train、eval 四个文件夹,然后在各个文件夹内生成wav.scp。其中voxCeleb 数据集还有两个额外目录utt2spk、
spk2utt,分别是音频对应说话人的目录索引,以及说话人对应音频的索引。在eval/中生成enroll.map,并在trails 文件夹生成两种测试方法的测试集。

(4) make_shard_list.py—转换为shard 分卷格式

调用tools/make_shard_list.py 生成shard 分片,同时生成shard 对应的list
– num_utts_per_shard 每个shard 分卷有多少条音频
– num_threads 运行线程数
– prefix shards 分片文件前缀为”shards”
– shuffle 生成分片前对进行数据洗切,打乱顺序

转换完成后可以查看训练集的shard 目录,其内容如下:

其中每个tar 都是一个类似压缩包的包含了多个音频的文件,vim 之后可以看到它是一个包
含原始文件的音频目录:

(5)make_raw_list.py—转换为raw 格式

make_raw 不对原本的wav.scp 做变化,其raw 类型数据依然是逐条读取,不存在分卷,在训练时只需调用它的输出索引raw.list

(6)将噪声数据转换为LMDB 格式

LMDB(Lightning Memory-Mapped Database)是一种高性能、低延迟、内存映射键值数据库。
它被广泛应用于存储大规模数据集,特别适用于需要高效读取和写入的场景。调用tools/make_lmdb.py,输入两个噪声集的wav.scp 目录,输出LMDB 格式的数据库文件。通过将噪声数据集封装成LMDB 格式提高存取速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何重装Windows Mirosoft Store

重装Windows Mirosoft Store 如何重装Windows Mirosoft Store呢?如何下载Windows Mirosoft Store呢?Windows Mirosoft Store不见了咋办?Windows 自带软件不见了咋办等等?写在前面 1.文件准备2.安装 如何重装Windows Mirosoft Stor…

Java之序列化的详细解析

3. 序列化 3.1 概述 Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。 反之,该字节…

vue做无缝滚动

类似于这种&#xff1a; 以上截图来自于官网&#xff1a;vue-seamless-scroll 具体使用步骤为&#xff1a; 1:安装 cnpm install vue-seamless-scroll --save  2&#xff1a;引入 <vue-seamless-scroll></vue-seamless-scroll>import vueSeamlessScroll from …

最熟悉的陌生人!Java运算符详解

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、算术运算符1、四则运算符2、增量运算符3、自增、自减运算符 二、关系运算符三、关系运算符1、逻辑与 &&2、逻辑或|…

【PDF提取页面】使用Adobe Acrobat提取PDF文档的某几个页面另存

▚ 01 使用Adobe Acrobat打开目标文件 ▚ 02 打开 ->页面缩略图Page Thumbnails ▚ 03 右键选择 -> 提取页面 Extract Pages… ▚ 04 选择提取的页数范围 &#x1f341; 一般设置提取页面的初始位置和截至位置即可。 ▚ 05 将提取的目标页面另存为->新PDF文

基于微信小程的流浪动物救助宠物领养平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

05_JavaScript基本语法

1 变量 1.1 标识符 程序开发中&#xff0c;经常需要自定义一些符号来标记一些名称&#xff0c;并赋予其特定的用途&#xff0c;如变量名、函数名等&#xff0c;这些符号都被称为标识符。 定义规则 由大小写字母&#xff08;A-Z,a-z&#xff09;、数字&#xff08;0-9&#…

[docker]笔记-网络故障处理

1、同事在虚拟机上部署docker&#xff0c;发现电脑无法登录虚拟机了。首先ping测是通的&#xff0c;从我电脑继续进行登录测试发现没问题&#xff0c;初步判断是她电脑网络和虚拟机网络之间连接出错。 2、进行虚拟机登录查看&#xff0c;首先使用route -n命令查看路由&#xf…

Java深入理解线程的三大特性

目录 1 CPU缓存导致可见性问题2 线程切换导致原子性问题3 性能优化导致有序性问题4 JMM(Java Memory Model)5 volatile6 synchronized 1 CPU缓存导致可见性问题 线程的三大特性&#xff1a; 可见性&#xff1a;Visibility有序性&#xff1a;Ordering原子性&#xff1a;Atomic…

YApi Pro

1.介绍 说明&#xff1a;YApi Pro 是一款高效、易用、功能强大的 API 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。它可以帮助开发者轻松创建、发布、维护 API&#xff0c;同时为用户提供了优秀的交互体验&#xff0c;开发人员可以更加高效地完…

【面试算法——动态规划 19】最长回文子序列 (hard)让字符串成为回文串的最少插入次数

516. 最长回文子序列 链接: 516. 最长回文子序列 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&…

C语言实现八种功能的通讯录(添加、删除、查找、修改、显示、排序、退出、清空)

通讯录功能概要及前提说明 此通讯录利用C语言完成&#xff0c;可以实现八种功能的通讯录&#xff08;添加、删除、查找、修改、显示、排序、退出、清空&#xff09; 代码由三部分组成&#xff0c;为什么要写成三部分而不写成一部分可以参考我以前的博客&#xff0c;如下&…

【Linux】Linux多线程

怎么理解线程线程的优缺点线程的二级页表线程用途怎么管理线程线程创建获取创建后的ID方法 线程等待线程终止分离线程线程ID及进程地址空间布局 怎么理解线程 通俗易懂的说&#xff0c;线程的运行是必须有进程给它打个基础。线程的运行是服用进程的代码及空间来进行运作的。 那…

[架构之路-223]:数据管理能力成熟度评估模型DCMM简介

目录 一、背景 二、评估依据 三、评估内容 四、主要适用对象 五、能力等级 六、不同层次的文件&#xff1a; 一、背景 信息技术与经济社会的交汇融合引发了数据爆发式增长。数据蕴含着重要的价值&#xff0c;已成为国家基础性战略资源&#xff0c;正日益对全球生产、流通…

会声会影和pr哪个好用? 2023年最新功能介绍解析

随着抖音、快手、B站等视频平台的普及&#xff0c;每个人都能成为视频创作者&#xff0c;视频剪辑软件成为自媒体创作的必备工具。一些新入门视频剪辑的小伙伴可能会疑惑&#xff0c;会声会影和PR软件哪个好呢&#xff1f;今天我将从核心功能、稳定性和性价比三个方面&#xff…

从中序遍历和后序遍历构建二叉树

题目描述 106. 从中序与后序遍历序列构造二叉树 中等 1.1K 相关企业 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1…

腾讯Mini项目课程前置学习笔记(第一轮)

Mini项目课程前置学习笔记&#xff08;第一轮&#xff09; 时间&#xff1a;5.20 ~ 5.23 项目基本介绍 项目 B. 指标监控服务重构 指标的收集与展示是后台系统监控中非常重要的一环&#xff0c;很可惜大而全的全链路监控方案并不适合我们&#xff0c;于是就有了本 mini 项目。…

cesium在vue中引入报错

npm install cesium1.95.0 找了很久各种办法都用了 最后就是降到这个版本。 在main.js中这样引入就可以运行起来了 import * as Cesium from cesium/Build/Cesium/Cesium.js; import cesium/Build/Cesium/Widgets/widgets.css; Vue.prototype.cesiumCesium 没出来是因为这个…

根据表名称快速查询表所有字段是否包含特定数据筛选

当前需要清理某个表中所有字段&#xff0c;检查是否有包含DEl字符的脏数据&#xff0c;如果字段比较少的直接根据字段查询即可&#xff0c;但是如果有几十个字段的话&#xff0c;逐个检查会很慢。 当前使用的方式是&#xff1a; 1&#xff1a;根据表名称获取当前表所有的字段 …

《信息系统项目管理师教程(第4版)》第1章至第5章 信息化发展、信息技术发展、信息系统治理、信息系统管理、信息系统工程 常见考点、知识点、思维导图、xmind

第一章至第五章多以选择题形式考察&#xff0c;分值在20分左右。已将考点、知识点整理成思维导图&#xff0c;可免费下载。以下是思维导图的部分截图&#xff1a; 第一章 信息化发展 第二章 信息技术发展 第三章 信息系统治理 第四章 信息系统管理 第五章 信息系统工程