• Wespeaker框架数据集准备(1)


    1. 数据集准备(Data preparation)

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

    对run.sh文件进行编辑

    vim run.sh

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

    1. #数据集下载,解压
    2. stage=1
    3. #插入噪音,制作音频文件
    4. stop_stage=2
    5. #数据集放置的源目录,这里要求数据集放在run.sh所在目录下data/download_data文件夹中
    6. data=data
    7. #shard格式
    8. 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处理

    1. if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
    2. echo "Prepare datasets ..."
    3. #这里传入参数stage=2,stop_stage=4,与run.sh中的stage无关
    4. ./local/prepare_data.sh --stage 2 --stop_stage 4 --data ${data}
    5. 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文件

    1. data=`realpath ${data}`
    2. download_dir=${data}/download_data
    3. rawdata_dir=${data}/raw_data
    4. # stage 1主要是下载文件,包括musan.tar.gz, rirs_noises.zip, vox1_test_wav.zip vox1_dev_wav.zip, and vox2_aac.zip
    5. if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
    6. echo "Download musan.tar.gz, rirs_noises.zip, vox1_test_wav.zip, vox1_dev_wav.zip, and vox2_aac.zip."
    7. echo "This may take a long time. Thus we recommand you to download all archives above in your own way first."
    8. ./local/download_data.sh --download_dir ${download_dir}
    9. fi

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

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

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

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

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

    1. download_dir=data/download_data
    2. #. tools/parse_options.sh || exit 1
    3. [ ! -d ${download_dir} ] && mkdir -p ${download_dir}
    4. #if [ ! -f ${download_dir}/musan.tar.gz ]; then
    5. echo "Downloading musan.tar.gz ..."
    6. # wget --no-check-certificate https://openslr.elda.org/resources/17/musan.tar.gz -P ${download_dir}
    7. md5=$(md5sum ${download_dir}/musan.tar.gz | awk '{print $1}')
    8. [ $md5 != "0c472d4fc0c5141eca47ad1ffeb2a7df" ] && echo "Wrong md5sum of musan.tar.gz" && exit 1
    9. #fi
    10. #if [ ! -f ${download_dir}/rirs_noises.zip ]; then
    11. echo "Downloading rirs_noises.zip ..."
    12. # wget --no-check-certificate https://us.openslr.org/resources/28/rirs_noises.zip -P ${download_dir}
    13. md5=$(md5sum ${download_dir}/rirs_noises.zip | awk '{print $1}')
    14. [ $md5 != "e6f48e257286e05de56413b4779d8ffb" ] && echo "Wrong md5sum of rirs_noises.zip" && exit 1
    15. #fi
    16. #if [ ! -f ${download_dir}/vox1_test_wav.zip ]; then
    17. echo "Downloading vox1_test_wav.zip ..."
    18. # wget --no-check-certificate https://thor.robots.ox.ac.uk/~vgg/data/voxceleb/vox1a/vox1_test_wav.zip -P ${download_dir}
    19. md5=$(md5sum ${download_dir}/vox1_test_wav.zip | awk '{print $1}')
    20. [ $md5 != "185fdc63c3c739954633d50379a3d102" ] && echo "Wrong md5sum of vox1_test_wav.zip" && exit 1
    21. #fi
    22. #if [ ! -f ${download_dir}/vox1_dev_wav.zip ]; then
    23. echo "Downloading vox1_dev_wav.zip ..."
    24. # for part in a b c d; do
    25. # wget --no-check-certificate https://thor.robots.ox.ac.uk/~vgg/data/voxceleb/vox1a/vox1_dev_wav_parta${part} -P ${download_dir} &
    26. # done
    27. # wait
    28. cat ${download_dir}/vox1_dev* >${download_dir}/vox1_dev_wav.zip
    29. md5=$(md5sum ${download_dir}/vox1_dev_wav.zip | awk '{print $1}')
    30. [ $md5 != "ae63e55b951748cc486645f532ba230b" ] && echo "Wrong md5sum of vox1_dev_wav.zip" && exit 1
    31. #fi
    32. #if [ ! -f ${download_dir}/vox2_aac.zip ]; then
    33. echo "Downloading vox2_aac.zip ..."
    34. # for part in a b c d e f g h; do
    35. # wget --no-check-certificate https://thor.robots.ox.ac.uk/~vgg/data/voxceleb/vox1a/vox2_dev_aac_parta${part} -P ${download_dir} &
    36. # done
    37. # wait
    38. cat ${download_dir}/vox2_dev_aac* >${download_dir}/vox2_aac.zip
    39. md5=$(md5sum ${download_dir}/vox2_aac.zip | awk '{print $1}')
    40. [ $md5 != "bbc063c46078a602ca71605645c2a402" ] && echo "Wrong md5sum of vox2_aac.zip" && exit 1
    41. #fi
    42. echo "Download success !!!"

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

    1.2 run.sh运行

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

    ffmpeg安装

    1. wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
    2. tar zxvf yasm-1.3.0.tar.gz
    3. cd yasm-1.3.0
    4. ./configure
    5. make && make install
    6. wget http://www.ffmpeg.org/releases/ffmpeg-3.4.4.tar.gz
    7. tar -zxvf ffmpeg-3.4.4.tar.gz
    8. cd ./ffmpeg-3.4.4
    9. ./configure --enable-ffplay --enable-ffserver
    10. make && make install

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

    ffmpeg --version

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

    1. # run.sh
    2. stage=1
    3. 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 格式提高存取速度。

  • 相关阅读:
    RunnerGo UI自动化测试功能使用体验
    个人网站建设方案书
    数据结构 - AVL树
    计算变量占用的内存sys.getsizeof()方法
    解决js+canvas使用ttf格式字体,首次加载不生效。
    C语言程序——Switch分支选择程序
    序列召回基础+GRU4Rec论文阅读
    【SpringBoot篇】基于SpringBoot进行Web开发
    unity 全景视频播放全景图片转换(学习)
    nodejs:fs文件系统模块
  • 原文地址:https://blog.csdn.net/shadowismine/article/details/133021206