Допустим, у меня есть два Dataframe: Groundtruth и Prediction .
Каждый Dataframe имеет 3 столбца; Action, Start и End .
**Prediction :**
Action | Start | End
-------------------------
3 | 0 | 10
2 | 10 | 70
3 | 80 | 120
0 | 120 | 350
7 | 400 | 610
...
**Groundtruth :**
Action | Start | End
-------------------------
2 | 20 | 140
0 | 150 | 340
6 | 420 | 600
...
Я хочу вычислить Intersection-over-Union (IoU) по этим двум фреймам данных, используя все столбцы, то есть действие сначала, чтобы увидеть, правильный ли прогноз или нет, плюс начальный и конечный сегменты для каждого действия, чтобы увидеть, правильно ли начинается и заканчивается.
Вот мой код:
def compute_iou(y_pred, y_true):
y_pred = y_pred.flatten()
y_true = y_true.flatten()
cm = confusion_matrix(y_true, y_pred)
intersection = np.diag(cm)
ground_truth_set = cm.sum(axis=1)
predicted_set = cm.sum(axis=0)
union = ground_truth_set + predicted_set - intersection
IoU = intersection / union
for i in range(len(IoU)):
if (IoU[i]>0.5):
IoU[i] = 1
return round(np.mean(IoU)*100, 3)
Это работает, когда Я хочу рассчитать IoU по столбцу действий.
Теперь, как я могу это адаптировать, чтобы я мог получить IoU для получения перекрывающихся сегментов по начальному и конечному столбцам?
PS : Фреймы данных Groundtruth и Prediction не имеют одинакового количества строк.