Wespeaker框架数据集准备(1)

news2024/10/6 6:52:51

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/1040112.html

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

相关文章

递归算法讲解,深度理解递归

首先最重要的就是要说明递归思想的作用,在后面学习的高级数据接口,树和图中,都需要用到递归,即深度优先搜索,如果递归掌握的不好,后面的数据结构将举步为艰。 加油 首先看下如何下面两个方法有什么区别&a…

基于Java+SpringBoot+Vue3+Uniapp前后端分离考试学习一体机设计与实现2.0版本(视频讲解,已发布上线)

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

Allegro如何将丝印文字Change到任意层面操作指导

Allegro如何将丝印文字Change到任意层面操作指导 在用Allegro进行PCB设计的时候,有时需要将丝印文字change到其它层面,如下图 可以看到丝印文字是属于REFDES这个Class的 如果需要把丝印文字change层面,只支持REFDES中以下的层面中来change

【深入浅出设计模式--命令模式】

深入浅出设计模式--命令模式 一、背景二、问题三、解决方案四、试用场景总结五、后记 一、背景 命令模式是一种行为设计模式,它可以将用户的命令请求转化为一个包含有相关参数信息的对象,命令的发送者不需要知道接收者是如何处理这条命令,多个…

Qt Chats(一)绘制折线图

1、一个简单的QChart绘图程序 Qt Charts基于Qt的Graphics View架构,其核心组件是QChartView 和 QChart QChartView是显示图标的视图,基类为QGraphicsViewQChart的基类是QGraphicsltem QChart类继承关系 QPolarChart 用于绘制 极坐标图的图表类 1.项目…

(自学)黑客技术——网络安全

如果你想自学网络安全,首先你必须了解什么是网络安全!,什么是黑客!! 1.无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如 Web 安全技术,既有 Web 渗透2.也有 Web 防…

基于微信小程序的婚庆婚纱摄影预约平台(源码+lw+部署文档+讲解等)

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

彩色文本进度条

动态加色打印,\033控制,显示进行到的百分比,实时更新总共用时。 (本笔记适合能熟练应用字符串和循环技能的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程…

开发者必备!如何将闲置iPad Pro打造为编程工具,使用VS Code编写代码

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. ipad pro通过软件远程vscode6.1 创建TCP隧道 7. ip…

数据结构 | 队列

队列&#xff08;First In First Out&#xff09; 顺序队列 #include <iostream>class MyQueue {private:// store elementsvector<int> data; // a pointer to indicate the start positionint p_start; public:MyQueue() {p_start 0;}/** In…

爬虫怎么批量采集完成任务

目录 一、了解网络爬虫 二、Python与网络爬虫 三、批量采集任务的实现 1.确定采集网站及关键词 2.安装相关库 3.发送请求并获取响应 4.解析HTML文档 5.提取文章内容 6.保存文章内容 7.循环采集多篇文章 8.增加异常处理机制 9.优化代码性能 四、注意事项 总结 在当…

UNet网络模型学习总结

github&#xff1a;Machine_Learning/网络模型/UNet at main golitter/Machine_Learning (github.com) 因为VOC数据集太大&#xff0c;上传github很慢&#xff0c;所以就没有上传VOC数据&#xff0c;只有参考的目录位置。 数据集自行下载&#xff1a;https://host.robots.ox.…

顾曼宁(顾曼):漂流伞创始人与杭州高层次人才的杰出代表

杭州&#xff0c;这座以创新与活力为标签的城市&#xff0c;吸引了无数优秀的人才。在这座城市中&#xff0c;一位杰出的女性企业家以其独特的创业智慧和卓越的领导力&#xff0c;成为了杭州高层次人才的杰出代表之一&#xff0c;她的名字叫顾曼宁&#xff08;顾曼&#xff09;…

21天学会C++:Day14----模板

CSDN的uu们&#xff0c;大家好。这里是C入门的第十四讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 知识引入 2. 模板的使用 2.1 函数模板 2.2 类模板 3. 模板声明和定义…

7实体与值对象 #

本系列包含以下文章&#xff1a; DDD入门DDD概念大白话战略设计代码工程结构请求处理流程聚合根与资源库实体与值对象&#xff08;本文&#xff09;应用服务与领域服务领域事件CQRS 案例项目介绍 # 既然DDD是“领域”驱动&#xff0c;那么我们便不能抛开业务而只讲技术&…

Kotlin异常处理runCatching,getOrNull,onFailure,onSuccess(1)

Kotlin异常处理runCatching&#xff0c;getOrNull&#xff0c;onFailure&#xff0c;onSuccess&#xff08;1&#xff09; fun main(args: Array<String>) {var s1 runCatching {1 / 1}.getOrNull()println(s1) //s11&#xff0c;打印1println("-")var s2 ru…

基于springboot+vue的制造装备物联及生产管理ERP系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

序列化对象(ObjectOutputStream,ObjectInputStream)

1、对象序列化 作用&#xff1a;以 内存 为基准&#xff0c;把内存中的对象存储到磁盘文件中去&#xff0c;称为对象序列化使用到的流是对象字节输出流&#xff1a;ObjectOutputStream package com.csdn.d7_serializable; import java.io.*; public class ObjectOutputStreamDe…

Python爬虫程序设置代理常见错误代码及解决方法

Python爬虫程序设置代理是爬虫程序中常用的技巧&#xff0c;可以有效地绕过IP限制&#xff0c;提高爬虫程序的稳定性和效率。然而&#xff0c;在设置代理时&#xff0c;常会出现各种错误代码&#xff0c;这些错误代码可能会影响程序的正常运行&#xff0c;甚至导致程序崩溃。本…