Kirill Atstarov
4 329
Блоги

Как мы сделали Telegram-бота, который распознает заболевания на коже по фото

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

Поделиться

В избранное

В избранном

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

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

После недолгого анализа соревнований на Kaggle стало очевидно, что применение сверточных нейросетей для работы с медицинскими изображениями — это одна из наиболее популярных тем для соревнований между Data Scientists.

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

МРТ головного мозга

На практике это оказалось совсем не так: «потренироваться на котиках» и работа с узкоспециализированными медицинскими данными требует совершенно других подходов и ответственности. О применении технологий вроде распознавания злокачественных новообразований на снимках МРТ с помощью ИИ вообще можно забыть, не имея сильного лобби в учреждениях здравоохранения.

Первый этап: Baseline

Очень вовремя на глаза мне подвернулось соревнование ISIC 2017: Skin Lesion Analysis (анализ кожных заболеваний по дерматоскопическим снимкам). Он показался не таким сложным и мы с моими знакомыми не долго думая решили попробовать свои силы в этом соревновании и параллельно с этой идеей принять участие в хакатоне по искусственному интеллекту AI Hackathon, который проходил 17-18 декабря 2017 года в ПВТ (Минск).

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

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

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

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

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

Второй этап: Immersion

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

Начав сотрудничество с дерматологами, мы кардинально изменили датасет для обучения, расширив до двух десятков диагнозов, и прекратили участие в ISIC Challenge 2017.

Третий этап: Accessibility

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

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

Так выглядит родинка в дерматоскопе

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

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

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

Четвёртый этап: Soft Launch

Самый быстрый способ сделать рабочую версию MVP в нашем случае — подключить наши нейросети через бота в Telegram. Это гораздо быстрее, чем разрабатывать мобильное приложение, а пользователям отправить фотографию родинки через бота гораздо проще, чем устанавливать отдельное приложение.

@Skinseption_bot — Telegram-бот по определению кожных заболеваний

@Skinseption_bot — это бот в мессенджере Telegram. Ему достаточно отправить фотоснимок с кожными проблемами (бородавки, акне, угри, родинки и другие новообразования на коже) и он определит степень риска, вероятный диагноз и рекомендации по дальнейшим действиям. Бот поможет записаться на очный прием к нужным врачам: косметологам, дерматологам, дерматоонкологам.

Демовидео Telegram-бота

О запуске нашего бота мы рассказали в канале «Технологии будущего» @Tech_ru, где получили первые отзывы. Англоязычную версию бота мы опубликовали на Producthunt. Самое приятное — наш бот уже помог нескольким пользователям распознать опасные диагнозы, и благодаря этому люди смогут своевременно обратиться со своей проблемой к врачам.

Новость для пользователя не самая приятная, но информация об угрозе ценна

Сейчас мне нужна помощь комьюнити vc.ru — вы первые альфа-тестировщики, и ваша обратная связь позволит сделать сервис лучше. Буду рад вашим отзывам, пишите мне в Telegram — @Malkieler.

Долгосрочные планы на будущее сейчас не строим — в приоритете, конечно, точность распознавания и количество диагнозов. В ближайшие дни бот будет доступен и в Facebook Messenger. Больше информации и демовидео (англ) на Producthunt.

P.S. Telegram-бот @Skinseption_bot не должен использоваться для установки конечного диагноза или лечебных целей. Точный диагноз и курс лечения назначает только врач на очном приеме.

{ "author_name": "Kirill Atstarov", "author_type": "self", "tags": [], "comments": 53, "likes": 49, "favorites": 37, "is_advertisement": false, "section_name": "blog", "id": "39122", "is_wide": "" }
{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]