Разработать тг-бот, который способен обнаружить рак лёгких на ранних стадиях по рентгенографическому снимку.
Бот для быстрого анализа флюорографии и выявления признаков рака легких. Загрузи снимок, и он подскажет, есть ли повод для дополнительного обследования. Минимизирует влияние человеческого фактора, помогая врачам быстрее и эффективнее диагностировать заболевания. Бот способен выявлять подозрительные области на ранних стадиях, предоставлять предварительные заключения.
https://www.kaggle.com/datasets/quynhlecl/lung-cancer-x-ray
CNN_model.pyСамая первая версия модели — простейшая сверточная нейросеть. Она состояла из 3 сверточных слоев с функцией активации ReLU и использованием MaxPooling для уменьшения размерности изображения, а также из полносвязного блока, который на выходе выдает вероятность принадлежности снимка к подозрительному на рак. В качестве функции потерь была взята бинарная кросс энтропия, а в качестве оптимизатора — оптимизатор Адам, наиболее эффективный. Эта модель, в силу своей простоты, давала не самые высокие результаты — 78% accuracy и 83% f1-метрика.RESNET_model.pyТак как датасет содержит всего около 5000 изображений, модель, обученная на нем с нуля дает не очень хорошие результаты, поэтому чтобы получить более эффективную модель, решили прибегнуть к fine tuning — дообучению уже готовой модели на наших данных. В качестве модели сначала попробовали взять ResNet, предобученный на датасете ImageNet. Модель работала чуть лучше, но f1 метрика все еще оставалась меньше 90%, поскольку не применялось дополнительных аугментаций к изображениям в датасете и первые слои не были заморожены.DENSENET161_model.pyВ качестве предобученной модели взяли DenseNet161. Первая версия модели давала много ложно положительных ответов, поэтому мы стали искать способы усовершенствования модели. Во-первых, в данные было добавлено много аугментаций, таких как повороты, искажения цвета и размытия. Применен прием заморозки первых слоев нейросети, с постепенной их разморозкой и обучением этих слоев с маленьким learning rate. Также был использован планировщик, который динамически уменьшает learning rate для оптимизатора, когда метрика перестаёт улучшаться. Кроме того, обучали модель таким образом, чтобы при минимально заданном recall (который задали 0.87) precision был максимальным. Также добавили кросс валидацию. Таким образом добились улучшения f1-метрики на тестовой выборке до 91%, что уже достаточно высоко.


