Оценка модели семантической сегментации по mAP
Могу ли я спросить, есть ли способ расчета средней средней точности для модели сегментации семантики без использования граничных блоков? Я должен предсказать 3 класса в качестве вывода, и фон является одним из классов.
1 ответ
Я нашел этот великолепный блог с примером оценки моделей сегментации изображений и зависит от него. Я написал этот код для расчета AP
def np_map(y_true, y_pred, num_classes=3):
# Compute the confusion matrix to get the number of true positives,
# false positives, and false negatives
# Convert predictions and target from categorical to integer format
target = np.argmax(y_true, axis=-1).ravel()
predicted = np.argmax(y_pred, axis=-1).ravel()
# Trick from torchnet for bincounting 2 arrays together
# https://github.com/pytorch/tnt/blob/master/torchnet/meter/confusionmeter.py
x = predicted + num_classes * target
bincount_2d = np.bincount(x.astype(np.int32), minlength=num_classes ** 2)
assert bincount_2d.size == num_classes ** 2
conf = bincount_2d.reshape((num_classes, num_classes))
# Compute the IoU and mean IoU from the confusion matrix
true_positive = np.diag(conf)
false_positive = np.sum(conf, 0) - true_positive
false_negative = np.sum(conf, 1) - true_positive
# Just in case we get a division by 0, ignore/hide the error and set the value to 0
with np.errstate(divide='ignore', invalid='ignore'):
map = 1/num_classes*np.sum(true_positive / (true_positive + false_positive + false_negative))
return np.mean(map).astype(np.float32)