Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dasheng预训练模型返回值 #2

Open
SmoothJing opened this issue Sep 17, 2024 · 8 comments
Open

dasheng预训练模型返回值 #2

SmoothJing opened this issue Sep 17, 2024 · 8 comments

Comments

@SmoothJing
Copy link

您的工作非常出色!

但是我有个疑问, dasheng模型的返回值是

outputs.hidden_states.shape
torch.Size([1, 25, 768]) # 25 T-F patches (patch size 64x4, no overlap), before mean-pooling
其中768表示的是特征维度,25在这里写的是25个 T-F patches,我想问一下这个不可以修改成时间序列的长度嘛?
我想表达的是可否能返回(1,T, F),因为我在做的是一个两支路的融合,如果返回的不是时间序列的长度,没办法进行融合特征。

特别期待得到您的回复
感谢!

@RicherMans
Copy link
Contributor

你好,
我们其实在代码里面并没有写特别清楚。
大声根本没有T-F 这个概念,每一个返回的值代表40毫秒。每一个40毫秒的特征有768 维。
样例的25 代表1 秒输入(40 ms * 25 = 1s)。

翰林

@SmoothJing
Copy link
Author

你好, 我们其实在代码里面并没有写特别清楚。 大声根本没有T-F 这个概念,每一个返回的值代表40毫秒。每一个40毫秒的特征有768 维。 样例的25 代表1 秒输入(40 ms * 25 = 1s)。

翰林

首先感谢您的回复!
我很想尝试使用dasheng预训练模型,但是似乎遇到了一些错误返回值。
具体来说:
我是语音任务,送入dasheng模型的语音是一段单通道重采样到16Khz的20s的音频,如果每次返回的代表40ms的具有768维度的数组,那我应该得到一个一个尺寸大小为(1,768,500)的数组,但是结果返回的是(1,768,252)的数组,关于这一点我不太清楚,想向您请教下。(我用的是dasheng-base)
期待得到您的再次回复。

@RicherMans
Copy link
Contributor

您好,

那我应该得到一个一个尺寸大小为(1,768,500)的数组,但是结果返回的是(1,768,252)的数组,关于这一点我不太清楚,想向您请教下

按照代码来说,我们实现的逻辑可以看到在:

def forward_spectrogram(self, x: torch.Tensor) -> torch.Tensor:

如果输入超过target_length ( 10s ), 我们会把输入分成两块儿。把两块儿放到batch 维度 :
x = rearrange(splits, 'spl b c f t-> (spl b) c f t')

然后过模型以后会拼输出。

您跑过什么代码?有例子吗?

翰林

@SmoothJing
Copy link
Author

您好,

那我应该得到一个一个尺寸大小为(1,768,500)的数组,但是结果返回的是(1,768,252)的数组,关于这一点我不太清楚,想向您请教下

按照代码来说,我们实现的逻辑可以看到在:

def forward_spectrogram(self, x: torch.Tensor) -> torch.Tensor:

如果输入超过target_length ( 10s ), 我们会把输入分成两块儿。把两块儿放到batch 维度 :

x = rearrange(splits, 'spl b c f t-> (spl b) c f t')

然后过模型以后会拼输出。
您跑过什么代码?有例子吗?

翰林

感谢您的回复!
我参考了https://huggingface.co/mispeech/dasheng-base/blob/main/README.md此链接中Inference的用法,
所以我想用dasheng用来预处理我的wav,以提取embedding,进行后续的处理。
我的代码改动如下:
`
from dasheng_model.feature_extraction_dasheng import DashengFeatureExtractor
from dasheng_model.modeling_dasheng import DashengModel
def get_content(model, inputs):
with torch.no_grad():
outputs = model(**inputs)['hidden_states']
embeddings = outputs.transpose(1, 2)
return embeddings

def process(filename, target_sr=16000, model_name="mispeech/dasheng-base"):
wav, _ = librosa.load(filename, sr=16000, mono=True)
audio = torch.from_numpy(wav).unsqueeze(0)

feature_extractor = DashengFeatureExtractor.from_pretrained(model_name)

inputs = feature_extractor(audio, sampling_rate=target_sr, return_tensors="pt")

model = DashengModel.from_pretrained(model_name, outputdim=None)

embeddings = get_content(model, inputs)     # (1,768,T)
c_numpy = embeddings.cpu().numpy()

return c_numpy

`
我送入的wav时长是20s,但是经过dasheng-base返回值是(1,252,768),理论上应该是(1,500,768),所以不太清楚是问题出在哪里了

@RicherMans
Copy link
Contributor

RicherMans commented Sep 18, 2024

你好,
我发现问题,但是目前看不出来怎么解决用huggingface。
默认的接口还是没有这个问题。简单来说,我建议你不用hf 接口,如:

# pip install dasheng
python3 -c "from dasheng import dasheng_base; import torch; model = dasheng_base().eval(); features=model(torch.randn(1, 16000))"

@SmoothJing
Copy link
Author

你好, 我发现问题,但是目前看不出来怎么解决用huggingface。 默认的接口还是没有这个问题。简单来说,我建议你不用hf 接口,如:

# pip install dasheng
python3 -c "from dasheng import dasheng_base; import torch; model = dasheng_base().eval(); features=model(torch.randn(1, 16000))"

您好!
我也发现同样的问题,使用huggingface确实存在一些问题,我使用了默认的接口解决了问题。
感谢您的答复。
除此之外,我还想在dasheng预训练模型上做更多的尝试。dasheng的三个版本:
dasheng-base、dasheng-0.6B和dasheng-1.2B输出的都是最后一层的output,我可否人为设置让dasheng输出指定层的output,
如果可以的话,方便指导一下嘛。
给您带来了不便,请谅解!
最后,再次感谢您的答复!

@RicherMans
Copy link
Contributor

我可否人为设置让dasheng输出指定层的output,

其实这个问题不是特别大,可能后来会写。如果你有空也可以给我们写一个pr!

感谢!

@SmoothJing
Copy link
Author

我可否人为设置让dasheng输出指定层的output,

其实这个问题不是特别大,可能后来会写。如果你有空也可以给我们写一个pr!

感谢!

好的,感谢您的热心回复!
我先暂时等待咱们官方公布。
哈哈哈。
再次表达对您的感谢!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants