-
Notifications
You must be signed in to change notification settings - Fork 0
/
model_validation_metrics.jl
77 lines (60 loc) · 2.58 KB
/
model_validation_metrics.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using StreamStats
const METRIC_DISCS = [
:nvehicles => LinearDiscretizer(linspace(0, 60,31)),
:noverlaps => LinearDiscretizer(linspace(0, 5, 6)),
:ttc => LinearDiscretizer(linspace(0, 25,20)),
:extreme_lanedensity_ratio => LinearDiscretizer(linspace(0, 5,20)),
:extreme_lanespeed_ratio => LinearDiscretizer(linspace(0, 5,20)),
]
function does_intersect_AABB(A::Vehicle, B::Vehicle)
return (2*abs(A.x - B.x) < (A.width + B.width)) &&
(2*abs(A.y - B.y) < (A.length + B.length))
end
function compute_metrics(scenes::Vector{RoadScene})
retval = Dict{Symbol,Any}()
# n_overlaps
# if vehicle bounding boxed overlap
# ttc for each vehicle
# ttc = max(-d_front / (v_front - v_rear), 0.0)
# nvehicles in blind spot
# true if vehicle
nscenes = length(scenes)
retval[:nvehicles] = Array(Float64, nscenes)
retval[:noverlaps] = Array(Float64, nscenes)
retval[:ttc] = Array(Float64, nscenes)
retval[:extreme_lanedensity_ratio] = Array(Float64, nscenes)
retval[:extreme_lanespeed_ratio] = Array(Float64, nscenes)
for (sceneindex,scene) in enumerate(scenes)
nvehicles = length(scene.vehicles)
retval[:nvehicles][sceneindex] = nvehicles
var_ttc = StreamStats.Var()
noverlaps = 0
if isempty(scene.info)
calc_vehicle_extra_info!(scene)
end
for (i,info) in enumerate(scene.info)
veh = scene.vehicles[i]
if info.carind_fore != 0
d_front = calc_d_front(scene, i)
if d_front ≤ 0.0
update!(var_ttc, 0.0)
else
veh_front = scene.vehicles[info.carind_fore]
v_front = veh_front.v * cos(veh_front.ϕ)
v_rear = veh.v * cos(veh.ϕ)
ttc = clamp(-d_front / (v_front - v_rear), 0.0, max(METRIC_DISCS[:ttc]))
update!(var_ttc, ttc)
end
end
for j = i+1 : nvehicles
veh2 = scene.vehicles[j]
noverlaps += does_intersect_AABB(veh, veh2) ? 1 : 0
end
end
retval[:noverlaps][sceneindex] = float64(noverlaps)
retval[:ttc][sceneindex] = mean(var_ttc)
retval[:extreme_lanedensity_ratio][sceneindex] = scene.lanedensities[end]/scene.lanedensities[1]
retval[:extreme_lanespeed_ratio][sceneindex] = scene.lanespeeds[end]/scene.lanespeeds[1]
end
retval
end