当前位置: 首页 > 编程日记 > 正文

精彩碰撞!神经网络和传统滤波竟有这火花?

作者 | 凌霄

出品 | AI大本营(ID:rgznai100)

惯性传感器在航空航天系统中主要用于姿态控制和导航。微机电系统的进步促进了微型惯性传感器的发展,该装置进入了许多新的应用领域,从无人驾驶飞机到人体运动跟踪。在捷联式 IMU 中,角速度、加速度、磁场矢量是在传感器固有的三维坐标系中测量的数据。估计传感器相对于坐标系的方向,速度或位置,需要对相应的传感数据进行捷联式积分和传感数据融合。在传感器融合的研究中,现已提出了许多非线性滤波器方法。但是,当涉及到大范围的不同的动态/静态旋转、平移运动时,由于需要根据情况调整加速度计和陀螺仪融合权重,可达到的精度受到限制。为克服这些局限性,该项研究利用人工神经网络对常规滤波算法的优化和探索。

常规滤波算法的不足

惯性姿态估计的现有解决方案通常基于模型和启发式参数化。研究人员会使用测量误差,三维旋转和重力加速度转换的数学模型,选择合理的协方差矩阵,融合权重或定义权重调整方式等参数。尽管在许多应用领域中使用这种解决方案已经获得了相当高的精度,但是众所周知,对于不同类型的运动和干扰,不同的参数化效果也不同。

姿态估计问题

对测量获取的四元数和预估的四元数之间进行误差计算

给定一个在空间中自由移动的,基于 MEMS 的 IMU 的三维加速度计和陀螺仪读数的采样序列,估算每个采样时刻 IMU 相对于参考坐标系的姿态。利用算法获取四元数估计值????̂(????),估计值与真实四元数q(t)之间应具有最小的累积姿态估计误差。

神经网络模型

A.具有一般最佳实践的神经网络结构

模型架构:模型体系结构由多层组成,这些多层可以通过多种方式连接,从而导致不同的特性。首先,必须选择一种用于对动态系统状态进行建模的方法,最常用的是递归神经网络(RNN)和时间卷积网络(TCN)。RNN 具有多种变体,其中一种是 LSTMs。在当前的工作中,研究人员使用两层 LSTM 模型,每层的隐藏大小为 200,最后一个线性层将隐藏的激活次数减少到四个,用以代表估计的姿态四元数的元素,并生成单位四元数。TCN 可用于对系统动力学建模,与 RNN 相比,TCN 的主要优势在于前馈性质,不依赖顺序,从而可以实现可并行性,可以在硬件上加速训练。在当前的工作中,研究人员使用 10 层 TCN,接收 1024 个样本,每层的隐藏大小为 200。下图显示了该工作中使用的 RNN,TCN 模型的结构。

为了进行训练,会从测量的序列中提取较长的重叠序列,因此神经网络会以不同的状态进行初始化。因为对于每个小批量,只能以有限的时间步长合理地训练 RNN,所以使用了随时间的截短反向传播。这意味着长序列会在用于训练的较短窗口中拆分,从而在每个小批量之间传递 RNN 的隐藏状态。使用相同的平均值和标准偏差值对测量的序列进行标准化,从而提高训练的稳定性。

在训练过程中,研究人员主要对模型进行优化。训练中,使用了基于 Pytorch 构建的Fastai 2 API。优化器的学习率是训练神经网络最重要的超参数之一,研究人员通过学习率启发式算法选择最大学习率,并使用余弦退火来加快收敛速度。学习率启发式算法通过在虚拟训练中以指数方式增加学习速率并找到损失具有最陡峭梯度的点来确定最大学习速率。余弦退火从最大学习速率开始,在给定的时期内保持恒定,然后随着时间呈指数减小。

B.损失函数

模型的输出是一个四元数,它描述了传感器的姿态。在大多数情况下,将获取估计值和参考值之间的均方误差。在当前情况下,四元数的逐元素均方误差不是一个合理的选择,因为不能仅通过加速度计和陀螺仪信号来明确估计方向,还必须使用磁力计。一种解决方案是选择与姿态误差函数????????(????, ????̂)相等的损耗函数,同时为避免梯度爆炸,使用线性项代替arccos(d)反余弦函数,并且可以保持单调性和与姿态的相关性

????????(????, ????̂) = 1 − ????

下图直观显示了两个函数及其梯度之间的差异。

C.数据增强

数据增强是一种通过引入域知识来增加给定数据集大小的方法。这是一种可提高模型通用性的正则化方法,已成功应用于计算机视觉和音频建模等领域。在当前姿态估计任务的情况下,研究人员通过随机生成的单位四元数变换测得的加速度计,陀螺仪和参考姿态数据来虚拟旋转 IMU。从而,将用于传感器测量的方向不变性引入模型,并降低其对过度拟合的敏感性。

D.分组输入通道

处理多元时间序列的默认方法是将所有输入信号放入同一层。一种替代方法是创建彼此交互的信号组,并将它们与不需要交互的信号断开连接,从而减轻神经网络发现信号之间的相互作用。在本研究中,研究人员将加速度计和陀螺仪分别进行分组,加速度计在较大的时间尺度上提供姿态信息,而陀螺仪提供有关方向变化的准确信息,如下图所示。

实验

该研究将提出的神经网络与基于标记的光学运动跟踪系统的姿态估计滤波器的性能进行比较。为了分析不同类型的动作以及不同水平的静态或动态活动的算法性能,研究人员考虑了来自不同实验的大量数据集,这些数据具有以下特征:

1.旋转:IMU 在三维空间中自由旋转,同时保持在空间中的同一点附近。

2.平移:IMU 在三维空间中自由移动,同时保持几乎相同的方向。

3.任意:IMU 在三维空间中自由旋转和平移。

4.慢,中,快:运动速度在三个不同级别之间变化。

5.暂停与不间断:每三十秒暂停一次,并在十秒钟的中断后继续运动,或者在五分钟录制的整个过程中不间断执行。

上述实验数据用于验证和比较以下两种姿态估计算法:

•Baseline:基于四元数的姿态估计滤波器,该算法实现了基于加速度计的校正步骤和自动融合权重自适应。滤波器时间常数和权重自适应增益在数值上进行了优化,从而在所有数据集中产生最佳性能。

•神经网络:在增强数据集的子集上训练的神经网络,并在补充的数据集上进行验证。

在三项研究中分析了将神经网络应用于姿态估计问题的特征。第一个将优化的神经网络与基线过滤器的性能进行比较。第二个是消融实验,量化了优化的效果并比较 RNN 和 TCN 模型的性能。最后一项研究分析了缩放神经网络规模的影响。

A.性能分析

通过将神经网络与 Baseline 滤波算法,另外的两种开源滤波算法进行比较,神经网络的中值误差甚至更小,并且在所有运动中均表现良好,鉴于在整个数据集上对过滤器进行了优化的事实,而神经网络从未见过任何验证数据,这一点就显得尤为突出。

B.消融实验

研究结果如下图所示。其一,如果不进行优化,RNN 和 TCN 模型的表现将达到相似的水平。但是,添加优化之后,RNN 的误差要小得多,因为 TCN 局限于感受野,而 RNN 可以在其隐状态下无限期地跟踪 IMU 运动。其二,所有优化均改善了 RNN 和 TCN。对输入进行分组会始终带来较小的改进,而损失优化和数据增强会对性能产生重大影响。因此,通过消融实验可知,要使性能优于基准滤波器,就必须进行损耗优化和数据增强。

C.模型尺寸分析

为了分析模型尺寸对姿态误差的影响,将性能分析中的 RNN 模型应用于消融实验的 12个训练和 3 个验证记录,对 RNN 每一层的神经元数量从 10 缩放到 200,并比较姿态误差。如图所示,误差随着 Hidden Size 的增加而减小,在较大的神经元数量下梯度减小。减小RNN 的 Hidden Size 有助于减少内存占用和总体计算时间,这对于嵌入式系统很重要。但是,由于其顺序性,它仅在边际上减少了具有高并行化功能的硬件加速器的训练和预测时间。

这项工作表明,神经网络是用于基于 IMU 的实时姿态估计的有效工具。如果针对特定领域能够满足相应的优化要求,那么大型递归神经网络的性能将超过最新的非线性姿态估计滤波器。但是,这些优化不同于常规滤波算法的优化,其不需要实现性能良好的滤波器所需的特定知识。此外,基于神经网络的方案需要有足够丰富的数据集,通过数据增强可以大大减少这种需求。最后,根据参数的数量,使用神经网络进行姿态估计需要更多的计算时间。

更多精彩推荐
  • 再见 VBA!神器工具统一 Excel 和 Python

  • 打破“打工人”魔咒,RPA 来狙击!

  • 腾讯AI足球队夺冠Kaggle竞赛,绝悟强化学习方案迁移至足球队

  • 一男子蒙冤入狱10天,竟是 AI 认错了!

  • 舌尖上的AI:人工智能技术正在被“端上”餐桌

相关文章:

软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题)...

2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题) 16.信息系统的安全威胁分成七类,其中不包括()A、自然事件风险和人为事件风险B、软件系统风险和软件过程风险C、项目管理风险和应用风险D、功能风险和效…

ASP.NET 2.0 读取配置文件[INI](示例代码下载)

(一). 功能 操作配置文件[*.ini]类 (二). 代码 1. 核心类文件 INIFILE.cs 代码 1 ///<summary>2 ///INIFILE 操作类3 ///</summary>4 publicclassINIFILE5 {6 [DllImport("kernel32")]7 privatestaticexternlongWritePrivateProfileString(stringsectio…

CSDN送会员?免费的!都来领!

距离春节还有不到一个月你准备好给家人的春节礼物了吗&#xff1f;疫情下&#xff0c;为了让程序猿同学开心加班小编提前准备了一份牛年大礼 周五福利日&#xff0c;人人都可免费领会员&#xff01;助你提前实现CSDN会员卡自由&#xff01;奖品多多&#xff0c;不仅有CSDN月卡会…

BGP相邻体之间磋商的过程

一.BGP的几个概念 空闲&#xff08;IDLE&#xff09; 等待由管理员发起的START事件 正确&#xff0c;到连接状态 错误&#xff0c;回到空闲状态 连接状态&#xff08;Connect&#xff09; 等待TCP的连接是否成功&#xff0c;以期望获得一个对等体 正确&#xff0c;到开放发送Op…

去除ios input部分默认样式

input[typesubmit],input[typebutton]{-webkit-appearance:none;outline:none } input{border-radius: 0;}转载于:https://www.cnblogs.com/bbqwwb/p/6993064.html

Asp.net 2.0 C#实现压缩/解压功能

Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载) (一). 实现功能对文件及目录的压缩及解压功能(二). 运行图片示例(三).代码 1. 压缩类 1/**//// <summary> 2/// 压缩类 3/// </summary>4publicclassZipClass5{ 6 public static void ZipFile(string Fi…

图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)

2019独角兽企业重金招聘Python工程师标准>>> 在ImagXpress中用用于处理TIFF文件的TIFF编辑API&#xff0c;但是怎么使用呢&#xff0c;下面来具体的看看 ImagXpress中的ImageX.DeletePage 方法一次可以删除一个页面&#xff0c;ImageX.DeletePages 方法允许开发人员…

用Matplotlib轻松复刻分析图,看看哪个城市买房最自由

作者 | 费弗里来源 | Python大数据分析简介前不久「贝壳研究院」基于其丰富的房地产相关数据资源&#xff0c;发布了「2020 新一线城市居住报告」&#xff1a;图1而在这个报告中有几张数据可视化作品还是比较可圈可点的&#xff0c;作为&#xff08;在模仿中精进数据可视化&…

Python 代码规范

前言 Python 学习之旅&#xff0c;先来看看 Python 的代码规范&#xff0c;让自己先有个意识&#xff0c;而且在往后的学习中慢慢养成习惯 目录 Python代码规范一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标…

二级域名用asp.net 2.0的实现方案

本人所了解有两种方案&#xff0c;可能还有其的方式&#xff0c;希望大家多多讨论&#xff01; 基本思路&#xff1a;1. 域名支持泛解析&#xff0c;即是指&#xff1a;把A记录 *.域名.com 解析到服务器IP&#xff0c;服务器IIS中做绑定&#xff0c;绑定时主机头为空;2. 为了…

又一例“监视员工?”百度回应:和 996 无关,目前没有任何应用

整理 | 王晓曼图源 | 视觉中国出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09;1月13日晚间&#xff0c;针对百度公开“员工工作状态预测”专利惹争议一事&#xff0c;百度在官方微博火速回应称&#xff0c;这是一个管理上的“人岗匹配”衡量方法&#xff0…

僵死进程和僵尸进程

一个进程在调用exit命令结束自己的生命的时候&#xff0c;其实它并没有真正的被销毁&#xff0c;而是留下一个称为僵尸进程&#xff08;Zombie&#xff09;的数据结构&#xff08;系统调用exit&#xff0c;它的作用是使进程退出&#xff0c;但也仅仅限于将一个正常的进程变成一…

AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

[HNOI2010]BOUNCE 弹飞绵羊 思路&#xff1a; SBlct&#xff1b; 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define maxn 200005 int n,m,f[maxn],ch[maxn][2],rev[maxn],ki[maxn],sta[maxn],top,lit,size[maxn]; inline void in(int &now) {c…

C#与RSS亲密接触

讲述动态生成RSS文件的方法。动态生成RSS文件也基本有两种方法&#xff0c;一种是用字符串累加的方法&#xff0c;另一种是使用xml文档生成的方法。字符串累加的方法也比较简单&#xff0c;我也就不多说了&#xff0c;这里着重说一下生成XmlDocument的方法&#xff0c;包括各种…

2020 ACM Fellows 名单出炉,13 名华人入选,7 名来自国内!

【编者按】一年一度的 ACM Fellow 名单现已新鲜出炉&#xff01;向来以严格审查闻名的ACM Fellows&#xff0c;今年居然共选择了 95 名科学家&#xff0c;其中还有 13 位华人&#xff0c;来看看都是哪些大佬吧&#xff01;整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;C…

Mybatis调用Oracle的存储过程

如何使用Mybaits调用数据库中的存储过程&#xff0c;下面以Oracle数据库的为例&#xff1a;1&#xff0e;在数据库中创建以下的存储过程&#xff1a;2&#xff0e;编写SQL映射文件WxclDAO.xml&#xff1a;<select id"selectWxcl2" parameterType"java.util.M…

JavaScript - 数据类型和变量

计算机顾名思义就是可以做数学计算的机器&#xff0c;因此&#xff0c;计算机程序理所当然地可以处理各种数值。但是&#xff0c;计算机能处理的远不止数值&#xff0c;还可以处理文本、图形、音频、视频、网页等各种各样的数据&#xff0c;不同的数据&#xff0c;需要定义不同…

用Socket发邮件的代码(可以群发)

qunFa.aspx文件的代码&#xff1a; <%... Page language"c#" Codebehind"qunFa.aspx.cs" AutoEventWireup"false" Inherits"liuwei.hanmail.qunFa" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&qu…

rcp(插件开发)插件B需要引用插件A中的jar包-如何处理依赖关系

如果插件B需要引用插件A中的jar 通常需要以下几步&#xff1a; 1.插件B要依赖插件A 2.在插件B的build path中添加插件A的jar包 3.插件A的runtime导出插件B中使用jar的package

微软Cortana全面升级神经网络语音,效果堪比真人发音

近日&#xff0c;微软在全球范围内对Cortana进行了神经网络语音全面升级&#xff0c;升级后的Cortana更加自然流畅&#xff0c;语音效果堪比真人发音。 以下是Cortana不同国家、不同语言升级前后语音效果对比&#xff1a; Cortana音频 此次升级利用了深度神经网络技术&#…

Spring《五》集合的注入方式

List、Set、Map、Properties 1、List <property name"msg"> <list> <value>gf</value> <value>gd</value> <value>HelloWorld</value> </list> </property> 2、Set <property name"msg"&g…

虚方法的调用是怎么实现的(单继承VS多继承)

我们知道通过一个指向之类的父类指针可以调用子类的虚方法&#xff0c;因为子类的方法会覆盖父类同样的方法&#xff0c;通过这个指针可以找到对象实例的地址&#xff0c;通过实例的地址可以找到指向对应方法表的指针&#xff0c;而通过这个方法的名字就可以确定这个方法在方法…

asp.net 2.0防止同一用户同时登陆

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在&#xff0e;在这里使用一个cache存放已经登陆的用户名&#xff0e;但是还有一个问题就是要知道用户是什么时候离开系统的呢&#xff1f;这就要定期清除cache中的内…

Python+Dash快速web应用开发——基础概念篇

作者&#xff1a;费弗里来源&#xff1a;Python大数据分析❝本文示例代码与数据已上传至https://github.com/CNFeffery/DataScienceStudyNotes❞1 简介这是我的新系列教程「PythonDash快速web应用开发」的第一期&#xff0c;我们都清楚学习一个新工具需要一定的动力&#xff0c…

POJ 1273 Drainage Ditches

网络流。题意非常easy。给出单向边&#xff0c;容量。找最大流。注意重边要加起来。g[u][v].cc; 第一次写网络流。也是第一个网络流的题。看了两天&#xff0c;理解了之后就唰唰唰的写出来了。 大概可能是EK吧。ORZ都不知道用的啥算法。仅仅是感觉要这样写。由于重边还WA了。改…

利用GridView显示主细表并一次编辑明细表所有数据的例子

全部代码如下&#xff1a; ASPX&#xff1a; <% Page Language"C#"ValidateRequest"false"AutoEventWireup"true"EnableViewState"false"CodeFile"Default2.aspx.cs"Inherits"Default2"%><!DOCTYPE ht…

TensorFlow搭建垃圾分类系统大师(免费领源码)

人工智能是一个多学科交叉融合的领域&#xff0c;其包含机器学习、计算机视觉、自然语言处理等多个子领域&#xff0c;其中计算机视觉是应用最广泛的领域之一。大多数人熟悉的手机和相机中的人脸识别功能&#xff0c;就是人工智能子领域——计算机视觉的体现。计算机视觉中的图…

for的循环遍体

以下讲解for的变体形式&#xff0c;对于一般的for语句常规这里不再赘述关于for变体 主要是用来实现一些特殊需求&#xff1a;//注意不要使for成为死循环 for(int i0;i!5;1){//DOLOOP }1&#xff09;假如&#xff0c;我们需要对循环变量i在循环外部使用&#xff0c;并调用循环变…

切版网上线,启用qieban.cn

2019独角兽企业重金招聘Python工程师标准>>> 近期&#xff0c;切版网收购并启用了qieban.cn域名&#xff0c;输入域名可以看到非常抢眼的黄底黑色的网站。复制国外psd2html模式&#xff0c;主要提供html5/css3前端外包。 可见切版网对域名的保护是非常的重视。据查询…

Microsoft .NET Pet Shop 4 架构与技术分析

1&#xff0e;项目概述与架构分析微软刚推出了基于ASP.NET 2.0下的Pet Shop 4, 该版本有了一个全新的用户界面。是研究ASP.NET 2.0的好范例啊&#xff0c;大家都知道&#xff0c;一直以来&#xff0c;在.NET和Java之间争论不休&#xff0c;到底使用哪个平台开发的企业级应用性能…