Fixed time calculation.

This commit is contained in:
Daniel
2025-01-27 14:18:08 +01:00
parent d5ae7dada7
commit d886d1db7c

View File

@ -134,9 +134,14 @@ int main(int argc, char **argv)
// Timers // Timers
size_t time_count = dataset.size(); size_t time_count = dataset.size();
double time_image = 0.0; std::vector<double> times_image;
double time_pose2d = 0.0; std::vector<double> times_debayer;
double time_pose3d = 0.0; std::vector<double> times_pose2d;
std::vector<double> times_pose3d;
times_image.reserve(time_count);
times_debayer.reserve(time_count);
times_pose2d.reserve(time_count);
times_pose3d.reserve(time_count);
size_t print_steps = (size_t)std::floor((float)time_count / 100.0f); size_t print_steps = (size_t)std::floor((float)time_count / 100.0f);
print_steps = std::max((size_t)1, print_steps); print_steps = std::max((size_t)1, print_steps);
@ -164,9 +169,9 @@ int main(int argc, char **argv)
auto stime = std::chrono::high_resolution_clock::now(); auto stime = std::chrono::high_resolution_clock::now();
std::vector<cv::Mat> images = load_images(item); std::vector<cv::Mat> images = load_images(item);
elapsed = std::chrono::high_resolution_clock::now() - stime; elapsed = std::chrono::high_resolution_clock::now() - stime;
time_image += elapsed.count(); times_image.push_back(elapsed.count());
// Predict 2D poses // Demosaic images
stime = std::chrono::high_resolution_clock::now(); stime = std::chrono::high_resolution_clock::now();
for (size_t i = 0; i < images.size(); i++) for (size_t i = 0; i < images.size(); i++)
{ {
@ -174,11 +179,16 @@ int main(int argc, char **argv)
cv::Mat rgb = utils_pipeline::bayer2rgb(img); cv::Mat rgb = utils_pipeline::bayer2rgb(img);
images[i] = std::move(rgb); images[i] = std::move(rgb);
} }
elapsed = std::chrono::high_resolution_clock::now() - stime;
times_debayer.push_back(elapsed.count());
// Predict 2D poses
stime = std::chrono::high_resolution_clock::now();
auto poses_2d_all = kpt_model->predict(images); auto poses_2d_all = kpt_model->predict(images);
auto poses_2d_upd = utils_pipeline::update_keypoints( auto poses_2d_upd = utils_pipeline::update_keypoints(
poses_2d_all, joint_names_2d, whole_body); poses_2d_all, joint_names_2d, whole_body);
elapsed = std::chrono::high_resolution_clock::now() - stime; elapsed = std::chrono::high_resolution_clock::now() - stime;
time_pose2d += elapsed.count(); times_pose2d.push_back(elapsed.count());
all_poses_2d.push_back(std::move(poses_2d_upd)); all_poses_2d.push_back(std::move(poses_2d_upd));
} }
@ -229,7 +239,7 @@ int main(int argc, char **argv)
auto poses_3d = tri_model->triangulate_poses(poses_2d, cameras, roomparams, joint_names_2d); auto poses_3d = tri_model->triangulate_poses(poses_2d, cameras, roomparams, joint_names_2d);
elapsed = std::chrono::high_resolution_clock::now() - stime; elapsed = std::chrono::high_resolution_clock::now() - stime;
time_pose3d += elapsed.count(); times_pose3d.push_back(elapsed.count());
all_poses_3d.push_back(std::move(poses_3d)); all_poses_3d.push_back(std::move(poses_3d));
all_ids.push_back(item["id"].get<std::string>()); all_ids.push_back(item["id"].get<std::string>());
@ -240,12 +250,25 @@ int main(int argc, char **argv)
// Print timing stats // Print timing stats
std::cout << "\nMetrics:" << std::endl; std::cout << "\nMetrics:" << std::endl;
size_t warmup = 10; size_t warmup = 10;
double time_image = 0.0;
double time_debayer = 0.0;
double time_pose2d = 0.0;
double time_pose3d = 0.0;
for (size_t i = warmup; i < time_count; i++)
{
time_image += times_image[i];
time_debayer += times_debayer[i];
time_pose2d += times_pose2d[i];
time_pose3d += times_pose3d[i];
}
double avg_time_image = time_image / (time_count - warmup); double avg_time_image = time_image / (time_count - warmup);
double avg_time_debayer = time_debayer / (time_count - warmup);
double avg_time_pose2d = time_pose2d / (time_count - warmup); double avg_time_pose2d = time_pose2d / (time_count - warmup);
double avg_time_pose3d = time_pose3d / (time_count - warmup); double avg_time_pose3d = time_pose3d / (time_count - warmup);
double fps = 1.0 / (avg_time_pose2d + avg_time_pose3d); double fps = 1.0 / (avg_time_debayer + avg_time_pose2d + avg_time_pose3d);
std::cout << "{\n" std::cout << "{\n"
<< " \"img_loading\": " << avg_time_image << ",\n" << " \"img_loading\": " << avg_time_image << ",\n"
<< " \"demosaicing\": " << avg_time_debayer << ",\n"
<< " \"avg_time_2d\": " << avg_time_pose2d << ",\n" << " \"avg_time_2d\": " << avg_time_pose2d << ",\n"
<< " \"avg_time_3d\": " << avg_time_pose3d << ",\n" << " \"avg_time_3d\": " << avg_time_pose3d << ",\n"
<< " \"fps\": " << fps << "\n" << " \"fps\": " << fps << "\n"