AI-Рентгенолог — это проект в области компьютерного зрения, созданный для классификации рентгеновских снимков грудной клетки на два класса: "Норма" (NORMAL) и "Пневмония" (PNEUMONIA).
Целью проекта было пройти полный цикл разработки ML-решения: от анализа данных и обучения модели до развертывания в виде интерактивного Телеграм-бота. Модель построена на базе архитектуры ResNet18 с использованием техники Transfer Learning на фреймворке PyTorch.
Финальный продукт — это Телеграм-бот, который принимает на вход рентгеновский снимок и выдает результат анализа с оценкой уверенности модели.
- Высокоточная классификация: Модель достигает ~92% точности на тестовой выборке.
- Transfer Learning: Использование предобученной на ImageNet модели ResNet18 для быстрой и эффективной дообучения.
- Борьба с дисбалансом классов: Применение весовых коэффициентов в функции потерь для компенсации преобладания одного класса над другим.
- Двухэтапное обучение:
- Feature Extraction: Обучение только "головы" классификатора.
- Fine-Tuning: "Разморозка" всей сети и тонкая настройка с низкой скоростью обучения.
- Интерактивный Телеграм-бот: Готовое решение для демонстрации работы модели.
- Структурированный код: Проект разделен на модули для работы с данными, обучения и запуска бота.
Финальная модель была оценена на тестовой выборке из 1155 изображений. Ключевые метрики показали высокую эффективность и хороший баланс модели.
- Пропуск болезни (False Negative): Модель ошибочно классифицировала как "Норма" всего 15 реальных случаев пневмонии.
- Ложная тревога (False Positive): Модель ошибочно классифицировала как "Пневмония" 36 здоровых снимков.
| Класс | Precision | Recall | F1-score |
|---|---|---|---|
| NORMAL | 0.9358 | 0.8937 | 0.9143 |
| PNEUMONIA | 0.9056 | 0.9433 | 0.9241 |
| Accuracy | - | - | 0.9195 |
Главный вывод: Модель демонстрирует отличный Recall (94.3%) для класса "Пневмония", что критически важно для медицинских задач, и при этом показывает хороший Recall (89.4%) для класса "NORMAL", что говорит о ее сбалансированности.
- Язык: Python 3.10+
- Основной фреймворк: PyTorch
- Библиотеки:
torchvision- для работы с данными и моделямиscikit-learn- для оценки метрикpandas,numpy- для манипуляций с даннымиmatplotlib,seaborn- для визуализацииpython-telegram-bot- для создания Телеграм-ботаPillow,opencv-python- для обработки изображений
- Окружение: WSL2 (Ubuntu)
- Ускорение: CUDA, GPU NVIDIA
git clone https://github.com/YourUsername/YourRepoName.git
cd YourRepoNameУбедитесь, что у вас настроена среда с Python 3.10+ и доступом к GPU (рекомендуется).
# Создание и активация виртуального окружения
python3 -m venv venv
source venv/bin/activate
# Установка библиотек
pip install -r requirements.txtСкачайте датасет Chest X-Ray Images (Pneumonia) с Kaggle и распакуйте его так, чтобы папка chest_xray находилась в корне проекта.
Если вы хотите провести обучение с нуля, запустите скрипт:
python train.pyЭтот скрипт выполнит оба этапа обучения (Feature Extraction и Fine-Tuning) и сохранит финальные веса в файл pneumonia_cnn_final.pt.
- Создайте своего бота через
@BotFatherв Telegram и получите токен. - Создайте файл
.envв корне проекта и добавьте в него ваш токен:TELEGRAM_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 - Измените код в
bot.pyдля чтения токена из.envфайла (требуетсяpip install python-dotenv). - Запустите бота:
python bot.py
⚠️ Дисклеймер: Этот проект является образовательным и демонстрационным. Модель не проходила медицинскую валидацию и не может быть использована для постановки реальных медицинских диагнозов.