Проект состоит из двух основных частей:
experiments/- симуляция в MuJoCo, запись демонстраций, обучение и оценка policy.prototype_web_interface/иprototype_manipulator/- простой веб-прототип заказа и сценарий, который читает CSV-заказ и запускает манипулятор в симуляции.
Ниже описано, как это запускать в текущем состоянии репозитория.
requirements.txt- зависимости для блокаexperiments/.experiments/record_sim_episodes.py- запись HDF5-эпизодов.experiments/visualize_episodes.py- визуализация записанного эпизода.experiments/imitate_episodes.py- обучение и eval модели ACT.prototype_web_interface/app.py- Flask-приложение, которое формирует CSV с заказом.prototype_manipulator/main.py- загрузка CSV-заказа и прогон манипулятора в симуляции.comands.txt- черновик команд автора проекта.
- Python 3.10-3.11.
- Для обучения на NVIDIA T4 нужен PyTorch со сборкой под CUDA 11.6.
- Скрипты теперь умеют выбирать устройство через
--deviceи по умолчанию используютcuda, если она доступна. - MuJoCo /
dm-control. ffmpegне обязателен, так как видео пишется через OpenCV, но OpenCV должен корректно установиться.
Для экспериментов:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtДля веб-прототипа и prototype_manipulator/ можно поставить либо Flask отдельно, либо использовать набор зависимостей из папки прототипа:
pip install Flaskили
pip install -r prototype_manipulator/requirements.txtПоддерживаемые задачи в коде:
single_cubesingle_torusmultiple_redmultiple_greenmultiple_bluemix_cube
Пример:
python experiments/record_sim_episodes.py \
--task_name mix_cube \
--dataset_dir /absolute/path/to/data/mix_cube \
--num_episodes 50 \
--onscreen_renderРезультат: в dataset_dir появятся файлы вида episode_0.hdf5, episode_1.hdf5, ...
python experiments/visualize_episodes.py \
--dataset_dir /absolute/path/to/data/mix_cube \
--episode_idx 0Скрипт сохранит рядом:
episode_0_video.mp4episode_0_qpos.png
Пример команды:
python experiments/imitate_episodes.py \
--dataset_dir /absolute/path/to/data/mix_cube \
--kl_weight 10 \
--chunk_size 100 \
--hidden_dim 512 \
--batch_size 8 \
--dim_feedforward 3200 \
--lr 1e-5 \
--seed 0 \
--task_name mix_cube \
--ckpt_dir /absolute/path/to/ckpt/mix_cube \
--num_epochs 1000 \
--policy_class ACT \
--device cudaРезультат:
- в
ckpt_dirсохраняютсяdataset_stats.pkl,policy_best.ckptи промежуточные артефакты; - для лучшей модели используется файл
policy_best.ckpt.
python experiments/imitate_episodes.py \
--dataset_dir /absolute/path/to/data/mix_cube \
--kl_weight 10 \
--chunk_size 100 \
--hidden_dim 512 \
--batch_size 8 \
--dim_feedforward 3200 \
--lr 1e-5 \
--seed 0 \
--task_name mix_cube \
--ckpt_dir /absolute/path/to/ckpt/mix_cube \
--num_epochs 1000 \
--policy_class ACT \
--eval \
--onscreen_render \
--temporal_agg \
--device cudaПри eval скрипт сохраняет видео роллаутов и текстовый файл с метриками в ckpt_dir.
По умолчанию используются относительные директории внутри репозитория:
experiments -> data/experiments
prototype_manipulator -> data/prototype_manipulatorПереопределить их можно двумя способами:
- через CLI, например
--dataset_dir /path/to/dataset; - через переменные окружения
BACHELORS_DIPLOMA_EXPERIMENTS_DATA_DIRиBACHELORS_DIPLOMA_PROTOTYPE_DATA_DIR.
Запуск:
python prototype_web_interface/app.pyПосле этого открыть http://127.0.0.1:5000/.
Что делает приложение:
- показывает список товаров;
- добавляет выбранные товары в корзину;
- по кнопке
Order and Download CSVгенерирует и скачивает CSV-файл заказа.
CSV содержит колонки:
product_nameproduct_id
Скрипт читает CSV-заказ и прогоняет симуляцию манипулятора на основе обученной модели.
Запуск:
python prototype_manipulator/main.py \
--ckpt_dir /absolute/path/to/trained_model \
--csv_path /absolute/path/to/ordered_products.csv \
--device cudaОжидания от входных данных:
- в
ckpt_dirдолжны лежатьpolicy_best.ckptиdataset_stats.pkl; csv_pathдолжен указывать на CSV, который генерирует веб-прототип.
На выходе скрипт сохраняет видео роллаута в папку чекпоинта.
prototype_web_interfaceхранит корзину в памяти процесса Flask, то есть это демо без постоянного хранилища.- В репозитории есть дублирование кода между
experiments/иprototype_manipulator/. - Файл
comands.txtполезен как черновик, но команды в нём не стоит считать источником истины. - Под CUDA 11.6 важно ставить совместимые версии
torchиtorchvision; сам репозиторий это автоматически не настраивает.
Если нужен минимальный путь "посмотреть, что работает":
- Установить зависимости из
requirements.txt. - Запустить
python prototype_web_interface/app.py. - Скачать CSV заказа через браузер.
- Запустить
python prototype_manipulator/main.py --ckpt_dir ... --csv_path ... --device cuda.
Если нужен ML-пайплайн:
- Сгенерировать HDF5 через
experiments/record_sim_episodes.py. - Запустить обучение с
--dataset_dir ... --device cuda. - При необходимости продолжить обучение через
--resume_ckpt .... - Проверить результат через
--evalилиexperiments/visualize_episodes.py.