[Отказ от ответственности: помните, что эта история отражает техническое исследование и полученные нами результаты. Все результаты являются техническими, а не медицинскими.]

По данным Фонда рака кожи,

«Ежегодно в США у большего числа людей диагностируется рак кожи, чем у всех других видов рака вместе взятых».

Меланома - это один из видов рака кожи.

«Если меланома обнаруживается и лечится на ранней стадии, она почти всегда излечима, но если это не так, рак может прогрессировать и распространяться на другие части тела, где его трудно лечить и может быть смертельным. Хотя это не самый распространенный вид рака кожи, он вызывает больше всего смертей. В 2016 году примерно 76 380 из них будут инвазивными меланомами, из них 46 870 у мужчин и 29 510 у женщин »

(в США) .

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

Здесь в игру вступает ИИ: он может дать раннее представление о снимке, сделанном вашим смартфоном.

Действительно, сейчас ИИ успешно применяется GAFA в секторе здравоохранения. Иногда это даже приравнивается к диагнозу специалистов.

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

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

Глубокое обучение для компьютерного зрения

Глубокое обучение - актуальная тема ИИ. С 2011 года он активно поддерживал (в том числе благодаря другим факторам) развитие машинного обучения и искусственного интеллекта в нескольких областях, таких как распознавание речи, обработка естественного языка, прогнозирование временных рядов, компьютерное зрение и т. Д.

Так что же такое глубокое обучение?

Нейронные сети

Глубокое обучение - это еще один термин для нейронных сетей.

В нейронной сети математическая функция воспроизводит работу нейрона нашего мозга.

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

В нейронной сети каждому входу нейрона присвоен вес. Затем суммируются все продукты между входами и их соответствующий вес. Затем результат вводится в функцию активации, которая определяет, передает ли выход нейрона сигнал (y ›0) или нет (y‹ 0).

Затем, чтобы получить нейронную сеть, вам просто нужно связать эти математические нейроны вместе.

Как только это будет сделано, вы можете обучать свою сеть.

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

Затем вы попытаетесь минимизировать функцию потерь с помощью оптимизатора.

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

Дальнейшие объяснения функции потерь, оптимизаторов и обратного распространения выходят за рамки этой статьи. Для получения дополнительной информации я настоятельно рекомендую проверить этот пост на носителе от Апурва Агравал, эту главу из Книги по глубокому обучению или этот пост в блоге Мэтта Мазура.

Особенности извлечения и свертки

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

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

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

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

Например, вот результаты сверток на изображении Ленны (использование изображения в компьютерном зрении в качестве эталона):

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

Выбор фреймворка и набора данных

Набор данных

Сайт ISIC (International Skin Imaging Collaboration) содержит наборы данных с фотографиями родинок, отмеченных специалистами как доброкачественные или злокачественные.

Мы используем следующие наборы данных:

  • МСК-1, МСК-2, МСК-3, МСК-4, МСК-5, СОНИК, УДА-1, УДА-2.

Весь архив составляет около 50 Го и содержит около 13680 картинок.

Классы в этом наборе данных довольно несбалансированы, потому что в нашем случае «хорошее» событие происходит чаще, чем «плохое»: в наборе данных около 90% изображений доброкачественных родинок, для 10% изображений злокачественных родинок.

Фреймворк

Есть три основных участника развертывания глубокого обучения на смартфонах:

  • Facebook с Caffe2 (поддержка Android и iOS)
  • Google с Tensorflow Mobile и Tensorflow Lite (Lite в настоящее время заменяет Mobile) (поддержка Android и iOS)
  • Apple, с CoreML (поддержка только iOS)

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

Наконец, наш процесс был следующим:

  1. Создайте модель с Keras, используя Tensorflow в качестве бэкенда, и обучите ее.
  2. Преобразование модели Keras в модель Tensorflow и модель CoreML
  3. Загрузите и используйте нашу модель в смартфоне с помощью мобильной библиотеки Tensorflow на Android и CoreML на iOS.

Алгоритм

Передача обучения

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

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

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

Mobilenet

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

Предварительная обработка изображений

Просматривая набор данных, мы заметили, что на огромном количестве изображений доброкачественной родинки (около 9000) были наклеены наклейки рядом с родинкой, и что это не относилось к картине злокачественной родинки.

Очевидно, что нейронная сеть может стать детектором стикеров.

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

Это была единственная обработка изображений вместе с делением каждого значения RGB на 255, чтобы входное значение оставалось между 0 и 1.

Увеличение данных

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

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

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

Кроме того, каждое изображение обучающего теста имело вероятность поворота в диапазоне от 0 до 45 °, сдвига на 25% от размера изображения и сдвига на 0,5 °.

Обучение и результаты

Наши данные были разделены на подмножества обучения и проверки с соотношением 80% / 20%.

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

Мы обучаем нашу модель в течение 150 эпох, которые длились около 16 часов, с использованием графического процессора Nvidia GeForce 1080 с CUDA 9.0, Intel i7 6700k и 32 ГБ оперативной памяти.

После 150 эпох мы достигли точности обучения 99% и точности проверки 97%.

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

Для получения дополнительной информации о площади под кривой ROC я рекомендую этот пост на сайте школы данных. Но единственное, что нужно помнить, это то, что с областью под ROC, чем выше оценка, тем лучше модель разделяет каждый класс. То же самое с точностью, но учитывается разбалансировка классов. (оценка не может быть выше 1).

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

По данным проверки модель имела значение AUROC 0,953 (что хорошо), а матрица неточностей отображала следующие значения:

Как мы видим, доброкачественные родинки лучше обнаруживаются с ошибкой всего 3%, а злокачественные родинки - с ошибкой 7%. Это логично. Действительно, модель лучше обучается с большим количеством данных, и есть больше изображений бенинг-крота.

На iPhone 8 время выполнения алгоритма составляет около 150 мс, что довольно быстро, учитывая уровень ошибок, который у нас есть. На нашем Android-устройстве это заняло около 350 мс.

Все модели неправильные, но некоторые полезны Жорж Бокс

Используйте две модели вместо одной

Глядя на динамику показателей во время обучения, мы заметили, что количество ложноотрицательных результатов (злокачественная родинка, идентифицированная как доброкачественная родинка) увеличилось на 2%. В то же время повысилась общая точность, а это означает, что вероятность ложноположительного результата (доброкачественная родинка, идентифицируемая как злокачественная) снизилась.

Следовательно, мы выбрали более «байесовский» подход. Зная, что большинство родинок доброкачественные, мы сначала использовали сеть из ранней эпохи, чтобы определить, доброкачественная ли это родинка. Если сеть ответила «да», мы остановились и посчитали, что результат правильный. Если ответ отрицательный, мы используем второй алгоритм, чтобы определить, действительно ли он злокачественный, с меньшей ошибкой.

В итоге мы получили следующую матрицу неточностей:

Заключить

Мы действительно довольны полученными результатами:

  • Способность модели классифицировать родинки, используя их изображения в качестве входных данных, превосходна.
  • Использование модели на смартфоне как для Android, так и для iOS происходит очень быстро.

Есть место доработкам:

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

Чтобы узнать больше об искусственном интеллекте, подпишитесь на нашу страницу!