opensportslib 0.2.0.dev2__tar.gz → 0.2.0.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {opensportslib-0.2.0.dev2/opensportslib.egg-info → opensportslib-0.2.0.dev3}/PKG-INFO +34 -8
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/README.md +33 -7
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/cli.py +4 -4
- opensportslib-0.2.0.dev3/opensportslib/configs/vqa/qwen.yaml +49 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/loader.py +1 -1
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/setup/setup.py +6 -6
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3/opensportslib.egg-info}/PKG-INFO +34 -8
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib.egg-info/SOURCES.txt +0 -1
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/pyproject.toml +1 -1
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_config_architecture.py +40 -11
- opensportslib-0.2.0.dev2/opensportslib/configs/vqa/qwen.yaml +0 -228
- opensportslib-0.2.0.dev2/opensportslib/configs/vqa/xvars_lora.yaml +0 -243
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/LICENSE +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/LICENSE-COMMERCIAL +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/MANIFEST.in +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/examples/quickstart/basic_classification.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/examples/quickstart/basic_localization.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/apis/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/apis/base_task_model.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/apis/classification.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/apis/localization.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/apis/vqa.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/classification/default.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/classification/video.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/default.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/localization/default.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/localization/video_dali.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/configs/localization/video_ocv.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/accessors.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/conflicts.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/migrate.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/migrations/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/runtime_adapter.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/schema.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/schemas/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/config/validate.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/loss/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/loss/builder.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/loss/calf.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/loss/ce.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/loss/combine.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/loss/nll.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/optimizer/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/optimizer/builder.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/sampler/weighted_sampler.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/scheduler/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/scheduler/builder.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/trainer/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/trainer/classification_trainer.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/trainer/localization_trainer.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/trainer/vqa_trainer.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/checkpoint.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/config.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/config_normalize.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/data.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/ddp.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/default_args.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/hf_runtime.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/lightning.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/load_annotations.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/seed.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/video_processing.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/core/utils/wandb.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/datasets/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/datasets/builder.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/datasets/classification_dataset.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/datasets/localization_dataset.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/datasets/utils/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/datasets/utils/tracking.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/datasets/vqa_dataset.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/legacy_config/classification.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/legacy_config/localization.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/metrics/classification_metric.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/metrics/localization_metric.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/metrics/vqa_metric.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/backbones/builder.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/contextaware.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/e2e.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/learnablepooling.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/qwen_xvars.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/tracking.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/vars.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/video.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/video_mae.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/builder.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/heads/builder.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/neck/builder.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/common.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/impl/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/impl/asformer.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/impl/calf.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/impl/gsm.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/impl/gtad.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/impl/tsm.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/litebase.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/modules.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/shift.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/utils.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/vqa_prompting.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/models/utils/xvars_clip_index.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/tools/__init__.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/tools/_common.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/tools/hf_transfer.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/tools/osl_json_to_parquet.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib/tools/parquet_to_osl_json.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib.egg-info/dependency_links.txt +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib.egg-info/entry_points.txt +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib.egg-info/requires.txt +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/opensportslib.egg-info/top_level.txt +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/setup.cfg +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/conftest.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_classification_dataset_paths.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_classification_trainer_dataloader.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_config_split_override_sync.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_config_utils_smoke.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_conversion_tools.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_extract_xvars_features.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_hf_transfer_tools.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_localization_dali_filenames.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_package_smoke.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_pretrained_config_merge_policy.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_public_apis_smoke.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_subset_train_infer_integration.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_task_model_api_contract.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_vqa_metrics_semantic.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_vqa_training_lora.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tests/test_vqa_xvars_videochatgpt.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/convert/build_soccernet_gar.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/convert/build_xvars_indexes.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/convert/extract_xvars_clip_features.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/download/download_hf_repo.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/download/download_osl_hf.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/download/upload_osl_hf.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/training/classification.py +0 -0
- {opensportslib-0.2.0.dev2 → opensportslib-0.2.0.dev3}/tools/training/localization.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opensportslib
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev3
|
|
4
4
|
Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
|
|
5
5
|
Author: Jeet Vora
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -93,13 +93,26 @@ opensportslib setup --pyg
|
|
|
93
93
|
|
|
94
94
|
# Optional: install for DALI support
|
|
95
95
|
opensportslib setup --dali
|
|
96
|
-
|
|
96
|
+
|
|
97
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
98
|
+
opensportslib setup --vqa_xvars
|
|
99
|
+
|
|
100
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
101
|
+
opensportslib setup --vqa_qwen
|
|
102
|
+
```
|
|
97
103
|
---
|
|
98
104
|
|
|
99
105
|
**Note:**
|
|
100
106
|
Run `opensportslib setup` to automatically configure dependencies.
|
|
101
107
|
If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
|
|
102
108
|
|
|
109
|
+
For VQA, use exactly one backend-specific dependency profile:
|
|
110
|
+
|
|
111
|
+
- `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
|
|
112
|
+
- `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
|
|
113
|
+
|
|
114
|
+
The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
|
|
115
|
+
|
|
103
116
|
---
|
|
104
117
|
|
|
105
118
|
## Data and pretrained models
|
|
@@ -287,7 +300,7 @@ metrics_from_file = my_model.evaluate(
|
|
|
287
300
|
from opensportslib.apis import VQAModel
|
|
288
301
|
|
|
289
302
|
my_model = VQAModel(
|
|
290
|
-
config="/
|
|
303
|
+
config="opensportslib/configs/vqa/qwen.yaml",
|
|
291
304
|
weights=None, # optional: path or Hugging Face model ID
|
|
292
305
|
)
|
|
293
306
|
|
|
@@ -300,13 +313,20 @@ single_prediction = my_model.infer(
|
|
|
300
313
|
video_path="/path/to/video.mp4",
|
|
301
314
|
question="What card would you give? Why?",
|
|
302
315
|
)
|
|
303
|
-
|
|
304
|
-
metrics = my_model.evaluate(
|
|
305
|
-
test_set="/path/to/test_annotations.json",
|
|
306
|
-
predictions=predictions,
|
|
307
|
-
)
|
|
308
316
|
```
|
|
309
317
|
|
|
318
|
+
Use `opensportslib/configs/vqa/xvars.yaml` with `opensportslib setup --vqa_xvars`
|
|
319
|
+
for the X-VARS-compatible backend, or `opensportslib/configs/vqa/qwen.yaml` with
|
|
320
|
+
`opensportslib setup --vqa_qwen` for the Qwen-compatible backend. The Qwen
|
|
321
|
+
backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
|
|
322
|
+
`Qwen/Qwen3.5-9B-Base`.
|
|
323
|
+
|
|
324
|
+
For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
|
|
325
|
+
when available and falls back to extracting CLIP features from raw video during
|
|
326
|
+
`infer()`. Pre-extracted features remain the preferred path for parity, speed,
|
|
327
|
+
and reproducibility. See [docs/xvars_integration_phases.md](docs/xvars_integration_phases.md)
|
|
328
|
+
for the full X-VARS setup workflow.
|
|
329
|
+
|
|
310
330
|
|
|
311
331
|
---
|
|
312
332
|
|
|
@@ -414,6 +434,12 @@ opensportslib setup --pyg
|
|
|
414
434
|
|
|
415
435
|
# Optional: install for DALI support
|
|
416
436
|
opensportslib setup --dali
|
|
437
|
+
|
|
438
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
439
|
+
opensportslib setup --vqa_xvars
|
|
440
|
+
|
|
441
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
442
|
+
opensportslib setup --vqa_qwen
|
|
417
443
|
```
|
|
418
444
|
|
|
419
445
|
### Git workflow
|
|
@@ -58,13 +58,26 @@ opensportslib setup --pyg
|
|
|
58
58
|
|
|
59
59
|
# Optional: install for DALI support
|
|
60
60
|
opensportslib setup --dali
|
|
61
|
-
|
|
61
|
+
|
|
62
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
63
|
+
opensportslib setup --vqa_xvars
|
|
64
|
+
|
|
65
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
66
|
+
opensportslib setup --vqa_qwen
|
|
67
|
+
```
|
|
62
68
|
---
|
|
63
69
|
|
|
64
70
|
**Note:**
|
|
65
71
|
Run `opensportslib setup` to automatically configure dependencies.
|
|
66
72
|
If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
|
|
67
73
|
|
|
74
|
+
For VQA, use exactly one backend-specific dependency profile:
|
|
75
|
+
|
|
76
|
+
- `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
|
|
77
|
+
- `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
|
|
78
|
+
|
|
79
|
+
The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
|
|
80
|
+
|
|
68
81
|
---
|
|
69
82
|
|
|
70
83
|
## Data and pretrained models
|
|
@@ -252,7 +265,7 @@ metrics_from_file = my_model.evaluate(
|
|
|
252
265
|
from opensportslib.apis import VQAModel
|
|
253
266
|
|
|
254
267
|
my_model = VQAModel(
|
|
255
|
-
config="/
|
|
268
|
+
config="opensportslib/configs/vqa/qwen.yaml",
|
|
256
269
|
weights=None, # optional: path or Hugging Face model ID
|
|
257
270
|
)
|
|
258
271
|
|
|
@@ -265,13 +278,20 @@ single_prediction = my_model.infer(
|
|
|
265
278
|
video_path="/path/to/video.mp4",
|
|
266
279
|
question="What card would you give? Why?",
|
|
267
280
|
)
|
|
268
|
-
|
|
269
|
-
metrics = my_model.evaluate(
|
|
270
|
-
test_set="/path/to/test_annotations.json",
|
|
271
|
-
predictions=predictions,
|
|
272
|
-
)
|
|
273
281
|
```
|
|
274
282
|
|
|
283
|
+
Use `opensportslib/configs/vqa/xvars.yaml` with `opensportslib setup --vqa_xvars`
|
|
284
|
+
for the X-VARS-compatible backend, or `opensportslib/configs/vqa/qwen.yaml` with
|
|
285
|
+
`opensportslib setup --vqa_qwen` for the Qwen-compatible backend. The Qwen
|
|
286
|
+
backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
|
|
287
|
+
`Qwen/Qwen3.5-9B-Base`.
|
|
288
|
+
|
|
289
|
+
For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
|
|
290
|
+
when available and falls back to extracting CLIP features from raw video during
|
|
291
|
+
`infer()`. Pre-extracted features remain the preferred path for parity, speed,
|
|
292
|
+
and reproducibility. See [docs/xvars_integration_phases.md](docs/xvars_integration_phases.md)
|
|
293
|
+
for the full X-VARS setup workflow.
|
|
294
|
+
|
|
275
295
|
|
|
276
296
|
---
|
|
277
297
|
|
|
@@ -379,6 +399,12 @@ opensportslib setup --pyg
|
|
|
379
399
|
|
|
380
400
|
# Optional: install for DALI support
|
|
381
401
|
opensportslib setup --dali
|
|
402
|
+
|
|
403
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
404
|
+
opensportslib setup --vqa_xvars
|
|
405
|
+
|
|
406
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
407
|
+
opensportslib setup --vqa_qwen
|
|
382
408
|
```
|
|
383
409
|
|
|
384
410
|
### Git workflow
|
|
@@ -11,8 +11,8 @@ def main(argv: Optional[list[str]] = None) -> int:
|
|
|
11
11
|
parser.add_argument("command", choices=["setup"])
|
|
12
12
|
parser.add_argument("--pyg", action="store_true")
|
|
13
13
|
parser.add_argument("--dali", action="store_true")
|
|
14
|
-
parser.add_argument("--
|
|
15
|
-
parser.add_argument("--
|
|
14
|
+
parser.add_argument("--vqa_xvars", action="store_true")
|
|
15
|
+
parser.add_argument("--vqa_qwen", action="store_true")
|
|
16
16
|
|
|
17
17
|
args = parser.parse_args(argv)
|
|
18
18
|
|
|
@@ -20,8 +20,8 @@ def main(argv: Optional[list[str]] = None) -> int:
|
|
|
20
20
|
setup(
|
|
21
21
|
pyg=args.pyg,
|
|
22
22
|
dali=args.dali,
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
vqa_xvars=args.vqa_xvars,
|
|
24
|
+
vqa_qwen=args.vqa_qwen
|
|
25
25
|
)
|
|
26
26
|
return 0
|
|
27
27
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
SYSTEM:
|
|
2
|
+
paths:
|
|
3
|
+
save_dir: ./checkpoints_vqa_qwen
|
|
4
|
+
|
|
5
|
+
MODEL:
|
|
6
|
+
components:
|
|
7
|
+
video_encoder:
|
|
8
|
+
kind: encoder
|
|
9
|
+
source:
|
|
10
|
+
provider: opensportslib
|
|
11
|
+
name: xvars_clip_features
|
|
12
|
+
load:
|
|
13
|
+
weights_path: /home/vorajv/X-VARS/weights/14_model.pth.tar
|
|
14
|
+
params:
|
|
15
|
+
feature_source: indexed_or_raw_clip
|
|
16
|
+
vision_tower: openai/clip-vit-large-patch14
|
|
17
|
+
feature_dim: 1024
|
|
18
|
+
overrides: {}
|
|
19
|
+
mm_projector:
|
|
20
|
+
kind: projector
|
|
21
|
+
source:
|
|
22
|
+
provider: opensportslib
|
|
23
|
+
params:
|
|
24
|
+
input_dim: 1024
|
|
25
|
+
overrides: {}
|
|
26
|
+
llm_decoder:
|
|
27
|
+
kind: decoder
|
|
28
|
+
source:
|
|
29
|
+
provider: huggingface
|
|
30
|
+
# Supported models: Qwen/Qwen2.5-7B-Instruct or Qwen/Qwen3.5-9B-Base
|
|
31
|
+
name: Qwen/Qwen3.5-9B-Base
|
|
32
|
+
params:
|
|
33
|
+
# Supported models: Qwen/Qwen2.5-7B-Instruct or Qwen/Qwen3.5-9B-Base
|
|
34
|
+
repo_id: Qwen/Qwen3.5-9B-Base
|
|
35
|
+
overrides: {}
|
|
36
|
+
metadata:
|
|
37
|
+
backend: qwen_xvars_infer
|
|
38
|
+
|
|
39
|
+
TRAIN:
|
|
40
|
+
execution:
|
|
41
|
+
prompt:
|
|
42
|
+
system_prompt: You are a football video assistant. Answer the VQA question using the provided video context and referee priors.
|
|
43
|
+
|
|
44
|
+
hf:
|
|
45
|
+
tokenizer_id: ${MODEL.components.llm_decoder.params.repo_id}
|
|
46
|
+
prefer_cuda: true
|
|
47
|
+
local_files_only: false
|
|
48
|
+
device_map: auto
|
|
49
|
+
offload_folder: ./hf_offload_qwen
|
|
@@ -18,7 +18,7 @@ from .migrate import migrate_config
|
|
|
18
18
|
from .runtime_adapter import maybe_namespace, namespace_to_plain_dict
|
|
19
19
|
|
|
20
20
|
_YAML_SUFFIXES = {".yaml", ".yml"}
|
|
21
|
-
_TASK_DIRS = {"classification", "localization"}
|
|
21
|
+
_TASK_DIRS = {"classification", "localization", "vqa"}
|
|
22
22
|
_INTERPOLATION_RE = re.compile(r"\$\{([^}]+)\}")
|
|
23
23
|
|
|
24
24
|
|
|
@@ -183,12 +183,12 @@ def verify():
|
|
|
183
183
|
else:
|
|
184
184
|
print("Running on CPU")
|
|
185
185
|
|
|
186
|
-
def setup(dali=False, pyg=False,
|
|
186
|
+
def setup(dali=False, pyg=False, vqa_xvars=False, vqa_qwen=False):
|
|
187
187
|
install_torch()
|
|
188
188
|
install_extras(dali=dali, pyg=pyg)
|
|
189
|
-
if
|
|
189
|
+
if vqa_xvars:
|
|
190
190
|
install_xvars_dependencies(XVARS_DEPENDENCY_PINS)
|
|
191
|
-
if
|
|
191
|
+
if vqa_qwen:
|
|
192
192
|
install_xvars_dependencies(QWEN_DEPENDENCY_PINS)
|
|
193
193
|
verify()
|
|
194
194
|
|
|
@@ -202,9 +202,9 @@ if __name__ == "__main__":
|
|
|
202
202
|
parser = argparse.ArgumentParser()
|
|
203
203
|
parser.add_argument("--dali", action="store_true")
|
|
204
204
|
parser.add_argument("--pyg", action="store_true")
|
|
205
|
-
parser.add_argument("--
|
|
206
|
-
parser.add_argument("--
|
|
205
|
+
parser.add_argument("--vqa_xvars", action="store_true")
|
|
206
|
+
parser.add_argument("--vqa_qwen", action="store_true")
|
|
207
207
|
|
|
208
208
|
args = parser.parse_args()
|
|
209
209
|
|
|
210
|
-
setup(dali=args.dali, pyg=args.pyg,
|
|
210
|
+
setup(dali=args.dali, pyg=args.pyg, vqa_xvars=args.vqa_xvars, vqa_qwen=args.vqa_qwen)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opensportslib
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev3
|
|
4
4
|
Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
|
|
5
5
|
Author: Jeet Vora
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -93,13 +93,26 @@ opensportslib setup --pyg
|
|
|
93
93
|
|
|
94
94
|
# Optional: install for DALI support
|
|
95
95
|
opensportslib setup --dali
|
|
96
|
-
|
|
96
|
+
|
|
97
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
98
|
+
opensportslib setup --vqa_xvars
|
|
99
|
+
|
|
100
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
101
|
+
opensportslib setup --vqa_qwen
|
|
102
|
+
```
|
|
97
103
|
---
|
|
98
104
|
|
|
99
105
|
**Note:**
|
|
100
106
|
Run `opensportslib setup` to automatically configure dependencies.
|
|
101
107
|
If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
|
|
102
108
|
|
|
109
|
+
For VQA, use exactly one backend-specific dependency profile:
|
|
110
|
+
|
|
111
|
+
- `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
|
|
112
|
+
- `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
|
|
113
|
+
|
|
114
|
+
The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
|
|
115
|
+
|
|
103
116
|
---
|
|
104
117
|
|
|
105
118
|
## Data and pretrained models
|
|
@@ -287,7 +300,7 @@ metrics_from_file = my_model.evaluate(
|
|
|
287
300
|
from opensportslib.apis import VQAModel
|
|
288
301
|
|
|
289
302
|
my_model = VQAModel(
|
|
290
|
-
config="/
|
|
303
|
+
config="opensportslib/configs/vqa/qwen.yaml",
|
|
291
304
|
weights=None, # optional: path or Hugging Face model ID
|
|
292
305
|
)
|
|
293
306
|
|
|
@@ -300,13 +313,20 @@ single_prediction = my_model.infer(
|
|
|
300
313
|
video_path="/path/to/video.mp4",
|
|
301
314
|
question="What card would you give? Why?",
|
|
302
315
|
)
|
|
303
|
-
|
|
304
|
-
metrics = my_model.evaluate(
|
|
305
|
-
test_set="/path/to/test_annotations.json",
|
|
306
|
-
predictions=predictions,
|
|
307
|
-
)
|
|
308
316
|
```
|
|
309
317
|
|
|
318
|
+
Use `opensportslib/configs/vqa/xvars.yaml` with `opensportslib setup --vqa_xvars`
|
|
319
|
+
for the X-VARS-compatible backend, or `opensportslib/configs/vqa/qwen.yaml` with
|
|
320
|
+
`opensportslib setup --vqa_qwen` for the Qwen-compatible backend. The Qwen
|
|
321
|
+
backend currently supports `Qwen/Qwen2.5-7B-Instruct` and
|
|
322
|
+
`Qwen/Qwen3.5-9B-Base`.
|
|
323
|
+
|
|
324
|
+
For X-VARS, `feature_source: indexed_or_raw_clip` prefers indexed CLIP features
|
|
325
|
+
when available and falls back to extracting CLIP features from raw video during
|
|
326
|
+
`infer()`. Pre-extracted features remain the preferred path for parity, speed,
|
|
327
|
+
and reproducibility. See [docs/xvars_integration_phases.md](docs/xvars_integration_phases.md)
|
|
328
|
+
for the full X-VARS setup workflow.
|
|
329
|
+
|
|
310
330
|
|
|
311
331
|
---
|
|
312
332
|
|
|
@@ -414,6 +434,12 @@ opensportslib setup --pyg
|
|
|
414
434
|
|
|
415
435
|
# Optional: install for DALI support
|
|
416
436
|
opensportslib setup --dali
|
|
437
|
+
|
|
438
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
439
|
+
opensportslib setup --vqa_xvars
|
|
440
|
+
|
|
441
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
442
|
+
opensportslib setup --vqa_qwen
|
|
417
443
|
```
|
|
418
444
|
|
|
419
445
|
### Git workflow
|
|
@@ -29,7 +29,6 @@ opensportslib/configs/localization/netvladpp_resnetpca512.yaml
|
|
|
29
29
|
opensportslib/configs/localization/video_dali.yaml
|
|
30
30
|
opensportslib/configs/localization/video_ocv.yaml
|
|
31
31
|
opensportslib/configs/vqa/qwen.yaml
|
|
32
|
-
opensportslib/configs/vqa/xvars_lora.yaml
|
|
33
32
|
opensportslib/core/__init__.py
|
|
34
33
|
opensportslib/core/config/__init__.py
|
|
35
34
|
opensportslib/core/config/accessors.py
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "opensportslib"
|
|
7
|
-
version = "0.2.0.
|
|
7
|
+
version = "0.2.0.dev3"
|
|
8
8
|
description = "OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
|
-
import yaml
|
|
5
4
|
|
|
6
5
|
from opensportslib.core.config import load_config, migrate_config, validate_config
|
|
7
6
|
from opensportslib.core.config.accessors import (
|
|
@@ -25,16 +24,19 @@ def test_public_config_api_is_canonical_first():
|
|
|
25
24
|
def test_legacy_inputs_route_through_migration(tmp_path):
|
|
26
25
|
config_path = tmp_path / "legacy.yaml"
|
|
27
26
|
config_path.write_text(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"DATA"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
"MODEL
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
"\n".join(
|
|
28
|
+
[
|
|
29
|
+
"DATA:",
|
|
30
|
+
f" data_dir: {tmp_path / 'data'}",
|
|
31
|
+
" annotations:",
|
|
32
|
+
f" train: {tmp_path / 'train.json'}",
|
|
33
|
+
"MODEL:",
|
|
34
|
+
" backbone:",
|
|
35
|
+
" type: smoke_backbone",
|
|
36
|
+
"SYSTEM:",
|
|
37
|
+
f" save_dir: {tmp_path / 'ckpt'}",
|
|
38
|
+
"",
|
|
39
|
+
]
|
|
38
40
|
),
|
|
39
41
|
encoding="utf-8",
|
|
40
42
|
)
|
|
@@ -83,6 +85,33 @@ def test_localization_experiment_composes_all_layers():
|
|
|
83
85
|
assert cfg["MODEL"]["components"]["video_encoder"]["source"]["name"] == "rny008_gsm"
|
|
84
86
|
|
|
85
87
|
|
|
88
|
+
def test_vqa_xvars_experiment_composes_all_layers():
|
|
89
|
+
cfg = load_config("opensportslib/configs/vqa/xvars.yaml", as_namespace=False)
|
|
90
|
+
|
|
91
|
+
assert cfg["VERSION"] == 2
|
|
92
|
+
assert cfg["TASK"] == "vqa"
|
|
93
|
+
assert cfg["SYSTEM"]["paths"]["log_dir"] == "./logs"
|
|
94
|
+
assert cfg["SYSTEM"]["paths"]["save_dir"] == "./checkpoints_vqa_lora"
|
|
95
|
+
assert cfg["SYSTEM"]["paths"]["work_dir"] == "./checkpoints_vqa_lora"
|
|
96
|
+
assert cfg["DATA"]["common"]["runtime"]["loader_backend"] == "opencv"
|
|
97
|
+
assert cfg["MODEL"]["metadata"]["backend"] == "xvars_videochatgpt"
|
|
98
|
+
assert cfg["TRAIN"]["execution"]["hf"]["tokenizer_id"] == "/home/vorajv/X-VARS/weights/base_model_videoChatGPT"
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def test_vqa_qwen_experiment_composes_all_layers():
|
|
102
|
+
cfg = load_config("opensportslib/configs/vqa/qwen.yaml", as_namespace=False)
|
|
103
|
+
|
|
104
|
+
assert cfg["VERSION"] == 2
|
|
105
|
+
assert cfg["TASK"] == "vqa"
|
|
106
|
+
assert cfg["SYSTEM"]["paths"]["log_dir"] == "./logs"
|
|
107
|
+
assert cfg["SYSTEM"]["paths"]["save_dir"] == "./checkpoints_vqa_qwen"
|
|
108
|
+
assert cfg["SYSTEM"]["paths"]["work_dir"] == "./checkpoints_vqa_qwen"
|
|
109
|
+
assert cfg["DATA"]["common"]["runtime"]["loader_backend"] == "opencv"
|
|
110
|
+
assert cfg["MODEL"]["metadata"]["backend"] == "qwen_xvars_infer"
|
|
111
|
+
assert cfg["MODEL"]["components"]["llm_decoder"]["source"]["name"] == "Qwen/Qwen3.5-9B-Base"
|
|
112
|
+
assert cfg["TRAIN"]["execution"]["hf"]["offload_folder"] == "./hf_offload_qwen"
|
|
113
|
+
|
|
114
|
+
|
|
86
115
|
def test_validation_accepts_canonical_schema():
|
|
87
116
|
canonical = load_config(
|
|
88
117
|
"opensportslib/configs/localization/default.yaml",
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
TASK: VQA
|
|
2
|
-
VERSION: 2
|
|
3
|
-
|
|
4
|
-
SYSTEM:
|
|
5
|
-
paths:
|
|
6
|
-
log_dir: ./logs
|
|
7
|
-
save_dir: ./checkpoints_vqa_qwen
|
|
8
|
-
work_dir: ./checkpoints_vqa_qwen
|
|
9
|
-
device: cuda
|
|
10
|
-
gpu:
|
|
11
|
-
count: 1
|
|
12
|
-
id: 0
|
|
13
|
-
reproducibility:
|
|
14
|
-
use_seed: true
|
|
15
|
-
seed: 42
|
|
16
|
-
|
|
17
|
-
DATA:
|
|
18
|
-
common:
|
|
19
|
-
dataset_name: OSL-XFoul
|
|
20
|
-
data_root: /home/vorajv/dataset/OSL-XFoul
|
|
21
|
-
feature_index: /home/vorajv/dataset/OSL-XFoul/feature_index.json
|
|
22
|
-
prediction_index: /home/vorajv/dataset/OSL-XFoul/prediction_index.json
|
|
23
|
-
runtime:
|
|
24
|
-
loader_backend: opencv
|
|
25
|
-
splits:
|
|
26
|
-
train:
|
|
27
|
-
annotation_path: /home/vorajv/dataset/OSL-XFoul/train.json
|
|
28
|
-
source_path: /home/vorajv/dataset/OSL-XFoul
|
|
29
|
-
dataloader:
|
|
30
|
-
batch_size: 1
|
|
31
|
-
shuffle: true
|
|
32
|
-
num_workers: 0
|
|
33
|
-
pin_memory: false
|
|
34
|
-
mp_context: spawn
|
|
35
|
-
persistent_workers: false
|
|
36
|
-
valid:
|
|
37
|
-
annotation_path: /home/vorajv/dataset/OSL-XFoul/valid.json
|
|
38
|
-
source_path: /home/vorajv/dataset/OSL-XFoul
|
|
39
|
-
dataloader:
|
|
40
|
-
batch_size: 1
|
|
41
|
-
shuffle: false
|
|
42
|
-
num_workers: 0
|
|
43
|
-
pin_memory: false
|
|
44
|
-
mp_context: spawn
|
|
45
|
-
persistent_workers: false
|
|
46
|
-
test:
|
|
47
|
-
annotation_path: /home/vorajv/dataset/OSL-XFoul/test.json
|
|
48
|
-
source_path: /home/vorajv/dataset/OSL-XFoul
|
|
49
|
-
dataloader:
|
|
50
|
-
batch_size: 1
|
|
51
|
-
shuffle: false
|
|
52
|
-
num_workers: 0
|
|
53
|
-
pin_memory: false
|
|
54
|
-
mp_context: spawn
|
|
55
|
-
persistent_workers: false
|
|
56
|
-
inputs:
|
|
57
|
-
video:
|
|
58
|
-
modality: video
|
|
59
|
-
representation: raw
|
|
60
|
-
source:
|
|
61
|
-
format: mp4
|
|
62
|
-
sampling:
|
|
63
|
-
num_frames: 100
|
|
64
|
-
input_fps: 25
|
|
65
|
-
target_fps: 17
|
|
66
|
-
start_frame: 63
|
|
67
|
-
end_frame: 87
|
|
68
|
-
transform: {}
|
|
69
|
-
augmentations: {}
|
|
70
|
-
params: {}
|
|
71
|
-
question:
|
|
72
|
-
modality: text
|
|
73
|
-
representation: raw
|
|
74
|
-
source:
|
|
75
|
-
format: json
|
|
76
|
-
sampling: {}
|
|
77
|
-
transform: {}
|
|
78
|
-
augmentations: {}
|
|
79
|
-
params: {}
|
|
80
|
-
|
|
81
|
-
MODEL:
|
|
82
|
-
runtime:
|
|
83
|
-
dtype: fp16
|
|
84
|
-
device: auto
|
|
85
|
-
compile: false
|
|
86
|
-
freeze: false
|
|
87
|
-
load:
|
|
88
|
-
checkpoint_path: null
|
|
89
|
-
pretrained: false
|
|
90
|
-
strict: true
|
|
91
|
-
map_location: null
|
|
92
|
-
format: auto
|
|
93
|
-
components:
|
|
94
|
-
video_encoder:
|
|
95
|
-
kind: encoder
|
|
96
|
-
source:
|
|
97
|
-
provider: opensportslib
|
|
98
|
-
name: xvars_clip_features
|
|
99
|
-
load:
|
|
100
|
-
weights_path: /home/vorajv/X-VARS/weights/14_model.pth.tar
|
|
101
|
-
params:
|
|
102
|
-
feature_source: indexed_or_raw_clip
|
|
103
|
-
vision_tower: openai/clip-vit-large-patch14
|
|
104
|
-
feature_dim: 1024
|
|
105
|
-
overrides: {}
|
|
106
|
-
mm_projector:
|
|
107
|
-
kind: projector
|
|
108
|
-
source:
|
|
109
|
-
provider: opensportslib
|
|
110
|
-
params:
|
|
111
|
-
input_dim: 1024
|
|
112
|
-
overrides: {}
|
|
113
|
-
llm_decoder:
|
|
114
|
-
kind: decoder
|
|
115
|
-
source:
|
|
116
|
-
provider: huggingface
|
|
117
|
-
# Qwen/Qwen2.5-7B-Instruct or Qwen/Qwen3.5-9B-Base
|
|
118
|
-
name: Qwen/Qwen3.5-9B-Base
|
|
119
|
-
params:
|
|
120
|
-
# Qwen/Qwen2.5-7B-Instruct or Qwen/Qwen3.5-9B-Base
|
|
121
|
-
repo_id: Qwen/Qwen3.5-9B-Base
|
|
122
|
-
overrides: {}
|
|
123
|
-
topology:
|
|
124
|
-
- from: video_encoder
|
|
125
|
-
to: mm_projector
|
|
126
|
-
- from: mm_projector
|
|
127
|
-
to: llm_decoder
|
|
128
|
-
metadata:
|
|
129
|
-
backend: qwen_xvars_infer
|
|
130
|
-
|
|
131
|
-
IO:
|
|
132
|
-
inputs:
|
|
133
|
-
video: video_encoder
|
|
134
|
-
question: llm_decoder
|
|
135
|
-
outputs:
|
|
136
|
-
answer_text: llm_decoder
|
|
137
|
-
explanation_text: llm_decoder
|
|
138
|
-
|
|
139
|
-
TRAIN:
|
|
140
|
-
trainer:
|
|
141
|
-
type: vqa
|
|
142
|
-
|
|
143
|
-
epochs: 3
|
|
144
|
-
|
|
145
|
-
criterion:
|
|
146
|
-
type: CrossEntropyLoss
|
|
147
|
-
|
|
148
|
-
optimizer:
|
|
149
|
-
type: AdamW
|
|
150
|
-
lr: 0.0002
|
|
151
|
-
weight_decay: 0.001
|
|
152
|
-
|
|
153
|
-
scheduler:
|
|
154
|
-
type: constant
|
|
155
|
-
|
|
156
|
-
execution:
|
|
157
|
-
enabled: true
|
|
158
|
-
training_backend: xvars_videochatgpt_lora
|
|
159
|
-
feature_backend: xvars_clip
|
|
160
|
-
view_sampling_policy: random_train_deterministic_eval
|
|
161
|
-
acc_grad_iter: 8
|
|
162
|
-
log_interval: 1
|
|
163
|
-
dry_run: false
|
|
164
|
-
|
|
165
|
-
xvars:
|
|
166
|
-
feature_mode: strict_xvars
|
|
167
|
-
projection_path: null
|
|
168
|
-
|
|
169
|
-
prompt:
|
|
170
|
-
style: detailed
|
|
171
|
-
system_prompt: You are a football video assistant. Answer the VQA question using the provided video context and referee priors.
|
|
172
|
-
include_priors: true
|
|
173
|
-
prediction_prior_adapter: xvars_referee
|
|
174
|
-
prior_fields: [action, offence, contact, bodypart]
|
|
175
|
-
video_token_len: 300
|
|
176
|
-
|
|
177
|
-
generation:
|
|
178
|
-
max_new_tokens: 128
|
|
179
|
-
temperature: 0.0
|
|
180
|
-
|
|
181
|
-
eval_profile:
|
|
182
|
-
metric_set: [exact_match, contains_match, token_f1, referee_semantic]
|
|
183
|
-
aggregation: mean
|
|
184
|
-
exclusions: []
|
|
185
|
-
|
|
186
|
-
sft:
|
|
187
|
-
max_seq_length: 480
|
|
188
|
-
include_video_tokens: true
|
|
189
|
-
disable_tqdm: false
|
|
190
|
-
reference_mode: all
|
|
191
|
-
append_eos_token: true
|
|
192
|
-
gradient_checkpointing: true
|
|
193
|
-
save_strategy: epoch
|
|
194
|
-
|
|
195
|
-
hf:
|
|
196
|
-
tokenizer_id: ${MODEL.components.llm_decoder.params.repo_id}
|
|
197
|
-
prefer_cuda: true
|
|
198
|
-
local_files_only: false
|
|
199
|
-
device_map: auto
|
|
200
|
-
offload_folder: ./hf_offload_qwen
|
|
201
|
-
|
|
202
|
-
lora:
|
|
203
|
-
r: 16
|
|
204
|
-
alpha: 32
|
|
205
|
-
dropout: 0.05
|
|
206
|
-
bias: none
|
|
207
|
-
prepare_kbit: true
|
|
208
|
-
target_modules: [mm_projector, upsample_features, up_proj, down_proj, gate_proj, k_proj, q_proj, v_proj, o_proj]
|
|
209
|
-
exclude_modules: '^base_lm\.model\.mm_projector$'
|
|
210
|
-
|
|
211
|
-
quantization:
|
|
212
|
-
enabled: false
|
|
213
|
-
load_in_4bit: true
|
|
214
|
-
bnb_4bit_quant_type: nf4
|
|
215
|
-
compute_dtype: float16
|
|
216
|
-
bnb_4bit_use_double_quant: true
|
|
217
|
-
|
|
218
|
-
checkpoint:
|
|
219
|
-
save_adapter: true
|
|
220
|
-
merge_and_save: false
|
|
221
|
-
|
|
222
|
-
selection:
|
|
223
|
-
monitor: loss
|
|
224
|
-
mode: min
|
|
225
|
-
|
|
226
|
-
checkpoint:
|
|
227
|
-
save_every: 1
|
|
228
|
-
save_best: true
|