Я помню тот день так ярко — и в то же время так смутно. Я не мог дышать. Даже незнакомцы, проходившие мимо, спрашивали, все ли со мной в порядке. Опираясь на рельсы на станции китайского метро, я едва удерживал равновесие, пока в конце концов не потерял сознание.
Через 3 часа я очнулся в больнице с капельницей в руке, и со мной все было в порядке. У меня уже была история пневмонии (спасибо, астма, я ценю это). Однако многим людям не так повезло, как мне, поскольку они находятся так близко к качественной больнице, которая может быстро диагностировать проблему.
В 2020 г. Всемирная организация здравоохранения сообщила, что пневмония является самой распространенной причиной смерти детей в возрасте до 5 лет, на нее приходится 18% всех детских смертей. Чтобы количественно оценить этот процент с точки зрения воздействия, это означает, что каждый год примерно 1,4 миллиона детей умирают от пневмонии. Что еще хуже, у многих врачей нет необходимых инструментов для диагностики пневмонии, а если и есть, то их диагноз просто недостаточно точен.
Хотя существует множество тестов, от анализов крови до пульсоксиметрии и анализов мокроты, наиболее надежным является рентген грудной клетки. Однако колоссальные две трети планеты не имеют доступа к базовым рентгенологическим услугам.
Это особенно несправедливо по отношению к развивающимся странам — для сравнения: в Бостоне с населением 680 000 человек работают 126 рентгенологов. В Кении с населением 43 миллиона человек всего 200 рентгенологов. Что-то в этом соотношении кажется немного неправильным…
Для болезни, которая так распространена среди людей всех возрастов, это безумие, что большая часть мира кажется такой неподготовленной. Пора положить этому конец.
Инструменты и технологии
- Google Colab.Colab – это бесплатная облачная записная книжка Jupyter, которая позволяет вводить код Python и обучать модели машинного и глубокого обучения прямо в браузере.
- TensorFlow.TensorFlow — это программная библиотека с открытым исходным кодом для машинного обучения. Он предустановлен в Google Colab.
- Keras —Keras — это библиотека нейронных сетей с открытым исходным кодом.
- Сверточные нейронные сети.CNN — это особый тип нейронной сети, специально предназначенный для обработки данных изображения, которые в конечном итоге представляют собой просто массивную матрицу чисел.
5. Ваше любопытство. Обучение созданию моделей машинного обучения происходит по замкнутому кругу. Вы будете постоянно сталкиваться с новыми препятствиями, но ваше любопытство будет подталкивать вас 👀.
План атаки
Обычно лучше иметь какой-то план, вот наш —
- Сбор набора данных
- Импорт библиотек
- Разделение данных
- Создание нашей CNN
- Обучение и тестирование
- Предсказание
Шаг 1 — Соберите данные
Прежде чем мы начнем строить нашу сеть, нам нужно найти набор данных, на котором наша сеть сможет обучаться и тестироваться. Я нашел такой датасет на Kaggle. Он содержит 5863 рентгеновских изображения грудной клетки, которые разделены на 3 категории: обучение, тестирование и проверка. Вот пример рентгеновского сканирования грудной клетки:
Каждая из этих категорий имеет две подпапки, которые разделяют обычные рентгеновские снимки и рентгеновские снимки с непрозрачностью (пневмония).
Из-за того, что все изображения уже разделены для нас, мы можем использовать это в наших интересах в нашем коде, автоматически генерируя соответствующие метки на основе имени папки, и с помощью этого segway давайте приступим к коду.
Шаг 2 — Импорт библиотек
Чтобы использовать всю мощь этих библиотек Python, нам сначала нужно импортировать их в наш код. Обратите внимание, что я импортировал TensorFlow с графическим процессором — вам нужно, чтобы это ускорило процесс.
Шаг 3 — Разделение данных
Предварительная обработка изображений является неотъемлемой частью создания любой CNN, поэтому первым шагом является преобразование коэффициентов RGB изображений в то, с чем наш компьютер может справиться в вычислительном отношении. Разделив все коэффициенты на 255, мы существенно изменим шкалу с 0–255 на 0–1; это намного облегчает жизнь нашему компьютеру, поскольку он не только работает с данными, но и делает прогнозы в зависимости от определенного порога.
К счастью, наш набор данных уже разделен на обычные папки и папки с пневмонией. Это означает, что все, что нам нужно сделать, это вызвать их каталог и направить их в соответствующие списки.
train.flow_from_directory делает вещи еще лучше, автоматически создавая метки на основе имени папки, в которой находится изображение. Как видите, наш компьютер нашел 4192 изображения в 2 классах в наборе поездов и 1040 изображений в 2 класса в тестовом наборе.
пс. На самом деле я решил использовать проверочный набор в качестве своего тестового набора, потому что в нем было больше выборок данных для использования, но на самом деле это ничего не меняет в CNN.
Шаг 4 — Создание нашей CNN
Есть несколько важных концепций, которые позволяют сверточной нейронной сети адекватно упрощать и понимать данные изображения.
- Свертка — это идея применения фильтров к входному изображению и медленного сопоставления их со всем входом, что позволяет изменить изображение и позволить нашей сети различать определенные функции.
Давайте рассмотрим это изображение в качестве примера. Обратите внимание на входные данные слева, взвешенное ядро (фильтр) посередине и запутанный признак справа. Не свисая с края входных данных, взвешенное ядро может позиционироваться ровно в 9 различных позициях, поэтому упрощенная запутанная функция справа имеет 9 точек.
Верхнее левое значение ядра умножается на верхнее левое значение белой части входных данных, а затем добавляется к верхнему среднему, умноженному на верхнее среднее, плюс верхнему правому, умноженному на верхнее правое, и так далее. Математика показана справа от изображения, поэтому 4 помещается в соответствующую позицию в возвращаемой матрице.
Так как же взвешенное ядро на самом деле возвращает функцию? Он делает это, применяя веса к пикселям и, по сути, определяя их уровень важности.
Глядя на входную матрицу слева, человек может совершенно четко распознать, что все пиксели со значением 10 рядом с пикселями со значением 0 образуют вертикальную линию, но это потому, что мы можем наблюдать их все в однажды. Для нашего компьютера это было бы затратно в вычислительном отношении и неэффективно, поэтому мы применяем это взвешенное ядро к нашей матрице.
Идея заключается в том, что если все пиксели одинаковы, ядро просто вернет 0, потому что значения, умноженные на 1, плюс значения, умноженные на -1, компенсируются. Однако, когда эти значения не аннулируются, ядро возвращает запутанную функцию, несколько запутанную в размере нашей матрицы справа, которая довольно четко изображает вертикальный край в более простой форме, что нашему компьютеру будет легче. понимание.
2. Объединение основано на окончательной идее свертки и попытке сделать наши входные данные тупыми. По сути, объединение — это упрощение областей пикселей — это позволяет нам значительно уменьшить размер нашего ввода.
Подумайте об этом таким образом. Пиксели настолько малы, что пиксели рядом друг с другом, скорее всего, будут очень похожими. Таким образом, мы можем немного пожертвовать точностью нашей сети ради гораздо большей эффективности, объединив области пикселей в одно значение, которое, по сути, представляет всю область.
Один из способов сделать это — использовать Max-Pooling, когда выбранный пиксель имеет самое высокое значение среди всех остальных в том же регионе.
3. Сведение — это процесс фактического использования наших упрощенных, извлеченных функций и передачи их в традиционную нейронную сеть. Мы можем видеть, где именно происходит процесс выравнивания в примере ниже.
Примечание. В этом примере CNN пользователь хочет классифицировать входное изображение по нескольким категориям (автомобиль, грузовик, фургон, велосипед и т. д.), поэтому он надлежащим образом использует функцию активации Softmax, которая присваивает вероятность каждому выходному значению, чтобы сеть могла выбрать объект с наибольшей вероятностью. В нашей ситуации определения того, является ли рентгеновское сканирование нормальным или пневмонией, мы будем использовать функцию активации сигмовидной кишки.
4. Последняя концепция — это Dropout, который просто случайным образом удаляет определенные выборки данных, чтобы наша сеть не стала слишком знакомой с нашим набором данных до такой степени, что она теряет точность по сравнению с общими данными. данные. Это предотвращает переоснащение.
Шаг 5 — Обучение и тестирование
Теперь, когда основная часть тяжелой работы выполнена, наша модель готова к обучению и тестированию. Как мы видим, он становится все более точным после каждой эпохи, снижаясь примерно до 96% точности как при обучении , так и при тестировании!
Прямо сейчас мы находимся в правильном балансе между недообучением и переоснащением, поэтому лучше оставить нашу сеть здесь. В конце концов, 96 % — это довольно эффектно!
Шаг 6 — Прогнозирование
В качестве бонуса мне было любопытно посмотреть, как наша сеть справится с одним входом и определит ли она свое правильное состояние. Конечно, так оно и было. Я взял изображение, которого никогда раньше не видел, установил для него правильные размеры, вставил его, и, конечно же, наша сеть вернула 1, что означает, что у пациента пневмония. Исправить!
Светлое будущее машинного обучения
Однако подобные проекты не должны быть концептуальными. Их можно применять для спасения жизней.
В Соединенном Королевстве компания GE Healthcare недавно разработала и представила свой новый ИИ, который быстро анализирует рентгеновские снимки грудной клетки и способен определять и предупреждать рентгенологов о до 8 аномалиях, включая пневмонию, указывающую на Covid-19. 19, туберкулез, фиброз и др.
Более того, он продемонстрировал 34%-е сокращение времени считывания на случай при одновременном сохранении уровня точности на уровне 97–99%. Невероятно!
Я оптимистичен, потому что это только начало — начало мира, в котором клиницисты могут помогать пациентам независимо от местоположения, стоимости, статуса или любых других профилактических факторов.
Спасибо, что прочитали! ❤️
Если эта статья показалась вам интересной, подпишитесь на меня в LinkedIn и Medium, чтобы узнать больше! Кроме того, не стесняйтесь писать мне и создавать чат об искусственном интеллекте, беспилотных автомобилях и обо всем, что вас интересует!