Перейти к содержанию

Работа сервиса

Ниже на гифках краткая демонстрация функционала веб-интерфейса Streamlit и FastAPI с описанием возможностей.

server.gif

Веб-интерфейс FastAPI

  • Запуск FastAPI-приложения и проверка работы /api/v1/dataset/load (Load Dataset)
  • Метод: POST
  • Описание: Позволяет загрузить датасет для дальнейшего использования. На вход подается архив, содержащий папки (с названиями классов) с изображениями для каждого класса.. После загрузки архива происходит сбор информации о датасете. Данные о датасете хранятся в моделе DatasetInfo: количество изображений в каждом классе количество дубликатов в каждом классе размеры изображений информация о цветах изображений DatasetInfo хранится на сервере и передается в ответе на запрос клиента.
  • Ответ: 200 OK: Возвращает информацию о загруженном датасете, включая количество изображений в каждом классе, информацию о дубликатах, размеры изображений и цветовые характеристики.
  • Ошибки: 400 Bad Request: Если загруженный файл не является ZIP-архивом или произошла ошибка при обработке.

load_dataset.gif

  • /api/v1/dataset/info (Get Dataset Info)

    • Метод: GET
    • Описание: возвращает информацию о датасете, полученную при загрузке архива в методе Load Dataset. Если датасет загружен на сервер, но не проинициализирован (к примеру, после перезапуска сервера), то данные о датасете собираются в методе Get Dataset Info, иначе - отдается хранящаяся на сервере модель. Если датасет не загружен, то метод выдаст исключение.
    • Ответ: Информация о датасете (DatasetInfo).
    • Код ответа: 200 OK — успешный запрос. 400 Bad Request — датасет не загружен.
  • /api/v1/dataset/samples (Dataset Samples)

  • Метод: GET
  • Описание: Dataset Samples создает изображение с примерами картинок в каждом из классов. В первый раз изображение создается с помощью pyplot и сохраняется на сервере, потом используется сохраненное изображение для отправки клиенту. Если датасет не загружен, то метод выдаст исключение.
  • Ответ: Стрим изображений в формате PNG.
  • Код ответа: 200 OK — успешный запрос. 400 Bad Request — датасет не загружен.

dataset_info.gif

  • /api/v1/models/fit (fit)
    • Метод: POST
    • Описание: fit служит для создания новой модели на сервере. В данном методе создается модель с использованием гиперпараметров для PCA и SVC. После создания новой модели есть возможность получить кривые обучения (если указать with_learning_curve = True). Модель обучается 10 секунд, по истечении времени процесс обучения модели прерывается с исключением, чтобы не нагружать сервер тяжелыми моделями. Если модели удалось обучиться, то данные о ней сохраняются в models. Если датасета для обучения нет на сервере, то метод выдаст исключение.
    • Параметры:
    • config (опционально): гиперпараметры модели.
    • with_learning_curve: сохранять ли кривую обучения.
    • name: название модели.
    • Ответ: Информация о созданной модели (ModelInfo).
    • Код ответа: 201 Created — успешное обучение. 400 Bad Request — ошибка обучения. 408 Request Timeout — превышение времени обучения.

fit.gif

  • /api/v1/models/list_models (List Models)
    • Метод: GET
    • Описание: возвращает все хранящиеся на сервер ранее обученные модели. Также на сервер присутствует заранее загруженная baseline–модель. Информация о моделях возвращается в виде словаря, где ключом является идентификатор модели, а значением информация о модели ModelInfo.
    • Ответ: Словарь с информацией о моделях (dict[str, ModelInfo]).
    • Код ответа: 200 OK
  • /api/v1/models/info/{model_id} (Model Info)
    • Метод: GET
    • Описание: возвращает пользователю информацию о конкретной модели по указанному идентификатору. Если модели с указанным идентификатором нет на сервере, то выдастся исключение.
    • Ответ: Информация о модели (ModelInfo).
    • Код ответа: 200 OK — успешный запрос. 400 Bad Request — модель не найдена.
  • /api/v1/models/load (Load)
  • Метод: POST
  • Описание: позволяет сделать активной одну из хранящихся на сервере моделей. У модели существует уникальный идентификатор, по которому модели хранятся в models. Если модели с указанным идентификатором нет на сервере, то выдастся исключение
  • /api/v1/models/predict (Predict)
  • Метод: POST
  • Описание: предсказывает с помощью активной модели класс по переданному в него изображению. Если активной модели нет, то метод выдаст исключение.
  • Параметры: file: файл изображения для предсказания.
  • Ответ: Предсказанный класс (PredictionResponse).
  • Код ответа: 200 OK — успешное предсказание. 400 Bad Request — ошибка (например, модель не выбрана).

predict.gif

  • /api/v1/models/predict_proba (Predict Proba)
    • Метод: POST
    • Описание: Возвращает предсказанный класс с вероятностью, при условии, что в загруженной модели был задан параметр svc__probability = true.
    • Параметры: file: файл изображения для предсказания.
    • Ответ: Предсказание с вероятностью (ProbabilityResponse).
    • Код ответа: 200 OK — успешное предсказание. 400 Bad Request — ошибка.

predict_proba

  • /api/v1/models/unload (Unload)
  • Метод: POST
  • Описание: Выгружает текущую активную модель из памяти. То есть после выполнения данного метода нет активной модели и выполнить методы predict и predict_proba не получится.
  • Ответ: Успешное сообщение (ApiResponse).
  • Код ответа: 200 OK
  • /api/v1/models/remove/{model_id} (Remove)
  • Метод: DELETE
  • Описание: удаляет модель по идентификатору из тех, которые до этого создавались методом fit. Если модель имеет тип custom (пользовательская модель) и есть на сервере, то она будет удалена и будет возвращен словарь с ModelInfo, оставшимися на сервере. Если модели нет на сервере или модель типа baseline (baseline-модель всегда хранится на сервере), то будет возвращено исключение.
  • Ответ: Список оставшихся моделей (dict[str, ModelInfo]).
  • Код ответа: 200 OK — успешное удаление. 404 Not Found — модель не найдена.
  • /api/v1/models/remove_all (Remove All)
  • Метод: DELETE
  • Описание: Удаляет все пользовательские модели (custom) на сервере.
  • Ответ: возвращается словарь с имеющимися baseline моделями на сервере.
  • Код ответа: 200 OK

unload_remove.gif

Приложение Streamlit

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

  • EDA:

    Позволяет загружать датасет (в формате .zip, содержащий изображения и аннотации) на сервер. Отображает основную статистику датасета, включая: - Средний размер изображений. - Распределение изображений по классам. - Распределение дубликатов (если они имеются).

    Визуализирует средние значения и стандартные отклонения по цветовым каналам (R, G, B) для каждого класса. Показывает примеры изображений из загруженного датасета. Использует серверные API для загрузки данных, получения метрик и изображений. - Обучение модели:

    Содержит два основных блока: - Работа с уже обученными моделями: Список доступных моделей, обученных ранее. Отображение параметров модели и её кривой обучения. Возможность удаления одной или всех моделей. - Создание новой модели: Выбор гиперпараметров для алгоритма SVC: Параметр регуляризации C. Тип ядра (например, linear, poly, rbf). Включение оценки вероятности. Построение кривой обучения. Обучение новой модели с заданными параметрами и сохранение её на сервере. Использует серверные API для обучения моделей и управления ими. - Инференс:

    Позволяет загрузить изображение (форматы .jpeg, .png, .jpg) для классификации с использованием выбранной модели. Загружает выбранную модель с сервера и выполняет предсказание. Возвращает результат: - Предсказанный класс изображения. - Вероятность принадлежности к классу (если включена опция probability при обучении модели).

    Использует серверные API для загрузки модели и выполнения предсказания.

streamlit.gif