# TIMIT-Conv-TasNet **Repository Path**: byack/timit-conv-tas-net ## Basic Information - **Project Name**: TIMIT-Conv-TasNet - **Description**: 基于TIMIT数据集来构建一个语音分离的数据集,用Conv-TasNet来训练 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-11-03 - **Last Updated**: 2024-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TIMIT-Conv-TasNet 基于 TIMIT 数据集构建的一个用于语音分离的数据集,用 Conv-TasNet 来训练 ## 使用步骤 1. 安装依赖 ```shell pip install torch torchaudio pyaudio numpy sphfile tqdm torchmetrics matplotlib scipy ``` 2. 将数据集放到 data 文件夹下,原始的 TIMIT 数据集的目录结构如下: ```txt data |---TIMIT |---DOC |---TEST |---TRAIN |---README.DOC ``` 关于数据集操作的代码全部在 `tools.py` 文件中,需要执行哪个函数单独执行一次即可 - `WAV2wav` 函数将以上原始的 TIMIT 数据集中的音频文件转为 wav 格式,存储在 `data/TIMIT-T` 文件夹中 - `find_audio_len` 函数找到了 TIMIT 数据集中所有 wav 文件最短与最长的时长分别为 14644,124621 - `mix_audio` 生成混合音频的函数,如果不指定 `audio_len` 参数,那不同编号的样本之间,音频时长是不相等的,训练时只能单个样本进行训练,代码中我将所有数据定长为 `8s` ,因为音频采样率为 16000,所以设置参数 `audio_len=128000` - 处理完以上数据之后,就可以训练了 3. 开始训练(如果你的数据集路径和我的不同,需要在 `train.py` 中数据加载器部分指定数据集的路径,`lr` `epochs` `batch_size` 参数可根据需求修改) ```shell python train.py ``` > 运行完成后,最优的模型会保存到 save_net 文件夹下 ## 训练说明 如果读入的是等长的数据 `TIMIT-mix-8`,就可以根据自己电脑需求更改 `batch_size` 了,查看方式在 `train.py` 文件中的如下位置查看: ```python batch_size = 2 # 准备数据加载器 train = DataLoader(AudioDataset("./data/TIMIT-mix-8/TRAIN"), batch_size=batch_size, shuffle=True) test = DataLoader(AudioDataset("./data/TIMIT-mix-8/TEST"), batch_size=batch_size) ``` 等长语音的坏处就是较短的语音里会存在很多的静音片段,如果使用的是 `TIMIT-mix` 这个不同样本之间不等长的数据集,那`batch_size` 只能设置为 1,想在自己电脑上跑一个 demo 的话,建议将 `train.py` 文件中的 `epochs = 200` 改为 `epochs = 1` 和 `batch_size=2` 改为 `batch_size=1`,我的是 `Intel i7-10700` 的CPU,跑完大约需要 5 小时 ## 推理说明 预测代码在 `predict.py` 文件中,使用很简单 1. 设置混合音频路径和分离音频的输出路径 ```python if __name__ == "__main__": # 第一个参数是混合音频路径,第二个是分离后音频的输出路径,默认 ./ 输出到当前文件夹 separate("./data/TIMIT-mix/TEST/DR1/4541/4541-mix.wav", "./") ``` 2. 设置模型路径,之前训练是保存在 `save_net` 文件夹下的 `pt` 文件,如果不对,将你 `pt` 文件的路径填到如下位置 ```python # 加载模型参数 net.load_state_dict(torch.load("./save_net/xxxxxx.pt", map_location=torch.device('cpu'))) ``` 3. `predict.py` 文件修改完成后,运行即可 ```shell python predict.py ``` 运行完成后就会在指定路径下生成分离后的音频文件 `s0.wav 和 s1.wav`,如果因为 `torchaudio.save` 报错,可根据 `predict.py` 文件中的提示,改用 `scipy` 来存储音频 ## GUI说明 直接运行该文件即可看到 GUI 界面,如果需要使用 `Pyinstaller` 对界面程序进行打包为 `exe` 文件,建议新建一个项目,将 `GUI.py` `model.py` `predict.py` `生成的模型文件.pt` 放到新项目中,安装对应依赖后再打包 ## 实验 > 目前我训练了100个epoch,花费了3天,但效果不尽人意,训练过程需要改进