很快又一年过去了。

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

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

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

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

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

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

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

我是怎么学习的?

说起来,其实很简单。

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

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

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

当然,也是做到了。

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

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

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

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

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

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

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

这个目标也渐渐靠近了,

近期一直在做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. jQuery实现简易轮播图的效果

    (图片素材取自于小米官网) 刚开始接触jQuery的学习,个人觉得如果为了实现多数的动态效果,jQuery的确很简易方便. 下面简易的轮播图效果,还请前辈多多指教~ (努力学习react vue an ...

  2. mkdirp——递归创建目录及其子目录

    如果要创建目录A并创建目录A的子目录B,没有用-p参数的情况下mkdir会逐个创建目录(mkdir A; mkdir A/B); 加上参数-p就可以直接创建2个目录mkdir -p A/B( 如果目录 ...

  3. IDEA使用心得整理

    [演出模式] 我们可以使用[Presentation Mode],将IDEA弄到最大,可以让你只关注一个类里面的代码,进行毫无干扰的coding. 可以使用Alt+V快捷键,弹出View视图,然后选择 ...

  4. HTML头标签使用-又一次定向,refresh

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. /dev/urandom非阻塞的发生器

    JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom" /dev/urandom   /dev/urandom ...

  6. 7、Android---网络技术

    玩手机不能上网是单机的时代 而且现在的流量也出了无限使用 几乎网络离不开人们的日常生活 7.1.WebView的用法 遇到一些特殊的请求 在程序中展示一些网页 加载和显示网页都是浏览器的任务 在不打开 ...

  7. 20145203盖泽双 《Java程序设计》第十周学习总结

    20145203盖泽双 <Java程序设计>第十周学习总结 教材学习内容总结 一.网络概述 1.网络编程就是两个或多个设备(程序)之间的数据交换. 2.识别网络上的每个设备:①IP地址②域 ...

  8. 965. Univalued Binary Tree

    题目来源: https://leetcode.com/problems/univalued-binary-tree/submissions/ 自我感觉难度/真实难度: 题意: 分析: 自己的代码: c ...

  9. HDU1002 A + B Problem II 大数问题

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1002 A + B Problem II Time Limit: 2000/1000 MS (Java ...

  10. springboot mybatis 后台框架平台 shiro 权限 集成代码生成器

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.servic ...