Code Monkey home page Code Monkey logo

tire-check-tool's Introduction

tire-check-tool

Disclaimer: Это учебный проект, созданный в рамках курса по ML-ops, цель которого - освоить базовые инструменты для разработки и деплоя ML-моделей. Модель, используемая в проекте, является "игрушечной" и не предназначена для использования в реальных условиях.

HW3 report: HW3_report.md

Description

Учебный проект по курсу ML-ops. В рамках проекта реализован python-пакет для проверки шин автомобиля на износ по фотографии. Пакет содержит в себе модель для классификации изображений, а также CLI-интерфейс для работы с ней:

  • обучения модели (train)
  • предсказания класса изображения (infer)
  • экспорта модели в ONNX-формат (export)
  • запуска оценки выбранного изображения на сервере MLflow (run_server)

Пример использования пакета: image

Installation

Для использования пакета необходимо установить его из репозитория:

git clone https://github.com/VitalyyBezuglyj/tire-check-tool.git

cd tire-check-tool

# Вероятно, вы захотите сделать это в виртуальном окружении
# Например, используя conda:
# conda create -n tire-check-tool python=3.8
pip install -e .

Usage

Note: Команда train - предполагают, что MLflow запущен и доступен по адресу localhost:5000. Подробнее см раздел MLflow. Или можно зайти в конфиг и в списке логгеров оставить только csv ~

Note: Команда run_server - предполагают, что вы запустили тритон сервер. Подробнее см раздел Triton server (Модель маленькая влезает в cpu :ok-hand:)

После установки пакета в командной строке доступны следующие команды:

  • python commands.py train - обучение модели

    • Скачает датасет, если он еще не скачан (~ $2.5$ Гб)
  • python commands.py infer - оценка точности модели на всем датасете

    • по-умолчанию используются веса модели, полученные при обучении
    • если указать аргумент --use_pretrained загрузит предобученные веса и использует их
  • python commands.py export - экспорт модели в ONNX-формат

    • точно также - по-умолчанию - веса от вашего обучения, с флагом --use_pretrained - предобученные веса (скачиваются автоматически)

    • Если добавить флаг --export.triton - модель будет экспортирована не в директорию "export", а сразу в model_repositrory для инференса через тритон сервер

  • python commands.py run_server --image <path/to/image> - запуск классификации выбранного изображения на сервере triton

    • --image - путь к изображению, по-умолчанию - img/demo_tire_image.jpg
    • сначала необходимо выполнить экспорт модели в ONNX-формат с нужным флагом, см. команду export
    • также необходимо запустить triton inference server (см раздел Triton server.)
  • python commands.py test_triton - запуск тестов для тритон сервера

    • всё то же самое, что и в команде run_server, но вместо запуска инференса запускаются тесты на первых N изображениях из валидационной выборки

Конфигурация

Конфигурация модели и обучения задается в файле config.yaml.

Любая команда поддерживает следующие аргументы:

  • --config_name - имя файла конфигурации в директории configs, по-умолчанию - default

  • --config_path - путь к директории с конфигурационными файлами, по-умолчанию - configs

  • Любой аргумент из конфигурационного файла, например --epochs 10 или --batch_size 32, если аргумент вложенный, то используется точка в качестве разделителя, например --tire_check_model.learning_rate 0.001

  • -- --help - справка по команде, дополнительный аргумент -- необходим для разделения аргументов команды и аргументов CLI

MLflow

  1. Если у вас откуда-то есть запущенный сервер MLflow, то вам необходимо указать его адрес в файле config.yaml в параметре loggers.mlflow.tracking_uri или указать при запуске в виде аргумента командной строки --loggers.mlflow.tracking_uri <ваш адрес>. По-умолчанию используется http://localhost:5000.

  2. Если у вас нет запущенного сервера MLflow, то его можно запустить локально:

# Install MLflow
pip install mlflow

# Run MLflow
mlflow 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 класса изображений шин автомобиля: good ($831$) и defective ($1 031$). Фото сделаны на довольно близком расстоянии, и признаком износа, по видимому, является наличие трещин на шине.

Примеры изображений:

image

Для обучения данные были разделены на тренировочную и валидационную выборки в соотношении 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}

Эти веса могут быть использованы для экспорта/инференса модели при указании аргумента --use_pretrained в командной строке или конфиге.

tire-check-tool's People

Contributors

vitalyybezuglyj avatar

Stargazers

Kavindu Thennakoon avatar Mayura Sandakalum avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.