汽车驾驶任务的隐马尔可夫模型识别方法研究
汽车驾驶任务的隐马尔可夫模型识别方法研究
一、Introduction
自动驾驶汽车经过了几十年的发展,是目前国内外汽车行业中的重要研究方向。自 动驾驶汽车的智能化需要车辆能够有类“人”的行为,在决策策略上可以满足人的心理 需求。人在驾驶过程中,会根据自身对交通规则和道路结构化的认知确定交通级的驾驶 任务,针对不同的驾驶任务采取不同的决策策略。识别交通级的驾驶任务能够在车辆的 驾驶历程中自动获取每种驾驶任务的行驶过程数据,是研究人在每种驾驶任务下的决策 行为特点的前提。
自动驾驶检测算法有以下几种:
- 深度学习和强化学习算法:这些算法利用大量的驾驶数据(例如车辆的传感器数据、GPS数据等)进行训练,以识别和预测可能的驾驶任务。
- 基于传感器和机器视觉的算法:这些算法利用车辆上的传感器(例如雷达、激光雷达(LiDAR)等)和机器视觉技术来检测和识别车辆周围的环境,包括其他车辆、行人、交通信号等。
- 基于模型预测控制的算法:这种算法利用模型预测控制(MPC)技术,根据车辆的当前状态和预测未来的状态,来制定最佳的驾驶策略。
- 基于人工智能的算法:这些算法利用人工智能技术,例如神经网络、决策树等,来建立自动驾驶汽车的决策和控制模型。
- 基于模式识别的方法
这些算法的应用和发展,对于提高自动驾驶汽车的性能和安全性具有重要意义。然而,由于自动驾驶汽车的复杂性,需要不断地研究和改进这些算法,以满足实际应用的需求。此外,还需要解决算法的可扩展性、实时性和鲁棒性等问题。
基于模式识别的方法:
首先可以分为两种:
- 监督分类:这种方法是学习已标注数据的特征,得到由输入数据到分类结果的映射规律。需要已知识别模型库或各种模式的集合,根据数据特征和先验知识进行识别分类,识别分类的结果存在于已知的模型库或集合中。
- 无监督分类:这种方法是学习非标注数据的规律,不需要预先知道模式类别,而是根据统计规律的相似性自动识别分类。
本文提到的模式识别方法主要有以下几种:
- 结构模式识别:这种方法通过分析输入对象的结构关系进行识别。
- 统计模式识别:这种方法基于统计学习理论,通过建立统计模型,对输入数据进行分类和识别。
- 神经网络模式识别:这种方法通过模拟人脑神经网络的运作方式,建立神经网络模型进行识别分类。
- 模糊模式识别:这种方法基于模糊数学理论,通过模糊逻辑和模糊集合的方式进行识别分类。
- 模板匹配模式识别:这种方法通过建立模板,将待识别对象与各个模板进行比较,选出相似程度最高的作为该对象的识别结果。
这些方法在多个领域都有广泛的应用,如手势识别、文字识别、语音识别等。
驾驶任务模式识别方法研究现状:
本文提到的驾驶任务识别方法主要有以下几种:
- 支持向量机:支持向量机是一种有监督的学习方法,通过求解一个超平面实现二值分类。它在人脸识别、说话人识别和手写孤立字识别等方面有着广泛的应用。在车辆行为识别中,支持向量机也被用于识别车辆的快速掉头、大半径转弯等行为,以及车辆换道行为的识别。此外,本文还提到了支持向量机在统计模式识别中的应用,它是一种常见的分类器,可以通过计算机进行特征提取,效率高且稳定。
- 隐马尔科夫模型:隐马尔可夫模型(HMM)是一种统计模型,可以用于研究时间序列数据。其描述了两个随机过程之间的关系,一是不可见的状态之间的随机过程,二是观测值之间的随机过程,适合模拟状态不可见但状态有对应的观测的随机过程。而通过隐马尔可夫模型可以实现对车辆左转弯、右转弯、超车和直行的意图进行识别预测。
- 贝叶斯网络:贝叶斯网络(BN)是节点与节点之间连接形成的有向、无环的图结构,节点表示事件的发生,有向边表示两个事件先后发生的条件概率,通过先验知识构建起贝叶斯网络结构。利用贝叶斯网络对驾驶行为的识别,往往需要建立起车辆和环境的关系,考虑车辆间的交互行为。如车辆换道过程的行驶速度、换道车辆与周围车辆的速度差、换道车辆与周围车辆的距离等作为观测量,由于这些观测量是连续变化的,因此需要建立贝叶斯网络结构进行识别观测。
- 人工神经网络:人工神经网络(ANN)由大量神经元以一定的连接方式形成,模拟人的脑神经对信息进行处理。随着人工智能领域的兴起,对神经网络的研究逐渐加深,在模式识别、生物医学等领域得到广泛应用。如在驾驶模拟器上进行驾驶试验,获取试验数据,选取车辆相对于车道的横向偏移量、横向偏移量的一阶导数、横向加速度、方向盘转角等作为特征参数,以进行神经网络模型的构建,从而对车辆的换道行为进行识别。
- 其他方法:利用惯性测量单元(Inertial Measurement Unit, IMU)和全球定位系统
(GPS)获取车辆运动过程数据,建立了随机森林(RF)、K-最近邻、隐马尔可夫模型、人工神经网络、卷积神经网络等多个模型,识别环岛行驶、左转弯、右转弯、刹车等行为。还有很多······
二、模型建立
1.驾驶任务分析
驾驶员对车辆的操纵是人的操 纵行为,例如对加速踏板、制动踏板、方向盘的操纵;车辆的行驶运动是车辆的行驶行 为,最直接的体现是车辆的速度和方向。驾驶员操控加速踏板和制动踏板改变车辆的速 度,操控方向盘改变车辆的行驶方向,所以,人的操纵行为决定了车辆的行驶行为。人的操纵行为受人的习惯、身体状态、驾车的熟练程度等因素的影响,不同的人在同样的路段上驾车会有不同的操纵行为,即使是同一个 人,每次经过同样的路段,其操纵行为也会有差异,操纵行为的不同导致了车辆行驶行 为的不同。但人的操纵行为受到道路结构化和交通规则的决定,道路结构化和交通规则 确定的情况下,尽管每个人的操纵行为有差异,但总体的趋势是一样的,车辆运动的总 体趋势也是相似的。在车辆的横向运动上,这样的“总体趋势”称为驾驶任务。
本文 的驾驶任务包括左转弯驾驶任务(Turning Left, TL)、右转弯驾驶任务(Turning Right, TR)、掉头行驶驾驶任务(U-Turn, UT)、左换道驾驶任务(Lane Changing of Left, LCL)、 右换道驾驶任务(Lane Changing of Right, LCR)和沿道行驶驾驶任务(Lane Keeping, LK),其中掉头行驶是指车辆在交叉路口处的 U 型弯掉头行驶,沿道行驶是指车辆在小曲率道路的同一条车道上行驶。
车辆在十字路口处的左转弯行驶过程,每一条行驶路径都是先后经过直线 行驶、转向行驶、直线行驶,只是直线行驶和转向行驶的过程有所不同,不同转向行驶 过程中的轨迹的曲率不同,是“大转弯”还是“小转弯”,这是因为受到影响人的操纵行为的因素的影响,但每种轨迹形态都是完成左转弯的驾驶任务。
若把完成每种驾驶任务的轨迹形态看成是从起点到终点的有向曲线,不同驾驶任务 的轨迹形态有明显区别;以车辆行驶过程的驾驶员操作量为例,完成不同的驾驶任务, 驾驶员操作量信号区别也很明显。如图方向盘转角不同,车辆轨迹也不同:
车辆的行驶过程和人类的说话过程是相似的,一个车辆的行驶过程和一段语音过程 都是连续的、随时间变化的。类比语音识别我们发现出车辆的行为和人的语音行为相似。
鉴于语音识别与驾驶任务识别之间的相似性,我们相应地提出了驾驶任务的识别方式。
1. 以固定长度的时间窗口对行驶 过程进行截取,并将所截取部分的特征向量输入至每个驾驶任务的隐马尔可夫模型,输 出该窗口下的 行驶过程属于何种驾驶任务的子片段。通过不断滑动窗口,可以得到连续 的驾驶任务子片段的输出结果,相同子片段的拼接即可形 成同一种驾驶任务,进而完成 对完整的行驶过程的切分工作。
2. 将每一种驾驶任务看作是一个字,分别建立各自的隐马尔可夫模型,在识别的过程,把一段待识别的行驶过 程的特征向量输入至每 个隐马尔可夫模型,求出最大的概率值对应的驾驶任务。但待识别的行驶过程片段需要以某种方式在整个行驶过程中切分好,该段行 驶过程片段属于驾驶任务中的某一种,这样对驾驶过程的自动化标注才能准确,否则,即使不属于某一驾驶任务的一段行驶过程,在 每个隐马尔可夫模型中也会求得相应的概率值,也会有一个概率值最大的模型对应的驾驶任务作为识别结果,但识别结果和这段行驶 过程并不匹 配。因此需有一种正确分割完整行驶过程的方法来保证识别驾驶任务并自动标注的准确性。
2.隐马尔科夫模型基本理论
马尔可夫链是一种概率统计模型,是在马尔可夫过程的理论基础上形成的。当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性。马尔可夫模型是对马尔可夫过程进行建模,通过状态和状态之间的转移概率表达一个马尔可夫过程。在马尔可夫模型中,状态和观测到的事件能够相互对应,但在更复杂的问题中,随机过程的状态不能直接观测,是“隐藏”的,与可观测的事件无法直接对应起来,但两者之间仍存在一定的联系,这种联系可以通过不可观测的状态和可观测事件之间的概率关系建立,即不可观测的状态到可观测到的事件有一定的概率,这样建立起来的模型即是隐马尔可夫模型。
隐马尔可夫模型是一个双重的随机过程,第一个随机过程体现在隐含状态的变化,是隐含状态之间按照一定的概率随着时间的变化发生状态转移的过程,即t时刻的状态 q t q_t qt 到下一时刻的任何一个状态 q ( t + 1 ) q_(t+1) q(t+1)都有一定的转移概率。
假设在长度为 T 的时间序列中,隐含状态序列为 Q = { q 1 , q 2 , ⋅ ⋅ ⋅ , q T } Q=\{q_1,q_2,···,q_T\} Q={q1,q2,⋅⋅⋅,qT},对应的观测序列为 O = { o 1 , o 2 , ⋅ ⋅ ⋅ , o T } O=\{o_1,o_2,···,o_T\} O={o1,o2,⋅⋅⋅,oT}。一个隐马尔可夫模型由以下五个参数确定:
1.模型隐含状态数 N:一个隐马尔可夫模型包括有限个隐含状态 S。 S = { s 1 , s 2 , ⋅ ⋅ ⋅ , s N } S=\{s_{1},s_{2},···,s_{N}\} S={s1,s2,⋅⋅⋅,sN}。N 为模型隐含状态数
2.隐马尔可夫模型中每个隐含状态 s 都对应着可观测值,所有可观测值构成的集合为 HMM 模型的可观测值 V, V = { v 1 , v 2 , ⋅ ⋅ ⋅ , v M } V=\{v_1,v_2,···,v_M\} V={v1,v2,⋅⋅⋅,vM}
M 为每个隐含状态对应的观测值数目
3.初始状态概率向量 π \pi π ,初始状态概率向量 π \pi π 表示了隐含状态 S 在初始时刻的概率分布
π = ( π i ) π i = P ( q 1 = s i ) , i = 1 , 2 , . . . , N \pi=(\pi_i) \\ \pi_i=P(q_1=s_i),\quad\quad i=1,2,...,N π=(πi)πi=P(q1=si),i=1,2,...,N
其中, π i \pi_i πi表示时刻 t =1 时处于状态 S i S_i Si的概率。
4.状态转移概率矩阵 A 是一个大小为 N × N的矩阵,描述了所有状态之间的概率转移关系:
A = [ a i j ] N × N a i j = P ( q t + 1 = s j ∣ q t = s i ) , i = 1 , 2 , ⋅ ⋅ ⋅ , N , j = 1 , 2 , ⋅ ⋅ ⋅ , N A=[a_{ij}]_{N\times N}\\ a_{ij}=P(q_{t+1}=s_j\mid q_t=s_i),\quad i=1,2,···,N,\quad j=1,2,···,N A=[aij]N×Naij=P(qt+1=sj∣qt=si),i=1,2,⋅⋅⋅,N,j=1,2,⋅⋅⋅,N
5.发射矩阵 B 也称观测概率矩阵,是一个大小为 N × M的矩阵,描述了状态与观测之间的概率转移关系:
B = [ b j ( k ) ] N × M b i ( k ) = P ( o t = ν k ∣ q t = s i ) , i = 1 , 2 , . . . , N , k = 1 , 2 , . . . , M B=[b_{j}(k)]_{N\times M}\\ b_{i}(k)=P(o_{t}=\nu_{k}\mid q_{t}=s_{i}),i=1,2,...,N,k=1,2,...,M B=[bj(k)]N×Mbi(k)=P(ot=νk∣qt=si),i=1,2,...,N,k=1,2,...,M
对一个问题采用隐马尔可夫模型建模时,首先要根据实际问题确定模型隐含状态数 N 和可观测值数目 M ,进而求解 π \pi π、 A 和 B 。因此确定了初始状态概率向量 π \pi π 、状态转移概率矩阵 A 和发射矩阵 B 这三个要素,就确定了一个隐马尔可夫模型,三者可由一 个三元组表示:
λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)
其中,由初始状态概率向量 π \pi π 和状态转移概率矩阵 A 确定了隐含的状态序列,由隐含的状态和状态之间的概率转移关系确定了马尔可夫链。发射矩阵 B 确定了隐含状态产生观测值的过程,和隐含状态序列一起形成了观测序列。
一个隐马尔可夫模型包括三个基本问题,分别是评估问题、学习问题和解码问题,而三种问题常见的求解算法分别为前向-后向算法(Forward-Backward)、鲍姆-韦尔奇算法(Baum-Welch )和维特比算法(Viterbi )。
本文采用隐马尔可夫模型对驾驶任务识别,识别的过程主要采用隐马尔可夫模型的评估问题的解决思路,但在进行识别之前,需要通过训练数据对模型进行训练,得到隐马尔可夫模型的模型参数。因此,本文的研究主要涉及隐马尔可夫模型的学习问题和评估问题。
这里对此三种算法不再进行赘述,接下来我们看本文驾驶任务识别所用到的HMM。
3.基于 HMM 的驾驶任务识别模型建立
基于 HMM 的驾驶任务识别模型的建立流程如图所示:
本文采用利用汽车驾驶模拟器进行试验,采集车辆行驶过程的数据,进行模型的训练和测试,具体试验方法和数据采集方法将在本文第 4 部分详细介绍
1.选择模型输入的特征参数
在原有数据的 n 维特征选择其中对识别过程价值最大的 m 维特征。首先选择出能表现车辆横向运动状态变化的物理量。车辆运动状态量信号:侧向速度 v 、侧向加速度 a y a_y ay 、横摆角速 度 r ;驾驶员操作量信号:方向盘转角 θ \theta θ 、方向盘转角速率 ω ;车辆位置信息:车辆的 横坐标 X 和纵坐标 Y 。其中,在实际车辆上,车辆运动状态量和驾驶员操作量可以由 CAN 总线、惯性测量单元(IMU)等直接获得或计算得到,车辆位置信息可以通过 GPS 与 IMU 对车辆进行定位获得。
CAN(controller area network)控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线。
惯性测量单元IMU由三部分组成:加速度计、磁力计、陀螺仪。
加速度计就是测量三个方向的加速度;磁力计就是测量磁场北极的方位;陀螺仪测量的就是绕三个方向旋转速度:
通过驾驶模拟器得到车辆的运动状态信号:侧向速度 v 、侧向加速 度 a y a_y ay 、横摆角速度 r、方向盘转角 θ \theta θ、车辆运动轨迹的曲率K。
2.模型参数设计与训练
HMM 模型参数选取:
确定将每个驾驶任务的多个试 验样本的特征参数组合形成模型的特征向量;然后将每组特征向量输入至每个隐马尔可 夫模型中,得到每个 HMM 识别模型的模型参数:
λ 1 ——左转弯驾驶任务模型 T L _ H M M λ 2 ——右转弯驾驶任务模型 T R _ H M M λ 3 ——掉头行驶驾驶任务模型 U T _ H M M λ 4 ——左换道驾驶任务模型 L C L _ H M M λ 5 ——右换道驾驶任务模型 L C R _ H M M λ 6 ——沿道行驶驾驶任务模型 L K _ H M M \begin{aligned} &\lambda_1——左转弯驾驶任务模型 TL\_HMM \\ &\lambda_2——右转弯驾驶任务模型 TR\_HMM \\ &\lambda_3——掉头行驶驾驶任务模型 UT\_HMM \\ &\lambda_4 —— 左换道驾驶任务模型 LCL\_HMM \\ &\lambda_5 —— 右换道驾驶任务模型 LCR\_HMM \\ &\lambda_6 —— 沿道行驶驾驶任务模型 LK\_HMM \end{aligned} λ1——左转弯驾驶任务模型TL_HMMλ2——右转弯驾驶任务模型TR_HMMλ3——掉头行驶驾驶任务模型UT_HMMλ4——左换道驾驶任务模型LCL_HMMλ5——右换道驾驶任务模型LCR_HMMλ6——沿道行驶驾驶任务模型LK_HMM
已知一个隐马尔可夫模型由 5 个参数组成,分别是隐含状态数 N 、可观测 值数目 M 、初始状态概率向量 π \pi π 、状态转移概率矩阵 A、发射矩阵 B 。需要确定隐含 状态数 N 和可观测值数目 M ,并初始化初始状态概率向量 π \pi π 、状态转移概率矩阵 A、 发射矩阵 B ,以此来完成模型的训练过程,进而建立隐马尔可夫模型。
HMM 模型参数设计:
驾驶任务的观测变量是连续变化的,因此发射矩阵 B 需 要能够表示连续型随机变量的概率分布。这里使用了高斯混合模型表达其概率分布特征:
B ( j ) = b j ( o ) = ∑ j M G c j k Γ ( O , μ j k , σ j k ) , 1 ≤ j ≤ N ∑ k = 1 M G c j k = 1 , c j k > 0 , 1 ≤ j ≤ N 其中 Γ —— 多元高斯概率密度分布函数; O ——观测序列; μ ——均值矩阵; σ —— 协方差矩阵; M G —— 高斯混合成分的个数; N —— 隐含状态数; c j k —— 第 j 个隐含状态的第 k 个高斯混合成分的系数, c j k 需要满足下式约束 : B(j)=b_j(o)=\sum_{j}^{M_G}c_{jk}\Gamma(O,\mu_{jk},\sigma_{jk}),\quad1\leq j\leq N\\ \sum_{k=1}^{M_G}c_{jk}=1,\quad c_{jk}>0,1\leq j\leq N \\ 其中 \\ \begin{aligned} &\Gamma\text{ —— 多元高斯概率密度分布函数;} \\ &\text{O ——观测序列;} \\ &\mu\mathrm{——}\text{均值矩阵;} \\ &\sigma\text{ —— 协方差矩阵;} \\ &\begin{aligned}M_G&\text{ —— 高斯混合成分的个数;}\end{aligned} \\ &N\quad——\text{ 隐含状态数;} \\ &c_{jk}\text{ —— 第 }j\text{个隐含状态的第}k\text{ 个高斯混合成分的系数,}c_{jk}\text{ 需要满足下式约束}: \end{aligned} B(j)=bj(o)=j∑MGcjkΓ(O,μjk,σjk),1≤j≤Nk=1∑MGcjk=1,cjk>0,1≤j≤N其中Γ —— 多元高斯概率密度分布函数;O ——观测序列;μ——均值矩阵;σ —— 协方差矩阵;MG —— 高斯混合成分的个数;N—— 隐含状态数;cjk —— 第 j个隐含状态的第k 个高斯混合成分的系数,cjk 需要满足下式约束:
初始状态概率向量 π \pi π 是一个驾驶任务模型中每个隐含状态初始的概率值。状态转移概率矩阵 A 是一个驾驶任务模型中 各个隐含状态之间的转移概率。二者在模型训练之前都需要先设定初始值,初始值的设 定一般对识别结果无太大影响,所以可以任意设定。对隐含状态数为 3 的 TL_HMM、 TR_HMM、UT_HMM 的初始状态概率向量 π \pi π 和状态转移概率矩阵 A 设定相同的初值, 对隐含状态数为 4 的 LCL_HMM 和 LCR_HMM 的初始状态概率向量 π \pi π 和状态转移概率 矩阵 A 设定相同的初值。如下所示:
π 0 − 1 = π 0 − 2 = π 0 − 3 = [ 1 / 1 / 1 / 3 3 3 ] T π 0 − 4 = π 0 − 5 = [ 0.25 0.25 0.25 0.25 0.25 ] T π 0 − 6 = [ 0.5 0.5 ] T A 0 − 1 = A 0 − 2 = A 0 − 3 = ( 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 1 ⁄ 3 ) A 0 − 4 = A 0 − 5 = ( 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 ) A 0 − 6 = ( 0.5 0.5 0.5 0.5 ) . \pi_{0_{-1}}=\pi_{0_{-2}}=\pi_{0_{-3}}=[\begin{array}{ccc}1/&1/&1/\\3&3&3\end{array}]^T\\ \pi_{0_-4}=\pi_{0_-5}=[0.25 \ 0.25\ 0.25\ 0.25\ 0.25]^T\\ \pi_{0_-6}=[0.5 \ 0.5]^T\\ A_{0_-1}=A_{0_-2}=A_{0_-3}=\begin{pmatrix}1⁄3&1⁄3&1⁄3\\1⁄3&1⁄3&1⁄3\\1⁄3&1⁄3&1⁄3\\1⁄3&1⁄3&1⁄3\end{pmatrix}\\ A_{0_-4}=A_{0_-5}=\begin{pmatrix}0.25&0.25&0.25&0.25\\0.25&0.25&0.25&0.25\\0.25&0.25&0.25&0.25\\0.25&0.25&0.25&0.25\end{pmatrix}\\ A_{0_{-}6}=\begin{pmatrix}0.5&0.5\\0.5&0.5\end{pmatrix}. π0−1=π0−2=π0−3=[1/31/31/3]Tπ0−4=π0−5=[0.25 0.25 0.25 0.25 0.25]Tπ0−6=[0.5 0.5]TA0−1=A0−2=A0−3= 1⁄31⁄31⁄31⁄31⁄31⁄31⁄31⁄31⁄31⁄31⁄31⁄3 A0−4=A0−5= 0.250.250.250.250.250.250.250.250.250.250.250.250.250.250.250.25 A0−6=(0.50.50.50.5).
HMM 模型参数训练:
本文研究采用 10-fold 交叉验证法对数据样本进行划分,以此来完成对驾驶任务 识别模型的训练和验证。10-fold 交叉验证法将数据样本均分为十份,每次不重复地取 出其中一份作为验证集,其余九份作为训练集,对模型进行十次的训练和验证过程。
通过每个驾驶任务的试验数据对驾驶任务识别模板库的每个隐马尔可夫模型进行 训练。步骤如下:
(1)选择一组数据,计算均值 0 和协方差矩阵 0 ,和其他初始化参数一起初始化 隐马尔可夫模型;
(2)输入当前驾驶任务训练数据,利用前向-后向算法计算观测序列概率;
(3)计算在上述定义的两个概率值 ( , ) t i j 和 () t i ,并利用 Baum-Welch 算法对模 型参数进行重估;
(4)根据参数重估结果,计算新的观测序列概率,并判断观测序列概率的值是否 收敛。若不收敛,则迭代进行第(2)(3)步;若收 敛,停止迭代,输出模型参数。 本文研究借助 Matlab 中的 HMM 工具箱,并编写相关程序,完成对各驾驶任务的 隐马尔可夫模型 的训练工作,得到训练后的各个模型的模型参数 λ i = { π i , A i , c i , μ i , σ i } \text{ }\lambda_{i}=\{\pi_{i},A_{i},c_{i},\mu_{i},\sigma_{i}\} λi={πi,Ai,ci,μi,σi}
训练过程如图所示:
三、车辆行驶过程分段方法设计
本章讨论的是如何选取分类器模型的输入信号,即车辆行驶过程的分段方法。
利用 HMM 分类器对驾驶任务识别,需要在完整的行驶过程中选取 HMM 的输入信 号,本章分析了现有的基于滑动时间窗口的识别方法存在的问题,提出了一种基于任务特征分段的驾驶任务识别方法,以此将车辆行驶过程按驾驶任务的不同进行分段,并将分段信号作为 HMM 分类器的输入完成每段行驶过程的驾驶任务识别,实现车辆行驶过程的自动分段识别。
识别流程图如下。
1.基于滑动时间窗口的驾驶任务识别方法
行驶过程分段识别方法分析
基于滑动时间窗口的驾驶任务识别方法目前常被用于车辆换道行为的识别研究中,其流程如图所示:
该方法对车辆行驶过程的识别过程与连续语音识别的过程相似,首先将车辆的行驶过程划分成小的行驶过程子片段,再按照时间顺序完成对每个行驶过程子片段的识别,每个子片段的识别结果都属于一个驾驶任务,将连续的行驶过程子片段的识别结果进行合并,相同结果的子片段合并在一起形成一段完整的驾驶任务。
隐马尔可夫模型作为该识别方法中的分类器模型,完成对 i 时刻窗口长度为 T w T_w Tw 内信号的识别,其输出的结果为窗口截取的行驶过程子片段的驾驶任务类型。
2.基于任务特征的行驶过程分段方法
在汽车驾驶任务识别中,将一种驾驶任务视为一个字,对每个驾驶任务建立单独的识别模型,形成模板库,通过将车辆完成一段完整驾驶任务行驶过程对应的信号在模板库中进行匹配,得到该段驾驶任务的识别结果,这样可以充分利用一个驾驶任务的信号特征。但这样的识别方法需要保证模型的输入信号恰好是某一种驾驶任务对应的信号,否则,不属于某种驾驶任务的行驶过程也会被识别成某一驾驶任务类型。
下面将介绍如何对车辆的行驶过程按驾驶任务进行准确分段,提取出待识别的驾驶任务行驶过程。
具体的分段过程中,利用驾驶任务行驶过程信号的波形特征确定沿道段,将其余行驶过程分为转向段,根据 HMM 分类器逐一对转向段进行识别,得到每个转向段的驾驶任务识别结果,完成对车辆行驶过程的分段识别。
本章针对输入HMM模型信号的截取问题,提出了基于任务特征分段的驾驶任务识别方法。
首先,分析了目前常用的车辆行为的识别方法,建立了基于滑动时间窗口的驾驶任务识别方法,在该方法中,以滑动时间窗口的形式截取车辆行驶过程的信号,输入至 HMM 分类器中识别时间窗内的驾驶任务,通过不断滑动窗口,完成对整个行驶过程的识别,并以最终的识别结果形成不同驾驶任务之间的分段点。虽然该方法可以利用局部信息实时识别或预测车辆的行为,但由于不同驾驶任务的转向过程的特征存在局部相似性,不能准确、完整地提取驾驶任务。
其次,考虑到本文研究是在完整的车辆行驶历程数据中识别驾驶任务,本文提出了基于任务特征分段的驾驶任务识别方法。驾驶任务受道路几何结构决定,车辆运动轨迹的曲率在一定程度上也能反映道路的结构特征,因此,该方法根据车辆完成不同驾驶任务的轨迹曲率特征,将车辆行驶过程以沿道段分割为多个转向段,每个转向段为一个完整的待识别的驾驶任务,将其输入至 HMM 分类器,可以完成对转向段的识别。通过对分段结果的比较,本文提出的基于任务特征的行驶过程分段方法可以更准确地完成对行驶过程按不同驾驶任务进行分段。
四、模型验证
通过试验验证了本文提出的基于任务特征分段的驾驶任务识别方法的有效性。 首先,利用汽车驾驶模拟器搭建试验平台,通过试验获取本文研究所需数据,并将试验 数据分为单一驾驶任务数据集和自由行驶数据集。其次,根据单一驾驶任务数据集,以 10-fold 交叉验证法完成了对驾驶任务识别模型的准确性验证,结果表明,本文建立的 驾驶任务识别模板库能够准确地对每种驾驶任务的完整行驶过程进行识别,因此,可以 保证对分段的行驶过程识别的准确性。最后,以单一驾驶任务数据集对基于任务特征分 段的驾驶任务识别方法进行整体验证,本文提出的方法对每种驾驶任务的识别准确率可 以全部达到 88.9%以上,在此结论基础上,完成了对自由行驶数据集中车辆自由行驶过 程的分段识别,可以有效地在包含多个驾驶任务的行驶过程中识别出不同的驾驶任务。
五、总结
这篇论文使用了一种基于隐藏马尔可夫模型(HMM)的驾驶任务识别模型。
首先,根据车辆完成不同驾驶任务的运动特征,以及驾驶任务识别和语音识别的相似性,确定以隐马尔可夫模型作为驾驶任务的识别模型。驾驶任务的识别包括左转弯、右转弯、左换道、右换道、掉头行驶和沿道行驶等。
其次,根据车辆行驶过程中驾驶员操作信号、车辆运动状态信号和车辆位置信息等综合分析,选取方向盘转角、横摆角速度和轨迹曲率作为模型的特征参数,并建立每个驾驶任务的隐马尔可夫模型。这些模型构成了驾驶任务识别模板库,用于驾驶任务的识别。
然后,针对车辆行驶过程的分段提取方法进行研究,提出基于任务特征的分段行驶过程分段方法。由于滑动时间窗口的驾驶任务识别方法无法完整地提取驾驶任务,因此本文提出了一种基于任务特征的分段方法,将独立的驾驶任务行驶过程信号作为模型输入,以便更准确地识别行驶过程中的驾驶任务。
最后,通过驾驶模拟器的试验对本文的驾驶任务识别方法进行验证。根据实验结果,该方法能够有效地进行驾驶任务的识别,从而实现自动驾驶。
总的来说,本文使用隐马尔科夫模型进行自动驾驶的方法主要涉及驾驶任务的识别和行驶过程的分段。通过建立每个驾驶任务的隐马尔科夫模型,以及基于任务特征的分段方法,能够有效地进行自动驾驶,从而实现更加智能的汽车驾驶。
六、展望
(1)本文所研究的驾驶任务是车辆的横向行驶过程,人的决策行为还包括在纵向 运动上的决策,因此,未来工作需要对行驶过程的纵向运动过程展开研究。
(2)本文的沿道行驶是指小曲率道路上的同一车道行驶,若考虑较大曲率的车道, 仅由本车的相关信息不足以区分大曲率的沿道行驶和转弯行驶等驾驶任务,因此,可以考虑增加外界信息作为特征参数。
(3)车辆行驶过程信号为时间序列信号,在行驶过程的分段方法上,可以采用时间序列相似性查询的相关方法进行行驶过程的分段
相关文章:

汽车驾驶任务的隐马尔可夫模型识别方法研究
汽车驾驶任务的隐马尔可夫模型识别方法研究 一、Introduction 自动驾驶汽车经过了几十年的发展,是目前国内外汽车行业中的重要研究方向。自 动驾驶汽车的智能化需要车辆能够有类“人”的行为,在决策策略上可以满足人的心理 需求。人在驾驶过程中&#…...

Java编程题(完数)
题目 一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如61+2+3(6的因子是1,2,3)。 现在,你要写一个程序,读入两个正整数n和m(1<n<m<…...
国庆day6
国庆day6 汇编语言的组成 伪操作 不参与程序的执行,但是用于告诉编译器程序该怎么编译 如: .text .global .end .if .else .endif .data汇编指令 汇编器将一条汇编指令编译成一条机器码,在内存里一…...

力扣 -- 873. 最长的斐波那契子序列的长度
解题步骤: 参考代码: class Solution { public:int lenLongestFibSubseq(vector<int>& nums) {int nnums.size();unordered_map<int,int> hash;for(int i0;i<n;i){hash[nums[i]]i;}int ret2;vector<vector<int>> dp(n,v…...

【程序员必看】计算机网络,快速了解网络层次、常用协议和物理设备!
文章目录 0 引言1 基础知识的定义1.1 计算机网络层次1.2 网络供应商 ISP1.3 猫、路由器、交换机1.4 IP协议1.5 TCP、UDP协议1.6 HTTP、HTTPS、FTP协议1.7 Web、Web浏览器、Web服务器1.8 以太网和WLAN1.9 Socket (网络套接字) 2 总结 0 引言 在学习的过程…...
1.软件测试基础
一、软件测试概念 1.什么是软件 软件是计算机程序,是由计算机代码编写的一系列指令和数据,可以实现各种功能。它指的是计算机系统中的应用程序,包括操作系统、应用软件、驱动程序等。软件可以通过编程语言编写和开发,并可以安装…...
综合布线系统概述
对于现代化的大楼,其内部信息传输通道系统(综合布线系统) 已不仅仅要求能支持一般的语音传输,还应能够支持多种计算机网络 协议及多种厂商设备的信息互连,可适应各种灵活的,容错的组网方 案,…...

Labview 实战 99乘法表
基于新手小白,使用Labview实现99乘法表,敢于发表自己的一点方法,还请各位大侠放过! 如下: 运行效果如下: 思路为:将要显示出来的数据,全部转换为字符串形式,再塞入到数组…...

需求变化频繁的情况下,如何实施自动化测试
一.通常来说,具备以下3个主要条件才能开展自动化测试工作: 1.需求变动不频繁 自动化测试脚本变化的频率决定了自动化测试的维护成本。如果需求变动过于频繁,那么测试人员就需要根据变动的需求来不断地更新自动化测试用例,从而适应新的功能。…...

C++设计模式-桥接(Bridge)
目录 C设计模式-桥接(Bridge) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-桥接(Bridge) 一、意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 二、适用性 你不希望在抽象和它…...

Springboot+vue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的开放性实验室管理系统,采用M(…...
1.9.C++项目:仿muduo库实现并发服务器之Connection模块的设计
项目完整在: 文章目录 一、Connection模块:这是一个对于通信连接进行整体管理的一个模块,对一个连接的操作都是通过这个模块来进行!二、提供的功能三、实现思想(一)功能(二)意义&am…...

Iphone文件传到电脑用什么软件,看这里
在数字化时代,文件传输已经成为我们日常生活中不可或缺的一部分。然而,苹果用户在将手机文件传输到电脑时,往往会面临一些困扰。曾经的“文件传输助手”并不能完全满足用户的需求。于是,很多人开始寻找更便捷的解决方案。在本文中…...
JS进阶-原型对象prototype
原型 原型就是一个对象,也称为原型对象 构造函数通过原型分配的函数是所有对象所共享的。 JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,所以我们也称为原型对象 这个对象可以挂载函数,对象…...

【Unity】两种方式实现弹跳平台/反弹玩家(玩家触发与物体自身触发事件实现蹦床的物理效果)
一、声明 只实现物理反弹的效果,不实现蹦床会有的视觉拉伸效果,请自行找相关代码 二、实现 经过我的实践,我发现要想实现一个平台反弹的效果,要么就选择给player添加一个物理材质(平台加了没用)࿰…...

python开发幸运水果抽奖大转盘
概述 当我女朋友跟我说要吃水果,又不知道吃啥水果时候,她以为难为到我了,有啥事难为到程序员的呢! 今天用python利用第三方tkinterthreadingtime库开发一个幸运水果抽奖大转盘!抽到啥吃啥 详细 老规矩!咱…...

【CMU15-445 Part-16】Concurrency Control Theory
Part16-Concurrency Control Theory 架构概念 Transcations txn就是通过在数据库系统中执行一系列操作(sql queries)来执行某种更高级的功能(应用程序所执行的功能)。 Transcations in SQL 一个新的事务开始 with BEGIN,txn结束with COMM…...

软件设计模式系列之二十五——访问者模式
访问者模式(Visitor Pattern)是一种强大的行为型设计模式,它允许你在不改变被访问对象的类的前提下,定义新的操作和行为。本文将详细介绍访问者模式,包括其定义、举例说明、结构、实现步骤、Java代码实现、典型应用场景…...

国庆看坚如磐石
坚如磐石上映了,可以在爱奇艺观看。 而博主在使用蓝牙耳机连接电脑的过程中,发现没有蓝牙开启选项,并且在服务的设备管理器中也没有找到,很明显这是缺少驱动导致的,因此便去联想官方网站下载对应的驱动。 这里可以输入…...
代码随想录Day59 | 647. 回文子串 | 516. 最长回文子序列
647. 回文子串 class Solution { public:int countSubstrings(string s) {int sum0;int ns.size();vector<vector<int>> f(n1,vector<int>(n1,0));//表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串。初始值为0.for(int i n…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...