def compute_scores(self):
m_aps = []
for oc_i in range(self.n_classes):
sorted_idxs = np.argsort(- self.submission_array[:, oc_i])
tp = self.gt_array[:, oc_i][sorted_idxs] == 1
fp = np.invert(tp)
n_pos = tp.sum()
if n_pos < 0.1:
m_aps.append(float('nan'))
continue
n_neg = fp.sum()
f_pcs = np.cumsum(fp)
t_pcs = np.cumsum(tp)
prec = t_pcs / (f_pcs + t_pcs)
if self.normalize_map:
k = self.N_all/n_pos
k2 = self.F_all/n_neg
prec=(t_pcs*k) / (f_pcs*k2+t_pcs*k)
avg_prec = 0
for i in range(self.submission_array.shape[0]):
if tp[i]:
avg_prec += prec[i]
m_aps.append(avg_prec / n_pos)
m_aps = np.array(m_aps)
m_ap = np.mean(m_aps)
w_ap = (m_aps * self.gt_array.sum(axis=0) / self.gt_array.sum()).sum()
return m_ap, w_ap, m_aps
评论列表
文章目录