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

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

Попытка первая: МОНАИ.

MONAI — это надежная платформа, используемая для исследований в области глубокого обучения медицинских изображений. Поэтому мы подумали, что это должно быть легко. Получите набор данных, подключите его к приятным функциям фреймворка и добьётесь успеха. Сначала мы открыли один из ноутбуков MONAI Google Colab, чтобы посмотреть, сможем ли мы его запустить. И тут мы столкнулись с проблемой номер один. Обучение длилось восемь часов, и мы не могли позволить себе премиум-сервис Google Colab, поэтому он каждый раз отключался. Проверка реальностью: мы все еще бедные студенты колледжа, которые едят рамен и используют тостеры для ноутбуков. Хорошо, но, возможно, мы могли бы попытаться понять функциональность MONAI и разработать собственную более простую модель. Проблема номер два: после семи полных чашек кофе (~3 дня) документация по-прежнему оставалась для нас по большей части китайской. Мы чувствовали, что добились прогресса, но у нас никогда не получалось запустить что-либо, а разработчики MONAI не ставили в приоритет дружественные сообщения об ошибках. Так что прощай, MONAI (это не ты, это мы) и здравствуй, PyHealth (по крайней мере, мы так думали).

Попытка вторая: PyHealth

На данный момент (да, мы знаем, мы прокрастинаторы) у нас почти не оставалось времени, поэтому мы попробовали эту новую библиотеку под названием PyHealth. Вызванный разочарованием поиск в Google «медицинских библиотек ИИ» привел нас к PyHealth. Хотя он, по общему признанию, выглядел намного хуже, чем MONAI, он обещал рабочую модель всего в 10 строках кода. Мы снова выпили кофе, потратили день на документацию и каким-то образом запустили Google Colab. Набор данных, который мы выбрали в Kaggle, правильно обрабатывался, структуры данных, определенные PyHealth, правильно получали данные, и модель правильно компилировалась. Но как бы мы ни старались, модель выдавала ошибку каждый раз, когда мы начинали обучение. Мы искали StackOverflow, документы API и даже отследили ошибку до кода библиотеки PyHealth, на который она ссылалась, но ничего не сработало. Мы основали нашу записную книжку на существующей демо-версии Colab, созданной командой PyHealth, поэтому мы попытались проанализировать эту Colab, чтобы увидеть, сможем ли мы понять что-то новое. И тут к нам пришла проблема. Никто из нас ранее не пытался запустить пример Google Colab. Когда мы попытались, он не скомпилировался и выдал ту же ошибку, что и в нашей работе. Ха! Мы не сделали ничего плохого (не уверен в этом…), но в самой библиотеке, кажется, есть ошибки, которые нужно отсортировать. Почему оценка Google TF-IDF должна была привести нас к PyHealth (это все еще может быть нашей ошибкой…)? Хотя это было менее обескураживающе, чем провал MONAI, нам все равно нечего было показать для нашего проекта.

Попытка третья: Керас

К счастью, мы знали Кераса. Он был для нас как старый друг. Мы прошли курс по глубокому обучению и использовали Keras в нескольких заданиях. Кусок пирога. Если торт не очень вкусный и его нужно разрезать бензопилой. Оказывается, это было намного сложнее, чем мы думали. Бесконечный цикл обучения заставил нас обучать модель часами, прежде чем мы обнаружили ошибку. Неправильно обработанные данные создали модель с точностью 23% (как вы вообще это делаете?) для набора данных из двух классов с почти равным тестовым разделением. Град-КАМ выделил один пиксель на всем изображении. Кошмар за кошмаром. И на исправление каждого кошмара уходили часы. В конце концов, мы создали блокнот с работающей моделью, но на просмотр документации, отладку и приготовление кофе ушло много дней.

Итак, что мы узнали? Глубокое обучение — это сложно. Очень сложно. Чтение (и понимание) документации еще сложнее. Когда вы исправляете ошибку, ее заменяют четыре ошибки. Всегда будет одна простая ошибка, на исправление которой уходит десять часов. Планы всегда идут не так. Даже если вам кажется, что вы что-то знаете, скорее всего, это не так.

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

Репозиторий сделанных нами блокнотов на GitHub: https://github.com/Mattliketocode/AIMED

Авторы Мэтью Экс и Ричард Экс