Оцените нейронную сеть, используя предсказанное изображение и изображение истинной земли - PullRequest
0 голосов
/ 03 мая 2020

Предсказанное изображение и изображение gt - это черно-белые изображения.

Белые точки на изображениях истинной земли представляют значения истинной земли. Белые точки на предсказанных изображениях представляют предсказанные точки.

Оба изображения состоят из нескольких строк на изображениях (присутствует много строк. Все они одного класса)

Я использую следующий метод

n_gt_pixels = cv2.countNonZero(im_gt) #count number of white pixels in gt image
n_predicted_pixels = 0
for i in range(rows):
   for j in range(cols):
     if((im_predicted[i,j] == im_gt[i,j]) and im_gt[i,j]!=0): #ignore black pixels
        n_predicted_pixels = n_predicted_pixels + 1

accuracy = n_predicted_pixels /n_gt_pixels

Затем я беру средний.

Подскажите, пожалуйста, это правильный способ оценки модели? Есть ли лучшие способы сделать это? (этот подход занимает много времени)

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Для сегментации лучшие показатели, чем точность, будут Оценка костей , Оценка Жакара , абсолютная разность объемов или некоторые показатели расстояния, такие как симметрия c расстояние до поверхности или расстояние Хаусдорфа.

1 голос
/ 03 мая 2020

Ваша задача выглядит как проблема двоичной сегментации. Вы можете использовать такие метрики, как точность (процент правильно классифицированных пикселей), MCR, т. Е. Коэффициент ошибочной классификации, который по существу равен 1 точности, или средний IOU, о котором вы можете прочитать здесь .

Кроме того, что я хотел бы предложить, если вы хотите рассчитать точность, вы используете cv2.bitwise_xor для этой задачи.

EDIT

def cal_miou(pred_mask, sample_mask):
    tp = np.sum(cv2.bitwise_and(pred_mask, sample_mask))
    fp = np.sum(cv2.bitwise_and(pred_mask, cv2.bitwise_not(sample_mask)))
    fn = np.sum(cv2.bitwise_and(cv2.bitwise_not(pred_mask), sample_mask))
    return tp/(tp+fp+fn)

Эта функция может использоваться для вычисления MIOU, где pred_mask и sample_mask - это 2d массивы.

...