1013 update
This commit is contained in:
@ -530,6 +530,62 @@ class Melody(SymbolicMusicDataset):
|
||||
test_names.extend(song_dict[song_name])
|
||||
return train_names, valid_names, test_names, shuffled_tune_names
|
||||
|
||||
class msmidi(SymbolicMusicDataset):
|
||||
def __init__(self, vocab, encoding_scheme, num_features, debug, aug_type, input_length, first_pred_feature, caption_path=None,
|
||||
for_evaluation: bool = False):
|
||||
super().__init__(vocab, encoding_scheme, num_features, debug, aug_type, input_length, first_pred_feature, caption_path,
|
||||
for_evaluation=for_evaluation)
|
||||
|
||||
def _load_tune_in_idx(self) -> Tuple[Dict[str, np.ndarray], Dict[str, int], List[str]]:
|
||||
'''
|
||||
Irregular tunes are removed from the dataset for better generation quality
|
||||
It includes tunes that are not quantized properly, mostly theay are expressive performance data
|
||||
'''
|
||||
print("preprocessed tune_in_idx data is being loaded")
|
||||
tune_in_idx_list = sorted(list(Path(f"dataset/represented_data/tuneidx/tuneidx_{self.__class__.__name__}/{self.encoding_scheme}{self.num_features}").rglob("*.npz")))
|
||||
if self.debug:
|
||||
tune_in_idx_list = tune_in_idx_list[:5000]
|
||||
tune_in_idx_dict = OrderedDict()
|
||||
len_tunes = OrderedDict()
|
||||
file_name_list = []
|
||||
with open("metadata/LakhClean_irregular_tunes.json", "r") as f:
|
||||
irregular_tunes = json.load(f)
|
||||
for tune_in_idx_file in tqdm(tune_in_idx_list, total=len(tune_in_idx_list)):
|
||||
if tune_in_idx_file.stem in irregular_tunes:
|
||||
continue
|
||||
tune_in_idx = np.load(tune_in_idx_file)['arr_0']
|
||||
tune_in_idx_dict[tune_in_idx_file.stem] = tune_in_idx
|
||||
len_tunes[tune_in_idx_file.stem] = len(tune_in_idx)
|
||||
file_name_list.append(tune_in_idx_file.stem)
|
||||
print(f"number of loaded tunes: {len(tune_in_idx_dict)}")
|
||||
return tune_in_idx_dict, len_tunes, file_name_list
|
||||
|
||||
def _get_split_list_from_tune_in_idx(self, ratio, seed):
|
||||
'''
|
||||
As Lakh dataset contains multiple versions of the same song, we split the dataset based on the song name
|
||||
'''
|
||||
shuffled_tune_names = list(self.tune_in_idx.keys())
|
||||
song_names_without_version = [re.sub(r"\.\d+$", "", song) for song in shuffled_tune_names]
|
||||
song_dict = {}
|
||||
for song, orig_song in zip(song_names_without_version, shuffled_tune_names):
|
||||
if song not in song_dict:
|
||||
song_dict[song] = []
|
||||
song_dict[song].append(orig_song)
|
||||
unique_song_names = list(song_dict.keys())
|
||||
random.seed(seed)
|
||||
random.shuffle(unique_song_names)
|
||||
num_train = int(len(unique_song_names)*ratio)
|
||||
num_valid = int(len(unique_song_names)*(1-ratio)/2)
|
||||
train_names = []
|
||||
valid_names = []
|
||||
test_names = []
|
||||
for song_name in unique_song_names[:num_train]:
|
||||
train_names.extend(song_dict[song_name])
|
||||
for song_name in unique_song_names[num_train:num_train+num_valid]:
|
||||
valid_names.extend(song_dict[song_name])
|
||||
for song_name in unique_song_names[num_train+num_valid:]:
|
||||
test_names.extend(song_dict[song_name])
|
||||
return train_names, valid_names, test_names, shuffled_tune_names
|
||||
|
||||
class IrishMan(SymbolicMusicDataset):
|
||||
def __init__(self, vocab, encoding_scheme, num_features, debug, aug_type, input_length, first_pred_feature, caption_path=None,
|
||||
@ -648,62 +704,62 @@ class ariamidi(SymbolicMusicDataset):
|
||||
test_names.extend(song_dict[song_name])
|
||||
return train_names, valid_names, test_names, shuffled_tune_names
|
||||
|
||||
class gigamidi(SymbolicMusicDataset):
|
||||
def __init__(self, vocab, encoding_scheme, num_features, debug, aug_type, input_length, first_pred_feature, caption_path=None,
|
||||
for_evaluation: bool = False):
|
||||
super().__init__(vocab, encoding_scheme, num_features, debug, aug_type, input_length, first_pred_feature, caption_path,
|
||||
for_evaluation=for_evaluation)
|
||||
# class gigamidi(SymbolicMusicDataset):
|
||||
# def __init__(self, vocab, encoding_scheme, num_features, debug, aug_type, input_length, first_pred_feature, caption_path=None,
|
||||
# for_evaluation: bool = False):
|
||||
# super().__init__(vocab, encoding_scheme, num_features, debug, aug_type, input_length, first_pred_feature, caption_path,
|
||||
# for_evaluation=for_evaluation)
|
||||
|
||||
def _load_tune_in_idx(self) -> Tuple[Dict[str, np.ndarray], Dict[str, int], List[str]]:
|
||||
'''
|
||||
Irregular tunes are removed from the dataset for better generation quality
|
||||
It includes tunes that are not quantized properly, mostly theay are expressive performance data
|
||||
'''
|
||||
print("preprocessed tune_in_idx data is being loaded")
|
||||
tune_in_idx_list = sorted(list(Path(f"dataset/represented_data/tuneidx/tuneidx_{self.__class__.__name__}/{self.encoding_scheme}{self.num_features}").rglob("*.npz")))
|
||||
if self.debug:
|
||||
tune_in_idx_list = tune_in_idx_list[:5000]
|
||||
tune_in_idx_dict = OrderedDict()
|
||||
len_tunes = OrderedDict()
|
||||
file_name_list = []
|
||||
with open("metadata/LakhClean_irregular_tunes.json", "r") as f:
|
||||
irregular_tunes = json.load(f)
|
||||
for tune_in_idx_file in tqdm(tune_in_idx_list, total=len(tune_in_idx_list)):
|
||||
if tune_in_idx_file.stem in irregular_tunes:
|
||||
continue
|
||||
tune_in_idx = np.load(tune_in_idx_file)['arr_0']
|
||||
tune_in_idx_dict[tune_in_idx_file.stem] = tune_in_idx
|
||||
len_tunes[tune_in_idx_file.stem] = len(tune_in_idx)
|
||||
file_name_list.append(tune_in_idx_file.stem)
|
||||
print(f"number of loaded tunes: {len(tune_in_idx_dict)}")
|
||||
return tune_in_idx_dict, len_tunes, file_name_list
|
||||
# def _load_tune_in_idx(self) -> Tuple[Dict[str, np.ndarray], Dict[str, int], List[str]]:
|
||||
# '''
|
||||
# Irregular tunes are removed from the dataset for better generation quality
|
||||
# It includes tunes that are not quantized properly, mostly theay are expressive performance data
|
||||
# '''
|
||||
# print("preprocessed tune_in_idx data is being loaded")
|
||||
# tune_in_idx_list = sorted(list(Path(f"dataset/represented_data/tuneidx/tuneidx_{self.__class__.__name__}/{self.encoding_scheme}{self.num_features}").rglob("*.npz")))
|
||||
# if self.debug:
|
||||
# tune_in_idx_list = tune_in_idx_list[:5000]
|
||||
# tune_in_idx_dict = OrderedDict()
|
||||
# len_tunes = OrderedDict()
|
||||
# file_name_list = []
|
||||
# with open("metadata/LakhClean_irregular_tunes.json", "r") as f:
|
||||
# irregular_tunes = json.load(f)
|
||||
# for tune_in_idx_file in tqdm(tune_in_idx_list, total=len(tune_in_idx_list)):
|
||||
# if tune_in_idx_file.stem in irregular_tunes:
|
||||
# continue
|
||||
# tune_in_idx = np.load(tune_in_idx_file)['arr_0']
|
||||
# tune_in_idx_dict[tune_in_idx_file.stem] = tune_in_idx
|
||||
# len_tunes[tune_in_idx_file.stem] = len(tune_in_idx)
|
||||
# file_name_list.append(tune_in_idx_file.stem)
|
||||
# print(f"number of loaded tunes: {len(tune_in_idx_dict)}")
|
||||
# return tune_in_idx_dict, len_tunes, file_name_list
|
||||
|
||||
def _get_split_list_from_tune_in_idx(self, ratio, seed):
|
||||
'''
|
||||
As Lakh dataset contains multiple versions of the same song, we split the dataset based on the song name
|
||||
'''
|
||||
shuffled_tune_names = list(self.tune_in_idx.keys())
|
||||
song_names_without_version = [re.sub(r"\.\d+$", "", song) for song in shuffled_tune_names]
|
||||
song_dict = {}
|
||||
for song, orig_song in zip(song_names_without_version, shuffled_tune_names):
|
||||
if song not in song_dict:
|
||||
song_dict[song] = []
|
||||
song_dict[song].append(orig_song)
|
||||
unique_song_names = list(song_dict.keys())
|
||||
random.seed(seed)
|
||||
random.shuffle(unique_song_names)
|
||||
num_train = int(len(unique_song_names)*ratio)
|
||||
num_valid = int(len(unique_song_names)*(1-ratio)/2)
|
||||
train_names = []
|
||||
valid_names = []
|
||||
test_names = []
|
||||
for song_name in unique_song_names[:num_train]:
|
||||
train_names.extend(song_dict[song_name])
|
||||
for song_name in unique_song_names[num_train:num_train+num_valid]:
|
||||
valid_names.extend(song_dict[song_name])
|
||||
for song_name in unique_song_names[num_train+num_valid:]:
|
||||
test_names.extend(song_dict[song_name])
|
||||
return train_names, valid_names, test_names, shuffled_tune_names
|
||||
# def _get_split_list_from_tune_in_idx(self, ratio, seed):
|
||||
# '''
|
||||
# As Lakh dataset contains multiple versions of the same song, we split the dataset based on the song name
|
||||
# '''
|
||||
# shuffled_tune_names = list(self.tune_in_idx.keys())
|
||||
# song_names_without_version = [re.sub(r"\.\d+$", "", song) for song in shuffled_tune_names]
|
||||
# song_dict = {}
|
||||
# for song, orig_song in zip(song_names_without_version, shuffled_tune_names):
|
||||
# if song not in song_dict:
|
||||
# song_dict[song] = []
|
||||
# song_dict[song].append(orig_song)
|
||||
# unique_song_names = list(song_dict.keys())
|
||||
# random.seed(seed)
|
||||
# random.shuffle(unique_song_names)
|
||||
# num_train = int(len(unique_song_names)*ratio)
|
||||
# num_valid = int(len(unique_song_names)*(1-ratio)/2)
|
||||
# train_names = []
|
||||
# valid_names = []
|
||||
# test_names = []
|
||||
# for song_name in unique_song_names[:num_train]:
|
||||
# train_names.extend(song_dict[song_name])
|
||||
# for song_name in unique_song_names[num_train:num_train+num_valid]:
|
||||
# valid_names.extend(song_dict[song_name])
|
||||
# for song_name in unique_song_names[num_train+num_valid:]:
|
||||
# test_names.extend(song_dict[song_name])
|
||||
# return train_names, valid_names, test_names, shuffled_tune_names
|
||||
|
||||
class ariamidi(SymbolicMusicDataset):
|
||||
def __init__(self, vocab, encoding_scheme, num_features, debug, aug_type, input_length, first_pred_feature, caption_path=None,
|
||||
@ -788,6 +844,9 @@ class gigamidi(SymbolicMusicDataset):
|
||||
for tune_in_idx_file in tqdm(tune_in_idx_list, total=len(tune_in_idx_list)):
|
||||
if tune_in_idx_file.stem in irregular_tunes:
|
||||
continue
|
||||
if "drums-only" in tune_in_idx_file.stem:
|
||||
print(f"skipping {tune_in_idx_file.stem} as it is a drums-only file")
|
||||
continue
|
||||
tune_in_idx = np.load(tune_in_idx_file)['arr_0']
|
||||
tune_in_idx_dict[tune_in_idx_file.stem] = tune_in_idx
|
||||
len_tunes[tune_in_idx_file.stem] = len(tune_in_idx)
|
||||
|
||||
Reference in New Issue
Block a user