行为识别-从信号分析到机器学习到深度学习

一直想写点东西和大家交流,但是又怕自己才疏学浅,写出的东西让大家笑话,今天突然有感,被笑话也是督促自己进步的途径。

本文的话题是一个看似简单的行为识别模型给我带来的“惊喜”。

为了便于理解,本文对问题进行的简化。本文不涉及用到的理论和方法的详细描述,只是讲述了在解决问题中遇到的问题和收获的知识。

模型功能:识别急加速行为。
输入:三轴加速计数据x,y,z,采样频率10条/秒;
输出:是否发生急加速行为。
应用环境:智能手机

做为一个受过一点教育的工程师,接到这个任务满心欢喜,So easy(领导一定也这么觉得,So easy)。

模型方案信手拈来,搜集急加速行为的数据,标记为1,正常驾驶数据标记为0,建个分类模型,搞定!问题来了,数据要怎么搜集呢?整个几台车出去跑,一个人开车,一个人记录?跑10天,20天…,这样也不是不可以,但是没车没人浪费钱啊。于是乎有人提议了,不如众稠吧,于是一个急加速行为识别的应用诞生了,聪明的读者要发问了,急加速行为识别的模型还没有数据呢,应用是怎么诞生的?是的,这就是本文的一个主题,没有数据的情况下如何建立模型。

没有数据的情况下如何建立模型

机理+规则。看看输入数据的物理意义,输入和输出之间的关联,定义行为判定规则。三轴加速计数据其实就是三个轴的加速度(三轴分别是横向加速度-y轴、前向加速度-x轴、纵向加速度-z轴)

急加速时前向加速度会突变,一定程度的突变就是急加速了,哈哈,读到这里估计有的读者也会觉得不就这么简单吗,这不就是一个信号突变检测吗,检测出来前向加速度突变,定了程度就完事了。大家不要忘了,我们的应用环境是手机啊,手机坐标系和车辆坐标系重合时(手机的x、y、z轴和车辆的x、y、z轴重合)前向加速度突变才是急加速。那你做一下坐标变换就好了,嗯,我也是这么想的。通过旋转坐标变换,将手机的数据变换到车辆的坐标系,变换后的y轴数据突变就是急加速行为,于是乎,数据经过旋转矩阵的转啊转,终于和车辆坐标系重合了。数据搜集硬件也是各种电路吧,会有高频干扰,导致信号突变,加个滤波功能,选小波滤波还是滑动窗口滤波呢(就知道他俩),小波变换可以去除高频噪音,我们这个数据搜集频率就10HZ,还是选滑动窗口滤波。一个滤波+旋转坐标变换的数据变换功能实现了,小小的成就感。

可爱的队友将第一版模型集成到手机,检测结果的提示音相当刺耳,一拿起手机就响,嗯嗯,竟然忽略了如此频繁的场景。要怎么规避使用手机场景的误判呢?使用手机时手机在手里,没有使用手机时手机在车上,车应该比手抖得厉害吧(暂时不考虑手抖的用户了),于是万能的小波分析有派上了用场。在现有模型基础上增加了一层小波分析,又兴致勃勃地拿给队友测试,玩手机不误报了哎,好开心。

看似问题已经解决了,其实并不然,经过测试发现,模型只适用于抗干扰性较好的硬件,然而不同手机抗干扰性差异很大,真的有很不靠谱的硬件啊,自己抽风发抖的,我们又增加了数据源,设计了相应的算法,这里不再赘述了,结论是好手机的用户是我们的好朋友,破手机的用户我们也尽力了(信号分析的方法本人已经技穷了,有高手还希望多多指点)。还有一个问题,几乎每个客户都会问我,加速什么程度算急加速,这个值你们是怎么确定的,说我自己定的,我不够权威,说看别人论文定的,好像自己很Low,技穷。

总结一下本节,有的时候确实需要我们在没有数据的时候做模型,其实大家都不想这样,但是没办法,机理模型、信号分析、专家规则等可以帮助我们过渡这个困难的时期,注意不是渡过。

有一点数据的情况下如何建立模型

经过上面的努力,依然存在没有解决和没有答案的问题,于是乎我们觉得,还是需要一点数据做支撑的,拉着我们组的大哥,搜集了一点点急加速行为数据,实在是太珍贵了,向上采样将数据扩充了几倍,进行了均匀处理,在时域和频域对数据进行特征提取,运用机器学习分类模型进行分类;于是乎,数据的可贵映入眼帘。与之前的信号分析方法相比,特征提取环节提取的特征更加丰富,特征的有效性具有可检测性,就是得试来试去,及其费体力,虽然也有各种各样的选择方法,什么熵增、与因变量关联关系、降维,但依然费体力。与此同时,什么程度的加速是急加速的问题也得到了一定程度上的解决,和我们采集的急加速行为有一定相似度的就是了,这样好像比阈值方法高明一点吧。估计大家又要发问了,你之前为什么不这么做,因为我没有想到硬件差异会这么大,还有就是之前提到的没车没人没钱啊。

一次和别人的合作,让我有幸接触到了Tensoflow、卷积神经网络,顿时感觉,这东西好啊,完全省去了特征提取的体力活了,把输入准备好,调参,期待完美的输出吧。卷积神经网络在图像领域表现突出,通过卷积、池化、连接实现对图像的特征提取和分类。图像可以表示成三维数组,而我们的输入数据属于时域信号,这个输入该如何构造呢?博士运用手机检测碰撞的模型思路,将时域信号构造成满足Tensorflow-CNN输入结构,按照同样的方法进行尝试,果然省时省力啊。经过深入研究CNN,感觉博士构造输入数据结构和网络结构的方式,只能实现对每个变量的单独特征提取,到最后的全连接层才能融合所有输入特征,能不能在构造输入时能够使卷积实现不同变量之间的特征提取呢?因为再对图像进行特征提取时就是邻近区域的特征提取;那么CNN是否支持多输入呢?之前研究过Siamese网络就是多输入的,那么通过构建不同的输入,融合一些先验的信息,来减少网络深度,降低模型的复杂度是否可行呢,我还没有验证啊,感觉应该可行的,有兴趣的读者可以尝试啦。有的读者该发问了,深度学习不就是用深度网络来提升分析的准确性吗?你这是倒退了。但是我并不觉得这是倒退了,我们解决问题的宗旨永远都是用最少的投入获得最大的产出,现实并没有您想象的那么完美,数据足够多、足够全、资源随便用是不现实的,当我们有一些先验知识有助于降低对数据的需求、对资源的需求就要把这些知识融入到模型。

数据的价值在于它蕴含的信息和知识,而先验的知识有助于降低对数据的需求,我不赞同那些抛弃机理盲目追求数据的主张,大家对数据太迷恋了,就像我的老公,一个画配电图的都觉得不懂点大数据都不好意思出门,不得不说,大数据的宣传绝对是成功的。我的意思并不是数据不重要,看到我前面的分析也能感受到数据是重要的,但是数据应该是针对我们解决的问题搜集的数据才有价值。总是看到报导称大部分大数据产品都是伪价值,究其原因各个领域的大数据并没有发展到可以产生价值的阶段,好多行业的现状是,觉得数据有价值,然后随随便便的搜集着,最后交给数据分析师说,你去挖掘一下数据的价值,最后结论往往都是数据分析师水平不行~~,哈哈,我想说如果真的想做大数据就找个领域数据分析专家好好规划一下。

有的时候条件确实是艰苦的,就像创业一样,只有让投资者感受到价值他们才愿意掏钱。先创立一个新方向的时候,就是需要我们从零开始,从一无所有开始解决问题,但是知识和经验就是在磨练中积累,喝下这碗鸡汤吧。

之后我会对工作中遇到的问题,学到的知识进行总结,和大家交流,希望大家能够多多指教。

写博客的目的是学习的总结和知识的共享,如有侵权,请与我联系,我将尽快处理

猜你喜欢

转载自blog.csdn.net/weixin_37801695/article/details/78614356