由于工作上的需要,对spleeter看了下。
安装:对于spleeter的安装,这里不进行说明,这个比较简单。最暴力直接pip就可以。(知识考虑安装的话,哈哈)
这里模仿的对象:里面的基本使用这里也不进行说明,这个网上资料比较多,我也看了许多。这里推荐一个,[1]感觉还不错,要是没有看的可以瞅瞅。里面对spleeter结构描述个人觉得还是挺不错。
总结:不过当时在看代码时,还是有一些没看到网上有的东西,这里记录下,方便以后学习。
开始进入正题了:
1 代码目录:

从结构中可以看到,有audio, commands,model, resources,utils以及在根目录下的一些文件。下面对部分文件进行说明
最主要还是对commands里面对文件进行说明下,我们使用时,很多资料是指令上面输入的,当我们这样跑时,首先入口时下面的__main__.py方法,然后里面会调用commands中某一个文件中的 entrypoint 方法。在main里面会加载一些配置文件,这个文件所在的目录就是resources里面,具体细节就不展开了。再后面会根据不同调用其他文件中的方法。
audio 文件夹里面都是音频一些文件。
- adapter.py 这个主要负责对音频数据的加载和保存。
- ffmpeg.py 里面主要提供ffmpeg的对文件读取等操作,对于adapter中提供的,默认读取器就是ffmpeg。我目前也常用这个。
- spectrogram.py 主要是获取音频的频谱数据等,例如stft变化等,由于真个项目都是基于tensorflow的,所以很多函数返回都是tf类型的。
- convertion.py 主要包含一些对音频数据的变化处理。
model 文件夹下面主要放一些模型,官方提供的一些模型,主要使用了unet模型,我最近只在看2stems的模型。这个每一中乐器对应一个unet。这个详细内容可以看[1]。
2 训练模型 :
这个对这个展开,主要是出于两个原因,
第一个就是学习使用,这种seq-seq模型对我来说接触的不太多,这个项目也比较优秀,这个可以作为好好学习的机会。
第二个就是训练模型,因为官方提供的有train方法,在模型提供上也提供了finetune模型。在很多官方提供的模型,可能不太满足自己想用的场景,也就是我们可能希望在自己的训练数据上对模型进行训练或者迁移。
技术大大们,要是发现问题,可以指出来,我学习学习。
里面模型构建和训练主要使用tensorflow中的 estimator,记得第一次接触这个还是看当时wide&deep模型。
def entrypoint(arguments, params):在训练时,主要是使用params里面的方法。对于训练数据,我们需要处理成和musdb18(这个数据下载需要申请,不过也挺快)里面数据相似的格式,音乐,伴奏,人声等。并生成csv文件,对于csv文件,第一行为对应的名称,例如mix_path, other_path等,而这个mix和other需要在instrument_list 里面进行指定,这个要对应起来。训练模型的batchsize,train_max_steps 等参数都是从params参数传进去的。
用过estimator的都清楚,这个需要指定对应的model_fn函数,这个项目中,该方法定义在model下面的__init__.py里面在。以及loss的定义,spleeter在处理loss时,使用频谱数据对应的误差绝对值,并对各个输出数据取了一个均值。
在基于官方提供的模型上做训练时,注意写instrument_list的顺序,例如2stems模型,第一个为人声,第二个为伴奏。
3 模型使用:
对于官方提供的模型,2stems里面中,输入是音频数据,输出也可以直接是输出的音频数据。然而我们发现,自己使用它的方法训练出来的模型却有点不太一样,在使用时,可以直接使用separate中的entrypoint调用,或者在当前目录下创建一个pretrained_models 里面再创建一个2stems,可以将自己的模型放入到里面,通过指令来。
官方提供的另外一种模型,就是输入输出都是音频的。自己对里面看了下,这里也记录下,在模型中waveform 对应的是输入音频数据,strided_slice_23对应是输出伴奏数据,strided_slice_3对应是输出的音频数据。
先这样吧,以后再补充
参考链接
[1] https://blog.csdn.net/qq_39132330/article/details/107324264