«Я могу определить, страдает ли человек пневмонией, с помощью рентгеновских лучей», - сказал я своему брату. Он в шоке посмотрел на меня, зная, что я учился в CS и никогда не касался биологии после средней школы. Однако я достиг этого подвига и имел результаты, подтверждающие это. 😝 В любом случае, это круто, правда? Что ж, все это возможно благодаря глубокому обучению! В этой статье мы разберемся и создадим сверточную нейронную сеть для выявления пневмонии с помощью рентгеновских лучей.

В предыдущей статье я говорил о создании нейронных сетей; Если вы не очень разбираетесь в основах нейронных сетей, ознакомьтесь с ними, прежде чем углубляться в них!



Чтобы узнать об основах распознавания изображений, ознакомьтесь с этой статьей:



Набор данных и постановка проблемы

Нам дают рентгеновские снимки, и мы должны определить, на каких снимках есть признаки пневмонии. Существует два класса - НОРМАЛЬНЫЙ и ПНЕВМОНИЯ.

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

Как обычно, наш набор данных взят из Kaggle. Ссылка на то же здесь. Это большой набор данных (примерно 2 ГБ), поэтому убедитесь, что у вас стабильное подключение к Интернету. После загрузки набора данных взгляните на структуру файлов.

Я создал следующую структуру для этого проекта и предлагаю всем сделать то же самое.

После того, как мы загрузили набор данных и настроили папку проекта, приступим к программированию! 😄

Керас

В этом проекте мы будем использовать Keras для создания нейронной сети. Как утверждает Википедия:

Keras - это программная библиотека с открытым исходным кодом, которая предоставляет интерфейс Python для искусственных нейронных сетей. Keras действует как интерфейс для библиотеки TensorFlow.

Он предоставляет высокоуровневый API, который не требует от нас много работы. Это хорошее место для начинающих, однако через некоторое время рекомендуется перейти на Tensorflow или PyTorch. Теперь, когда мы немного знаем о Керасе, давайте приступим.

Импорт необходимых библиотек

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

Пожалуйста, не увязните в различных импортированных нами слоях; Я объясню вам это через некоторое время. Подожди!

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

Настройка путей для обучения, проверки и тестирования

Давайте посмотрим на изображение из набора данных.

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

ImageDataGenerator в Керасе

ImageDataGenerator - это класс в Keras, который занимается увеличением изображений. Так что, возможно, вы задаетесь вопросом, зачем нам нужно увеличение изображения, не так ли? Что ж, расширение позволяет нам увеличить размер набора данных и включить разнообразие в наши данные изображений. Некоторые функции увеличения - это вращение, переворачивание, срезание, изменение яркости и т. Д. С более богатым содержанием изображений мы можем ожидать более надежную модель классификации.

Это то, что я использовал, но не стесняйтесь экспериментировать и изменять материал. 😃

Создание генераторов обучения, тестирования и проверки

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

На этом наш набор для обучения, проверки и тестирования готов.

Создание нейронной сети

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

1. Сверточный слой

У нас есть две матрицы; один - изображение, а другой - весовая матрица. Эта весовая матрица извлекает элементы из изображения, пропуская все присутствующие пиксели. Вы можете визуализировать это, как показано ниже.

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

Следующий компонент нашей нейронной сети - это уровень пула.

2. Уровень объединения

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

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

3. Сгладить

Это буквально превращает входной слой из двухмерной структуры в одномерную.

4. Отказ от учебы

Слой Dropout случайным образом устанавливает входные данные для некоторых узлов равными нулю, в то время как остальные узлы умножаются на 1 / (1-val), чтобы убедиться, что сумма остается неизменной.

Мы можем визуализировать типичную архитектуру CNN, как на диаграмме ниже.

5. Скомпилировать

Это позволяет нам настроить нашу модель для обучения. Требуется довольно много аргументов, таких как «оптимизатор», «потеря», «показатели» и т. Д. Итак, что означают эти аргументы? Оптимизаторы несут ответственность за формирование нашей модели в соответствии с данными обучения. Вот несколько оптимизаторов - Adam, SGD, RMSprop и многие другие. В дополнение к этому мы можем установить различные атрибуты для потерь, показателей и т. Д.

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

После этого давайте напишем код для нашего классификатора.

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

Подгонка набора данных

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

Просмотр результатов!

Пришло время посмотреть, как работает наша модель. 🕺

Полный код

Ресурсы

Это отличный репозиторий для визуализации различных анимаций свертки.



Конечные заметки

Как видите, наша базовая модель далека от совершенства ». Однако это не конец света. Пришло время изучить и посмотреть, как мы можем улучшить нашу модель, изменив слои, добавив дополнительные функции увеличения изображения и т. Д. Дайте мне знать несколько интересных способов улучшить производительность модели.

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

Надеюсь, вы весело провели время, работая над этим проектом, и узнали что-то новое. Adios amigos! 👋

Эта статья опубликована в рамках серии ML в веб-среду Клуба исследований и развития пауков, NIT Trichy!