Наверное, стоит отдельно рассказать про топ 1 решение Kaggle соревы из поста выше.
Не буду вдаваться глубоко в детали моделей, так как победители одновременно являются сотрудниками компании Owkin, которая занимается почти такой же задачей. Так что они использовали обученный у себя ViT(Phikon) как backbone для генерации признаков.
Идея понятная — несколько разных ViT-like моделей как генераторы эмбеддов из кусков большой картинки. Дальше, ансамбль MIL (Multiple Instance Learning) моделей (опять один из вариантов — их личная идея, даже статью написали 3 года назад, об этом ниже).
А теперь о интересном:
— Написали свою тулзу на C и libpng, чтобы быстро делать random access в png, выделять кусок картинки и сохранять его на диск в виде png картинки;
— Заюзали Ray (такой низкоуровневый фреймворк для качественного распараллеливания python кода) внутри кернела, чтобы быстрее процессить картинки. Запускали 2 процесса, каждый использует по 0.5 P100, ускорили процессинг картинок с 10 часов до 7. Я дико топлю за Ray, в первую очередь как замену Spark, сделаю отдельный пост скоро;
— Вспомнили, что вообще-то старый CV не сильно мертв, и определять, есть ли на картинки клетки или мы опять фон нарезали, можно с помощью Otsu thresholding в HSV space.
Кстати, что такое MIL — часто бывает ситуация, что у нас дана одна метка на некоторую группу объектов. Это могут быть данные из разных источников, или, как в случае соревы, множество картинок, вырезанных из большой картинки.
Авторы топ 1 решения еще в 2020 году написали статью об интерпретируемом подходе построения MIL модели (Chowder), который все еще является SoTA для медицинских срезов.
В общем, супер молодцы, заслуженная победа, применили свой богатый опыт и свои же модели.
Post #17
1.08K