Модели и ресурсы времени выполнения
CAVISE хранит чекпойнты OpenCOOD и ресурсы времени выполнения AdvCP в отдельном репозитории CAVISE/models. Репозиторий должен находиться на одном уровне с opencda и opencood:
CAVISE/
├── opencda/
├── opencood/
└── models/
Репозиторий моделей не использует Git LFS. Каждый пакет содержит файл meta.yaml с ID, типом, сведениями об источнике, размерами артефактов и контрольными суммами SHA-256. OpenCDA проверяет эти метаданные перед использованием пакета.
Загрузка по требованию
Запускайте примеры с этой страницы из оболочки контейнера OpenCDA, при запущенной CARLA и с CARLA_HOST, заданным как в Подключение из OpenCDA.
При включённом кооперативном восприятии передайте логический ID пакета:
python opencda.py \
-t 2cars_2rsu_coperception \
--carla-host "$CARLA_HOST" \
--with-coperception \
--model-id pointpillar-late-opv2v-30
Сначала OpenCDA проверяет ../models/coperception/<model-id>. Если пакет отсутствует, выводится предупреждение и создаётся частичный разреженный checkout ветки main из https://github.com/CAVISE/models.git. Загружается только запрошенный пакет. При последующем запросе другой модели тот же разреженный checkout расширяется, а полный репозиторий не клонируется.
Если клонирование завершается ошибкой, запрошенный ID не существует или проверка артефакта не пройдена, OpenCDA выдаёт ошибку времени выполнения и не запускает симуляцию.
Файл .models.lock
При автоматической загрузке рядом с каталогом моделей в файловой системе процесса создаётся .models.lock. В стандартном контейнере это /home/opencda/cavise/.models.lock. Через bind mount подключается только каталог models, поэтому файл блокировки не становится автоматически общим для процессов хоста или других контейнеров. Выполняйте параллельные загрузки в одном контейнере. При изменении разреженного checkout OpenCDA удерживает рекомендательную блокировку flock на этом файле, не позволяя двум процессам симуляции одновременно клонировать или расширять его.
Файл намеренно оставлен пустым, может сохраняться после завершения OpenCDA и игнорируется Git. В нём не записываются версии моделей. Он не создаётся, если запрошенный пакет уже доступен локально и загрузка не требуется.
Переопределение репозитория и checkout
Используйте параметры командной строки, чтобы проверить fork, ветку, тег или другое расположение checkout:
python opencda.py \
-t 2cars_2rsu_coperception \
--carla-host "$CARLA_HOST" \
--with-coperception \
--model-id pointpillar-late-opv2v-30 \
--models-repository https://github.com/example/models.git \
--models-ref feature/new-checkpoint \
--models-root /tmp/cavise-models
Эквивалентные переменные среды:
CAVISE_MODELS_ROOTCAVISE_MODELS_REPOSITORYCAVISE_MODELS_REFCAVISE_MODELS_AUTO_FETCH
Явно заданные значения командной строки имеют приоритет над соответствующими переменными среды.
Автономные и пользовательские модели
Отключите доступ к сети после заполнения необходимого разреженного checkout:
python opencda.py \
-t 2cars_2rsu_coperception \
--carla-host "$CARLA_HOST" \
--with-coperception \
--model-id pointpillar-late-opv2v-30 \
--no-auto-fetch-models
Команда немедленно завершается ошибкой, если выбранный пакет отсутствует. Чтобы задать такое поведение по умолчанию, установите CAVISE_MODELS_AUTO_FETCH=0.
Чтобы использовать распакованную пользовательскую модель, не зарегистрированную как пакет, обойдите репозиторий моделей:
python opencda.py \
-t 2cars_2rsu_coperception \
--carla-host "$CARLA_HOST" \
--with-coperception \
--model-dir /path/to/custom-model
Параметры --model-id и --model-dir взаимоисключающие.
Ресурсы AdvCP
Параметр --advcp-assets-id выбирает пакет времени выполнения AdvCP. Значение по умолчанию - base-car. OpenCDA разрешает этот пакет и чекпойнт кооперативного восприятия до запуска симуляции AdvCP. Пакет содержит сетку автомобиля и файлы разбиения. Если они требуются выбранной конфигурацией, дополнительные файлы атаки на форму необходимо подготовить отдельно.
Сопоставимые сценарий, модель и конфигурация атаки описаны в AdvCP. Приведённые выше параметры репозитория, ref и автономного режима применяются к обоим типам пакетов.
Добавление пакета
Создайте новый каталог непосредственно внутри coperception/ или advcp/ в полном checkout моделей, поместите туда артефакты и выполните следующую команду из корня репозитория models в его Python-среде для участников разработки:
python scripts/generate_metadata.py coperception/my-model \
--source-repository example/models \
--source-url https://github.com/example/models \
--source-license MIT
Необходимо указать все три аргумента источника. Генератор добавляет только новый пакет и сверяет SHA-256 каждого артефакта с существующим каталогом. Если тот же файл уже зарегистрирован под другим ID пакета, выполнение прерывается без изменения метаданных.
Перед созданием pull request проверьте репозиторий:
python scripts/validate_metadata.py
pre-commit run --all-files