近几年,道路状况评估在在智能交通系统领域的研究与应用层面都受到重要的关注。在众多的交通参与者中,行为与运动可预测性低的行人又是主要极端复杂场景的重要因素。当前评估行人危险程度的方法主要有两类:1)基于预定义的碰撞函数;2)人类打标签的方法。这些方法一般场景泛化性比较差,也很少能考虑行人与自车的交互关系,实际效果很有限。本文介绍的行人危险程度预测(Pedestrian Risk Level Prediction,PRLP)系统由三个模块组成:数据采集与处理模块、行人轨迹预测模块以及风险水平识别模块。
- 收集自车视角下的行人数据:同时考虑自车与行人的运动信息能够简化交互式方式预测问模型的时空特征;
- 利用LSTM模型学习预测行人轨迹未来5帧的时空特征;
- 利用一个混合聚类与分类的变种方法来探索时空特征中的风险模式,最后利用一个分类器从这些已经归类的模式中学习分类模型;
Module 1: 行人数据处理
第 i i i个行人从时间1到t的轨迹可以描述成如下形式:
P i ( 1 , t ) = [ p i ( 1 ) , p i ( 2 ) , . . . , p i ( t ) ] T (1) \mathbf{P}_{i}(1, t)=[\mathbf{p}_{i}(1), \mathbf{p}_{i}(2),...,\mathbf{p}_{i}(t)]^T\tag{1} Pi(1,t)=[pi(1),pi(2),...,pi(t)]T(1)
其中, p i ( t ) = ( x i ( t ) , y i ( t ) ) \mathbf{p}_{i}(t)=(x_{i}(t), y_{i}(t)) pi(t)=(xi(t),yi(t))表示相对自车坐标系下的行人位置坐标点。
行人的相对自车的速度用向量 v i ( t ) = ( v x ( t ) , v y ( t ) ) \mathbf{v}_i(t)=(v_x(t), v_y(t)) vi(t)=(vx(t),vy(t))表示,初始条件 v 1 ( t ) = ( 0 , 0 ) \mathbf{v}_1(t)=(0, 0) v1(t)=(0,0),其中 v x ( t ) v_x(t) vx(t)与 v y ( t ) v_{y}(t) vy(t)计算公式如下:
v x ( t ) = ( x i ( t ) − x i ( t − 1 ) ) / Δ t (2) v_{x}(t)=(x_i(t)-x_i(t-1))/\Delta_t \tag{2} vx(t)=(xi(t)−xi(t−1))/Δt(2)
v y ( t ) = ( y i ( t ) − y i ( t − 1 ) ) / Δ t (3) v_{y}(t)=(y_i(t)-y_i(t-1))/\Delta_t \tag{3} vy(t)=(yi(t)−yi(t−1))/Δt(3)
其中, Δ t \Delta_t Δt表示两帧观测数据之间的时间间隔。
TTC定义如下:
T T C i ( t ) = Δ p i ( t ) Δ v i ( t ) (4) TTC_{i}(t)=\frac{\Delta p_i(t)}{\Delta v_i(t)}\tag{4} TTCi(t)=Δvi(t)Δpi(t)(4)
其中, Δ p i ( t ) = x i ( t ) 2 + y i ( t ) 2 \Delta p_i(t)=\sqrt{x_i(t)^2+y_i(t)^2} Δpi(t)=xi(t)2+yi(t)2, Δ v i ( t ) = v i ( t ) × p i ( t ) \Delta v_i(t)=\mathbf{v}_i(t)\times \mathbf{p}_i(t) Δvi(t)=vi(t)×pi(t)【速度在位置向量方向上的投影】。
Module 2: 行人轨迹预测
本文采用LSTM来预测行人未来5帧的位置,LSTM模型的输入是行人过去的相对轨迹点 p i ( 1 , t ) = [ p i ( 1 ) , p i ( 2 ) , . . . , p i ( t ) ] T \mathbf{p}_i(1, t)=[\mathbf{p}_i(1), \mathbf{p}_i(2),...,\mathbf{p}_i(t)]^T pi(1,t)=[pi(1),pi(2),...,pi(t)]T,输出是行人未来的轨迹点 p ^ i ( t + 1 , t + T p r e d ) = [ p ^ i ( t + 1 ) , p ^ i ( t + 2 ) , . . . , p ^ i ( t + T p r e d ) ] T \hat{\mathbf{p}}_i(t+1, t+T_{pred})=[\hat{\mathbf{p}}_i(t+1), \hat{\mathbf{p}}_i(t+2),...,\hat{\mathbf{p}}_i(t+T_{pred})]^T p^i(t+1,t+Tpred)=[p^i(t+1),p^i(t+2),...,p^i(t+Tpred)]T.
对于 v ^ i ( t + 1 , t + T p r e d ) \hat{\mathbf{v}}_i(t+1, t+T_{pred}) v^i(t+1,t+Tpred)和 T T C ^ i ( t + 1 , t + T p r e d ) \hat{TTC}_{i}(t+1, t+T_{pred}) TTC^i(t+1,t+Tpred)同样可以由LSTM模型训练得到。
Module 3: 风险水平识别
K-Mean:采用欧氏距离来度量相似性,在非凸的数据集上效果无法保证;
KPCA-KMC:混合核主成分分析与K-Mean聚类的或谱聚类(SC)的方法能够用来对行人的特征数据进行聚类。
我们用 S = { s i ( t ) ∣ i ∈ [ 1 , n ] , t ∈ [ 1 , T n ] } \mathbf{S}=\{\mathbf{s}_i(t)|i\in[1, n], t\in[1, T_n]\} S={si(t)∣i∈[1,n],t∈[1,Tn]}表示采集的行人数据集,其中 s i \mathbf{s}_i si表示第 i i i个行人相关的特征数据。
假设我们目的是把这些行人分类成k类, C = { c 1 , c 2 , . . . , c k } \mathbf{C}=\{c_1, c_2, ...,c_k\} C={c1,c2,...,ck},我们利用如下目标函数:
a r g m i n c ∑ k = 1 K ∑ ϕ ^ ( s i ) ∈ c k ∣ ∣ ϕ ^ ( s i ) − μ k ∣ ∣ 2 (5) argmin_{c}\sum_{k=1}^{K}\sum_{\hat{\phi}(\mathbf{s}_i)\in c_{k}}||\hat{\phi}(\mathbf{s}_i)-\mu_k||^2 \tag{5} argminck=1∑Kϕ^(si)∈ck∑∣∣ϕ^(si)−μk∣∣2(5)
其中, μ k \mu_k μk是第 k k k个聚类的中心。
那么如何确认类别个数K?
Akaike information criterion(AIC)是衡量统计模型拟合优良性的一种标准,由日本统计学家赤池弘次创立和发展。 AIC建立在熵的概念基础上,可以权衡所估计模型的复杂度和此模型拟合数据的优良性。AIC通过比较不同模型的复杂度和拟合优度来选择最优模型。具体来说,AIC值越小的模型越好,因为它在解释数据的同时避免了过度拟合。AIC的计算公式为:
A I C = ∑ k = 1 K ∑ x i ∈ c k ∣ x i − μ k ∣ 2 + 2 ( K . N ) AIC=\sum_{k=1}^{K}\sum_{\mathbf{x}^i \in c_k} |x^i-\mu^k|^2+2(K.N) AIC=k=1∑Kxi∈ck∑∣xi−μk∣2+2(K.N)
其中, x i x^i xi是第 k k k个聚类的第 i i i个数据, μ k \mu^k μk是第k个聚类的中心。K是总的聚类数量,N是数据的维度。
在实际应用中,AIC常用于时间序列分析、回归分析等多种统计模型的选择和评估。例如,在经济学研究中,研究者可以使用AIC来比较不同的经济模型,选择最能解释经济数据的模型。
AIC评估预测语差并且惩罚模型的复杂性。与AIC不同,BIC(bayes)会通过考虑数据集的大小来惩罚模型的复杂性:
A I C = ∑ k = 1 K ∑ x i ∈ c k ∣ x i − μ k ∣ 2 + l n ( M ) . ( K . N ) AIC=\sum_{k=1}^{K}\sum_{\mathbf{x}^i \in c_k} |x^i-\mu^k|^2+ln(M).(K.N) AIC=k=1∑Kxi∈ck∑∣xi−μk∣2+ln(M).(K.N)
反正根据AIC与BIC指标,可以找到最优聚类个数K。
轮廓系数(Silhouette Coefficient Index)是一种聚类评估指标,用于评估数据聚类的效果。其取值范围在[-1, 1]之间,指标值越大表示聚类结果聚类效果越好。我们用以下公式表示轮廓系数:
s ( i ) = b ( i ) − a ( i ) m a x { a ( i ) , b ( i ) } s(i)=\frac{b(i)-a(i)}{max\{a(i), b(i)\}} s(i)=max{a(i),b(i)}b(i)−a(i)
类内离散度: a ( i ) = 1 ∣ C i ∣ − 1 ∑ j ∈ C i , i ≠ j d ( i , j ) a(i)=\frac{1}{|C_i|-1}\sum_{j\in C_i,i\neq j} d(i,j) a(i)=∣Ci∣−11∑j∈Ci,i=jd(i,j),第 i i i个数据点与同一类别中其他数据的平均距离;
类间离散度: b ( i ) = m i n k ≠ i 1 ∣ C k ∣ ∑ j ∈ C k d ( i , j ) b(i)=min_{k\neq i}\frac{1}{|C_k|}\sum_{j\in C_k} d(i,j) b(i)=mink=i∣Ck∣1∑j∈Ckd(i,j);
通过以上模型,我们可以将完整的数据分成若干个子集,每个子集表示一个类别相关的子数据集。下面,我们可以利用SVM对以上分类好的数据学习一个分类器。我们可以对每个类别的数据的特性进行人工分析,然后对每个类别分赋予一个语义类标签,例如:关联安全、独立安全、危险、警告。
在实际应用中,我们对路上遇到的行人,利用他的历史数据特征输入到分类器,得到他的类别,根据类别相关联的语义信息来决策是否要在运动规划中考虑。