zoukankan      html  css  js  c++  java
  • 算法踩坑小记

    经过前面研究图像算法和近阶段研究视频和音频算法的经历经验.

    在2019年快要来临的时候,写下这篇小记.

    目的很简单,总结过往,展望未来.

    这里列举一些本人在算法上踩过的坑和出坑思路.

    主要是数据标准化问题.

    1.临界值问题  (最大值,最小值,阈值,无穷小,无穷大)

    最早做一键修图的时候,在这个坑上踩了太多次.

    简单描述就是,

    (示例伪代码例子仅供理解思考参考,不具有实际意义)

    1.1 梯度消失

    如果一个算法在计算过程中,存在最小值(无穷小,一般为0或接近0的数),

    那就很可能出现"梯度消失"的问题.

    例如:  

    float weight = 0f; // (或 趋近于0)

    float num = 255.0f;

    float taget = num/weight;

    这种问题最简单的解法就是归一化取值范围, 

    原来取值范围是 0-255,归一化为 1-256

    或转换到对数空间计算然后再转回来.

    1.2 梯度爆炸

    反之,结果为最大值或者接近无穷大的数,甚至溢出有效范围,那就可能出现"梯度爆炸"的问题.

    例如:

    int num1 = 255;
    int num2 = 256;
    unsigned char taget = num1-num2;
    clamp 虽搓,但是简单有效,
    这个解决思路基本跟梯度消失是一个逻辑,归一化.

    1.3 阈值人为主义,非黑即白

    采用阈值的做法,除非你清楚的知道你后续计算,

    只有两种明确情况,否则不要轻易使用阀值.

     int threshold = 127;

    if ( num>threshold)

     taget = 0;

    else

     taget = 1;

    其实,这三个临界值问题,熟悉深度学习的朋友,

    可以类比一下激活函数.

    深度学习现有的激活函数,其实并没有很好解决临界值问题,

    只是采用规避的策略,降低临界值事件的发生概率.

    这里不打算展开讨论,流言止于智者.

    2.信息信号属性问题

    多维空间与时序序列 的困局

    2.1 多维空间

    一般多维空间的问题在图像领域比较常见,当然音频领域也有.

    例如:

    灰度,彩色,YUV空间等.

    多维数据绝大多数情况是为了 "信息互补","信息压缩".

    也就是预计通过多个维度的信息,互相补充作用,最终合成最佳的信号.

    这里最常见的坑就是,多维数据的归一化问题.

    因为很有可能,RGB三个通道的颜色分布并不完全一致,

    这个时候你要融合RGB三个通道的信息,

    就必须考虑将数据归一化到三个通道都适宜的取值范围.

    否则,最后合入时,就会出现上面提到的 临界值问题.

    基本上只要做好 临界值的处理 就可以规避掉了.

    例如图像领域做梯度金字塔融合时候,出现的晕轮效应或强边缘溢色.

    当然,还有一种特例,就是评估策略.

    当你碰到一个问题,对一张彩色图片,你只能用一个值来表达这张图片的全局情况.

    一定要谨记,这个值的得出,必须所有数据参与计算.

    不然就会犯多维数据的 阈值人为主义,非黑即白.

    这个问题,当年设计一键修图算法的时候,就碰到过.

    你怎么判断一张图片的是否需要去雾.

    局部有雾或者全局有雾,去雾系数的确认就是这种问题.

    2.2 时序序列

    时序序列除了 多维空间碰到的问题,它还有更加恼人的问题.

    主要是音频数据和文字语义数据的问题.

    时序信号最最最严重的问题就是时长和叠加.

    也就是一句话的长短,一句话中重叠数据的多少,都有可能推翻所有.

    例如:

    在一起,好不好.

    在一起,不好.

    在一起,好.

    时序问题绝大多数,数据中某个孤立的数据,反而是决定性因子.

    这就有点像,

    中国政府某年颁布了什么什么条例.

    某某行业消亡了.

    时序信号问题,真的就有点大海里去捞针.

    由于近期一直在做音频降噪算法,

    我就碰到这么一根针.

    音频处理算法三大问题,自动增益,噪声抑制,回声消除.

    大家想一个问题,

    如果一个数据连续出现,例如一段音乐.

    你说,太小声,我放大它,

    结果你发现,这时不需要啊,有些音乐就是要渐隐渐现.

    这个时候你会想说,好吧,那么设定一个时长,超过就处理,不超过就不处理.

    参见 临界值问题,这种非黑即白,会死得很惨烈.

    而噪声和回声,就刚才那几句:

    在一起,好不好.

    在一起,不好.

    在一起,好.

    我就问一个问题,"好"出现了两次,有没有可能其中一个"好"是回声.

    第二个问题,第一个"好"是回声,还是第二个"好"是回声.

    第三个问题,如果两个"好"不是回声,那它有没有可能是噪声.

    这就是时序最让人恼火的问题,因为 时序的长度是"模糊"的.

    你说一句话停半秒,他说一句话停一秒.

    这个问题可以称之为,多维空间叠加的数据标准化困局.

    更可怕的是,几乎没有任何标准和直接规律可言.

    3.常识与自然规律

    这个我要重点说一下,之前与不少科班出身的同事共事.

    发现他们经常犯一些常识性错误.

    举个例子:  

    A 是有限集合

    B 是数学向量

    C 是 A+B 的理论结果.

    根据向量的定义,C应该也算是向量的一种表达.

    好的问题来了,C的置信度有多少?

    我相信大多数人都会发现问题,不在B和C而在A.

    因为A是有限集合,它是确认的.

    那么C的置信度只能在A的区间范围内,而不在它之外.

    那么,把上面这问题的变量稍微改动一下,

    A是空间数据集合.

    B是时序数据集合.

    请简述C的置信度?

    我就只能说,你没有常识.

    两种不同维度的数据集合,在我有限的理解范围内,

    我只能将其定义为"噪"动不安.

    也许这个时候,有某位大神跳出来,不对,

    你们都不对,是你们数据量太小了.数据量大了,

    就不会存在这个问题.

    负分滚粗!

    我就问,什么量级的空间数据和什么量级的时序数据,进行什么量级的什么计算,

    可以达到相对平衡的稳态,或者说符合什么样的自然规律.

    这个时候,又一个大神跳出来,广义相对论和狭义相对论.

    时间和空间的问题,就是时空的问题.

    等你超越了时间和空间也就是所谓的超时空,一切问题都不复存在了.

    大神,请收下我的膝盖,带我装逼带我飞向超时空.

    当然还有各种各样的其他问题,当以不变应万变.

    以上仅仅为个人的心得体会,

    若有出入,不要太过较真.

    路漫漫其修远兮.

    以上,权当抛砖引玉.

    关于本人自研的语音增强算法的试用接口已经开放出来,

    地址是http://47.98.140.120/

    拖放wav 和 mp3即可试听降噪前后的效果.

    可能存在特定的wav和mp3由于解码失败问题导致失败.

    我会逐步完善的.

    算法现在是实时处理,

    用在什么硬件环境都毫无压力.

    效果还是不能到达我自己对它的要求.

    主要还是没能很好的解决时序叠加的问题,还有不少的坑要填.

    2019年预计会陆续将以前做的一些图像算法逐步梳理开源.

    最后,祝大家新的一年,心想事成,美梦成真,好事成双.

    本人主要专注 音频,图像,视频算法方向.

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

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

  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/cpuimage/p/10202414.html
Copyright © 2011-2022 走看看