Diff of /utils/plotting.py [000000] .. [92cc18]

Switch to side-by-side view

--- a
+++ b/utils/plotting.py
@@ -0,0 +1,95 @@
+import matplotlib.pyplot as plt
+import numpy as np
+import pandas as pd
+from scipy.stats import linregress, iqr
+
+
+def get_best_epoch_from_id_split(df):
+    mean_ious_per_epoch = [np.mean(df[df["epoch"] == i]["iou"]) for i in np.unique(df["epoch"])]
+    return np.argmax(mean_ious_per_epoch)
+
+
+def plot_std_iou_correlation(df, best=True):
+    iou_std = []
+    iou_avg = []
+    for i in np.unique(df["id"]):
+        id_df = df[df["id"] == i]
+        id_best_epoch = get_best_epoch_from_id_split(id_df)
+        if best:
+            ious = id_df[id_df["epoch"] == id_best_epoch]["iou"]
+            iou_std.append(np.std(ious))
+            iou_avg.append(np.mean(ious))
+        else:
+            iou_std.append(np.nanstd(id_df[id_df["iou"] > 0.01]["iou"]))
+            iou_avg.append(np.nanmean(id_df[id_df["iou"] > 0.01]["iou"]))
+
+    plt.scatter(iou_std, iou_avg)
+    print(iou_avg)
+    result = linregress(iou_std, iou_avg)
+    m, c, r, p, se = result
+    print(result)
+    x = np.linspace(np.min(iou_std), np.max(iou_std), 100)
+    plt.plot(x, m * x + c, label="R = {}".format(r))
+    plt.legend()
+    plt.ylabel("Mean of IoUs")
+    plt.xlabel("StDev of IoUs")
+    plt.show()
+
+
+def compare_variances(baseline_df, stresstest_df):
+    baseline_mean_ious = []
+    stresstest_mean_ious = []
+    for id in np.unique(stresstest_df["id"]):
+        baseline_ious = baseline_df[baseline_df["id"] == id]["iou"]
+        stresstest_ious = stresstest_df[stresstest_df["id"] == id]["iou"]
+        baseline_mean_ious.append(np.mean(baseline_ious))
+        stresstest_mean_ious.append(np.mean(stresstest_ious))
+    plt.hist(baseline_mean_ious, alpha=0.5, label=f"Baseline; iqr={iqr(baseline_mean_ious)}")
+    plt.hist(stresstest_mean_ious, alpha=0.5, label=f"Stresstest; iqr={iqr(stresstest_mean_ious)}")
+    plt.legend()
+    plt.xlabel("Mean IoU")
+    plt.ylabel("P(Mean IoU)")
+
+    # plt.show()
+
+
+if __name__ == '__main__':
+    df = pd.read_csv("logs/ious.log")
+    # df_untrained = pd.read_csv("logs/no-pretrain-ious.log")
+    df_etis = pd.read_csv("logs/etis-ious.log")
+    df_etis_stresstest = pd.read_csv("logs/etis-stresstest-results.log")
+    df_kvasir_stresstest = pd.read_csv("logs/stresstest-results.log")
+    df_kvasir = pd.read_csv("logs/kvasir-baseline.log")
+    df_untrained = pd.read_csv("logs/kvasir-no-pretrain-baseline.log")
+    # plot_std_iou_correlation(df, best=True)
+    # plot_std_iou_correlation(df_untrained, best=True)
+    # plot_std_iou_correlation(df_stresstest, best=False)
+    # compare_variances(df_etis, df_etis_stresstest)
+    # compare_variances(df, df_kvasir_stresstest)
+    compare_variances(df_kvasir, df_untrained)
+    plt.show()
+
+    plot_std_iou_correlation(df_untrained, best=False)
+    plot_std_iou_correlation(df, best=False)
+
+    # compare_variances(df, df)
+    # ious = df["iou"]
+    # stds = []
+    # mean_ious = []
+    # for i in np.unique(df["id"]):
+    #     plt.hist(ious[df["id"] == i][df["epoch"] == 175], alpha=0.5, bins=np.linspace(0, 1, 25), label=i, density=True)
+    #     mean_ious.append(np.mean(ious[df["id"] == i][df["epoch"] == 175]))
+    #     stds.append(np.std(ious[df["id"] == i][df["epoch"] == 175]))
+    # # plt.legend()
+    # plt.tight_layout()
+    # plt.show()
+    # print(stds)
+    # plt.hist(stds)
+    # plt.show()
+    #
+    # plt.scatter(stds, mean_ious)
+    # m, c, r, p, se = linregress(stds, mean_ious)
+    # print(m, c)
+    # plt.xlabel("Standard deviation")
+    # plt.ylabel("IoU")
+    # plt.show()