Skip to content

Dice / Jaccard implementation #96

Description

@bonlime

Текущую реализацию Dice/Jaccard я подрезал у bloodaxe и там есть один нюанс, на который раньше не обращал внимания. Они считаются per-batch, а не per-image. Такой подход лучше подходит для многоклассовой сегментации как на каком-нибудь coco. поскольку Dice/Jaccard не определен для случая пустого Ground Truth, если на картинке нет какого-то класса, то предсказание для всего этого класса нужно выкинуть из подсчета лосса (потому что там dice будет 0, если хотя бы один пиксель предсказан, что понятное дело не правильно. это правда можно пофиксить поднимая epsilon, так сейчас так и сделано, eps стоит 1, но его в теории можно поставить сильно выше. например 50. тогда per-image будет работать нормально). В случае если считать per-batch, то если класс есть хоть где-то в батче, то можно уже посчитать Dice, и не выкидывать пиксели, что гораздо лучше. Проблема в том, что такой подход отдаёт сильное преимущество большим объектам и даёт смещенную оценку для per-image IoU. сталкивался с этим еще весной когда локальный скор для OpenCities был значительно выше чем на паблике. только сейчас осознал с чем это связано.

Предлагается:
Посмотреть как dice реализован в других местах и возможно добавить флаг для подсчета per-image.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions