MUSDB18-HQ音樂分軌訓練集和MUSDB調用方法

在這裏插入圖片描述

MUSDB18和MUSDB18-HQ簡單介紹

musdb18是一個數據集,包含150首不同類型的全長音樂(大約10小時的長度),以及它們各自獨立的鼓、貝斯、人聲和其他詞幹。
musdb18包含兩個文件夾,一個文件夾包含一個訓練集:“訓練”,由100首歌曲組成,另一個文件夾包含一個測試集:“測試”,由50首歌曲組成。監督方法應在訓練集上進行訓練,並在兩集上進行測試。所有信號都是立體聲,編碼在44.1千赫。
來自musdb18的數據由幾個不同的來源組成:100首曲目取自DSD100數據集,數據集本身來自“混合祕密”免費多曲目下載庫。有關您使用DSD100數據的權利的任何問題,請參閱此原始資源。46首歌來自MedleyDB,根據知識共享協議(BY-NC-SA 4.0)授權。

MUSDB18- hq是MUSDB18數據集的未壓縮版本。它由150首不同風格的全音軌歌曲組成,包括混合立體聲和原始音源,分爲訓練子集和測試子集。其目的是爲源分離算法的設計和評估提供參考數據庫。這種信號處理方法的目的是估計一組混合物的一個或多個源,例如用於卡拉ok。它已被用作SiSEC 2018年專業製作的音樂錄製任務的官方數據集,該任務是評價源分離算法的國際運動。
在這裏插入圖片描述

MUSDB 組成

musdb18-hq包含兩個文件夾,一個文件夾包含一個訓練集:train,由100首歌曲組成,另一個文件夾包含一個測試集:test,由50首歌曲組成。監督方法應在訓練集上進行訓練,並在兩集上進行測試。所有來自musdb18-hq數據集的文件都保存爲未壓縮的wav文件。在每個音軌文件夾中,用戶可以0 0 - The mixture, 混合聲
1 - The drums,鼓聲
2 - The bass,貝斯聲
3 - The rest of the accompaniment, 伴奏部分
4 - The vocals.人聲
所有的信號都是立體聲,編碼在44.1千赫。如果您使用MUSDB數據集進行研究,請引用MUSDB18數據集

Tools

解析器

musdb: Python based dataset parser
mus-io: Docker scripts for decoding/encoding STEMS <=> wav (i.e. MATLAB users go there)
musdb.jl: Julia based dataset parser

Musdb庫API介紹

class musdb.DB(root=None, setup_file=None, is_wav=False, download=False, subsets=['train', 'test'], split=None)[source]
	The musdb DB Object

主要參量介紹:

root(str路徑 ,可選)– musdb根路徑。如果設置爲None,它將從MUSDB_PATH環境變量中讀取
is_wav(boolean ,optional)–期望每個源都有wav文件的子文件夾,而不是軌道,默認爲False
download(布爾值,可選)–下載MUSDB18的樣本版本,其中包括7s摘錄,默認爲False
subsets –選擇_musdb_子集訓練或測試。默認無加載

class musdb.audio_classes.MultiTrack(path=None, name=None, artist=None, title=None, sources=None, targets=None, *args, **kwargs)

音頻類MultiTrack是一種數組格式的類型,數據格式爲:[shape=(stems, num_samples, num_channels)]

class musdb.audio_classes.Source(multitrack, name=None, path=None, stem_id=None, gain=1.0, *args, **kwargs)

Source類是一種音頻目標,它是幾個源的線性混合
參數介紹:
name: 音頻源的名稱(字符串)
stem_id: 這裏設置了stem/substream ID(整型)
is_wav: 是否以wav讀取音頻流(布爾)
path: 音頻絕對路徑(字符串)
gain: 源的混合大小(浮點)

class musdb.audio_classes.Target(multitrack, sources, name=None)

Target類同樣是一種音頻目標,它是幾個源的線性混合
參數介紹:
multitrack: 軌道
sources: 這個目標的音源列表

class musdb.audio_classes.Track(path='None', is_wav=False, stem_id=None, subset=None, chunk_start=0, chunk_duration=None)

通用的音軌,可以是wav或stem文件
參數介紹:
name: 軌道名稱(字符串)
path: 混合音軌的絕對路徑(字符串)
stem_id: stem/substream ID(整型)
is_wav: 是否讀取wav格式(布爾)
subset: 音軌所在的子集
chunk_start: 設置加載音頻時的偏移量,默認爲0開始(浮點)
chunk_duration: 設置音頻的持續時間,默認爲None (浮點)

musdb.tools.musdb_convert(inargs=None)

musdb_convert應用於轉換音頻文件到音頻的光譜圖像

用法舉例

這個軟件包依賴 numpy,tensorflow或pytorch

設置musdb

導入musdb包,並在musdb軌道上進行迭代:

import musdb
mus = musdb.DB(download=True)
mus[0].audio

設置數據集root目錄,例如:

mus  =  musdb.DB (root = "/path/to/musdb"

遍歷MUSDB18曲目

遍歷musdb並訪問音頻數據非常簡單。假設我們有一種監督訓練方法train(x, y),該方法將混軌道爲輸入,將人聲作爲輸出,可以使用:

for track in mus:
    train(track.audio, track.targets['vocals'].audio)

跟蹤屬性

這些Track對象可以輕鬆地以pythonic方式處理音頻和元數據:

Track.name,曲目名稱,由Track.artist和Track.title組成。
Track.path,這是混合軌道的絕對路徑,可能易於使用外部應用程序進行處理。
Track.audio,立體混合軌道形狀的numpy數組。
Track.rate,混合軌道的採樣率。
Track.sources,該曲目使用的來源。
Track.stems是所有五個立體形狀源的numpy張量,按以下順序軌道:[‘mixture’, ‘drums’, ‘bass’, ‘other’, ‘vocals’],
Track.targets,爲此軌道提供的目標,對於MUSDB,來源和目標的區別僅在於存在accompaniment,這是所有來源(人聲除外)的總和。MUSDB支持以下目標:[‘mixture’, ‘drums’, ‘bass’, ‘other’, ‘vocals’, ‘accompaniment’, ‘linear_mixture’],某些目標(例如伴奏)是動態混合的。

分離訓練集和測試集

我們爲機器學習方法的訓練和測試提供子集:

mus_train = musdb.DB(subsets="train")
mus_test = musdb.DB(subsets="test")
mus_train = musdb.DB(subsets="train", split='train')
mus_valid = musdb.DB(subsets="train", split='valid')

使用深度學習網絡訓練musdb

使用musdb的磁道可以很容易地實現一個非常簡單的樸素生成器,它用替換繪製隨機磁道,用替換繪製固定長度的隨機塊。chunk_start和跟蹤。chunk_duration屬性,它有效地查找開始樣本(以秒爲單位提供),並且不首先將完整的音頻加載到內存中。

while True:
    track = random.choice(mus.tracks)
    track.chunk_duration = 5.0
    track.chunk_start = random.uniform(0, track.duration - track.chunk_duration)
    x = track.audio.T
    y = track.targets['vocals'].audio.T
    yield x, y

評估 Evaluation

要使用流行的BSSEval度量來評估一個musdb音軌,可以使用museval包。
在pip安裝後,museval對單軌進行評估,可以通過

import museval
# provide an estimate
estimates = {
    'vocals': np.random.random(track.audio.shape),
    'accompaniment': np.random.random(track.audio.shape)
}
# evaluates using BSSEval v4, and writes results to `./eval`
print(museval.eval_mus_track(track, estimates, output_dir="./eval")

參考鏈接

[1]https://github.com/sigsep/sigsep-mus-db
[2]https://pypi.org/project/musdb/
[3]https://sigsep.github.io/sigsep-mus-db/
[4]https://zenodo.org/record/3338373#.XoFGIYgzaUk

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章