DOU Labs: как в GlobalLogic определяют рак кожи по фотографии

В рубрике DOU Labs мы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на  Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. .

Статья создана в соавторстве с Владиславом Колбасиным (Lead Software Engineer, Consultant, GlobalLogic) и Игорем Манжосом (Consultant, GlobalLogic).

Несколько лет назад в харьковском офисе GlobalLogic был создан инновационный инкубатор BrainMade — для развития практики в BigData, Industrial, IoT, Augmented Reality, Machine Learning и других технологиях. Здесь все созданные нами Proof-of-Concepts (PoCs) получают свое продолжение и возможность практической реализации. Так была создана умная железная дорога и климатическая система с дополненной реальностью Meteologic.

Идея BrainMade — не только использовать инновационные наработки инкубатора для развития коммерческих проектов для наших клиентов, но и создавать решения, которые были бы полезны и презентабельны сами по себе.

Проект Nevus для проверки родинки по фотографии с использованием смартфона стал одним из важнейших проектов инкубатора. И мы хотим рассказать о нем подробнее.

Идея проекта

Data Science — уже не рыночное преимущество, а необходимое требование для современного проекта. Осознав это, мы начали поиск интересных задач, чтобы, решая их, набрать необходимый опыт в этом направлении. Выбирая задачу для реализации, мы перебрали несколько вариантов (предсказать курс валют? цену на нефть? проанализировать, что люди купят завтра? просчитать, когда роботы захватят мир?) и решили создать систему для диагностики рака кожи путем визуального анализа родинок.

Выбор был не случаен: медицина входит в ключевые компетенции нашего центра разработки в Харькове, мы уже реализовали несколько проектов по обработке изображений; подобные задачи стояли и со стороны наших клиентов (но обычно такие разработки закрыты по условиям контрактов). А тут — и медицинская тематика, и интересная задача, и полностью наш проект, наработками которого мы можем делиться!

В переводе на английский «родинка» — «nevus». Так мы и назвали наш проект.

Команда Nevus

Предшественники

Тема диагностики меланомы путем визуального анализа кожного покрова не нова. Еще до старта нашего проекта существовало множество научных работ по этой теме. Самые фундаментальные — исследования в Стэнфорде, а также проект из Республики Беларусь с грантом от Европейского Союза на около 1 млн евро.

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

Изучив опыт предшественников, мы поняли, что обладаем достаточной экспертизой для создания нового решения, которое будет быстрее в разработке и удобнее для пользователя. Кроме того, мы решили расширить аудиторию проекта: от «домашних пользователей» — пациентов без какого-либо опыта и знаний в медицине — до специалистов, которые будут использовать приложение для предварительной диагностики потенциальных заболеваний. Детали смотрите ниже.

Именно в этом ключе мы и начали работу над проектом.

Задачи проекта

Точность

Для реализации нашей цели мы сфокусировались на трех основных видах невуса: родинка, меланома и себорейный кератоз.

Родинка (nevus): пигментированное образование на коже; может окрашиваться в различные цвета: коричневый, черный, красный, фиолетовый и другие. Большинство родимых пятен безопасны, но под воздействием внешних факторов (ультрафиолетового излучения, травм и др.), родинка может переродиться в меланому.

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

Себорейный кератоз (seborrheic keratosis): доброкачественная опухоль кожи. Встречается довольно часто на коже груди, лица, шеи, рук. Не перерождается в злокачественную опухоль, хотя некоторые врачи считают, что в очень редких случаях это все же возможно.

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

Простота использования

Нашей целью стало создание системы быстрой проверки родинок без специального оборудования — с помощью современного мобильного телефона.

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

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

Реализация проекта

В проекте были задействованы два разработчика, использовались технологии: TensorFlow, Angular, Node.js, Nginx.

Загрузка фото

В настоящий момент проект выполнен в виде сайта, где можно получить диагноз, загрузив фото родинки:

Обработка данных

Каждый случай — это фотография родинки и мета-информация: название, описание и существующий диагноз (если он известен).

Алгоритм анализирует входное изображение в несколько этапов. Вначале выделяет родинку из фона, создавая маску изображения:

Отделенная от фона родинка передается на обработку в нейронную сеть Inception V3. Эта сеть содержит 311 слоев и около 25 миллионов параметров.

В результате работы сеть возвращает набор вероятностей: риск меланомы, «риск» родинки или риск безвредного, но нежелательного себорейного кератоза.

Пользователь — доктор

Пользователь-врач может указать в форме уже известный диагноз для конкретного случая.

Например, ниже доктор отметил, что данная родинка — просто родинка, выбрав значение «Nevus» в выпадающем списке «Labeled by Doctor as:», значение по умолчанию — «Unknown»:

Вся информация, включая автоматический диагноз и его верификацию (о ней — ниже), отображена на панели для данного случая:

Галерея

В галерее можно увидеть все случаи, отфильтровать их по диагнозу, дате и названию:

О каждом случае можно узнать некоторые дополнительные сведения, например, какая маска была для него сгенерирована:

Алгоритм определения диагноза

Задача постановки диагноза сводится к подсчету рисков и выбору из них максимального значения.

Рассмотрим случай, описанный следующими вероятностями:

  • Melanoma Risk: 0.4052
  • Seborrheic keratosis Risk: 0
  • Simple nevus: 0.5948

Из этого Nevus делает вывод, что перед нами — обычная родинка, то есть «Simple nevus». Ее вероятность равна 0.5948, что больше двух других вероятностей (0.4052 для меланомы и 0 для кератоза).

Под заголовком «Probably it is a» отображается вывод, в нашем случае — «Nevus».

Сбор базы данных

Здесь мы столкнулись с проблемой: зачастую за качественно размеченные базы медицинских изображений надо платить. Стэнфордский набор данных из около 100 тыс. картинок публично не доступен. Мы взяли за основу ISDIS + несколько дополнительных баз. Было много работы с исследованием изображений и данных, их подготовкой, сегментацией и разметкой.

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

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

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

Работа с данными

Обучение

Непросто перечислить различные варианты построения моделей. Мы проверили разные архитектуры нейронных сетей, от простых сверточных до сложных многослойных сетей. Для повышения эффективности использовали методику передачи обучения «transfer learning» — когда знания, полученные при решении одной проблемы, применяются к другой проблеме, связанной с первой:

  1. Брали сеть, уже обученную для классификации изображений из набора ImageNet.
  2. Отбрасывали последний слой этой сети, ответственный за окончательные предсказания, и добавляли новый слой для решения нашей задачи.
  3. Несколько начальных слоев «замораживали» (их веса не изменялись).

В итоге мы пришли к сети «Inception-v3», с приблизительно половиной замороженных слоев и парой дополнительных полносвязных слоев.

Тестирование модели

Важные метрики медицинского теста — это специфичность (она же точность, precision, specificity) и чувствительность (она же recall, sensitivity). Эти метрики вычисляются по следующему алгоритму: тест на меланому классифицирует каждый случай как имеющий меланому (положительный результат) или не имеющий ее (результат отрицательный). Возможны четыре исхода:

  • Истинный положительный результат, true positive: тест показал меланому, и она действительно есть.
  • Истинный отрицательный результат, true negative: тест показал отсутствие меланомы, и ее действительно нет.
  • Ложный отрицательный результат, false negative: тест показал отсутствие меланомы, а на самом деле она есть.
  • Ложный положительный результат, false positive: тест показал меланому, а на самом деле ее нет.

Эти исходы можно представить в виде «матрицы неточностей» (confusion matrix):

Специфичность и чувствительность — это статистические показатели эффективности теста, вычисляемые по формулам:

Специфичность = количество истинных отрицательных результатов ÷ (количество истинных отрицательных результатов + количество ложных положительных результатов)

Чувствительность = количество истинных положительных результатов ÷ (количество истинных положительных результатов + количество ложных отрицательных результатов)

Идеальный тест получает 100% по обеим метрикам.

Сравним результаты

По сравнению со Стэнфордом, где над проектом работали 26 профессиональных врачей, наши ресурсы были довольно скромны. Мы оценивали нашу модель, сортируя все собранные изображения (около 10 000) на тренировочный и тестовый наборы. При этом мы учитывали указанное ранее хеширование для предотвращения повторений одинаковых изображений в обоих наборах.

В результате на тестовом датасете получилось решение с такими метриками:

  • Precision (Specificity) = 0.8238
  • Recall (Sensitivity) = 0.8044
  • F1 score = 0.8138
  • Accuracy = 0.89

Хороший ли это результат? Уверены — это достаточно неплохой результат. Напрямую сравнить точность полученной модели и других моделей, например, модели Стэнфорда, невозможно: там использовались другие данные и в большем объеме, а также другие процедуры проверки качества модели.

Например, согласно этой статье, исследователи получили:

  • Precision (Specificity) = 0.713
  • Recall (Sensitivity) = 0.866

Как видим, у нас Recall чуть хуже, но Precision — чуть лучше.

Матрица неточностей Nevus

Полные данные о распределении классов и предсказанных значениях в валидационной выборке приведены в матрице неточностей:

True/PredictedMelanomaNevusKeratosis
Melanoma54919326
Nevus162338434
Keratosis3743244

Нормализованная матрица:

True/PredictedMelanomaNevusKeratosis
Melanoma0.71480.25130.0339
Nevus0.04530.94530.0095
Keratosis0.11420.13270.7531

Результаты проекта

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

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

Будем рады вашим отзывам и предложениям в комментариях к статье!

Похожие статьи:
Компания Huawei допустила утечку информации, открывающую все характеристики смартфонов семейства Huawei P9, куда кроме базового варианта...
Полный выпуск Mobile-Review.com Podcast 314 от 20 января (1 час 36 минут, 88 МБ, mр3) О китайской компании Xiaomi. Особое мнение с Эльдаром Муртазиным (26...
Мы нашли Senior Fullstack ASP.NET разработчика, который за 11 лет дорос до позиции с зарплатой $5000, и предложили ему анонимно рассказать...
В Україні працюють над проєктом «смарт-мобілізація». Пілотну версію запустять на операторів дронів вже через кілька...
Благодійний фонд Nova Ukraine надає 200 стипендій, що покривають 100% вартості Premium пакету курсу «Front-end розробка»...
Яндекс.Метрика