Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Pinoxchio
apollo
提交
65c5bc63
A
apollo
项目概览
Pinoxchio
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
65c5bc63
编写于
8月 06, 2017
作者:
K
kechxu
提交者:
Jiangtao Hu
8月 06, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improve the prediction model for vehicles on lane
上级
8f0f15ca
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
93 addition
and
33 deletion
+93
-33
modules/prediction/data/mlp_vehicle_model.bin
modules/prediction/data/mlp_vehicle_model.bin
+0
-0
modules/prediction/evaluator/vehicle/mlp_evaluator.cc
modules/prediction/evaluator/vehicle/mlp_evaluator.cc
+88
-28
modules/prediction/evaluator/vehicle/mlp_evaluator.h
modules/prediction/evaluator/vehicle/mlp_evaluator.h
+2
-2
modules/prediction/predictor/vehicle/lane_sequence_predictor_test.cc
...diction/predictor/vehicle/lane_sequence_predictor_test.cc
+1
-1
modules/prediction/proto/fnn_model_base.proto
modules/prediction/proto/fnn_model_base.proto
+2
-2
未找到文件。
modules/prediction/data/mlp_vehicle_model.bin
浏览文件 @
65c5bc63
无法预览此类型文件
modules/prediction/evaluator/vehicle/mlp_evaluator.cc
浏览文件 @
65c5bc63
...
...
@@ -18,6 +18,7 @@
#include <cmath>
#include <numeric>
#include <limits>
#include "modules/common/math/math_utils.h"
#include "modules/common/util/file.h"
...
...
@@ -30,6 +31,20 @@ namespace prediction {
using
HDMapLane
=
apollo
::
hdmap
::
Lane
;
namespace
{
double
ComputeMean
(
const
std
::
vector
<
double
>&
nums
,
size_t
start
,
size_t
end
)
{
int
count
=
0
;
double
sum
=
0.0
;
for
(
size_t
i
=
start
;
i
<=
end
&&
i
<
nums
.
size
();
i
++
)
{
sum
+=
nums
[
i
];
++
count
;
}
return
(
count
==
0
)
?
0.0
:
sum
/
count
;
}
}
// namespace
MLPEvaluator
::
MLPEvaluator
()
{
LoadModel
(
FLAGS_vehicle_model_file
);
}
...
...
@@ -155,47 +170,92 @@ void MLPEvaluator::SetObstacleFeatureValues(
if
(
count
<=
0
)
{
return
;
}
double
theta_mean
=
std
::
accumulate
(
thetas
.
begin
(),
thetas
.
end
(),
0.0
)
/
thetas
.
size
();
double
theta_filtered
=
(
thetas
.
size
()
>
1
)
?
(
thetas
[
0
]
+
thetas
[
1
])
/
2.0
:
thetas
[
0
];
double
lane_l_mean
=
std
::
accumulate
(
lane_ls
.
begin
(),
lane_ls
.
end
(),
0.0
)
/
lane_ls
.
size
();
double
lane_l_filtered
=
(
lane_ls
.
size
()
>
1
)
?
(
lane_ls
[
0
]
+
lane_ls
[
1
])
/
2.0
:
lane_ls
[
0
];
double
speed_mean
=
std
::
accumulate
(
speeds
.
begin
(),
speeds
.
end
(),
0.0
)
/
speeds
.
size
();
double
speed_lateral
=
sin
(
theta_filtered
)
*
speed_mean
;
double
speed_sign
=
(
speed_lateral
>
0
)
?
1.0
:
-
1.0
;
double
time_to_lb
=
(
abs
(
speed_lateral
)
>
0.05
)
?
dist_lbs
[
0
]
/
speed_lateral
:
20
*
dist_lbs
[
0
]
*
speed_sign
;
double
time_to_rb
=
(
abs
(
speed_lateral
)
>
0.05
)
?
-
1
*
dist_rbs
[
0
]
/
speed_lateral
:
-
20
*
dist_rbs
[
0
]
*
speed_sign
;
int
curr_size
=
5
;
int
hist_size
=
obstacle_ptr
->
history_size
();
double
theta_mean
=
ComputeMean
(
thetas
,
0
,
hist_size
-
1
);
double
theta_filtered
=
ComputeMean
(
thetas
,
0
,
curr_size
-
1
);
double
lane_l_mean
=
ComputeMean
(
lane_ls
,
0
,
hist_size
-
1
);
double
lane_l_filtered
=
ComputeMean
(
lane_ls
,
0
,
curr_size
-
1
);
double
speed_mean
=
ComputeMean
(
speeds
,
0
,
hist_size
-
1
);
double
time_diff
=
timestamps
.
front
()
-
timestamps
.
back
();
double
dist_lb_rate
=
(
timestamps
.
size
()
>
1
)
?
(
dist_lbs
.
front
()
-
dist_lbs
.
back
())
/
time_diff
:
0.0
;
double
dist_rb_rate
=
(
timestamps
.
size
()
>
1
)
?
(
dist_rbs
.
front
()
-
dist_rbs
.
back
())
/
time_diff
:
0.0
;
double
dist_lb_rate
=
(
timestamps
.
size
()
>
1
)
?
(
dist_lbs
.
front
()
-
dist_lbs
.
back
())
/
time_diff
:
0.0
;
double
dist_rb_rate
=
(
timestamps
.
size
()
>
1
)
?
(
dist_rbs
.
front
()
-
dist_rbs
.
back
())
/
time_diff
:
0.0
;
double
delta_t
=
0.0
;
if
(
timestamps
.
size
()
>
1
)
{
delta_t
=
(
timestamps
.
front
()
-
timestamps
.
back
())
/
(
timestamps
.
size
()
-
1
);
}
double
angle_curr
=
ComputeMean
(
thetas
,
0
,
curr_size
-
1
);
double
angle_prev
=
ComputeMean
(
thetas
,
curr_size
,
2
*
curr_size
-
1
);
double
angle_diff
=
(
hist_size
>=
2
*
curr_size
)
?
angle_curr
-
angle_prev
:
0.0
;
double
lane_l_curr
=
ComputeMean
(
lane_ls
,
0
,
curr_size
-
1
);
double
lane_l_prev
=
ComputeMean
(
lane_ls
,
curr_size
,
2
*
curr_size
-
1
);
double
lane_l_diff
=
(
hist_size
>=
2
*
curr_size
)
?
lane_l_curr
-
lane_l_prev
:
0.0
;
double
angle_diff_rate
=
0.0
;
double
lane_l_diff_rate
=
0.0
;
if
(
delta_t
>
std
::
numeric_limits
<
double
>::
epsilon
())
{
angle_diff_rate
=
angle_diff
/
(
delta_t
*
curr_size
);
lane_l_diff_rate
=
lane_l_diff
/
(
delta_t
*
curr_size
);
}
double
acc
=
0.0
;
if
(
static_cast
<
int
>
(
speeds
.
size
())
>=
3
*
curr_size
&&
delta_t
>
std
::
numeric_limits
<
double
>::
epsilon
())
{
double
speed_1
=
ComputeMean
(
speeds
,
0
,
curr_size
-
1
);
double
speed_2
=
ComputeMean
(
speeds
,
curr_size
,
2
*
curr_size
-
1
);
double
speed_3
=
ComputeMean
(
speeds
,
2
*
curr_size
,
3
*
curr_size
-
1
);
acc
=
(
speed_1
-
2
*
speed_2
+
speed_3
)
/
(
curr_size
*
curr_size
*
delta_t
*
delta_t
);
}
double
dist_lb_rate_curr
=
0.0
;
if
(
hist_size
>=
2
*
curr_size
&&
delta_t
>
std
::
numeric_limits
<
double
>::
epsilon
())
{
double
dist_lb_curr
=
ComputeMean
(
dist_lbs
,
0
,
curr_size
-
1
);
double
dist_lb_prev
=
ComputeMean
(
dist_lbs
,
curr_size
,
2
*
curr_size
-
1
);
dist_lb_rate_curr
=
(
dist_lb_curr
-
dist_lb_prev
)
/
(
curr_size
*
delta_t
);
}
double
dist_rb_rate_curr
=
0.0
;
if
(
hist_size
>=
2
*
curr_size
&&
delta_t
>
std
::
numeric_limits
<
double
>::
epsilon
())
{
double
dist_rb_curr
=
ComputeMean
(
dist_rbs
,
0
,
curr_size
-
1
);
double
dist_rb_prev
=
ComputeMean
(
dist_rbs
,
curr_size
,
2
*
curr_size
-
1
);
dist_rb_rate_curr
=
(
dist_rb_curr
-
dist_rb_prev
)
/
(
curr_size
*
delta_t
);
}
// setup obstacle feature values
feature_values
->
push_back
(
theta_filtered
);
feature_values
->
push_back
(
theta_mean
);
feature_values
->
push_back
(
theta_filtered
-
theta_mean
);
feature_values
->
push_back
((
thetas
.
size
()
>
1
)
?
thetas
[
0
]
-
thetas
[
1
]
:
thetas
[
0
]);
feature_values
->
push_back
(
angle_diff
);
feature_values
->
push_back
(
angle_diff_rate
);
feature_values
->
push_back
(
lane_l_filtered
);
feature_values
->
push_back
(
lane_l_mean
);
feature_values
->
push_back
(
lane_l_filtered
-
lane_l_mean
);
feature_values
->
push_back
(
lane_l_diff
);
feature_values
->
push_back
(
lane_l_diff_rate
);
feature_values
->
push_back
(
speed_mean
);
feature_values
->
push_back
(
acc
);
feature_values
->
push_back
(
dist_lbs
.
front
());
feature_values
->
push_back
(
dist_lb_rate
);
feature_values
->
push_back
(
time_to_lb
);
feature_values
->
push_back
(
dist_lb_rate_curr
);
feature_values
->
push_back
(
dist_rbs
.
front
());
feature_values
->
push_back
(
dist_rb_rate
);
feature_values
->
push_back
(
time_to_rb
);
feature_values
->
push_back
(
dist_rb_rate_curr
);
feature_values
->
push_back
(
lane_types
.
front
()
==
0
?
1.0
:
0.0
);
feature_values
->
push_back
(
lane_types
.
front
()
==
1
?
1.0
:
0.0
);
feature_values
->
push_back
(
lane_types
.
front
()
==
2
?
1.0
:
0.0
);
...
...
modules/prediction/evaluator/vehicle/mlp_evaluator.h
浏览文件 @
65c5bc63
...
...
@@ -94,8 +94,8 @@ class MLPEvaluator : public Evaluator {
private:
std
::
unordered_map
<
int
,
std
::
vector
<
double
>>
obstacle_feature_values_map_
;
static
const
size_t
OBSTACLE_FEATURE_SIZE
=
18
;
static
const
size_t
LANE_FEATURE_SIZE
=
2
0
;
static
const
size_t
OBSTACLE_FEATURE_SIZE
=
22
;
static
const
size_t
LANE_FEATURE_SIZE
=
4
0
;
std
::
unique_ptr
<
FnnVehicleModel
>
model_ptr_
;
};
...
...
modules/prediction/predictor/vehicle/lane_sequence_predictor_test.cc
浏览文件 @
65c5bc63
...
...
@@ -58,7 +58,7 @@ TEST_F(LaneSequencePredictorTest, OnLaneCase) {
LaneSequencePredictor
predictor
;
predictor
.
Predict
(
obstacle_ptr
);
PredictionObstacle
prediction_obstacle
=
predictor
.
prediction_obstacle
();
EXPECT_EQ
(
prediction_obstacle
.
trajectory_size
(),
1
);
EXPECT_EQ
(
prediction_obstacle
.
trajectory_size
(),
2
);
}
}
// namespace prediction
...
...
modules/prediction/proto/fnn_model_base.proto
浏览文件 @
65c5bc63
...
...
@@ -20,6 +20,6 @@ message Layer {
optional
int32
layer_output_dim
=
2
;
optional
Matrix
layer_input_weight
=
3
;
// weight matrix of |input_dim| x |output_dim|
optional
Vector
layer_bias
=
4
;
// vector of bias, size of |output_dim|
optional
string
layer_activation_type
=
5
[
deprecated
=
true
]
;
optional
ActivationFunc
layer_activation_func
=
6
;
optional
ActivationFunc
layer_activation_func
=
5
;
// optional string layer_activation_type = 6 [deprecated = true]
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录