Репозиторий проекта "Распознавание заболевания лёгких по их рентгенограмме с помощью свёрточной нейронной сети"
В этом проекте рассматриваются две различные архитектуры свёрточных нейронных сетей для распознавания заболеваний лёгких.
Над проектом работал:
Маштаков Георгий Алексеевич
Научный руководитель:
Рубанова Валерия Александровна
В изначальном датасете данные разделены на 4 класса:
- COVID (COVID-19)
- Lung_Opacity (Переводится как "Непрозрачность лёгких", но в описании датасета написано, что это Нековидная инфекция)
- Normal (Здоровые лёгкие)
- Viral Pneumonia (Вирусная пневмония)
- preprocessing.py - Подготовка датасета (из изначального датасета)
- prepared_dataset - Подготовленный датасет (он пока не загружен, но его можно сделать из изначального датасета и preprocessing.py)
- Hand-made_CNN.ipynb - Код с моей нейронной сетью
- VGG19+GradCam.ipynb - Код с нейронной сетью VGG19
- model - Обученная модель
В этом файле выполняется случайный выбор 2690 изображений по каждому классу заболеваний. Это сделано для того, чтобы модель равномерно обучилась на всех классах. Именно 2690, потому что в наименьшем классе 1345 изображений, и изначально планировалась аугментация изображений последнего класса Viral Pneumonia(для каждого изображения одно изменение, тем самым количество изображений в этом классе будет 2690), но даже совсем незначительное изменение данных последнего класса понижало точность модели. Поэтому в последней версии аугментации данных нет, но количество изображений для обучения осталось таким же.
В этом файле сначала выполняется импортирование всех нужных библиотек, затем выполняется считывание и предобработка всех изображений, далле строится базовое решение: Случайные леса дали максимальную точность в 75%, после строится модель свёрточной нейронной сети, состоящей из входного слоя, 5 свёрточных слоёв и MaxPooling, 3 полносвязных слоёв с Dropout(чтобы уменьшить переобучение) и выходного слоя. Дальше выполняется оценка качества обученной модели. В итоге получены Точность в 89% и F1-мера в 90%.
Также получилось сделать GradCAM - способ сегментации изображения, заключающийся в построении карты коэффициентов на последнем свёрточном слое. Результаты будут расположены в самом конце.
В этом файле также выполняется предобработка данных, затем инициализируется модель VGG19 без верхних полносвязных слоёв. Затем добавляются 2 полносвязных слоя с Dropout и выходной слой. Другими словами, выполняется Transfer learning, используя Feature extraction. Итоговых результатов пока нет(достигнут уровень предыдущей модели), в связи с ограничением мощностей, но скоро результаты будут улучшены.
В любом случае обучение можно продолжать бесконечно, пока не будет достигнут максимальный или требуемый для нас результат.