中文 | English
副歌提取(Chorus Detection)旨在提取出一段乐曲中的副歌(乐曲中重复最多或“最抓耳”的部分)段落。本任务开创性地提出了一种结合多分辨率和自注意力机制的端到端副歌检测模型DeepChorus。
本模型的实验结果在大多数情况下都优于现有的最先进的方法。
DeepChorus的总体框架如图所示。 我们将合唱检测视为一个分类问题,模型的输出是一个二进制向量,表示副歌或非副歌。 模型以mel频谱图作为输入,同时输入歌曲可以是任意长度。
该模块结构和加入模块前后的效果如上所示。
该策略的核心思想是:先将输入特征下采样到低分辨率以方便提取全局信息,然后再合并到高分辨率。 通过对不同尺度下采样/上采样,并重复交换信息,可以得到能够区分副歌和非副歌的向量,并在几层之后突出区域信息进行进一步处理。
我们设计了一个SA-Conv(Self-Attention Convolution)模块作为基本模块。 在块中,使用了自注意层和卷积层。 三个SA-Conv块依次堆叠形成主体结构。本模块采用两个卷积层将序列处理成概率曲线,表示副歌的存在与否。
网络中,自注意力卷积的过程可视化:
加入HRNet与否,或加入SA-Conv模块与否的消融实验结果:
和Pop-Music-Highlighter、2021ICASSP、 SCluster、CNMF的对比结果:
和几个baseline对比的可视化:
python==3.6.2
tensorflow==2.1.0
librosa==0.8.1
joblib==1.1.0
madmom==0.16.1 #(运行ICASSP 2021 baseline 时需要)
请先在extract_spectrogram.py中将 'source_path' 更换为音源路径。
执行:
python ./preprocess/extract_spectrogram.py
请将constant.py中的 "test_feature_files" 和 "test_annotation_files" 参数分别替换为 提取好的特征joblib文件 和 指定标签格式的joblib 文件,其中标签的格式为:
dict = { 'song_name' = [[0, 10], [52, 80], ...], ...}
执行:
python ./test.py -n DeepChorus -m Deepchorus_2021
该程序返回测试集的R, P, F及AUC结果。
训练需要将constant.py中的 "train_feature_files" 和 "train_annotation_files" 参数分别替换为 提取好的特征joblib文件 和 指定标签格式的joblib 文件,其中标签的格式同上。 执行:
python ./train.py -n DeepChorus -m Deepchorus_20220304
训练后模型将保存在./model文件夹中
该论文发表在ICASSP 2022中,目前已上传在Arxiv上: [pdf]
Citation将会在会议后同步更新。