テニスの画像列から各種コンポーネント(選手、ボール、コートなど)を検知するモデルを学習・推論するためのプロジェクトです。高品質なデータと安定した学習パイプラインを提供し、モデル開発・検証・運用を効率化します。
git clone <repository-url>
cd tracknet
# 本番用依存関係
uv sync
# 開発用依存関係(コードスタイルツール、テストツールなど)
uv sync --dev
source .venv/bin/activate
このプロジェクトでは以下のコード品質管理ツールを使用しています:
使用方法:
# Linting (問題の検出)
uv run ruff check .
# Linting (問題の自動修正)
uv run ruff check . --fix
# Formatting
uv run ruff format .
使用方法:
# 型チェックの実行
uv run mypy tracknet
ローカル開発でコミット前に自動的に品質チェックを実行するには:
# Pre-commit hooksのインストール
uv run pre-commit install
# 手動で全てのhooksを実行
uv run pre-commit run --all-files
このプロジェクトでは3層のテスト戦略を採用しています:
# 全てのテストを実行
uv run pytest
# カバレッジレポート付きでテストを実行
uv run pytest --cov=tracknet --cov-report=html
# 特定のテスト層を実行
uv run pytest tests/unit/ -v # Unit tests only
uv run pytest tests/integration/ -v # Integration tests only
uv run pytest tests/e2e/ -v # E2E tests only
# マーカー付きテストを実行
uv run pytest -m unit # Unit tests only
uv run pytest -m integration # Integration tests only
uv run pytest -m e2e # E2E tests only
uv run pytest -m "not slow" # Skip slow tests
カバレッジレポートは htmlcov/index.html で確認できます。
tracknet/
├── tracknet/ # メインパッケージ
│ ├── datasets/ # データセット関連
│ ├── models/ # モデル定義
│ ├── training/ # トレーニングロジック
│ ├── tools/ # ツールとユーティリティ
│ ├── utils/ # 汎用ユーティリティ
│ └── configs/ # 設定ファイル
├── demo/ # デモスクリプト
├── docs/ # ドキュメント
├── tests/ # テストコード
│ ├── unit/ # 単体テスト
│ ├── integration/ # 統合テスト
│ ├── e2e/ # エンドツーエンドテスト
│ ├── tools/ # ツール関連テスト
│ ├── conftest.py # pytest fixtures
│ └── utils.py # テストユーティリティ
├── configs/ # 設定ファイル
├── .github/workflows/ # CI/CDワークフロー
└── openspec/ # 仕様管理
命名規約:
snake_casePascalCaselower_case_with_underscoresドキュメント: 全ての関数とクラスにはGoogleスタイルのdocstringが必要
型ヒント: 新しいコードには型ヒントを追加することが推奨されます
GitHub Actionsを使用して以下の自動チェックを実行しています:
これらのチェックはプルリクエスト作成時とmain/developブランチへのプッシュ時に自動的に実行されます。
カバレッジが75%未満の場合、CIは失敗します。コアモジュールにはより高いカバレッジ要件が適用されます。
TrackNetでは、大規模な事前学習済みモデルを効率的にファインチューニングするためのLoRA (Low-Rank Adaptation) と量子化機能をサポートしています。
# configs/model/vit_lora_heatmap.yaml
model_name: "vit_heatmap"
pretrained_model_name: facebook/dinov3-vits16-pretrain-lvd1689m
backbone:
freeze: false # LoRAで効率的に学習
device_map: auto
local_files_only: true
patch_size: 16
decoder:
channels: [384, 256, 128, 64]
upsample: [2, 2, 2]
# ... その他設定
heatmap:
size: [256, 144]
sigma: 2.0
# LoRA設定
lora:
enabled: true
r: 16 # ランク(低いほどパラメータが少ない)
lora_alpha: 32 # スケーリング係数
lora_dropout: 0.05 # ドロップアウト率
target_modules: ["query", "key", "value", "dense"] # 対象モジュール(自動検出も可能)
bias: "none"
task_type: "FEATURE_EXTRACTION"
quantization:
enabled: false # 量子化は無効化
# configs/model/vit_qlora_heatmap.yaml
model_name: "vit_heatmap"
pretrained_model_name: facebook/dinov3-vits16-pretrain-lvd1689m
# ... backbone, decoder, heatmap設定は同じ ...
# LoRA設定
lora:
enabled: true
r: 16
lora_alpha: 32
lora_dropout: 0.05
target_modules: ["query", "key", "value", "dense"]
bias: "none"
task_type: "FEATURE_EXTRACTION"
# 量子化設定
quantization:
enabled: true
quant_type: "nf4" # "nf4" または "fp4"
compute_dtype: "bfloat16" # 計算精度
skip_modules: [] # 量子化をスキップするモジュール
mode: "manual" # "manual" または "hf"
compress_statistics: true
use_double_quant: true
# LoRAモデルで学習
uv run python train.py --config configs/model/vit_lora_heatmap.yaml
# QLoRAモデルで学習
uv run python train.py --config configs/model/vit_qlora_heatmap.yaml
| モデル | メモリ使用量 | 学習パラメータ数 | 推論速度 |
|---|---|---|---|
| 通常 | 100% | 100% | 基準 |
| LoRA | ~90% | ~5% | 基準 |
| QLoRA | ~25% | ~5% | 基準 |
r: LoRAのランク(8, 16, 32, 64など)lora_alpha: スケーリング係数(通常rの2倍)lora_dropout: ドロップアウト率(0.0-0.1)target_modules: LoRAを適用するモジュールリスト(Noneで自動検出)quant_type: 量子化タイプ("nf4"推奨、"fp4"も利用可能)compute_dtype: 計算精度("bfloat16"推奨、"float16"も利用可能)mode: 量子化モード("manual"推奨、"hf"はHuggingFace依存)git checkout -b feat/your-feature-nameuv run ruff check . && uv run ruff format . && uv run mypy tracknet && uv run pytest[ライセンス情報をここに追加]
114 commits
Python
100.0%
テニスの画像列から各種コンポーネント(選手、ボール、コートなど)を検知するモデルを学習・推論するためのプロジェクトです。高品質なデータと安定した学習パイプラインを提供し、モデル開発・検証・運用を効率化します。
git clone <repository-url>
cd tracknet
# 本番用依存関係
uv sync
# 開発用依存関係(コードスタイルツール、テストツールなど)
uv sync --dev
source .venv/bin/activate
このプロジェクトでは以下のコード品質管理ツールを使用しています:
使用方法:
# Linting (問題の検出)
uv run ruff check .
# Linting (問題の自動修正)
uv run ruff check . --fix
# Formatting
uv run ruff format .
使用方法:
# 型チェックの実行
uv run mypy tracknet
ローカル開発でコミット前に自動的に品質チェックを実行するには:
# Pre-commit hooksのインストール
uv run pre-commit install
# 手動で全てのhooksを実行
uv run pre-commit run --all-files
このプロジェクトでは3層のテスト戦略を採用しています:
# 全てのテストを実行
uv run pytest
# カバレッジレポート付きでテストを実行
uv run pytest --cov=tracknet --cov-report=html
# 特定のテスト層を実行
uv run pytest tests/unit/ -v # Unit tests only
uv run pytest tests/integration/ -v # Integration tests only
uv run pytest tests/e2e/ -v # E2E tests only
# マーカー付きテストを実行
uv run pytest -m unit # Unit tests only
uv run pytest -m integration # Integration tests only
uv run pytest -m e2e # E2E tests only
uv run pytest -m "not slow" # Skip slow tests
カバレッジレポートは htmlcov/index.html で確認できます。
tracknet/
├── tracknet/ # メインパッケージ
│ ├── datasets/ # データセット関連
│ ├── models/ # モデル定義
│ ├── training/ # トレーニングロジック
│ ├── tools/ # ツールとユーティリティ
│ ├── utils/ # 汎用ユーティリティ
│ └── configs/ # 設定ファイル
├── demo/ # デモスクリプト
├── docs/ # ドキュメント
├── tests/ # テストコード
│ ├── unit/ # 単体テスト
│ ├── integration/ # 統合テスト
│ ├── e2e/ # エンドツーエンドテスト
│ ├── tools/ # ツール関連テスト
│ ├── conftest.py # pytest fixtures
│ └── utils.py # テストユーティリティ
├── configs/ # 設定ファイル
├── .github/workflows/ # CI/CDワークフロー
└── openspec/ # 仕様管理
命名規約:
snake_casePascalCaselower_case_with_underscoresドキュメント: 全ての関数とクラスにはGoogleスタイルのdocstringが必要
型ヒント: 新しいコードには型ヒントを追加することが推奨されます
GitHub Actionsを使用して以下の自動チェックを実行しています:
これらのチェックはプルリクエスト作成時とmain/developブランチへのプッシュ時に自動的に実行されます。
カバレッジが75%未満の場合、CIは失敗します。コアモジュールにはより高いカバレッジ要件が適用されます。
TrackNetでは、大規模な事前学習済みモデルを効率的にファインチューニングするためのLoRA (Low-Rank Adaptation) と量子化機能をサポートしています。
# configs/model/vit_lora_heatmap.yaml
model_name: "vit_heatmap"
pretrained_model_name: facebook/dinov3-vits16-pretrain-lvd1689m
backbone:
freeze: false # LoRAで効率的に学習
device_map: auto
local_files_only: true
patch_size: 16
decoder:
channels: [384, 256, 128, 64]
upsample: [2, 2, 2]
# ... その他設定
heatmap:
size: [256, 144]
sigma: 2.0
# LoRA設定
lora:
enabled: true
r: 16 # ランク(低いほどパラメータが少ない)
lora_alpha: 32 # スケーリング係数
lora_dropout: 0.05 # ドロップアウト率
target_modules: ["query", "key", "value", "dense"] # 対象モジュール(自動検出も可能)
bias: "none"
task_type: "FEATURE_EXTRACTION"
quantization:
enabled: false # 量子化は無効化
# configs/model/vit_qlora_heatmap.yaml
model_name: "vit_heatmap"
pretrained_model_name: facebook/dinov3-vits16-pretrain-lvd1689m
# ... backbone, decoder, heatmap設定は同じ ...
# LoRA設定
lora:
enabled: true
r: 16
lora_alpha: 32
lora_dropout: 0.05
target_modules: ["query", "key", "value", "dense"]
bias: "none"
task_type: "FEATURE_EXTRACTION"
# 量子化設定
quantization:
enabled: true
quant_type: "nf4" # "nf4" または "fp4"
compute_dtype: "bfloat16" # 計算精度
skip_modules: [] # 量子化をスキップするモジュール
mode: "manual" # "manual" または "hf"
compress_statistics: true
use_double_quant: true
# LoRAモデルで学習
uv run python train.py --config configs/model/vit_lora_heatmap.yaml
# QLoRAモデルで学習
uv run python train.py --config configs/model/vit_qlora_heatmap.yaml
| モデル | メモリ使用量 | 学習パラメータ数 | 推論速度 |
|---|---|---|---|
| 通常 | 100% | 100% | 基準 |
| LoRA | ~90% | ~5% | 基準 |
| QLoRA | ~25% | ~5% | 基準 |
r: LoRAのランク(8, 16, 32, 64など)lora_alpha: スケーリング係数(通常rの2倍)lora_dropout: ドロップアウト率(0.0-0.1)target_modules: LoRAを適用するモジュールリスト(Noneで自動検出)quant_type: 量子化タイプ("nf4"推奨、"fp4"も利用可能)compute_dtype: 計算精度("bfloat16"推奨、"float16"も利用可能)mode: 量子化モード("manual"推奨、"hf"はHuggingFace依存)git checkout -b feat/your-feature-nameuv run ruff check . && uv run ruff format . && uv run mypy tracknet && uv run pytest[ライセンス情報をここに追加]
114 commits
Python
100.0%