Берешь и делаешь: нейронные сети в Центре Высоких Технологий

количество просмотров916   7-07-2017, 15:54
Ижевская IT-компания Центр Высоких Технологий это коллектив увлеченных профессионалов с 16-летней историей. Пока вы только думаете — команда ЦВТ уже воплощает мысли в реальность.

ЦВТ

Компания занимается заказной разработкой интернет-проектов, мобильных приложений и приложений для SMART-TV, а также проектами с применением дополненной (AR) и виртуальной (VR) реальности.

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

Артур Ахметгалин, руководител внутренних проектов, Центр Высоких Технологий.

Мы в Центре Высоких Технологий всегда следим за актуальными трендами в развитии технологий. Смотрим, анализируем происходящее и запрыгиваем на поезд прогресса, если считаем нужным.

Так в 2010 году мы начали делать мобильные приложения. В 2011 — приложения для SMART TV. Недавно занялись VR и AR, а вот буквально только что решили подключиться к нейронным сетям.

Сама по себе технология, конечно, не новая. А уж теория и вовсе уходит корнями в 60-е годы прошлого века.

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

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

А такое нам не очень интересно. Но обо всём по порядку.

Neural Networks 101

Как мы начали работать с нейросетями?

С одной стороны — очень легко. В последние годы появилось огромное количество инструментов для создания нейросетей. Огромное количество информации по ним. От препринтов на arXiv.org до статей на habrhabr.ru. Конечно, разрыв между уровнем материалов соответствующий.

Берешь и делаешь: нейронные сети в Центре Высоких Технологий

С другой стороны — очень непросто. Потому что создание сетей, действительно, не требует длительной разработки или написания большого количества кода. Зато требует значительной экспертизы в математике и такой отдельной компетенции как Data Science. То есть нужно уметь работать с большим количеством данных и вообще понимать, что в этих данных искать.

Поэтому задача перед нами стояла непростая. Как быть, если нужно решать задачу, к которой непонятно как подступиться? Всё как мы любим: просто брать и делать.

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

Берешь и делаешь: нейронные сети в Центре Высоких Технологий

«Что может быть лучше, чтобы влиться в тему, чем хакатон?» — подумали мы. И полетели в Санкт-Петербург.

AI Hackaton в Санкт-Петебруге


AI Hackaton — это одно из крупнейших мероприятий для коммьюнити нейросетевиков в России. В этом году участвовали более 50 команд (до финиша дошли 37) и более 250 человек. Среди спонсоров — крупные российские инвестфонды: Embria Ventures, Haxus, Flint Capital. В общем, всё серьёзно.

Сам хакатон не имеет конкретной направленности. Главное — это нейронные сети. Поэтому команды и проекты были самые разные. Вот лишь несколько примеров:

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

ИИ, который умеет определять рейтинг ещё неопубликованного поста в соцсетях. (Кстати, это победители.)

Приложение, подбирающее рецепты блюд по фотографии открытого холодильника.

Телеграм-бот, ищущий порнозвёзд, похожих на ваших знакомых. No shit! (Приз зрительских симпатий.)

и многие-многие другие.

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

Проект LungDiagnostics


Каждые 30 секунд в мире умирает один ребенок от поздней диагностики пневмонии1

Основная проблема — быстрое и плохо предсказуемое развитие вирусных инфекций, несвоевременная диагностика, недостаток ресурсов в сфере медицины.

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

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

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

Всё это ведёт к по-настоящему ужасной статистике детской смертности.

На самом деле этот проект уже стартовал как НИОКР в СТМ в Ижевске. Но к началу хакатона у нас не было ничего, кроме прототипа электронного стетоскопа, собранного буквально за два дня. Так что никакого читерства.

Сделать за два дня и один вечер предстояло очень много:

1. Проанализировать данные. Как и написано выше, здесь заключалась главная проблема. Исходных данных для анализа было мало.

2. Выбрать модель, собрать и обучить нейронную сеть.

3. Подготовить демонстрационную часть. В нашем случае — простейший веб-сервис.

4. Подготовиться к презентации.

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

Берешь и делаешь: нейронные сети в Центре Высоких Технологий

Disclaimer: детальное описание разработанного решения и теоретический ликбез не входят в задачи этой статьи. Ограничимся кратким отчётом о проделанной работе.

0. Задача на хакатон и команда


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

Состав команды был такой:

Команда «Сетевого завода» из СТМ

Мы, Центр Высоких Технологий (сокращенно ЦВТ)

Студенческий коллектив Санкт-Петербургскго университета информационных технологий, механики и оптики (ИТМО)

1. Анализ данных


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

Но получить больше в короткий срок было невозможно. Да и не нужно, ведь мы на хакатоне, и важен proof of concept.

Поэтому мы занялись аугментацией:

1. Увеличили и замедлили скорость записей.

2. Сдвинули шумы лёгких ближе к началу аудиофайла, ближе к концу аудиофайла.

3. Комбинировали пункты 1 и 2.

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

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

Берешь и делаешь: нейронные сети в Центре Высоких Технологий

После аугментации произвели препроцессинг данных с помощью фреймворков SMOTE и Bootstrap, чтобы сбалансировать данные. И очистили данные, используя Быстрое преобразование Фурье (Fast Fourier transform).

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

2. Выбор модели и обучение сети


Для проверки наших гипотез был выбран один из самых простых типов сетей — нейронная сеть прямого распространения (Feedforward neural network).

Берешь и делаешь: нейронные сети в Центре Высоких Технологий

Он отлично подходит для извлечения фич при помощи Мел-кепстральных коэффициентов (Mel-frequency cepstrum coefficients, MFCC).

Использовались 3 обучающих слоя. А сама структура сети была такой:

Вход: 2400 нейронов

Первый скрытый слой: 1000 нейронов

Второй скрытый слой: 500 нейронов

Третий скрытый слой: 150 нейронов

Выход: 1 нейрон

За время хакатона были проверены следующие модели:

Логистическая регрессия (Logistic Regression)

Случайный лес (Random Forest)

Многослойный перцептрон (Multilayer perceptron, MLP)

Свёрточная нейронная сеть (Convolutional neural network, CNN)

Наилучшие результаты показали Логистическая регрессия и многослойный перцептрон. Именно на них и решили остановиться.

3. Демо-часть


В качестве демо мы реализовали простейший сервис на Python и Tornado. Настроили сервер, привязали домен и выложили на всеобщее обозрение.

Фреймворк Tornado мы видели на хакатоне в первый раз, так как компания большей частью специализируется в веб-разработке на PHP. Но разобрались очень быстро.

Вообще подавляющее большинство инструментов для создания нейросетей, например, самые популярные связки вроде Theano + Keras, Tensorflow + Keras, реализованы именно на Python. Поэтому сеть на Python идеально дружится с бэкендом на Python же.

Lungdiagnostics.ru


Посмотреть результат можно здесь: Lungdiagnostics.ru. Сервис позволяет загрузить запись своих лёгких в формате WAV. Нейронная сеть произведёт анализ данных и выдаст результат.

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

4. Презентация и результаты


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

Берешь и делаешь: нейронные сети в Центре Высоких Технологий

В результате наша сеть показала результат в 85%90% точности. Это очень хороший показатель для того объёма работы, который можно выполнить на хакатоне.

Именно это позволило нам занять на хакатоне 3 место.

Берешь и делаешь: нейронные сети в Центре Высоких Технологий

В заключение


Вывод 1


Нейронные сети — это легко и сложно одновременно.

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

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

Вывод 2


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

1. Пневмония

инфо и фото: Центр Высоких Технологий