Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
dlib
Commits
8296869b
Commit
8296869b
authored
Feb 20, 2014
by
Davis King
Browse files
Added initial version of the learning to track example program.
parent
26613862
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
193 additions
and
0 deletions
+193
-0
examples/CMakeLists.txt
examples/CMakeLists.txt
+1
-0
examples/learning_to_track_ex.cpp
examples/learning_to_track_ex.cpp
+192
-0
No files found.
examples/CMakeLists.txt
View file @
8296869b
...
...
@@ -47,6 +47,7 @@ add_example(krls_ex)
add_example
(
krls_filter_ex
)
add_example
(
krr_classification_ex
)
add_example
(
krr_regression_ex
)
add_example
(
learning_to_track_ex
)
add_example
(
least_squares_ex
)
add_example
(
linear_manifold_regularizer_ex
)
add_example
(
logger_ex
)
...
...
examples/learning_to_track_ex.cpp
0 → 100644
View file @
8296869b
// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
/*
*/
#include <iostream>
#include <dlib/svm_threaded.h>
#include <dlib/rand.h>
using
namespace
std
;
using
namespace
dlib
;
// ----------------------------------------------------------------------------------------
class
detection
{
public:
typedef
class
track
track_type
;
matrix
<
double
,
0
,
1
>
measurements
;
};
class
track
{
public:
// This type should be a dlib::matrix capable of storing column vectors or an
// unsorted sparse vector type as defined in dlib/svm/sparse_vector_abstract.h.
typedef
matrix
<
double
,
0
,
1
>
feature_vector_type
;
track
()
{
time_since_last_association
=
0
;
}
void
get_similarity_features
(
const
detection
&
det
,
feature_vector_type
&
feats
)
const
{
feats
=
abs
(
last_measurements
-
det
.
measurements
);
}
void
update_track
(
const
detection
&
det
)
{
last_measurements
=
det
.
measurements
;
time_since_last_association
=
0
;
}
void
propagate_track
(
)
{
++
time_since_last_association
;
}
matrix
<
double
,
0
,
1
>
last_measurements
;
unsigned
long
time_since_last_association
;
};
// ----------------------------------------------------------------------------------------
typedef
std
::
vector
<
labeled_detection
<
detection
>
>
detections_at_single_time_step
;
typedef
std
::
vector
<
detections_at_single_time_step
>
track_history
;
dlib
::
rand
rnd
;
const
long
num_objects
=
4
;
const
long
num_properties
=
6
;
std
::
vector
<
matrix
<
double
,
0
,
1
>
>
object_properties
(
num_objects
);
void
initialize_object_properties
()
{
for
(
unsigned
long
i
=
0
;
i
<
object_properties
.
size
();
++
i
)
object_properties
[
i
]
=
randm
(
num_properties
,
1
,
rnd
);
}
// ----------------------------------------------------------------------------------------
track_history
make_random_tracking_data_for_training
()
{
track_history
data
;
const
int
num_time_steps
=
100
;
for
(
int
i
=
0
;
i
<
num_time_steps
;
++
i
)
{
detections_at_single_time_step
dets
(
3
);
dets
[
0
].
det
.
measurements
=
object_properties
[
0
]
+
randm
(
num_properties
,
1
,
rnd
)
*
0.1
;
dets
[
0
].
label
=
0
;
dets
[
1
].
det
.
measurements
=
object_properties
[
1
]
+
randm
(
num_properties
,
1
,
rnd
)
*
0.1
;
dets
[
1
].
label
=
1
;
dets
[
2
].
det
.
measurements
=
object_properties
[
2
]
+
randm
(
num_properties
,
1
,
rnd
)
*
0.1
;
dets
[
2
].
label
=
2
;
data
.
push_back
(
dets
);
}
for
(
int
i
=
0
;
i
<
num_time_steps
;
++
i
)
{
detections_at_single_time_step
dets
(
2
);
dets
[
0
].
det
.
measurements
=
object_properties
[
0
]
+
randm
(
num_properties
,
1
,
rnd
)
*
0.1
;
dets
[
0
].
label
=
0
;
dets
[
1
].
det
.
measurements
=
object_properties
[
3
]
+
randm
(
num_properties
,
1
,
rnd
)
*
0.1
;
dets
[
1
].
label
=
3
;
data
.
push_back
(
dets
);
}
return
data
;
}
// ----------------------------------------------------------------------------------------
std
::
vector
<
detection
>
make_random_detections
(
unsigned
long
num_dets
)
{
std
::
vector
<
detection
>
dets
(
num_dets
);
for
(
unsigned
long
i
=
0
;
i
<
dets
.
size
();
++
i
)
{
dets
[
i
].
measurements
=
object_properties
[
i
]
+
randm
(
num_properties
,
1
,
rnd
)
*
0.1
;
}
return
dets
;
}
// ----------------------------------------------------------------------------------------
int
main
()
{
initialize_object_properties
();
std
::
vector
<
track_history
>
data
;
data
.
push_back
(
make_random_tracking_data_for_training
());
data
.
push_back
(
make_random_tracking_data_for_training
());
data
.
push_back
(
make_random_tracking_data_for_training
());
data
.
push_back
(
make_random_tracking_data_for_training
());
data
.
push_back
(
make_random_tracking_data_for_training
());
structural_track_association_trainer
trainer
;
trainer
.
be_verbose
();
trainer
.
set_c
(
100
);
track_association_function
<
detection
>
assoc
=
trainer
.
train
(
data
);
cout
<<
"accuracy on training data: "
<<
test_track_association_function
(
assoc
,
data
)
<<
endl
;
cout
<<
"cross validation: "
<<
cross_validate_track_association_trainer
(
trainer
,
data
,
5
)
<<
endl
;
std
::
vector
<
detection
>
dets
;
std
::
vector
<
track
>
tracks
;
cout
<<
"number of tracks: "
<<
tracks
.
size
()
<<
endl
;
dets
=
make_random_detections
(
3
);
assoc
(
tracks
,
dets
);
cout
<<
"number of tracks: "
<<
tracks
.
size
()
<<
endl
;
dets
=
make_random_detections
(
3
);
assoc
(
tracks
,
dets
);
cout
<<
"number of tracks: "
<<
tracks
.
size
()
<<
endl
;
dets
=
make_random_detections
(
4
);
assoc
(
tracks
,
dets
);
cout
<<
"number of tracks: "
<<
tracks
.
size
()
<<
endl
;
dets
=
make_random_detections
(
3
);
assoc
(
tracks
,
dets
);
cout
<<
"number of tracks: "
<<
tracks
.
size
()
<<
endl
;
for
(
unsigned
long
i
=
0
;
i
<
tracks
.
size
();
++
i
)
cout
<<
" time since last association: "
<<
tracks
[
i
].
time_since_last_association
<<
endl
;
dets
=
make_random_detections
(
3
);
assoc
(
tracks
,
dets
);
cout
<<
"number of tracks: "
<<
tracks
.
size
()
<<
endl
;
for
(
unsigned
long
i
=
0
;
i
<
tracks
.
size
();
++
i
)
cout
<<
" time since last association: "
<<
tracks
[
i
].
time_since_last_association
<<
endl
;
ofstream
fout
(
"track_assoc.svm"
,
ios
::
binary
);
serialize
(
assoc
,
fout
);
fout
.
close
();
ifstream
fin
(
"track_assoc.svm"
,
ios
::
binary
);
deserialize
(
assoc
,
fin
);
}
// ----------------------------------------------------------------------------------------
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment