bytedance/piano_transcription

Python is not installed as a framework? what does this mean?

Opened this issue · 94 comments

I got the following error when I tried to use the package. Can you help resolve it? Thanks!

Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

from piano_transcription_inference import PianoTranscription, sample_rate, load_audio
Traceback (most recent call last):
File "", line 1, in
File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/piano_transcription_inference/init.py", line 1, in
from .inference import PianoTranscription
File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/piano_transcription_inference/inference.py", line 11, in
from .models import Regress_onset_offset_frame_velocity_CRNN, Note_pedal
File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/piano_transcription_inference/models.py", line 6, in
import matplotlib.pyplot as plt
File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/matplotlib/pyplot.py", line 2372, in
switch_backend(rcParams["backend"])
File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/matplotlib/pyplot.py", line 207, in switch_backend
backend_mod = importlib.import_module(backend_name)
File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/matplotlib/backends/backend_macosx.py", line 14, in
from matplotlib.backends import _macosx
ImportError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.

只能精确到5秒嘛?如果做音频的实时转录,5秒时间有点太长了,以2秒为切割效果不好,请问需要改哪些地方呢

这个repo是离线系统,如果实时的话把RNN的bidirectional去掉就可以实时了

这个repo是离线系统,如果实时的话把RNN的bidirectional去掉就可以实时了

作者大佬您好,再打扰一下,目前在读研一。看到您的论文,又有代码十分的友好,因此想学习一下。冒昧打扰,希望您可以为我解答,十分感谢;
1)我所问的实时是指一段音频作为输入,刚演奏出一个音符,能立即识别出该音符是什么音高,请问这个可以实现吗?
2)去掉RNN的双向部分可以实现实时是什么原理,我不太明白,希望可以得到您简短的解答。

作者您好,再次打扰,十分抱歉:
我按照您的文档,目前正在训练你的模型,由于迟迟没有进入迭代,因此有些疑惑;
1.请问一开始耗费时间过长都是在处理数据是嘛?时间长达10小时。终端显示部分内容如下:

>  _root        : INFO     Namespace(augmentation='none', batch_size=12, cuda=True, early_stop=300000, filename='main', learning_rate=0.0005, loss_type='regress_pedal_bce', max_note_shift=0, mini_data=False, mode='train', model_type='Regress_pedal_CRNN', reduce_iteration=10000, resume_iteration=0, workspace='./workspaces/piano_transcription')
> root        : INFO     Using GPU.
> root        : INFO     train segments: 571589
> root        : INFO     Evaluate train segments: 571589
> root        : INFO     Evaluate validation segments: 68646
> root        : INFO     Evaluate test segments: 71959_
      2.在数据处理的过程中报错如下,我用的仍然是您的数据。如果有空的话,希望作者可以花个两分钟帮我看一下,十分感谢:

>   _```
> File "/home/mnc03/anaconda3/lib/python3.7/site-packages/torch/nn/modules/conv.py", line 202, in forward
>     self.padding, self.dilation, self.groups)
> RuntimeError: cuDNN error: CUDNN_STATUS_MAPPING_ERROR
> 
> /home/mnc03/anaconda3/lib/python3.7/site-packages/sklearn/feature_extraction/text.py:17: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>   from collections import Mapping, defaultdict
> concurrent.futures.process._RemoteTraceback:
> """
> Traceback (most recent call last):
>   File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/process.py", line 239, in _process_worker
>     r = call_item.fn(*call_item.args, **call_item.kwargs)
>   File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/process.py", line 198, in _process_chunk
>     return [fn(*args) for args in chunk]
>   File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/process.py", line 198, in <listcomp>
>     return [fn(*args) for args in chunk]
>   File "pytorch/calculate_score_for_paper.py", line 203, in calculate_score_per_song
>     total_dict = pickle.load(open(prob_path, 'rb'))
> FileNotFoundError: [Errno 2] No such file or directory: './workspaces/piano_transcription/probs/model_type=Note_pedal/augmentation=aug/dataset=maestro/split=test/MIDI-Unprocessed_11_R3_2008_01-04_ORIG_MID--AUDIO_11_R3_2008_wav--1.pkl'
> """
> 
> The above exception was the direct cause of the following exception:
> 
> Traceback (most recent call last):
>   File "pytorch/calculate_score_for_paper.py", line 385, in <module>
>     calculate_metrics(args)
>   File "pytorch/calculate_score_for_paper.py", line 350, in calculate_metrics
>     stats_dict = score_calculator.metrics(thresholds)
>   File "pytorch/calculate_score_for_paper.py", line 182, in metrics
>     stats_list = list(results)
>   File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/process.py", line 483, in _chain_from_iterable_of_lists
>     for element in iterable:
>   File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 598, in result_iterator
>     yield fs.pop().result()
>   File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 428, in result
>     return self.__get_result()
>   File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
>     raise self._exception
> FileNotFoundError: [Errno 2] No such file or directory: './workspaces/piano_transcription/probs/model_type=Note_pedal/augmentation=aug/dataset=maestro/split=test/MIDI-Unprocessed_11_R3_2008_01-04_ORIG_MID--AUDIO_11_R3_2008_wav--1.pkl'
> /home/mnc03/anaconda3/lib/python3.7/site-packages/sklearn/feature_extraction/text.py:17: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>   from collections import Mapping, defaultdict
> Traceback (most recent call last):
>   File "pytorch/calculate_score_for_paper.py", line 385, in <module>
>     calculate_metrics(args)
>   File "pytorch/calculate_score_for_paper.py", line 350, in calculate_metrics
>     stats_dict = score_calculator.metrics(thresholds)
>   File "pytorch/calculate_score_for_paper.py", line 184, in metrics
>     for key in stats_list[0].keys():
> IndexError: list index out of range
> ```_

十分感谢您的建议:
按照您的方法注释,仍然是同样的问题。我怕数据被我弄坏了。又把数据重新下载了一遍。现仍然有如下报错:
1:File "pytorch/main.py", line 297, in
train(args)
File "pytorch/main.py", line 253, in train
batch_output_dict = model(batch_data_dict['waveform'])
File "/home/mnc03/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 541, in call
.....
RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
这个问题官方说是,没有在模型中添加GPU,于是我在main中加入model = model(gpu).问题依旧
2**RuntimeError: Caught RuntimeError in replica 0 on device 0.**
百度后添加 import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,2,3"。仍然出错。
3.(同上一个问题)The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "pytorch/calculate_score_for_paper.py", line 385, in
calculate_metrics(args)
File "pytorch/calculate_score_for_paper.py", line 350, in calculate_metrics
stats_dict = score_calculator.metrics(thresholds)
File "pytorch/calculate_score_for_paper.py", line 182, in metrics
stats_list = list(results)
File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/process.py", line 483, in _chain_from_iterable_of_lists
for element in iterable:
File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 598, in result_iterator
yield fs.pop().result()
File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 428, in result
return self.__get_result()
File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
FileNotFoundError: [Errno 2] No such file or directory: './workspaces/piano_transcription/probs/model_type=Note_pedal/augmentation=aug/dataset=maestro/split=test/MIDI-Unprocessed_11_R3_2008_01-04_ORIG_MID--AUDIO_11_R3_2008_wav--1.pkl'
/home/mnc03/anaconda3/lib/python3.7/site-packages/sklearn/feature_extraction/text.py:17: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
from collections import Mapping, defaultdict
Traceback (most recent call last):
File "pytorch/calculate_score_for_paper.py", line 385, in
calculate_metrics(args)
File "pytorch/calculate_score_for_paper.py", line 350, in calculate_metrics
stats_dict = score_calculator.metrics(thresholds)
File "pytorch/calculate_score_for_paper.py", line 184, in metrics
for key in stats_list[0].keys():
IndexError: list index out of range
解决无果。一直没办法自己训练这个模型。请作者花几分钟指教。十分感谢

Hi, did you do pip install piano_transcription_inference?

On Tue, 1 Dec 2020 at 02:37, achillis2 @.***> wrote: I got the following error when I tried to use the package. Can you help resolve it? Thanks! Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. from piano_transcription_inference import PianoTranscription, sample_rate, load_audio Traceback (most recent call last): File "", line 1, in File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/piano_transcription_inference/ init.py", line 1, in from .inference import PianoTranscription File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/piano_transcription_inference/inference.py", line 11, in from .models import Regress_onset_offset_frame_velocity_CRNN, Note_pedal File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/piano_transcription_inference/models.py", line 6, in import matplotlib.pyplot as plt File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/matplotlib/pyplot.py", line 2372, in switch_backend(rcParams["backend"]) File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/matplotlib/pyplot.py", line 207, in switch_backend backend_mod = importlib.import_module(backend_name) File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/importlib/ init.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/Users/dli/projects/personal/piano_transcription/lib/python3.6/site-packages/matplotlib/backends/backend_macosx.py", line 14, in from matplotlib.backends import _macosx ImportError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information. — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub <#1>, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADFXTSK74COSOS3JR6B7OR3SSPRAJANCNFSM4UH6LPDA .

是按照你这上面的解释做的

作者您好:
感谢您的回复。您可能回复了上面这位同学的提问。我的问题如下(2个cudnn和GPU报错,一个数据越线错误。提示前面的两个问题是因为最后一个问题导致。尝试解决无果才再次打扰您,不胜感激):
1:File "pytorch/main.py", line 297, in
train(args)
File "pytorch/main.py", line 253, in train
batch_output_dict = model(batch_data_dict['waveform'])
File "/home/mnc03/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 541, in call
.....
RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
这个问题官方说是,没有在模型中添加GPU,于是我在main中加入model = model(gpu).问题依旧
2RuntimeError: Caught RuntimeError in replica 0 on device 0.
百度后添加 import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,2,3"。仍然出错。
3.(同上一个问题)The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "pytorch/calculate_score_for_paper.py", line 385, in
calculate_metrics(args)
File "pytorch/calculate_score_for_paper.py", line 350, in calculate_metrics
stats_dict = score_calculator.metrics(thresholds)
File "pytorch/calculate_score_for_paper.py", line 182, in metrics
stats_list = list(results)
File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/process.py", line 483, in _chain_from_iterable_of_lists
for element in iterable:
File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 598, in result_iterator
yield fs.pop().result()
File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 428, in result
return self.__get_result()
File "/home/mnc03/anaconda3/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
FileNotFoundError: [Errno 2] No such file or directory: './workspaces/piano_transcription/probs/model_type=Note_pedal/augmentation=aug/dataset=maestro/split=test/MIDI-Unprocessed_11_R3_2008_01-04_ORIG_MID--AUDIO_11_R3_2008_wav--1.pkl'
/home/mnc03/anaconda3/lib/python3.7/site-packages/sklearn/feature_extraction/text.py:17: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
from collections import Mapping, defaultdict
Traceback (most recent call last):
File "pytorch/calculate_score_for_paper.py", line 385, in
calculate_metrics(args)
File "pytorch/calculate_score_for_paper.py", line 350, in calculate_metrics
stats_dict = score_calculator.metrics(thresholds)
File "pytorch/calculate_score_for_paper.py", line 184, in metrics
for key in stats_list[0].keys():
IndexError: list index out of range
解决无果。一直没办法自己训练这个模型。请作者花几分钟指教。十分感谢

作者您好:
十分感谢您的悉心指导。通过重装实验室服务器的cuda和pytorch,已经把训练问题解决了,目前应该是在训练(占用了GPU,ubuntu终端输出:48075 tensor(0.21980,....)。
目前遇到的问题是训练模型pth比较大,而且不能做到实时识别单个音符后立即输出该音符。所以我有以下想法:
1.能否将其中一部分网络结构删除。比如双向的GRU都改成单向,或者减少隐层数等减少模型参数的方法。
2.您尝试过一些模型裁剪的方法以减少模型参数嘛?预测准确率可以达到90%以上吗?
3.能否实现逐个音符的跟踪,识别一个音符后,当即输出该音符。
祝您事业顺利,身体健康!
GuoHM230

作者您好:
非常感谢您再次百忙之中抽出时间帮我答疑解惑,深感惶恐和荣幸。根据最新进度,仍然有些问题想打扰您宝贵的时间帮我答疑解惑。
1.昨天正在尝试做模型训练,由于输出形式和您给出的样板不一样,而且checkpoint文件夹中没有保存每次iteration的pth,不知道我的训练是否是对的,而且我没办法知道到底进行到哪一次了。输出结果如:48075 tensor(0.21980,....)
2.请问作者在代码中(pytorch\main.py)中是否没有加入您已经训练好得模型参数?(CRNN_note_F1=0.9677_pedal_F1=0.9186.pth)我在代码中没有看到。我如果更改了模型结构(比如双向改单向,减少隐层数)还能加载您的模型进行finetune嘛?如果加入的话,是否代码写法如下:
Model = eval(model_type)
model = Model(frames_per_second=frames_per_second, classes_num=classes_num)
load_model = torch.load('./CRNN_note_F1=0.9677_pedal_F1=0.9186.pth')
model.load_state_dict(load_model)
即可
3.您代码中的建立模型部分是我不太理解的: Model = eval(model_type)
model = Model(frames_per_second=frames_per_second, classes_num=classes_num)
该语句好像并没有调用,pytorch中的models.py中的内容,那是怎么做到的呢?我百度无果,所以请教。
4.您昨天所说的,把所有参数数目减少,比如feature maps,准确率达到90%以上,您是否有尝试.我对于参数数目减少的具体操作不太明白,怎么减少?减少多少?依据是什么呢?
5.之前我在训练时,将MP3文件处理成输入的hdf5文件时是24.9G,也包含了所有数据的MP3文件。而昨天多次训练发现处理后的数据变成了4.1G,比如2004原本有MP3文件132项,之前是132项全部转化成hdf5,而昨天之后只有其中的11项转成了。是否是在训练过程中会把数据删除还是合并?或者只保存训练数据,其中测试数据和评价数据不再保存?
连续叨扰,而且问题繁琐给作者造成诸多不便,希望您可以理解。您的项目实在很有价值,我作为初学者,想把整个项目完整的彻底的捋一遍,每个问题都是自己思考后,百度后方敢请教于您。十分期待您的回复。谢谢
祝事业顺利
GUOhm230

作者您好:
昨晚收到您的回复,感谢您深夜给我这么有质量的回答,基本解决了我的疑问。再次感谢您!目前,仍有如下小问题,尝试解决无果,故再次请教,再次打扰,十分抱歉:

  1. 关于最后一条(数据特征提取出错),发现报错如下:
    { File "utils/features.py", line 160, in
    pack_maestro_dataset_to_hdf5(args)
    File "utils/features.py", line 56, in pack_maestro_dataset_to_hdf5
    (audio, _) = librosa.core.load(audio_path, sr=sample_rate, mono=True)
    File "/mnt/softwares/anaconda3/lib/python3.7/site-packages/librosa/core/audio.py", line 126, in load
    for frame in input_file:
    File "/mnt/softwares/anaconda3/lib/python3.7/site-packages/audioread/rawread.py", line 136, in read_data
    data = audioop.lin2lin(data, old_width, TARGET_WIDTH)
    audioop.error: not a whole number of frames }

但是奇怪的是,每次都是从头开始,执行到第224个就停止,后面的开始报以上错误。但是我从第225个开始执行,则后面可以执行,但是到某个位置又会出相同的错误。

为此我把数据重新下载,导入斤对应的文件夹。所有的包按照您文本上的要求安装后,问题依旧。
代码不曾改动,数据也不改动。不知道是不是哪个环境出了问题。还请作者赐教.
2:.最终模型的意思就是,这个模型只能重新开始训练。所有的参数初始值不能以您给出的pth文件内的参数作为初始I值,而只能随机开始或从0开始训练?
3.300k次迭代,没有epoch嘛?20k次存储一次,意思是一共15轮(epoch)还是仅有一轮,因为在论文,和代码中都没有看到类似的代码数据,因此求教!一个模型300K次迭代,一共有3次这样的过程,一共就是900k次,耗费9天左右。是这个时间估算嘛?
以上问题,有些繁琐。连续打扰一周,请您海涵。不胜感激
祝身体健康
GuoHM230

作者您好:
周末打扰,十分抱歉,祝您周末愉快!
上次的问题已经排除,问题出在音频文件的问题,编号224和533的文件从csv中剔除后,可以正常训练。目前只能达到训练您给出的模型的地步。自己修改总是出现数据不匹配的问题。应该是修改的参数没有达到统一的原因。因此有如下问题请教于您:
1.我同时将models.py中所有GRU中的bidirection==True改成False。将所有的outchannals缩小为之前的2倍,全链接层从512变成256,Gru的隐藏层同时缩小为原来的一半。请问这样的操作会影响输出维度嘛?。因为我并没有改变输入大小,卷积核大小和填充值这些内容。但是以上的修改多次尝试均会报错,请您赐教!
2.您在自己构建模型的时候,是否尝试过将模型(pth)缩减至80M左右,且能保证准确率,或者F1值为90%以上呢。
再次打扰,深表歉意
祝您万事如意
GuoHM230

作者您好:
新的一周,祝您生活工作愉快。再次打扰,十分抱歉。因为修改models.py文件中的in_channals和out_channals以及biGRU改成单向后报错如下:
size mismatch for frame_model.gru.weight_ih_l1: copying a param with shape torch.Size([768, 512]) from checkpoint, the shape in current model is torch.Size([768, 256]) size mismatch for velocity_model.conv_block4.bn2.running_var: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([64]). size mismatch for velocity_model.gru.weight_ih_l1: copying a param with shape torch.Size([768, 512]) from checkpoint, the shape in current model is torch.Size([768, 256]). size mismatch for reg_offset_model.conv_block3.conv2.weight: copying a param with shape torch.Size([96, 96, 3, 3]) from checkpoint, the shape in current model is torch.Size([48, 48, 3, 3]). size mismatch for reg_offset_model.conv_block4.conv1.weight: copying a param with shape torch.Size([128, 96, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 48, 3, 3]). size mismatch for frame_model.conv_block2.conv1.weight: copying a param with shape torch.Size([64, 48, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 24, 3, 3]). size mismatch for frame_model.conv_block2.conv2.weight: copying a param with shape torch.Size([64, 64, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 32, 3, 3]). size mismatch for frame_model.conv_block2.bn1.weight: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([32]). size mismatch for frame_model.conv_block2.bn1.bias: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([32]). ,
问题应该是models中的参数虽然修改,但是因为加载了之前的pth模型数据。这里面的参数size还没用修改,所以不匹配报错。
因此应该有以下解决方式:
1.修改pth中的参数size和修改统一
2.不加在pth,设置初始化后开始训练
但是我百度询问多次还是修改不了。所以请教作者。您的pth中的文件是字典型,但是里面每层的参数是怎么取出来并修改的?请您指教。不胜感激
祝好
GuoHM230

作者您好:
上一个因为网络结构修改导致模型参数不匹配的问题已经按照上面提出得到1设想解决。不知道您看了上个提问嘛(2020.12.28上午的提问)?但是现在又有新的错误如下:
Traceback (most recent call last): File "pytorch/inference.py", line 263, in <module> inference(args) File "pytorch/inference.py", line 226, in inference transcribed_dict = transcriptor.transcribe(audio, midi_path) File "pytorch/inference.py", line 92, in transcribe output_dict = forward(self.model, segments, batch_size=1) File "/mnt/omr/GUO/midiTranscriptionTrain/pytorch/pytorch_utils.py", line 107, in forward batch_output_dict = model(batch_waveform) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 161, in forward outputs = self.parallel_apply(replicas, inputs, kwargs) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 171, in parallel_apply return parallel_apply(replicas, inputs, kwargs, self.device_ids[:len(replicas)]) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/parallel/parallel_apply.py", line 86, in parallel_apply output.reraise() File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/_utils.py", line 428, in reraise raise self.exc_type(msg) RuntimeError: Caught RuntimeError in replica 0 on device 0. Original Traceback (most recent call last): File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/parallel/parallel_apply.py", line 61, in _worker output = module(*input, **kwargs) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) File "/mnt/omr/GUO/midiTranscriptionTrain/pytorch/models.py", line 351, in forward note_output_dict = self.note_model(input) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) File "/mnt/omr/GUO/midiTranscriptionTrain/pytorch/models.py", line 233, in forward frame_output = self.frame_model(x) # (batch_size, time_steps, classes_num) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) File "/mnt/omr/GUO/midiTranscriptionTrain/pytorch/models.py", line 153, in forward output = torch.sigmoid(self.fc(x)) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/modules/linear.py", line 93, in forward return F.linear(input, self.weight, self.bias) File "/mnt/softwares/anaconda3/envs/guo/lib/python3.7/site-packages/torch/nn/functional.py", line 1692, in linear output = input.matmul(weight.t()) RuntimeError: mat1 dim 1 must match mat2 dim 0
我认为问题应该是我只是将GRU里面的bidirection参数改成False.因此没有做到输入输出的匹配。但是我实在不知道怎么做到统一了。请您有空指教,十分感谢
祝身体健康,万事如意
GuoHM230

作者您好:
请教问题实在有点频繁,还请谅解。
以上的预训练模型的参数不匹配问题已经解决。我通过以下代码修改了下载模型中的torch.size:

import torch
check_point = "./CRNN_note_F1=0.9677_pedal_F1=0.9186.pth"
# check_point = r'E:\Byte_Dance_project\pthModi.pth'
device = torch.device("cuda" if torch.cuda.is_available() else "cup")
check_point = torch.load(check_point, map_location=device)
import collections
dicts = collections.OrderedDict()
model = check_point['model']
note_model = model['pedal_model']
for k, value in note_model.items():
    if k == 'frame_model.gru.weight_ih_l1':
        print(value)
        print(value[1])
        print(value[0][1])
        value = torch.ones(768, 256)
        # print(value)
        # print(type(value))
    if k == 'reg_onset_model.gru.weight_ih_l1':
        print(value)
        value = torch.ones(768, 256)
        print(value)
        print(type(value))
    if k == 'reg_offset_model.gru.weight_ih_l1':
        print(value)
        print(value[1])
        print(value[0][1])
        value = torch.ones(768, 256)
        # print(value)
        # print(type(value))
    if k == 'velocity_model.gru.weight_ih_l1':
        print(value)
        value = torch.ones(768, 256)
        print(value)
        print(type(value))
    if k == 'reg_pedal_onset_model.gru.weight_ih_l1':
        print(value)
        value = torch.ones(768, 256)
        print(value)
        print(type(value))
    if k == 'reg_pedal_offset_model.gru.weight_ih_l1':
        print(value)
        value = torch.ones(768, 256)
        print(value)
        print(type(value))
    if k == 'reg_pedal_frame_model.gru.weight_ih_l1':
        print(value)
        value = torch.ones(768, 256)
        print(value)
        print(type(value))
    note_model[k] = value
torch.save(check_point, "pthModi2.pth")

故应该可以读取之前的参数去学习,且无需model.load_state_dict(strict=False)这个操作。因为可以做到指定数据的裁剪。
但是现在的报错是:RuntimeError: mat1 dim 1 must match mat2 dim 0
我认为问题应该是我只是将GRU里面的bidirection参数改成False.因此没有做到输入输出的匹配。但是我实在不知道怎么做到统一了。请您有空指教,十分感谢

作者您好:
首先真诚的祝您元旦快乐,新年诸事顺利,身体健康。
我已经完成了RNN网络的修改,并开始训练。但是预计不会降低太多内存,效果未知。所以目前想尝试做通道裁剪降低模型效果,不过方法未知,预后也不清楚。
所以我想请教您,
1.您所认为的内存可以降低到80左右,并保持效果类似或者低几个百分点的依据是什么?您可以给我提供一个这样模型缩减的思路嘛?是直接将GRU减半?将全连接层减半?或者将convBlock的结构缩减?
2.您在这方面是专家大佬,我才刚入门这个领域,所以请问您之前遇到过钢琴多音符转录的更轻量级模型嘛?如果有论文分享就更好了。十分感激
再次祝好
郭辉铭

作者您好:
感谢您的回复!
1.您所说的做其他任务是用当前模型转录成midi文件后的任务吗?还是用其他其他模型进行的任务
2.另外,我将RNN和fc的系数减半后,发现loss下降很慢,目前到7万步,从4万步开始就一直保持0.7的loss值。3万多次迭代都没有什么改变。请问这种情况下是已经不需要训练了嘛?

作者您好:
休假期间打扰,十分抱歉。前两天没来实验室,今天才给您回复消息。
1.第一个模型在0.7的时候跑了几万步不动,后面降下来没有就不太清楚了。第二个模型到第十万步,维持0.3的loss也有3万多步了。至于后面会怎么样,还在看结果。
2.目前学习到一些论文,里面有关于通道裁剪和核裁剪的方法。目前还没尝试。不知道能否管用

作者您好:
再次打扰您,请教一个对您来说简单的问题。
1.请问您所说的将全链接层的减半是指对linear函数减半吧?将循环层减半是指在GRU函数中将hidden layer减半并将双向改成多向对吗?将卷积层减半是指对in_channal和out_channal数据减半对吗?
2.您的代码中怎么才能做到不添加您训练得到的pth模型中的数据,而重新开始训练?请您指教

作者您好:
1.main.py中的230行开始是每20000次迭代保存一次模型,300000次迭代,共保存15次模型。那么一个note,一个pedal在checkpoint文件夹中就保存了30个pth模型。但是在组合两个模型为最终的模型时,我并没有看到怎么把这15个综合起来的代码?所以请问您,在Combine the note and pedal models阶段,怎么只是传入Regress_onset_offset_frame_velocity_CRNN_onset_F1=0.9677.pth和Regress_pedal_CRNN_onset_F1=0.9186.pth?而这两个文件是在哪生成的?
2.我看到在训练过程中,如果传入您给的pth中的参数。大概1万步以后模型就不再变动。因此我在训练的时候,能否降低至10万步?但是在重新训练的过程中仍然训练30万次?

您好:
感谢您百忙之中的回复,祝工作顺利。
1.合并模型我大概知道意思,但是我不明白的是,迭代之后生成很多的pth,而合并是需要note训练的一个和padal训练中的一个。因此我不明白这个pth文件在哪个位置?代码中也没有看到这个pth生成以及储存的地方。
2. 我改变了您提供的pth文件的结构和对应的model结构参数,使得inference同样可以运行成功并转录。但是转录效果很差,或者说不U能转录,请问这种情况是为什么呢?
祝好
郭辉铭

作者您好:
感谢您的回复,目前方向比较明确。相比之前的暴力裁剪,我觉得最近看的一篇模型裁剪的论文可能更有作用。正在尝试,如果能做到模型大幅度的削减并保证精度在一个合理的范围,我会向您汇报。感谢您的支持,理解以及教导。
1.您的GiantMIDI-Piano 数据集内包含大量的经典钢琴曲,请问经过转录后是否经过专业校对呢?
2.请求您可以将GiantMIDI-Piano 数据集数据集发送一份到我的邮件嘛?我尝试试试通过这些文件做一个矢量化的东西。十分感谢!邮箱:iguohm@163.com.(您的该处github上说通过邮件获得您发送的下载资格和链接)
3.另外,由于您是这个领域得到前辈和专家,而我只是刚入门的学生,所以请问您是否知道目前有没有除了深度学习以外的方法可以做到一个音频音符和已知音符之间是否可以匹配。也就是说,没有两个完全一样的音符,理论来说是肯定存在某些特征可以比较完美的区分两个音符。那么您有这方面的资料或者建议嘛?
又是一些超出合理界限的问题,还请您原谅,如果您事业繁忙,只需要获得数据集下载链接亦可。但是学生真诚希望获得更多有用的信息。十分感谢
真诚的祝您身体健康,万事如意
郭辉铭

作者您好:
感谢您的回复,我已经按照您的链接下载了midi文件。在您百忙之中再次打扰,十分抱歉。目前对于您模型的修改,我有以下疑惑:
1.我修改了gru从双向变成单向之后,每个模型训练10万次迭代后进行测试,发现转录之后的MIDI文件能识别出很多音符,准确率自然就很差请问是训练次数太少?还是因为没了双向的约束而导致后来的每一帧都成了音符判定帧了的问题?您在构建模型的时候,有过这些思考嘛?

您好:
祝您的周末阳光灿烂。再次冒昧打扰,敬请原谅
1.目前我实验的从双向变成单向网络的结果很差,20万次的迭代之后,转录效果大打折扣,基本无法实现准确的转录。不知道是什么原因。请问您有什么想法意见可以告知嘛?
2.如果我不实现单双向的转录,而只是把网络层数,卷积通道进行削减,您认为是否可行?
十分期待您的回复,万分感谢
郭辉铭

作者您好:
十分感谢您的回答。
1.目前GRU双向改单向已经实现并且训练完毕,效果欠佳,识别出很多无关音符!
2.您说的这个我还没尝试。下次试试之后有结果再向您请教。
3.请问您的pth模型转换成onnx文件的时候,是怎么设置张量大小的?(torch,randn( )).因为别人的模型里面张量大小比较统一,而您这个里面的张量比较复杂不一所以想知道这种情况下怎么处理?

作者您好:
1.十分感谢您的提醒,我昨晚用原始的模型,未做任何改动进行训练,发现结果和去除单向时的结果是一致的。请问这是为什么?用的您这上面下载的模型,官网下载的数据,未做改动的训练。
祝生活幸福
郭辉铭

作者您好:
感激于您百忙之中再次抽空回复我的问题:
1.work,且转录结果一致:用您这里提供的网络结构(包括结构,参数全部是您这上面设定的值)和官网下载的maestrov2.0的数据进行训练,得到的pth模型进行inference,转录结果和我将双向网络换成单向网络(其他参数不变,改的只是单向和对应的全连接层数)后训练出的pth模型结果一致:均能训练出很多无关音符!
2.请问以上问题是否是因为您上传的网络模型并不是得到这个模型:"https://zenodo.org/record/4034264/files/CRNN_note_F1%3D0.9677_pedal_F1%3D0.9186.pth?download=1"的网络结构和参数?
3.请问您在此做了些什么修改?我可以按照您提供的方法训练出和上面链接一样的pth参数嘛?如果方便的话,您是否可以提供您得到最佳pth时候的网络结构和参数?
4.我无法将您的pth模型转换成onnx。出错原因还是在数据上,您的网络参数最高是五维而torch.onnx.export()目前不支持
以上问题真诚的等待您打的回复,尤其迫切的希望可以训练出和您一样准确的pth文件。十分感激
祝身体健康
郭辉铭

作者您好:
感谢回复。
1.直接使用官网上的.pth文件+pip install piano_transcription之后用您readme上提供的这几行代码进行inference的结果很好,转录效果没有问题:我用其他地方提供的有midi标注的MP3文件进行测试发现准确率达到95%以上的准确率的有66% 90以上的有90+%。
2. 用您当前github上的模型,不做修改得到的.pth文件进行inference时效果很差,所有的音频全部转录成一个音,应该相当于没有转录。但是用该模型(即用您提供的网络结构和参数及官网数据集训练得出)+pip install piano_transcription之后用您readme上提供的这几行代码进行inference的结果同样很好。
3.总结:用官网的.pth模型进行转录后,效果很好;用您提供的网络进行重新训练后+pip install piano_transcription之后效果很好。但是放在当前github上的inference.py上效果很差,转录,但是不能转录出想要的声音;用当前github,models.py中提供的网络和参数,仅修改gru成单向后,转录效同上一个,可以转录,但是转录成的MIDI文件千篇一律,一个声音。
4,以上我正在解决,您如果有建议,十分感谢

作者您好:
十分感谢您一个月以来的孜孜不倦。从您的论文和代码中学到了模型构建和训练的基本流程,以及网络的一些理论知识和工具的使用。也为连续的打扰向您表示最真诚歉意和致敬!
目前仍有一些问题向您请教,希望得到您较为详细的解答,感激不尽。
1.修改GRU网络结构为单向后得到的转录音符中有很多大于88的情况,我对比官网的模型和修剪后的网络的模型的output_dict,发现修剪后模型的值普遍较大,大概是官网的100000倍,这应该是造成转录后形成大量音符原因。不知道您怎么看?
2.请问您构建的网络的输入维度是多少呢?我在打印网络节点和网络输如的时候,好像输入是一个160000长度的一维向量。但是这个向量应该不是输入卷积层的吧?所以请问作者,您在构建网络时,输入到第一层卷积时的数据维度是多少?

作者您好:
新的一周祝您工作顺心,身体健康。
1.看过代码,应该是您在进行后处理时加入begin_note(值为21),另外,不清楚为什么要加初始值21?依据是什么呢?另外,双向改成单向后,对于同一个音频,output_dict = forward(self.model, segments, batch_size=1)的输出结果不一致且差距巨大,因此问题应该还是模型无法识别!请问您对此有什么建议嘛?
2.输入数据是(batchsize, 160000)应该不是输入第一层卷积时候的输入吧》这,对于同一个音频个应该是音频片段的输入,我看到您论文给的是:To begin with, an audio clip is transformed into a log mel spectrogram with a shape of T ×F as input feature [24], where F is the number of mel frequency bins。所以应该是1001*229的矩阵?而且在利用torch.onnx.export()进行格式转换时提示的是5Dtensor。这应该说明,当前模型的输入节点是一个5维的张量。因此,我认为(12,160000)的输汝是音频片段而非第一层卷积网络的输入。不知我理解是否正确?还请您斧正!
3.不知道只用onset-offset...即第一个模型,不用pedal模型是否可以直接得到音符输出?
祝万事如意
郭辉铭

作者您好:
感谢您的额回复和意见。目前以上问题均已解决,我有个新的想法不知如何操作。
1.该模型只适合于钢琴转录,而我用小提琴去测试时难以得到转录结果,甚至无法转录,请问小提琴或者其他乐器的转录是否可以使用该模型呢?
祝身体健康
GUO

作者您好:
十分感谢您给出的建议,我正在尝试收集小提琴的音频和对应的标注数据。现仍有一些不明白的点向您请教。在您繁忙之际叨扰,多有得罪,请您见谅。
1.您在钢琴音符没有正负样本的情况下是怎么得到F1系数的呢?
2.以上问题我的想法是,钢琴音高在21-108之间,取中间值64.大于64的视为正样本,小于等于64的视为负样本。以此得出FP,NP,TN,FN的值。不知道您认为这样是否合理?
祝生活幸福
GuoHM

作者您好:
感谢您的回答,我后面会仔细阅读分析解决该问题。目前关于小提琴转录有以下问题:
1.我用您原始的模型进行小提琴转录发现如果小提琴音符之间的转换不太明显的话,是很难识别出多个音符的。用我自己修改的模型,训练效果更差!您怎么看待这问题?
2.我对于上述问题的理解是,小提琴不像钢琴可以较为清晰的得到音符的起始时间,所以他在做音符起始检测的时候,效果不佳。因此很难做到这么多音符的识别转录。所以我认为起始点检测的方式做小提琴的转录是不是行不通?不知道您怎么看待?
3.请问您是否知道有什么公共数据库可以得到小提琴的训练数据吗?我多吃寻找未果,一些需要付费的网站,其中的小提琴midi文件很多噪声和错误音符。人为修正的话需要很强的专业素养和时间成本。我知识有限,所以请问您作为这方面的专家大佬。是否有些小提琴midi资源提供呢?十分感激!权且作为学生阶段的学习使用。
以上
祝您万事如意
GuoHM

作者您好:
感谢您抽空给出如此有用务实的建议,我会深入思考!再次感谢
目前同济大学在读研一。论文已经发表。做这个纯属爱好,想自己多找点深度学习项目做,方便明年出去实习。
1.除了训练,应该还要在后处理上做相应的改正吧?比如小提琴的音符编号应该与钢琴不同,因此需要再做修改。相应的阈值可能也要调整?
2.另外我利用原始模型,在不重新训练的情况下尝试了古筝,吉他等拨弦乐器,发现转录效果尚可,虽然离钢琴还有一些差距,但是比小提琴好多了。这应该是之前提到的原因,小提琴之间的音符不具备明显的间断特性,所以很难识别音符起始点。因此,如果要对吉他和古筝测试,只需要修改后处理,或者再用古筝,吉他数据做修改即可?不知道您的意见如何。
诚恳的期待您的答复
Best wishes
GuoHM

作者您好:
再次麻烦,请教个简单的问题!我看了下论文和代码。也没看到哪里有说数据集是怎么区分的正负?还请您明示。或者是我忽略了哪里。十分感激
祝您小年愉快,身体健康

作者您好:
新的一年,祝您似清风无际绕,存款千万微微笑【手动狗头】。真诚的感谢您上个学期对我的帮助,我收获颇丰。同时,对您造成了诸多麻烦向您致歉。新学期开始,我网上收集了一些小提琴数据制作训练集和测试集,验证集。得到比较好的结果。目前仍然想进一步压缩。尝试model pruning方法。
1)同学建议我删掉offset和frame—wise部分。只用onset和vericty部分的值得出音符。但是我实验,修改代码得到的midi文件是不行的。经过后处理分析和论文阅读。我认为是在后处理过程中没办法生成准确的音符事件所致。只检测起点显然不能生成音符事件。您是怎么看待的?十分期待您的答复。
祝好
GuoHM

作者您好:
您的代码使我受益良多,开始逐步入门这个领域。目前很少接触这个模型,这周心血来潮又尝试了下新的改动。
1.使用您给出的模型,只修改segments里面的数据,将5s切片,改成2s(pointer += segment_samples // 5)之后,能识别出的音符数,和最大时间数,恰好是前者的5/2倍,这应该不是巧合。奇怪的是,对照标准mid,发现,标准mid中的音符在转录音符中都能找到对应,而转录得到的音符中,会隔断时间出现上一个的重复,但是所隔的时间却没有规律可寻。不知道这种情况您有没有尝试过,是为什么呢?
2.继续1中的修改。发现整个音频输入之后会多出2.5倍的音符数,但是先将音频分成2秒切牌你,逐个输入,最后拼接,发现结果和标准的吻合。未知其中原因,不知道您可否给些提示。十分感激
3.我将main.py中的参数segements=10改成=2重新训练,测试时发现能测出几十万个音符。所以请问您,在训练时可以尝试10秒以内的分辨率嘛?
4.我将frame-out 和offset-out部分的网络删除后,发现分片计算音频音符,发现结果会产生偏差。请问在计算onset时间的时候,是不需要offset和frame的输出值的对吧?但是结果会什么会有偏差呢?
再次叨扰,十分抱歉。真诚的祝福您身体健康,万事如意
GuoHM

作者您好!
十分感动并感激您可以在百忙之中查看我发的issue并给出我非常具有指导意义的建议和答案。仍然有以下问题,恳请您为学生解答。
1.断点测试多次改变参数后,发现确实是,将切片改为16k2之后,由于segments_rate仍然为16K10.导致将整段音频的切分过程中造成2.5次的重复几率。所以将整段大于10秒的音频放入之后会得到错误的结果,也就是重复很多音符。于是将整段音频切分成2秒之后再输入拼接之后的结果是可以的。于是这个问题得到解决。十分感谢您的解答。
2.由于offset和frame-out只计算音符的结束时间,并不影响音符的onset,所以将整个模型的offset和frame去除后,应该是可以得到正确的onset和力度信息的。但是我们在测试过程中,发现将一段大于10秒的音频先切成多个每段为2秒的音频后进行模型转录,得到的音符数却只有原来的1/3左右,很多音符不能正确识别。同样的操作在整个原始模型中却能得到正确的结果。暂时还不知道问题出在哪里,您有什么建议或者思路帮我解决这个问题嘛?
3.您的论文中的hop-size都是10ms,而frame-per-second同样=100.但是在config.py中hop-size=1,而frame-per-second=100.这个在训练中并不对应,请问影响结果嘛?hop-size=1,每次都会跳过1秒也就是100帧,岂不是意味着预测分辨率是在1秒,但是结果却很好,请问我是哪里理解错了嘛?
4.汉明窗大小是2048.请问这么大的值是怎么做到保持毫秒级的预测误差的呢?
祝您事业生活双丰收
GuoHM

作者您好!
感激你的回复。
1.仔细测试过,只使用onset和velocity部分模型进行音符识别的时候。对于一段2秒的音频中,很多不是跨segments的音符,仍然无法识别(而原始模型却可以)。比如一段2秒的音频,确定前1秒就有3个音符,但是整个2秒过程中却只能识别出2个音符。而同样的原始模型中对于2秒的音频却不会出现少识别的问题。在计算音符的时候,j=5即使用周围10帧的音符数据进行识别,而未来的音只有50ms,应该对边界不会过于敏感,这也是您算法的优势所在!暂时还没搞清楚问题所在。再次就这个问题请教您。另外,我会再仔细阅读代码。
2.针对只使用onset和velocity部分模型进行音符识别的情况。将segments_sample==16K4,之后pointer =segments //2.将一整段长音频放进去后,得到的结果很准确,匹配程度很高。也就是说,一段157秒的音频,填充后是160秒。每个segments是4秒,后两秒是重复片段。但是问题是,此种情况下,对于音频越短的情况,识别效果越差,音频在8秒左右,音符识别率只有50%左右。不知道是什么情况?
3综上:以上测试分析,音频较长的情况下,设置segments_sample==16K
4,之后pointer =segments //2后,两者结果大致一样,减小的模型较原始模型差一些,但是仍然保持90%以上准确率。但是音频在2秒时,小模型(原始模型的onset和力度部分)则无法识别结果,因此小模型无法实现2秒音频的实时识别。不知道怎么改才能做到小模型2秒音符实时识别的情况,请您指导!十分感激
祝好
GuoHM

作者您好!
十分抱歉耽误您的周末休息时间,并感激您在周末可以回复我的问题。
1.原始模型训练中,测试设置10秒和4秒的结果基本一致,但是如您所说,10秒应该会更好一些。比小模型的结果要稍微好一些。大致能高5%的点。勉强维持85%以上,不过也同样受音频质量,音色的影响。
2.针对小模型(仅onset和力度部分):对于一条完整的音频,如果只取其中前4秒,8秒,甚至10秒时,很多音符无法识别,奇怪的是,0.5秒,2.5秒等发生在前面的音符事件反而需要更长的音频才能识别。根据论文的算法1来讲,再计算onset事件时是根据onset预测值的局部最大值,而这个局部应该是指J=5的情况下,也就是中心帧周围的10个帧决定的,也就是说,对于一段2秒的音频,前1. 9秒发生的音符事件应该是可以被完全检测出来的。也会在最终的结果中显示。即使offset和frame不起作用,影响的也只是整个音符的最终结束时间而不影响检测出该音符。但是这个时候却无法检测,目前还不知道原因,这个是学生目前的主要困惑,也没在论文和代码中找到答案,恳请能得到您的详细解答,将不胜荣幸感激!
关于您关于3 的回复:测试时间是2秒,针对某个帧的历史信息是之前的5个帧,也就是前50ms的音频时间,因此,应该是加入了历史信息和未来信息的。不知道我这样理解是否有误
祝您周末愉快,并期待您的回答。学生拜谢
GuoHM

作者您好:
今天周末,仔细拜读了您的论文和代码之后,按照您的论文流程将小模型(提取onset和力度部分)后面的逻辑稍微修改之后,达到了和原始模型一样得到效果。我上一封回件的问题2已经得到解决。十分抱歉对您的打扰。
祝身体健康,万事如意
GuoHM

作者您好:
时隔许久,再次叨扰,十分抱歉。
由于您的论文,项目十分经典,而我对乐曲音频的识别又有点兴趣,所以空下来会根据您的项目做些感兴趣的调整。
最近试了下小提琴的转录,使用新的数据,按照原有网络结构进行训练。结果发现:
1)部分小提琴音频识别准确率可以达到99%,96%。但是部分识别准确率只有50,甚至更低。发现准确率低的都是因为有音频片段没有完成转录,而转录部分的准确率还是很高。很奇怪的是,该段音频的前后内容其实是一样的,但是前面若干秒可以准确识别,而后面若干秒则无法识别。不知道原因是什么?您的赐教,我会不胜感激。
2)修改onset阈值会发现有效识别个数会变多,但是这个值不好把握。请问您当时设置阈值的依据是什么呢?
祝您身体健康,万事如意
Ghm

作者您好:
十分真诚的感谢您百忙之中回答学生的问题。
最近试了下小提琴的转录,使用新的数据,按照原有网络结构进行训练。结果发现:
1)部分小提琴音频识别准确率可以达到99%,96%。但是部分识别准确率只有50,甚至更低。发现准确率低的都是因为有音频片段没有完成转录,而转录部分的准确率还是很高。很奇怪的是,该段音频的前后内容其实是一样的,但是前面若干秒可以准确识别,而后面若干秒则无法识别。不知道原因是什么?您的赐教,我会不胜感激。
2)修改onset阈值会发现有效识别个数会变多,但是这个值不好把握。请问您当时设置阈值的依据是什么呢?
祝您身体健康,万事如意

您好!
感激您的回复!
1.小提琴数据是合成的。我个人认为,训练集如果没有包含测试集合,那么同一首音频,前半段和后半段的音高是相同的,可是前半段却能准确识别,而后半段却不行。GRU考虑的只有上下10帧,不知道影响会不会这么大。不知道还有没其他原因,或者是数据不够?
2.好的,我再试试阈值。但是这个阈值调小后,0.1识别的比0.2要更多,但是也多出一些重复的音符。所以单纯的调整阈值应该是不够的。
祝好
GUO huiming

您好!
感谢您的回复。
1.小提琴的频率应该较钢琴更高。您设置的采样率为16K,会不会是因为采样率导致小提琴某些音符无法识别?
2。重新调节采样率为44100。改的应该只是一个数值,但是总是出错,不知道为什么。、
祝好
Ghm

作者您好!
感激您的回复。再次打扰,深感抱歉!
1.我增加数据吗,修改了一些参数,增加了数据训练,但是对于之前效果较差的音频(仍然是能转录部分基本对的上,丢失的饿准确率是因为部分无法转录出音符)仍然很差。原因可能不在模型的结构上?可能还是出在数据问题。但是看过数据的频谱图,声谱图并没有什么么区别,至今仍不知道出错原因在哪?
2.训练和测试数据必须要求midi为单音轨嘛?请问为什么?双音轨或多音轨可以嘛?
祝身体健康。再次抱歉对您的打扰
GUOhm

您好:
百忙之中再次打扰,十分抱歉
请问模型为什么对音色这么敏感,同样是小提琴,但是音色不一样,识别效果差距较大。而特征是梅尔谱系数,和音色应该没有联系的吧?
祝身体健康,万事如意

您好!
请问您创建的 torchlibrosa里面的stft模型和librosa中的stft计算结果不一样嘛?(简单测试后结果一致)
您用一维卷积计算stft 的目的什么呢?方便训练使用吗?

您好:
感谢您的回复。
1.这样的话您这个模型并不需要训练stft部分?仅初始化参数的stft计算部分便与训练后的结果一致?
2.用librosa中的stft计算方法可以代替您模型中的stft计算部分?
祝身体健康,再次打扰,深感歉意。
郭辉铭