RookieJunChen / FullSubNet-plus

The official PyTorch implementation of "FullSubNet+: Channel Attention FullSubNet with Complex Spectrograms for Speech Enhancement".
Apache License 2.0
242 stars 55 forks source link

AdaptiveAvgPool1d的实时性保证 #1

Closed olinyich closed 2 years ago

olinyich commented 2 years ago

Hi,attention模块里包含了一个[B, num_channels, T]到[B, num_channels, 1]的AdaptiveAvgPool1d自适应池化操作,这一步会使用整个时间轴上的信息,这个是不是不能够实时化?

RookieJunChen commented 2 years ago

我个人理解是,只使用历史信息,不看未来信息的情况下,AdaptiveAvgPool1d是可以保证实时化的

olinyich commented 2 years ago

好的,感谢回答

yuguochencuc commented 2 years ago

这样确实不是因果系统呀。相当于你是在整个T维做pooling,根据未来的T算出一个全局的值,再作用在当前帧,理论上肯定不是实时因果的。除非推理的时候每次只用1帧,但是训练的时候用整条语音,推理的时候用一帧肯定会效果很差。如果是整条语音进去进行推理,应该是非因果的,也就不能说是实时系统了。(我最近也遇到了相似的问题,但是用adaptiveavgpool1d在整个T维肯定是非因果的)

yuguochencuc commented 2 years ago

这样确实不是因果系统呀。相当于你是在整个T维做pooling,根据未来的T算出一个全局的值,再作用在当前帧,理论上肯定不是实时因果的。除非推理的时候每次只用1帧,但是训练的时候用整条语音,推理的时候用一帧肯定会效果很差。如果是整条语音进去进行推理,应该是非因果的,也就不能说是实时系统了。(我最近也遇到了相似的问题,但是用adaptiveavgpool1d在整个T维肯定是非因果的)

yuguochencuc commented 2 years ago

个人理解是这样的,如果有问题希望指正

RookieJunChen commented 2 years ago

我仔细想了想,您说的确实有道理,是我们当时想的时候出了一点偏差。请问一下您做的时候试过训练的只看过去的帧做pooling的效果吗?我们后续也会修改测试一下只用过去的帧或者是采用Look ahead的方式做一下对比,但我个人认为这个Channel Attention机制还是会有效果的

yuguochencuc commented 2 years ago

嗯嗯 我之前本来参加dns比赛用了在整个特征图上的pooling,后面仔细研究才发现自己用错了。就改成了在T维不变的只在f和C维做的POOLING了。现在还在尝试效果呢,目前好像也没看到有人这么做过

RookieJunChen commented 2 years ago

感谢指正!我后续会修改代码并测试一下!方便加个微信交流一下嘛?

RookieJunChen commented 2 years ago

另外可能我们对实时的理解也出现了偏差;我们当时没有考虑过流式处理的问题,考虑的实时主要是就考虑到了rtf<1的问题

yuguochencuc commented 2 years ago

我明白我明白。我其实也有过这些问题,就是单纯的觉得没有用来未来信息或者说rtf小于1就算实时。其实还是有很多限制的。实时这块真正要落地的话其实也不简简单单是因果的就满足,感觉还有很多需要学习的东西呢。尤其是在时序建模的时候需要考虑到因果的话 attention这块确实就比较容易出些一些问题

RookieJunChen commented 2 years ago

嗯嗯!确实!