Audio Super Resolution with Neural Networks
论文:Audio Super Resolution with Neural Networks
代码: Github
CV方向的超分辨研究已经非常多了,但是音频方向的超分辨研究却相对较少。作者的这篇文章就是开山之作,已经发表在ICLR2017上,从项目主页的Demo来看,效果还不错。但是作者也指出了几个问题:
- 如果想把这个模型用在自己的数据上,需要多搜集一些自己的数据训练,意思就是换个数据集可能就不好使了,毕竟每个数据集有一些差别
- 作者的低分辨率音频是通过低通滤波下采样得到的,所以对于不同的低通滤波方式,算法产生的效果差别就很大。如果是你自己的低分辨率音频,你根本不知道这个音频是哪种低通滤波产生的,所以效果可能会打折扣
- 如果是用人声训练出来的模型,应用到钢琴,音乐上,效果就会很差
总体思想
输入低分辨率的音频时间序列,训练一个Encoder-Decoder模型,输出高分辨率的音频时间序列。思路和CV的超分辨其实差不多。就是在低分辨率音频信号中插入高分辨细节。
网络结构如下:
左边输入的是原始低分辨率的音频信号,通过B个下采样的Blocks(每次下采样,feature map维度减半,滤波器大小翻倍),然后再通过B个上采样Blocks(每次上采样,feature map维度扩大一倍,滤波器大小减小一半)。底层特征通常对应wavelet-style features, 高层特征对应phonemes。每个Block的结构如下:
其中,上采样的Block和下采样对应的Block还使用Skip Connection。上采样的DimShuffle是借鉴Subpixel shuffling layer。
还有,作者输入的音频信号到底是以什么样的形式输入的?
结合源代码和论文发现,作者首先把一段音频时间序列(就是一维数组,每个数组元素代表时间维度上的幅值,这里有个介绍音频信号的入门文章)进行下采样(下采样方式:先进行8阶切比雪夫滤波器滤波,然后降采样,然后插值上采样。这样就保证了低分辨率音频序列和高分辨长度一致。总之和图像数据超分辨的处理方式差不多),这样就得到了低分辨音频序列,而高分辨音频序列就是下采样之前的序列。这样就有了训练样本对,整个模型就可以训练起来了。
实验结果
下图是作者的实验结果,最左边是参考的频谱图,左二是输入,左三是插值算法的结果,左四是作者的结果。可以看出,作者的方法确实较好的恢复了高频信息。
总结
- 根据SNR,LSD两个评价指标来看,效果不错。不过在领域迁移方面,以及降采样方式适应方面,效果不好。应用场景十分受限
- 可以实时,处理1s的音频只需要0.11s。而且不同于seq2seq任务,超分辨不需要等所有上下文输完才进行处理
- 作者实验发现,skip connection,residual connection很重要
读完这篇论文的整体感觉就是很简单粗暴,就像超分辨的开山之作一样,也许好用的方法总是简单的!最起码,在事后看起来是那么简单!