Соревнование 2018 Data Science Bowl Kaggle привлекло мое внимание своим потенциалом оказать глубокое практическое влияние на биотехнологическую отрасль. В этом посте описывается мой общий опыт, а подробное описание моей работы можно найти на моем Github.

Задача:

Получив микроскопические изображения многих типов ядер, сделанные в различных условиях окружающей среды, создайте модель машинного обучения, которая может обнаруживать ядра.

Мотивация:

Цель этой задачи - заложить основу для способности количественно оценивать аспекты биологической системы. В частности, имея модель, которая может сегментировать ядра среди беспорядка на изображении микроскопа, можно применить доступное в настоящее время программное обеспечение для подсчета количества обнаруженных ядер. Знание количества ядер в биологическом образце позволяет ученым количественно оценить свои наблюдения, а не «бросать вызов».

Например, в области исследований по открытию лекарств, после применения тестируемого лекарства к партии клеток, эта модель могла бы сообщить, увеличилось или уменьшилось количество клеток в ответ на лекарство. Кроме того, традиционные методы программного обеспечения, которые выполняют ту же задачу, ограничены в своих возможностях, и на их выполнение может уйти от нескольких дней до недели. Уменьшая время выполнения этой задачи, я могу только представить себе, что затраты на соответствующие исследования уменьшатся, а возможности открытия полезного лекарства появятся раньше.

Это видео от организатора соревнования раскрывает мотивацию.

Модель:

Задача этого проекта - проблема сегментации изображений. Существует множество архитектур сверточной нейронной сети (CNN), каждая из которых подходит для решения определенной задачи. Однако для биомедицинских приложений архитектура U-Net оказалась весьма успешной. Соответственно, я построил свою модель на основе этой архитектуры. Моя цель состояла в том, чтобы использовать U-Net CNN, чтобы сегментировать ядра отдельно от различных объектов на изображениях.

Обучающие данные состоят из 670 необработанных микроскопических изображений. Кроме того, каждое необработанное изображение имеет свою соответствующую двоичную маску, отдельное изображение, так что белые пиксели обозначают области присутствия ядер, а черные пиксели обозначают области без ядер. Бинарные маски были вручную промаркированы организаторами конкурса. Эти бинарные маски нужны нам, чтобы у модели была ссылка, чтобы знать, правильно ли она сегментировала ядра на этапе обучения.

Затем я обучил модель на 600 изображениях, оставив 70 для тестового набора.

Результаты:

Вот код Python для архитектуры U-Net. После обучения модели я тестирую ее на 70 изображениях из тестового набора. Для каждого тестового изображения модель возвращает предсказанное двоичное изображение.

Мы оцениваем производительность модели, накладывая двоичную маску исходного изображения на прогнозируемый результат. Отсюда мы видим регионы, где модель предсказывала правильно и неверно.

Цвета на изображении выше:

  • Желтый: истинно положительный
  • Черный: истинно отрицательный
  • Зеленый: ложное срабатывание (ошибка)
  • Красный: ложноотрицательный (ошибка)

Чтобы количественно оценить производительность модели, я использовал метрику Расстояние Жаккара (также известное как пересечение над объединением). Это значение Расстояние Жаккарда вычисляется путем взятия площади областей, в которых ядра были предсказаны правильно (истинные положительные результаты), и деления этого значения на сумму ложноотрицательных, ложноположительных и истинно положительных областей.

Jaccard Distance = 
True Positive / (True Positive + False Negative + False Positive)

Таким образом, это значение показателя находится в диапазоне от 0 до 1. Идеальный балл 1 означает, что модель способна обнаруживать все области ядер без каких-либо ложноотрицательных и ложноположительных результатов.

Для 70 тестовых изображений мое среднее расстояние Жаккарда равнялось 0,75. Это означает, что в среднем модель смогла правильно обнаружить довольно значительную часть всех ядер.

Вывод:

Результаты показывают, что архитектура U-Net удовлетворительно работает при сегментировании областей ядер. Хотя результат не является стопроцентно оптимальным, он соответствует сфере деятельности и потребностям биолога.

Модель последовательно захватывает большие фрагменты ядер, и любые области ошибки несущественны для интересов биолога. Имея значительную часть сегментированных ядер, вы можете применить другое программное обеспечение, чтобы теперь подсчитать их количество или рассчитать их размер. Это позволит биологу выполнить подсчет клеток, но за гораздо более короткое время по сравнению с традиционными методами. Известная библиотека Python OpenCV имеет функцию обнаружения объектов, которую можно использовать для достижения этой цели.

Тем не менее общая проблема сохраняется в ситуации, когда ядра перекрываются. Как модель отличает 2 или более перекрывающихся ядра от одного?

Мое элементарное предлагаемое решение этой проблемы состоит в том, чтобы измерить средний размер ядра (в данном случае актуальная область, поскольку изображение представляет собой двумерное представление ядер) для определенного типа клетки. Затем после того, как модель вернет двоичное изображение для ядра того же типа, определите связанные области белых пикселей, площадь которых превышает средний размер ядра, с разумной степенью погрешности. Если такая область превышает произвольный порог, скажем, в 1,5 раза больше среднего, то считайте эту область как 2 ядра. Я повторяю, что это грубое предложение, и оно применимо только к одному типу ядер, поскольку отдельные типы ядер различаются по размеру. Дальнейшее изучение этой проблемы оставлено для будущей работы.

В целом цель этого конкурса Kaggle заключалась в реализации модели машинного обучения, которая могла бы сегментировать ядра, и я считаю, что мои усилия были вполне удовлетворительными.

Если эта задача может быть дополнительно улучшена за счет учета проблемы, описанной выше, то я вижу потенциал, в котором такая функциональная модель может быть коммерциализирована в качестве программного продукта для исследователей-биологов в академических кругах и в промышленности за ее практическую полезность.