tire-check-tool
Описание
Learning project for ML Ops course - python package for tire quality testing
Языки
Python
- Dockerfile
tire-check-tool
Disclaimer: Это учебный проект, созданный в рамках курса по ML-ops, цель которого - освоить базовые инструменты для разработки и деплоя ML-моделей. Модель, используемая в проекте, является "игрушечной" и не предназначена для использования в реальных условиях.
HW3 report: HW3_report.md
Description
Учебный проект по курсу ML-ops. В рамках проекта реализован python-пакет для проверки шин автомобиля на износ по фотографии. Пакет содержит в себе модель для классификации изображений, а также CLI-интерфейс для работы с ней:
- обучения модели (train)
- предсказания класса изображения (infer)
- экспорта модели в ONNX-формат (export)
- запуска оценки выбранного изображения на сервере MLflow (run_server)
Пример использования пакета:
Installation
Для использования пакета необходимо установить его из репозитория:
git clone https://github.com/VitalyyBezuglyj/tire-check-tool.git
cd tire-check-tool
# Вероятно, вы захотите сделать это в виртуальном окружении# Например, используя conda:# conda create -n tire-check-tool python=3.8pip install -e .
Usage
Note: Команда
- предполагают, что MLflow запущен и доступен по адресу localhost:5000. Подробнее см
раздел MLflow. Или можно зайти в конфиг и в списке логгеров оставить только csv ~
Note: Команда
- предполагают, что вы запустили тритон сервер. Подробнее см раздел
Triton server (Модель маленькая влезает в cpu :ok-hand:)
После установки пакета в командной строке доступны следующие команды:
-
- обучение моделиpython commands.py train- Скачает датасет, если он еще не скачан (~ $2.5$ Гб)
-
- оценка точности модели на всем датасетеpython commands.py infer- по-умолчанию используются веса модели, полученные при обучении
- если указать аргумент
загрузит предобученные веса и использует их--use_pretrained
-
- экспорт модели в ONNX-форматpython commands.py export-
точно также - по-умолчанию - веса от вашего обучения, с флагом
- предобученные веса (скачиваются автоматически)--use_pretrained -
Если добавить флаг
- модель будет экспортирована не в директорию "export", а сразу в model_repositrory для инференса через тритон сервер--export.triton
-
-
- запуск классификации выбранного изображения на сервере tritonpython commands.py run_server --image <path/to/image>
- путь к изображению, по-умолчанию ---imageimg/demo_tire_image.jpg- сначала необходимо выполнить экспорт модели в ONNX-формат с нужным флагом, см. команду export
- также необходимо запустить triton inference server (см раздел Triton server.)
-
- запуск тестов для тритон сервераpython commands.py test_triton- всё то же самое, что и в команде
, но вместо запуска инференса запускаются тесты на первых N изображениях из валидационной выборкиrun_server
- всё то же самое, что и в команде
Конфигурация
Конфигурация модели и обучения задается в файле config.yaml.
Любая команда поддерживает следующие аргументы:
-
- имя файла конфигурации в директории configs, по-умолчанию ---config_namedefault -
- путь к директории с конфигурационными файлами, по-умолчанию ---config_pathconfigs -
Любой аргумент из конфигурационного файла, например
или--epochs 10
, если аргумент вложенный, то используется точка в качестве разделителя, например--batch_size 32--tire_check_model.learning_rate 0.001 -
- справка по команде, дополнительный аргумент-- --help
необходим для разделения аргументов команды и аргументов CLI--
MLflow
-
Если у вас откуда-то есть запущенный сервер MLflow, то вам необходимо указать его адрес в файле config.yaml в параметре
или указать при запуске в виде аргумента командной строкиloggers.mlflow.tracking_uri
. По-умолчанию используется--loggers.mlflow.tracking_uri <ваш адрес>
.http://localhost:5000 -
Если у вас нет запущенного сервера MLflow, то его можно запустить локально:
# Install MLflowpip install mlflow
# Run MLflowmlflow server --host localhost --port 5000 --artifacts-destination outputs/mlflow_artifacts
Соответственно, artifacts-destination - это директория, в которой будут храниться различные логи и пр, и её можно выбрать произвольно.
Triton server
Для инференса модели используется triton inference server docs. Для запуска:
# Открыть доп окно терминала# Активировать в нём конду, или другую виртуальную средуcd triton
docker-compose up#(ждём пока стянется образ, сорри)
- GPU не понадобится моделька супер лёгкая
Dataset
Для обучения модели использовался датасет
Tire-Check, содержащий 2 класса
изображений шин автомобиля:
($831$) и
($1 031$). Фото сделаны на довольно близком
расстоянии, и признаком износа, по видимому, является наличие трещин на шине.
Примеры изображений:
Для обучения данные были разделены на тренировочную и валидационную выборки в соотношении 80/20. Для тестирования модели (infer) использовалась вся выборка.
Данные для обучения будут скачаны автоматически при запуске обучения/валидации и размещены в директории data
Model
Задача игрушечная, а в программу курса входило использование torch lightning, поэтому модель была написана с нуля и единственная её цель - показать работу пайплайна и более-менее сходящиеся метрики. Что она и делает.
Архитектура модели:
TireCheckModel( (conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1)) (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1)) (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (conv3): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1)) (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (conv4): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1)) (pool): MaxPool2d(kernel_size=3, stride=3, padding=0, dilation=1, ceil_mode=False) (fc1): Linear(in_features=2304, out_features=512, bias=True) (fc2): Linear(in_features=512, out_features=2, bias=True))
Лучший результат на валидации: {'epoch': 25, 'MulticlassF1Score': 0.8097}
Эти веса могут быть использованы для экспорта/инференса модели при указании аргумента
в
командной строке или конфиге.