Формирование датасета и классификация облаков
Для обучения модели потребуется четко ограничить число распознаваемых состояний неба. Попытка определять сразу десять метеорологических родов облаков на выборке из тысячи снимков приведет к путанице внутри сети. Надежнее разбить датасет на три или четыре выраженных класса. Например, можно выделить ясное небо, перистые или слоистые облака без осадков, кучевую облачность хорошей погоды и мощные дождевые тучи.
Датасет объемом в 1000 изображений распределяют пропорционально, ориентируясь на 200–250 фотографий на каждый класс. Базу делят на обучающую, валидационную и тестовую выборки в соотношении 70 к 15 и к 15 процентам. Данные берут из открытых метеорологических архивов вроде Cloud Classification Database (CCSN), дополняя их снимками со смартфона в разное время суток для устойчивости модели к освещению.
Архитектура нейросети и трансферное обучение
Обучать глубокую сверточную сеть с нуля на одной тысяче изображений бессмысленно, так как модель моментально переобучится и перестанет обобщать признаки. В таких проектах применяют технику Transfer Learning на базе готовых архитектур из библиотеки torchvision или Keras. Оптимальный выбор для последующего развертывания в боте — легковесные модели MobileNetV2 или ResNet-18, уже обученные на массиве ImageNet.
- Базовые сверточные слои предобученной сети замораживают для сохранения базовых фильтров формы и текстуры
- Финальный полносвязный слой заменяют на классификатор под твое число категорий с функцией активации Softmax
- Для искусственного расширения выборки на этапе загрузки применяют аугментацию через случайные горизонтальные отражения, изменение яркости и легкое масштабирование
- Каждое входящее изображение приводят к стандартному тензору размером 224 на 224 пикселя с нормализацией по цветовым каналам
Связка нейросети с Telegram-ботом
Интерфейс бота пишут на библиотеке aiogram или python-telegram-bot в асинхронном режиме. Когда пользователь присылает фото, бот перехватывает объект сообщения, скачивает максимальный размер снимка во временный буфер памяти BytesIO и передает его в пайплайн предобработки. Это исключает лишнюю нагрузку на жесткий диск сервера постоянными циклами записи и удаления.
После прогона тензора через модель скрипт получает вектор вероятностей. Бот сопоставляет индекс максимального значения с названием класса и формирует текстовое сообщение. Если вероятность дождевой облачности превышает заданный порог, бот предупреждает о высокой вероятности осадков в ближайшие часы и выводит уверенность модели в процентах.
Что преподаватель проверяет при защите проекта
Главный критерий оценки в работах по машинному обучению — понимание метрик и чистота эксперимента. Преподаватель обязательно посмотрит, разделялись ли данные строго до аугментации, чтобы тестовые кадры случайно не попали в процесс обучения. Одной общей точности (Accuracy) недостаточно, так как она скрывает ошибки на редких классах. В текст проекта включают матрицу ошибок (Confusion Matrix) и значения F1-меры для каждого типа неба.
При проверке кода эксперт оценивает архитектуру самого бота. Плюсом будет наличие обработки исключений на случай отправки пользователем текстового сообщения вместо картинки, портрета человека или полностью черного кадра. Модель должна уметь сообщать о низкой уверенности, если снимок не похож ни на один обученный паттерн неба.
Частые вопросы
Можно ли обучить такую нейросеть на обычном ноутбуке без мощной видеокарты?
Да, благодаря трансферному обучению и небольшому объему датасета в 1000 снимков. Для ускорения процесса проще использовать бесплатные вычислительные мощности Google Colab с подключенным графическим процессором T4, а готовые веса модели сохранить в формате .pt или .onnx для запуска на своем компьютере.
Где развернуть бота для демонстрации на защите?
Для защиты достаточно запустить скрипт локально на ноутбуке, подключенном к интернету. Если нужен круглосуточный доступ комиссии к боту заранее, проект запускают на бесплатном тарифе любого облачного хостинга или виртуального сервера через systemd или Docker-контейнер.