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

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

-
/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 — датасет не загружен.

- /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 — превышение времени обучения.

- /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 — ошибка (например, модель не выбрана).

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

- /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

Приложение Streamlit
Приложение на Streamlit представляет собой сервис для обучения, анализа и применения моделей машинного обучения для классификации изображений фруктов и овощей. Оно организовано в виде трёх разделов, представленных в боковом меню:
-
EDA:
Позволяет загружать датасет (в формате .zip, содержащий изображения и аннотации) на сервер. Отображает основную статистику датасета, включая: - Средний размер изображений. - Распределение изображений по классам. - Распределение дубликатов (если они имеются).
Визуализирует средние значения и стандартные отклонения по цветовым каналам (R, G, B) для каждого класса. Показывает примеры изображений из загруженного датасета. Использует серверные API для загрузки данных, получения метрик и изображений. - Обучение модели:
Содержит два основных блока: - Работа с уже обученными моделями: Список доступных моделей, обученных ранее. Отображение параметров модели и её кривой обучения. Возможность удаления одной или всех моделей. - Создание новой модели: Выбор гиперпараметров для алгоритма SVC: Параметр регуляризации C. Тип ядра (например, linear, poly, rbf). Включение оценки вероятности. Построение кривой обучения. Обучение новой модели с заданными параметрами и сохранение её на сервере. Использует серверные API для обучения моделей и управления ими. - Инференс:
Позволяет загрузить изображение (форматы .jpeg, .png, .jpg) для классификации с использованием выбранной модели. Загружает выбранную модель с сервера и выполняет предсказание. Возвращает результат: - Предсказанный класс изображения. - Вероятность принадлежности к классу (если включена опция probability при обучении модели).
Использует серверные API для загрузки модели и выполнения предсказания.
