很快又一年过去了。

自学音频算法也近一年了。

不记得有多少个日日夜夜,

半夜醒来,就为验证算法思路。

一次又一次地改进和突破。

傻逼样的坚持,必然得到牛逼样的结果。

这一年,主要扎音频算法上。

经常有网友联系我,几乎都会问我同一个问题。

我是怎么学习的?

说起来,其实很简单。

就是先设一个小目标,而且必须是一个具有挑战性的目标。

例如两年前从原来做安全,转去做图像算法。

当年定的目标就是实现一键修图的算法。

当然,也是做到了。

虽然后来也有改进过多次,但是一直没有整理出最后的版本。

有各种各样的原因,一直没时间梳理。

一键智能降噪,智能白平衡,智能曝光,同时也兼顾了算法性能。

没有具体实测,但是实时是肯定没有问题的。

一直有一个心愿,就是将这个算法梳理整理,

调优后,合入到视频播放器中,

打造一个简单而简约的视频播放器。

这个目标也渐渐靠近了,

近期一直在做ffmpeg的编码转码方面的工作。

预计明年吧,也许这个播放器就可以跟大家见面了。

而今天写的标题,主要是音频降噪这个方向。

这个目标也是今年年初给自己定下的目标。

就在昨天 2018.12.1,这个音频算法,算是第一版完成了。

这之中经历了很多很多,有很多细节。

真的有无数次尝试和改进优化。

把学习的音频算法的精髓,运用起来。

最后,达到预期目标。

这里要稍微说一下,

我是怎么做的。

其实说简单也简单,说难也难。

定了一个目标之后,

肯定是去找最传统的算法资料。

一个一个算法实现。

从中学习到每个算法的优缺点,缺点当然就要尝试改进。

优点就要考虑变通,让优点更加突出。

每次都是从一个算法延伸出很多待解决的困难,

然后发现一个问题,就找相关的资料,

尝试解决,一次又一次攻克问题。

这里面最重要的一点就是,

一定要坚持每一个算法都要自己动手实现一遍。

而且除了编解码外,不允许调用第三方库。

纯C实现。

这里有一个我这一年最难啃的点,就是傅里叶变换。

整整花了我2-3个月时间,将所有开源的傅里叶变换看一遍。

重新用c语言实现他们的思路,

最后产出自用的傅里叶变换算法。

这之间得到过一些朋友的帮助。

当然主要是讨论,迸发思路。

最重要的经验,莫过于,向成功者学习,向业内大牛学习。

不论是开源项目还是资料论文。

rnnoise这个开源项目,既然能得到很好的效果,

那就证明有一些算法思路是可行的。

只不过深度学习的方案,

特征需要依赖数据去训练。

弊端特别明显。

不采用深度学习的方法去做,肯定可以。

我一直坚信,只要有一个清晰的头脑,

不需要依赖数据提取特征,

理清楚算法的思想,也能达到一定的效果。

就跟做图像算法一样,事实证明我是对的。

毕竟曾经做过智能修图的算法,

有一定的成功经验。

在做音频算法的时候,

就少走了不少弯路,

基本上都不用写代码就能知道思路的可行性。

如果不是有图像算法的积累和坚持,

音频算法,

真的不好啃。

但是,我一直坚信,一切都会落到实处。

千万不要偷懒,你偷的懒最后还是要补回来的。

这个社会是很公平的,只有不努力的人才会觉得社会不公平。

当然现在音频降噪算法还没达到我的最终要求。

但是作为一个阶段性的成果而言,它已经达到了。

欢迎大家试用,然后给我提需求也好,

提bug也好,我会抽时间好好看看的。

音频降噪算法 linux示例程序:

https://files.cnblogs.com/files/cpuimage/denoise.zip

我这个降噪算法真的算是集传统算法优点,RNN深度学习算法思路于一身。

向rnnoise学了不少思路,致敬!

整个算法实现不到200行,

却同时拥有高速性能和不错的效果,

鲁棒性极佳,

内存占用也极低。

并且支持实时帧算法,支持多通道。

由此,大家也能看出来,我在这个算法上花了多少心血。

下层建筑搭好了。

之于图像,之于音频。

还有很多工作要做,好多方向的问题还没攻克。

路漫漫其修远兮。

近三年的杀毒软件开发经验,

不到2年图像算法经验,

不到1年的音频算法经验。

投过一些公司,

看了我的学历,

近些年的研究方向,

短而杂。

然后就说一句,

学的东西太杂,

经验不够,

深度不够。

人无完人,

确实不想发表太多评论,

我只做我自己。

国内太浮躁了,

从来没想过要跟谁去争什么。

也不想评论谁好谁坏。

是的,我本人开源的代码都很垃圾。

那又怎么样呢,你有你的评论和观点。

我有我的生活态度。

有些人翻垃圾桶的习惯真不好。

吃相太丑。

没那个兴趣和精力去做讨论和点评,

因为没有半点实际的意义。

更多的精力用来学习成长和分享。

独乐了不如众乐乐。

希望以此结交一些有志之士,一起玩耍。

吹吹水,唠唠嗑,打打吨。

巴普诺夫,很忙,很忙。

我还能睡,不要叫醒我。

若有相关问题或者需求可以邮件联系俺探讨。

有空回得快一些,没空可能就.......

邮箱地址是: 
gaozhihan@vip.qq.com

来源自rnnoise,但非rnn的更多相关文章

  1. frequentism-and-bayesianism-chs-ii

    frequentism-and-bayesianism-chs-ii 频率主义 vs 贝叶斯主义 II:当结果不同时   这个notebook出自Pythonic Perambulations的博文  ...

  2. nnet3配置中的上下文和chunk(块)大小

    Nnet3配置中的上下文和块大小 简介 本页讨论了nnet3配置中关于解码和训练的块大小以及左右上下文的某些术语.这将有助于理解一些脚本.目前,从脚本角度来看,没有任何关于nnet3的"概述 ...

  3. LSTM调参经验

    0.开始训练之前先要做些什么? 在开始调参之前,需要确定方向,所谓方向就是确定了之后,在调参过程中不再更改 1.根据任务需求,结合数据,确定网络结构. 例如对于RNN而言,你的数据是变长还是非变长:输 ...

  4. 深入理解Transformer及其源码解读

    深度学习广泛应用于各个领域.基于transformer的预训练模型(gpt/bertd等)基本已统治NLP深度学习领域,可见transformer的重要性.本文结合<Attention is a ...

  5. NLP学习(3)---Bert模型

    一.BERT模型: 前提:Seq2Seq模型 前提:transformer模型 bert实战教程1 使用BERT生成句向量,BERT做文本分类.文本相似度计算 bert中文分类实践 用bert做中文命 ...

  6. tf识别非固定长度图片ocr(数字+字母 n位长度可变)- CNN+RNN+CTC

    先安装必须的库 tensorflow_gpu==1.15.0 numpy opencv_python github: https://github.com/bai-shang/crnn_ctc_ocr ...

  7. Sql Server 2012新特性 Online添加非空栏位.

    我们都知道,Sql Server在一个数据量巨大的表中添加一个非空栏位是比较费心的,缺乏经验的DBA或是开发人员甚至可能鲁莽地直接添加导致阻塞相应业务,甚至可能因为资源欠缺造成实例的全局问题.当然这都 ...

  8. lecture7-序列模型及递归神经网络RNN

    Hinton 第七课 .这里先说下RNN有recurrent neural network 和 recursive neural network两种,是不一样的,前者指的是一种人工神经网络,后者指的是 ...

  9. 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)

    循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...

随机推荐

  1. 有料面试题之--Object里面的方法

    阿里的面试题里面有个题很奇妙:你知道Object类里面有哪些方法吗? 绝大部分猿类都知道 有hashcode .equals .clone.toString 只有部分人会回答有 wait和notify ...

  2. 1066. [SCOI2007]蜥蜴【最大流】

    Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃 到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到 ...

  3. yii在哪些情况下可以加载yiilite.php?

    yii权威指南上说,在开启apc缓存的情况下,可以加载yiilite.php提升性能.我有以下几点疑问: 1.开启apc缓存的情况下,引入yiilite.php能提升性能的原因是因为缓存了opcode ...

  4. Hive学习之路 (十四)Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK

    概述 本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途. 注意: 序列函数不支持WINDOW子句.(ROWS BETWEEN) 数据 ...

  5. Linux环境更改Jenkins的主目录

    Linux环境更改Jenkins的主目录 Linux环境中,Jenkins主目录默认在/root/.jenkins Jenkins储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改: 1.使 ...

  6. ZOJ 3212 K-Nice(满足某个要求的矩阵构造)

    H - K-Nice Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Sta ...

  7. 【css】css实现点击Toggle功能/icon切换

    ①实现Toggle功能 html结构: <div class="cssTog"><label> <p> 专业:B020309现代企业管理(独立本 ...

  8. iOS url出现特殊字符处理 -- stringByAddingPercentEncodingWithAllowedCharacters

    stringByAddingPercentEscapesUsingEncoding(只对 `#%^{}[]|\"<> 加空格共14个字符编码,不包括”&?”等符号), i ...

  9. 腾讯云centos7.2安装mysql5.7

    一.查看是否安装mysql rpm -qa | grep mysql 什么都没显示,说明没有安装 二.进入到opt目录下,使用wget下载官方yum源的rpm包 cd /opt wget https: ...

  10. React实战一

    目录 1. 搭建环境 2. React知识点 1. 组件 1.1 定义一个组件 1.2 组合与拆分组件 1.3 组件传值 1.4 state 1.5 生命周期函数 1.6 无状态组件 1.7 List ...