Slightly improved tracker.
This commit is contained in:
1330
media/RESULTS.md
1330
media/RESULTS.md
File diff suppressed because it is too large
Load Diff
@ -156,7 +156,7 @@ std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove old tracks
|
// Remove old track entries
|
||||||
timestamps.push_back(timestamp);
|
timestamps.push_back(timestamp);
|
||||||
if (timestamps.size() > history_size)
|
if (timestamps.size() > history_size)
|
||||||
{
|
{
|
||||||
@ -166,8 +166,21 @@ std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::
|
|||||||
for (size_t i = 0; i < pose_tracks.size();)
|
for (size_t i = 0; i < pose_tracks.size();)
|
||||||
{
|
{
|
||||||
auto &track = pose_tracks[i];
|
auto &track = pose_tracks[i];
|
||||||
double last_timestamp = track.timestamps.back();
|
for (size_t j = 0; j < track.timestamps.size();)
|
||||||
if (last_timestamp < max_age)
|
{
|
||||||
|
double ts = track.timestamps[j];
|
||||||
|
if (ts < max_age)
|
||||||
|
{
|
||||||
|
track.core_poses.erase(track.core_poses.begin() + j);
|
||||||
|
track.full_poses.erase(track.full_poses.begin() + j);
|
||||||
|
track.timestamps.erase(track.timestamps.begin() + j);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (track.timestamps.size() == 0)
|
||||||
{
|
{
|
||||||
pose_tracks.erase(pose_tracks.begin() + i);
|
pose_tracks.erase(pose_tracks.begin() + i);
|
||||||
}
|
}
|
||||||
@ -177,23 +190,15 @@ std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove old poses from tracks
|
|
||||||
for (auto &track : pose_tracks)
|
|
||||||
{
|
|
||||||
while (track.core_poses.size() > history_size)
|
|
||||||
{
|
|
||||||
track.core_poses.erase(track.core_poses.begin());
|
|
||||||
track.full_poses.erase(track.full_poses.begin());
|
|
||||||
track.timestamps.erase(track.timestamps.begin());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Refine poses
|
// Refine poses
|
||||||
std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> tracked_poses;
|
std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> tracked_poses;
|
||||||
for (size_t i = 0; i < pose_tracks.size(); ++i)
|
for (size_t i = 0; i < pose_tracks.size(); ++i)
|
||||||
{
|
{
|
||||||
auto &track = pose_tracks[i];
|
auto &track = pose_tracks[i];
|
||||||
if (track.core_poses.size() > 0)
|
// Create a refined pose for current tracks, or old tracks with a bit history,
|
||||||
|
// to avoid continuing tracks of flickering persons
|
||||||
|
if (track.core_poses.size() >= std::ceil(history_size / 2.0) ||
|
||||||
|
track.timestamps.back() == timestamps.back())
|
||||||
{
|
{
|
||||||
std::vector<std::array<float, 4>> refined_pose = refine_pose(track);
|
std::vector<std::array<float, 4>> refined_pose = refine_pose(track);
|
||||||
tracked_poses.emplace_back(track.id, refined_pose);
|
tracked_poses.emplace_back(track.id, refined_pose);
|
||||||
@ -205,7 +210,8 @@ std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::
|
|||||||
|
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
std::tuple<int, float> PoseTracker::match_to_track(const std::vector<std::array<float, 4>> &core_pose_3d)
|
std::tuple<int, float> PoseTracker::match_to_track(
|
||||||
|
const std::vector<std::array<float, 4>> &core_pose_3d)
|
||||||
{
|
{
|
||||||
int best_track = -1;
|
int best_track = -1;
|
||||||
float best_distance_sq = max_distance * max_distance;
|
float best_distance_sq = max_distance * max_distance;
|
||||||
|
|||||||
@ -128,6 +128,8 @@ datasets = {
|
|||||||
"path": "/datasets/chi3d/skelda/all.json",
|
"path": "/datasets/chi3d/skelda/all.json",
|
||||||
"take_interval": 5,
|
"take_interval": 5,
|
||||||
"fps": 50,
|
"fps": 50,
|
||||||
|
"min_match_score": 0.92,
|
||||||
|
"min_bbox_area": 0.2 * 0.2,
|
||||||
"max_track_distance": 0.3 + default_max_movement_speed / (50 / 5),
|
"max_track_distance": 0.3 + default_max_movement_speed / (50 / 5),
|
||||||
},
|
},
|
||||||
"tsinghua": {
|
"tsinghua": {
|
||||||
@ -193,7 +195,7 @@ datasets = {
|
|||||||
"subset": "volleyball",
|
"subset": "volleyball",
|
||||||
"min_match_score": 0.95,
|
"min_match_score": 0.95,
|
||||||
"min_group_size": 7,
|
"min_group_size": 7,
|
||||||
"min_bbox_score": 0.25,
|
"min_bbox_score": 0.20,
|
||||||
"min_bbox_area": 0.05 * 0.05,
|
"min_bbox_area": 0.05 * 0.05,
|
||||||
"max_movement_speed": 4.0 * 1.5,
|
"max_movement_speed": 4.0 * 1.5,
|
||||||
"max_track_distance": 0.3 + (4.0 * 1.5) / (20 / 2),
|
"max_track_distance": 0.3 + (4.0 * 1.5) / (20 / 2),
|
||||||
|
|||||||
2
skelda
2
skelda
Submodule skelda updated: 56dc0c18ac...d48d65b961
Reference in New Issue
Block a user