[8eeb5a]: / utils / plotting.py

Download this file

96 lines (83 with data), 3.5 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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()