Example #1
0
import sys
import os
import numpy as np
import pandas as pd

sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), ".."))
from params import par
from log import Logger
from data_loader import SequenceData

working_dir = os.path.abspath(sys.argv[1])
pose_est_dir = os.path.join(working_dir, "est_poses")
pose_gt_dir = os.path.join(working_dir, "gt_poses")
pose_est_files = sorted(os.listdir(pose_est_dir))

for i, pose_est_file in enumerate(pose_est_files):
    sequence = os.path.splitext(pose_est_file)[0]

    traj_est = np.load(os.path.join(pose_est_dir, "%s.npy" % sequence))
    length = traj_est.shape[0]

    traj_gt = SequenceData(sequence).get_poses()
    traj_gt = traj_gt[0:length, :, :]
    np.save(Logger.ensure_file_dir_exists(os.path.join(pose_gt_dir, "%s.npy" % sequence)), traj_gt)

print("All Done")
Example #2
0
def plot_errors(working_dir):
    errors_dir = os.path.join(working_dir, "errors")
    rel_errors_dir = os.path.join(errors_dir, "rel")
    abs_errors_dir = os.path.join(errors_dir, "abs")
    vis_meas_errors_dir = os.path.join(errors_dir, "vis_meas")
    vis_meas_covars_dir = os.path.join(working_dir, "vis_meas", "covar")
    abs_errors_files = sorted(os.listdir(abs_errors_dir))
    rel_errors_files = sorted(os.listdir(rel_errors_dir))
    vis_meas_errors_files = sorted(os.listdir(vis_meas_errors_dir))
    vis_meas_covars_files = sorted(os.listdir(vis_meas_covars_dir))

    assert (abs_errors_files == rel_errors_files == vis_meas_errors_files == vis_meas_covars_files)
    sequences = [f[:-4] for f in abs_errors_files]

    logger.initialize(working_dir=working_dir, use_tensorboard=False)
    logger.print("================ PLOT ERROR ================")
    logger.print("Working on directory:", working_dir)
    logger.print("Found sequences: [%s]" % ", ".join(sequences))

    for i, sequence in enumerate(sequences):
        error_rel = np.load(os.path.join(rel_errors_dir, "%s.npy" % sequence))
        error_abs = np.load(os.path.join(abs_errors_dir, "%s.npy" % sequence))
        error_vis_meas = np.load(os.path.join(vis_meas_errors_dir, "%s.npy" % sequence))
        covar_vis_meas = np.load(os.path.join(vis_meas_covars_dir, "%s.npy" % sequence))

        labels = ["Rot X", "Rot Y", "Rot Z", "Trans X", "Trans Y", "Trans Z"]

        for j in range(0, 6):
            err = error_rel[:, j]
            plt.clf()
            plt.plot(err, color="r")
            plt.xlabel("frame # []")
            plt.ylabel(labels[j].lower())
            plt.title("Seq. %s %s Rel Error" % (sequence, labels[j]))
            plt.savefig(Logger.ensure_file_dir_exists(
                    os.path.join(errors_dir, "rel_error_figures",
                                 "seq_%s_%02d_%s_rel_err_plt.png" % (
                                     sequence, j, "_".join(labels[j].lower().split())))))
            plt.clf()
            plt.hist(err, bins=np.linspace(start=np.min(err), stop=np.max(err), num=100), normed=True)

            ticks = plt.xticks()[0]
            lnspc = np.linspace(min(ticks), max(ticks), len(err))
            mean, std_dev = stats.norm.fit(err)
            pdf_g = stats.norm.pdf(lnspc, mean, std_dev)
            plt.plot(lnspc, pdf_g, color="r")
            plt.text(0.05, 0.9, r"$\mu$=%.4g" % mean + "\n" + r"$\sigma$=%.4g" % std_dev,
                     transform=plt.gca().transAxes)
            plt.title("Seq. %s %s Rel Error Hist." % (sequence, labels[j]))
            plt.savefig(Logger.ensure_file_dir_exists(
                    os.path.join(errors_dir, "rel_error_histograms",
                                 "fig_%s_%02d_%s_rel_err_hist.png" % (
                                     sequence, j, "_".join(labels[j].lower().split())))))

        for j in range(0, 6):
            err = np.abs(error_vis_meas[:, j])
            covar = covar_vis_meas[:, j, j]
            if j in [0, 1, 2]: covar = covar / par.k1

            covar_sig = np.sqrt(covar)
            plt.clf()
            plt.plot(err, color="r", label="Err")
            plt.plot(-err, color="r", label="Err")
            plt.plot(covar_sig, color="b", label="3sig")
            plt.plot(-covar_sig, color="b", label="3sig")
            plt.plot()
            plt.xlabel("frame # []")
            plt.ylabel(labels[j].lower())
            plt.title("Seq. %s %s Vis Meas Error & Covar" % (sequence, labels[j]))
            plt.legend()
            plt.savefig(Logger.ensure_file_dir_exists(
                    os.path.join(errors_dir, "vis_meas_error_covar_figures",
                                 "fig_%s_%02d_%s_vis_meas_error_covar.png" % (
                                     sequence, j, "_".join(labels[j].lower().split())))))

        for j in range(0, 6):
            err = error_abs[:, j]
            plt.clf()
            plt.plot(err, color="r")
            plt.xlabel("frame # []")
            plt.ylabel(labels[j].lower())
            plt.title("Seq. %s %s Abs Error" % (sequence, labels[j]))
            plt.savefig(Logger.ensure_file_dir_exists(
                    os.path.join(errors_dir, "abs_error_figures",
                                 "seq_%s_%02d_%s_abs_err_plt.png" % (
                                     sequence, j, "_".join(labels[j].lower().split())))))

        logger.print("Plots saved for sequence %s" % sequence)