RetroCirce / HTS-Audio-Transformer

The official code repo of "HTS-AT: A Hierarchical Token-Semantic Audio Transformer for Sound Classification and Detection"
https://arxiv.org/abs/2202.00874
MIT License
341 stars 62 forks source link

How to run inference of a single audio file with by your release trained esc_50 model? #11

Closed joewale closed 2 years ago

joewale commented 2 years ago

Hi,RetroCirce

    通过下载您已经训练好的esc_50模型,如何快速通过这个模型来验证输入音频的分类结果?
RetroCirce commented 2 years ago

可以查看sed_model.py中对于esc数据集计算acc的代码,其实和audioset相似,就是输出model的结果然后计算,如果你需要得到分类结果,你可以用main.py中的test函数,得到结果直接进行查看

joewale commented 2 years ago

Hi,RetroCirce

   这是我写的demo,测试ESC-50单个音频demo,发现结果输出的类别不是预期想要的,而且结果还是随机的,请问这是哪里写错了吗?求帮忙指导,感谢!

demo.txt

RetroCirce commented 2 years ago

你的config.py方便给我看看嘛

joewale commented 2 years ago

这是我的config文件 [Uploading config.txt…]()

RetroCirce commented 2 years ago

因为ckpt的key不太一样,你直接使用这个model的时候,前缀没有sed_model,所以你的model实际上什么都没有load(你设了strick=False,它忽略所有的没有找到的weight,这里应该设为true的

解决方法很简单,把前缀裁掉就可以了,看这个就好了,我把你代码修改了一下,我随便试了10个结果,和答案都是一致的 test_esc.zip

RetroCirce commented 2 years ago

顺便我把单卡gpu和esc的config也更新了,你可以看看我最新的commit。 https://github.com/RetroCirce/HTS-Audio-Transformer/blob/main/htsat_esc_training.ipynb

joewale commented 2 years ago

问题解决了,谢谢哈! 另外,有个问题,请教下,模型输出的pred_prob的概率得分的区间是怎样的,6.831792代表的意义是什么?

RetroCirce commented 2 years ago

你可以在最后softmax一下,就是概率了,因为esc用的是cross_entropy而不是BCE,默认的torch loss函数是自动帮你softmax了(又或者你可以手动做nllloss),所以我输出的时候就没有softmax

joewale commented 2 years ago

谢谢你的解答,如你所说,加上softmax就可以了,再次感谢!

pred = output_dict['clipwise_output']
pred = F.softmax(pred, dim=1)
pred_post = pred[0].detach().cpu().numpy()
pred_label = np.argmax(pred_post)
pred_prob = round(np.max(pred_post)*100, 3)