def print_instances_class_histogram_p2m()

in shapenet/utils/vis.py [0:0]


def print_instances_class_histogram_p2m(num_instances, class_names, results):
    """
    Args:
        num_instances (list): list of dataset dicts.
    """
    num_classes = len(class_names)
    N_COLS = 6
    data = list(
        itertools.chain(
            *[
                [
                    class_names[id],
                    v,
                    results["chamfer"][id] / v,
                    results["normal"][id] / v,
                    results["f1_1e_4"][id] / v,
                    results["f1_2e_4"][id] / v,
                ]
                for id, v in num_instances.items()
            ]
        )
    )
    total_num_instances = sum(data[1::6])
    mean_chamfer = sum(data[2::6]) / num_classes
    mean_normal = sum(data[3::6]) / num_classes
    mean_f1_1e_4 = sum(data[4::6]) / num_classes
    mean_f1_2e_4 = sum(data[5::6]) / num_classes
    data.extend([None] * (N_COLS - (len(data) % N_COLS)))
    data.extend(
        ["total", total_num_instances, mean_chamfer, mean_normal, mean_f1_1e_4, mean_f1_2e_4]
    )
    data.extend([None] * (N_COLS - (len(data) % N_COLS)))
    data.extend(
        [
            "per-instance",
            total_num_instances,
            sum(results["chamfer"].values()) / total_num_instances,
            sum(results["normal"].values()) / total_num_instances,
            sum(results["f1_1e_4"].values()) / total_num_instances,
            sum(results["f1_2e_4"].values()) / total_num_instances,
        ]
    )
    data = itertools.zip_longest(*[data[i::N_COLS] for i in range(N_COLS)])
    table = tabulate(
        data,
        headers=["category", "#instances", "chamfer", "normal", "F1(0.0001)", "F1(0.0002)"]
        * (N_COLS // 2),
        tablefmt="pipe",
        numalign="left",
        stralign="center",
    )
    print(
        "Distribution of testing instances among all {} categories:\n".format(num_classes)
        + colored(table, "cyan")
    )