Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,34 @@ on:

jobs:
ci:
runs-on: self-hosted
runs-on: ubuntu-24.04

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Setup PDM
uses: pdm-project/setup-pdm@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
python-version: '3.12'

- name: Install uv
uses: astral-sh/setup-uv@v4
with:
enable-cache: true
cache-dependency-glob: "uv.lock"

- name: Install just
uses: extractions/setup-just@v2

- name: Install dependencies
run: pdm install --dev
run: uv sync --locked --all-extras --dev

- name: Run format check
run: pdm run fmt_check
run: just check

- name: Run tests and show coverage
run: pdm run cov
run: just cov

- name: Calculate code metrics
run: pdm run metrics_all
run: just metrics_all
110 changes: 110 additions & 0 deletions Justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# List available just commands
default:
@just --list

# Install dependencies
install:
uv sync

# === Scripts from src.scripts package ===

# Run benchmark
benchmark *ARGS:
uv run python -m src.scripts.benchmark {{ARGS}}

# Process video
process_video *ARGS:
uv run python -m src.scripts.process_video {{ARGS}}

# Clean processed video data
process_video_clean:
rm -rf data/rococo2/camera data/rococo2/faces

# Run ROCOCO evaluation
rococo_evaluation *ARGS:
uv run python -m src.scripts.rococo_evaluation {{ARGS}}

# Generate plots for the thesis
plots:
uv run python -m src.scripts.plots_for_publication

# === Testing ===

# Run all tests
test:
uv run pytest

# Run tests with coverage
cov:
uv run pytest --cov=src

# === Static Analysis ===

# Format code with black
_black:
uv run black .

# Check code formatting with black
_black_check:
uv run black --check .

# Sort imports with isort
_isort:
uv run isort .

# Check import sorting with isort
_isort_check:
uv run isort . --check-only

# Run pyright type checker
_pyright:
uv run pyright

# Format code (black + isort)
fmt: _black _isort

# Check code formatting and types (black + isort + pyright)
check: _black_check _isort_check _pyright

# === Code Metrics ===

# Show raw metrics for src directory
metrics_raw_src:
uv run radon raw src --summary

# Show raw metrics for test directory
metrics_raw_tests:
uv run radon raw test --summary

# Show raw metrics for notebooks
metrics_raw_notebooks:
uv run radon raw notebooks --include-ipynb --summary

# Show cyclomatic complexity for src directory
metrics_cyclomatic_src:
uv run radon cc src --average

# Show cyclomatic complexity for notebooks
metrics_cyclomatic_notebooks:
uv run radon cc notebooks --include-ipynb --average

# Run all code metrics
metrics_all: metrics_raw_src metrics_raw_tests metrics_raw_notebooks metrics_cyclomatic_src metrics_cyclomatic_notebooks

# === Documentation ===

# Build doorstop documentation
doorstop_build:
uv run doorstop publish all site/doorstop

# Serve documentation locally
docs:
uv run mkdocs serve

# Build documentation
docs_build:
uv run mkdocs build

# Deploy documentation to GitHub Pages
docs_deploy:
uv run mkdocs gh-deploy
50 changes: 29 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,18 @@
* [validation.ipynb](./notebooks/validation/validation_rococo.ipynb) - na zbiorze Rococo
* [validation_synth.ipynb](./notebooks/validation/validation_rococo_synth.ipynb) - na zbiorze RococoSynth
* [validation_small.ipynb](./notebooks/validation/validation_rococo_small.ipynb) - na zbiorze RococoSmall
* [face_landmark_based_augmentation.ipynb](./notebooks/face_landmark_based_augmentation.ipynb) - augmentacja danych na podstawie punktów charakterystycznych twarzy
* [fine_tuning.ipynb](./notebooks/fine_tuning.ipynb) - fine-tuning modelu na zbiorze LFW
* [preprocess_lfw_dataset.ipynb](./notebooks/preprocess_lfw_dataset.ipynb) - przetwarzanie zbioru LFW
* [preprocess_rof_dataset.ipynb](./notebooks/preprocess_rof_dataset.ipynb) - przetwarzanie zbioru Rococo
* [rococo_dataset_exploration.ipynb](./notebooks/rococo_dataset_exploration.ipynb) - eksploracja zbioru Rococo
* [rococo_synth_dataset_dev.ipynb](./notebooks/rococo_synth_dataset_dev.ipynb) - przegląd przekształceń i utworzenie zbioru RococoSynth
* [07-face_landmark_based_augmentation.ipynb](./notebooks/07-face_landmark_based_augmentation.ipynb) - augmentacja danych na podstawie punktów charakterystycznych twarzy
* [04-fine_tuning.ipynb](./notebooks/04-fine_tuning.ipynb) - fine-tuning modelu na zbiorze LFW
* [01-preprocess_lfw_dataset.ipynb](./notebooks/01-preprocess_lfw_dataset.ipynb) - przetwarzanie zbioru LFW
* [02-preprocess_rof_dataset.ipynb](./notebooks/02-preprocess_rof_dataset.ipynb) - przetwarzanie zbioru Rococo
* [03-rococo_dataset_exploration.ipynb](./notebooks/03-rococo_dataset_exploration.ipynb) - eksploracja zbioru Rococo
* [06-rococo_synth_dataset_dev.ipynb](./notebooks/06-rococo_synth_dataset_dev.ipynb) - przegląd przekształceń i utworzenie zbioru RococoSynth

## Instalacja i uruchomienie

* Projekt wykorzystuje [PDM](https://pdm-project.org/latest/) do zarządzania zależnościami i uruchamiania skryptów.
* PDM pozwala na definiowanie własnych skryptów, znajdują się w `pyproject.toml` w sekcji `[tool.pdm.scripts]`.
* Można je uruchomić za pomocą `pdm <nazwa_skryptu>`.
* Projekt wykorzystuje [uv](https://docs.astral.sh/uv/) do zarządzania zależnościami.
* Proejkt wykorzystuje [just](https://github.com/casey/just) do definiowania i uruchamiania skryptów
* `just -l` - lista dostępnych

### Zależności systemowe

Expand All @@ -35,47 +35,55 @@ Wymagane do instalacji biblioteki `dlib`
sudo apt install build-essential cmake pkg-config python3.12-dev
```

### Instalacja PDM
### Instalacja `uv`

Aktualna instrukcja znajduje się w [dokumentacji](https://docs.astral.sh/uv/getting-started/installation/)

```bash
curl -sSL https://pdm-project.org/install-pdm.py | python3 -
curl -LsSf https://astral.sh/uv/install.sh | sh
```

### Instalacja zależności

```bash
pdm install --dev
just install
```

### Uruchomienie testów jednostkowych

```bash
pdm test
just test
```

### Skrypty do strojenia / walidacji modeli

```bash
pdm experiment --help
pdm fine_tuning --help
pdm validation --help
pdm benchmark --help
just experiment
just rococo_evaluation --help
just benchmark --help
```

### Przygotowanie plików

* Do pobrania z `https://colossus.ai.ii.pw.edu.pl` - szczegóły na Slacku
* dostęp przez [VPN](https://ai.ii.pw.edu.pl/net/vpn/)
* zbiory danych do katalogu `data/`, rozpakować zipy
* wagi modeli z `dlib` do katalogu `models/dlib/`

### Uruchamianie notatników

* Notatniki zawierają ścieżki względne, uruchamiamy je w katalogu zawierającym dany notatnik

### Uruchamianie sweep agent
### Uruchamianie eksperymentu

Utworzenie *sweep* w Weights & Biases

```bash
wandb sweep experiments/<plik yaml>
```

Żeby poprawnie działały importy
Uruchomienie agenta

```bash
PYTHONPATH=/home/mgarbowski/repos/thesis wandb agent ...id...
```
PYTHONPATH=/home/mgarbowski/repos/thesis wandb agent <id>
```
Loading
Loading