来源自rnnoise,但非rnn
很快又一年过去了。
自学音频算法也近一年了。
不记得有多少个日日夜夜,
半夜醒来,就为验证算法思路。
一次又一次地改进和突破。
傻逼样的坚持,必然得到牛逼样的结果。
这一年,主要扎音频算法上。
经常有网友联系我,几乎都会问我同一个问题。
我是怎么学习的?
说起来,其实很简单。
就是先设一个小目标,而且必须是一个具有挑战性的目标。
例如两年前从原来做安全,转去做图像算法。
当年定的目标就是实现一键修图的算法。
当然,也是做到了。
虽然后来也有改进过多次,但是一直没有整理出最后的版本。
有各种各样的原因,一直没时间梳理。
一键智能降噪,智能白平衡,智能曝光,同时也兼顾了算法性能。
没有具体实测,但是实时是肯定没有问题的。
一直有一个心愿,就是将这个算法梳理整理,
调优后,合入到视频播放器中,
打造一个简单而简约的视频播放器。
这个目标也渐渐靠近了,
近期一直在做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的更多相关文章
- frequentism-and-bayesianism-chs-ii
frequentism-and-bayesianism-chs-ii 频率主义 vs 贝叶斯主义 II:当结果不同时 这个notebook出自Pythonic Perambulations的博文 ...
- nnet3配置中的上下文和chunk(块)大小
Nnet3配置中的上下文和块大小 简介 本页讨论了nnet3配置中关于解码和训练的块大小以及左右上下文的某些术语.这将有助于理解一些脚本.目前,从脚本角度来看,没有任何关于nnet3的"概述 ...
- LSTM调参经验
0.开始训练之前先要做些什么? 在开始调参之前,需要确定方向,所谓方向就是确定了之后,在调参过程中不再更改 1.根据任务需求,结合数据,确定网络结构. 例如对于RNN而言,你的数据是变长还是非变长:输 ...
- 深入理解Transformer及其源码解读
深度学习广泛应用于各个领域.基于transformer的预训练模型(gpt/bertd等)基本已统治NLP深度学习领域,可见transformer的重要性.本文结合<Attention is a ...
- NLP学习(3)---Bert模型
一.BERT模型: 前提:Seq2Seq模型 前提:transformer模型 bert实战教程1 使用BERT生成句向量,BERT做文本分类.文本相似度计算 bert中文分类实践 用bert做中文命 ...
- tf识别非固定长度图片ocr(数字+字母 n位长度可变)- CNN+RNN+CTC
先安装必须的库 tensorflow_gpu==1.15.0 numpy opencv_python github: https://github.com/bai-shang/crnn_ctc_ocr ...
- Sql Server 2012新特性 Online添加非空栏位.
我们都知道,Sql Server在一个数据量巨大的表中添加一个非空栏位是比较费心的,缺乏经验的DBA或是开发人员甚至可能鲁莽地直接添加导致阻塞相应业务,甚至可能因为资源欠缺造成实例的全局问题.当然这都 ...
- lecture7-序列模型及递归神经网络RNN
Hinton 第七课 .这里先说下RNN有recurrent neural network 和 recursive neural network两种,是不一样的,前者指的是一种人工神经网络,后者指的是 ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)
循环神经网络(RNN, Recurrent Neural Networks)介绍 这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...
随机推荐
- [转]JMX的Hello World
这篇写的很详尽了: http://www.blogjava.net/hengheng123456789/articles/65690.html
- web应用安全发展与介绍
安全与安全圈的认识 中国黑客的发展过程:1990年代初,部分人开始研究黑客技术 1997-1999年,黑客团队涌现,进入黄金时代, 21世纪初,黑客工具傻瓜化,门槛降低,黑客精神不在… 圈内熟知的安全 ...
- oracle删除用户及其表空间
oracle删除用户及其表空间 删除表空间:可以先将其offlinealter tablespace xx offline;将磁盘上的数据文件一同删除drop tablespace xxx inclu ...
- 检查oracle用户默认密码的账户
1. 检查使用默认用户密码的账号 --11g 通过数据字典SYS.DEFAULT_PWD$或视图DBA_USERS_WITH_DEFPWD select u.username, u.account_s ...
- filebeat+logstash+elasticsearch收集haproxy日志
filebeat用于是日志收集,感觉和 flume相同,但是用go开发,性能比较好 在2.4版本中, 客户机部署logstash收集匹配日志,传输到 kafka,在用logstash 从消息队列中抓取 ...
- Python自动化之迭代器不能在迭代的时候更改值
除列表外的其他序列都是不可变的, 所以危险就发生在这里. 一个序列的迭代器只是记录你当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上.在迭代字典的 key 时, ...
- C语言程序设计I—第四周教学
第四周教学安排 第四周是本课程的第三次课,依然是我来讲解,学生听讲,也依然继续在寻找大班授课(100人).条件有限(民办学校教学经费投入不够)的情况下如何更好的组织教学. 教学内容 第二章 用C语言编 ...
- Python学习笔记系列——读写文件以及敏感词过滤器的实现
一.读文件 #打开文件,传入文件名和标识符,r代表读 f= open('\\Users\ZC\Desktop\zc.txt','r') #调用read方法一次性读取文件的全部内容,存入内存,用str对 ...
- 更改KVM虚拟机root的密码
今天在使用qemu-kvm安装一个虚拟机,因为已经有一个虚拟机的image文件(qcow2格式的),所以创建虚拟机很简单,直接通过以下命令从image启动就行了. qemu-kvm -cpu host ...
- 火狐下不能使用非行间样式currentStyle用getComputedStyle获取
用js的style属性可以获得html标签的样式,但是不能获取非行间样式.那么怎么用js获取css的非行间样式呢?在IE下可以用currentStyle,而在火狐下面我们需要用到getComputed ...