Dice для бинарных масок: задача на Python
Предсказанная маска может содержать лишние пиксели или пропускать часть объекта. Реализуйте вычисление Dice по двум готовым маскам, включая правило для пустых масок, явно заданное в условии.
Откройте программу платного курса Computer Vision Engineer, чтобы продолжить практику с данными, моделями и CV-сервисом.
Dice по паре масок
Задание
Напишите функцию dice(predicted, truth), которая возвращает коэффициент Dice для пары бинарных масок одного размера.
Маска приходит списком списков: строка кадра — вложенный список, пиксель — 1, если он принадлежит объекту, и 0, если фону. Оба списка одной высоты и одной ширины.
Считается Dice по тем же трём числам, что и IoU: пиксель, помеченный единицей в обеих масках, идёт в TP, помеченный только в предсказании — в FP, только в разметке — в FN. Дальше по формуле 2·TP / (2·TP + FP + FN).
Отдельный случай — когда в обеих масках нет ни одной единицы. Формула здесь даёт деление на ноль, а по смыслу маски совпали полностью: модель не нашла объекта, и объекта действительно нет. Такой случай возвращает 1.0.
Пример
predicted = [[0, 1, 1],
[0, 1, 1]]
truth = [[0, 0, 1],
[0, 1, 1]]
dice(predicted, truth) # 0.8571428571428571
dice([[0, 0]], [[0, 0]]) # 1.0
В первом примере совпало три пикселя, один лишний, пропущенных нет: 2·3 / (2·3 + 1 + 0). IoU на этих же масках вышел бы 0.75 — можно проверить себя связью между метриками, которая разбиралась в уроке.
Примечание
Маски уже разобраны и приходят готовыми списками, читать файлы не нужно. Размеры всегда совпадают, а сама маска непустая — хотя бы один пиксель в ней есть, пусть и нулевой. Возвращайте число; вызывать функцию самостоятельно не нужно, тесты сделают это сами. Значения сравниваются с точностью до девятого знака, округлять результат не надо.
Что проверяется
Код проверок скрыт, так что вот полный список того, что в них разбирается:
- формат ответа: возвращается число;
- оба вызова из примера;
- маски совпали полностью и обратный случай — совпадений нет вовсе;
- единственный пиксель: разметка без предсказания, предсказание без разметки, совпадение;
- предсказание сильно шире разметки и тот же случай наоборот — Dice симметричен;
- два сдвинутых квадрата на кадре 200 на 200;
- две пустые маски того же размера — ответ
1.0, а не деление на ноль.
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
