Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
D
dlib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
钟尚武
dlib
Commits
8296869b
Commit
8296869b
authored
Feb 21, 2014
by
Davis King
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added initial version of the learning to track example program.
parent
26613862
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
193 additions
and
0 deletions
+193
-0
CMakeLists.txt
examples/CMakeLists.txt
+1
-0
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