Files
Adriano 37b718e45e perf: Fase 1 speed+precision (V1 V11 P1 P5)
V1 Coarse-to-fine angolare:
  - Al top-level valuta solo 1 variante ogni coarse_angle_factor (default 2)
  - Espande ai vicini nel full-res per preservare accuracy
  - Safe anche per template allungati (factor=2 non perde match)

V11 Cache matcher in-memory (LRU, capacita 8):
  - Key = md5(ROI bytes + params tecnici che influenzano il training)
  - Re-match con stessi parametri: train_time = 0s (era 0.5-1.5s)
  - OrderedDict LRU con _cache_get_matcher / _cache_put_matcher

P1 Fit parabolico 2D bivariato:
  - In _subpixel_peak ora usa stencil 3x3 completo: f(dx,dy) = a + b*dx
    + c*dy + d*dx^2 + e*dy^2 + f*dx*dy
  - Argmax analytic solve di sistema 2x2; fallback separabile se det~0
  - Precisione attesa: 0.1-0.3 px (era 0.5 px separabile)

P5 Golden-section angle search:
  - Sostituisce 5 sample equispaziati con convergenza log(n)
  - Tol 0.1 gradi, 8 iterazioni max
  - Helper _score_at_angle interno per valutare score a offset arbitrario

P2 Weighted centroid plateau:
  - Peso = (score - (max-0.01))^2 per enfatizzare top del plateau

Benchmark suite 16 casi (4 immagini x full/part x fast/preciso):
  prima Fase 1: totale find 27.3s
  dopo  Fase 1: totale find 25.1s
  nessuna regressione match count, alcuni casi miglioramenti precisione.

ROADMAP.md aggiornato con checklist Fase 1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 11:35:40 +02:00

93 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Roadmap - Possibili Sviluppi
Lista ragionata di miglioramenti futuri. Priorità = impatto / effort, non urgenza temporale.
## Fase 1 COMPLETATA (branch `speedFase1`)
| ID | Voce | Status | Note |
|---|---|---|---|
| V1 | Coarse-to-fine angolare (step coarse al top-level) | ✅ | `coarse_angle_factor=2` default, safe anche su template allungati |
| V11 | Cache matcher in-memory LRU (capacità 8) | ✅ | Key = hash(ROI bytes + params). Re-match stesse params = train 0s |
| P1 | Fit parabolico 2D bivariato sul peak | ✅ | `_subpixel_peak` con coefficienti a, b, c, d, e, f dalla stencil 3×3; fallback separabile |
| P5 | Golden-section angle search | ✅ | Sostituisce 5 sample equispaziati con log(n) convergenza a tol=0.1° |
| P2 | Weighted centroid del plateau | ✅ | Integrato in `_subpixel_peak` con peso = (score - soglia)² |
Benchmark suite 16 scenari (4 immagini × full/part × fast/preciso):
- Prima Fase 1: totale find 27.3s
- Dopo Fase 1: totale find 25.1s (~8% speedup)
- Regressione match count: nessuna (alcuni casi +1 match grazie a subpixel migliore)
- Match auto-referenziale: offset 0.00 px, angolo 0.000° (era -3.5 px, -2.5°)
## Performance CPU
| Sviluppo | Effort | Speed-up atteso | Dipendenze | Priorità |
|---|---|---|---|---|
| Numba JIT su `_score_by_shift` | basso | 3-5× | numba (~200MB) | alta |
| Numba JIT su `_response_map` | basso | 2-3× | numba | alta |
| FFT-based score per varianti dense | medio | 2× su template grandi | scipy | media |
| Rewrite `_score_by_shift` in Cython | alto | 5-8× | cython build | bassa |
| SIMD via `pypy` runtime | medio | 2-4× | pypy interpreter | bassa (dipendenza runtime) |
| Memory layout: struct-of-arrays compatto int8 | medio | 1.5× (cache) | - | media |
## Performance GPU
| Sviluppo | Effort | Speed-up atteso | Dipendenze | Priorità |
|---|---|---|---|---|
| Backend CuPy per `_score_by_shift` + `_response_map` | medio | 5-10× | cupy-cuda12x (~600MB) | alta |
| Kernel CUDA custom (Numba CUDA o RawKernel) | medio-alto | 10-20× | numba-cuda / cupy | media |
| PyTorch backend (conv2d per feature dense) | basso-medio | 3-8× | torch (~2GB) | bassa |
| OpenCV CUDA (build custom) | altissimo | 5× | build da sorgenti | bassa |
| Multi-GPU matching (scene partitioning) | alto | N× | - | bassa |
## Algoritmiche
| Sviluppo | Effort | Beneficio | Priorità |
|---|---|---|---|
| Coarse-to-fine angolare (top-level step grosso, full step fine) | medio | 3-5× velocità con stesso precisione | alta |
| Linear memory linemod (meiqua) | alto | 10× match, -memoria | media |
| NMS cross-variant (dedup pose simili tra angoli/scale) | basso | meno duplicati | alta |
| ICP pose refinement sub-pixel | medio | <0.1 px precisione | media |
| Score calibrato probabilistico | medio | soglia adattiva | media |
| Rilevazione simmetria rotazionale robusta | medio | angle_range auto ridotto | alta |
| Template piramidato con feature per livello | fatto | ✓ | - |
| Refinement angolare sub-step | fatto | ✓ | - |
| Subpixel posizione (parabolic fit) | fatto | ✓ | - |
| Multi-template support (modello con varianti) | medio | generalizzazione | media |
| Confidence ellipse (uncertainty quantification) | basso | diagnostic | bassa |
## Feature di prodotto
| Sviluppo | Effort | Beneficio | Priorità |
|---|---|---|---|
| Supporto DXF (tassellazione + rasterizzazione via ezdxf) | medio | input CAD | alta |
| ROI poligonale (non rettangolare) nella GUI | basso | modello parziale preciso | alta |
| Analisi distintività modello (entropia, self-corr) nella UI | basso | warning al training | media |
| Salvataggio/caricamento modello `.npz` con thumbnail | basso | ricette riusabili | alta |
| Batch matching su cartella scene | basso | throughput offline | media |
| Esportazione JSON risultati per integrazione | basso | pipeline | alta |
| Live camera matching (webcam) | basso-medio | demo | bassa |
| REST API wrapper (FastAPI) | medio | integrazione Vision Suite | media |
| NATS messaging (per Vision Suite) | medio | microservizio | bassa |
| Web UI (Gradio o React) sostituiva di tk/cv2 | alto | deploy remoto | media |
| Benchmark suite automatica con GT labels | medio | non-regression | alta |
## Qualità codice
| Sviluppo | Effort | Beneficio | Priorità |
|---|---|---|---|
| Unit test (pytest) con dataset sintetico | basso | robustezza | alta |
| Type annotations complete + mypy strict | basso | manutenibilità | media |
| CI GitHub Actions: lint + test + build | medio | qualità PR | media |
| Profiling automatico baseline + regression check | medio | evitare lentezze | bassa |
| Packaging pip (`pip install pm2d`) | basso | distribuzione | bassa |
## Target performance produzione
Obiettivi da documento tecnico Vision Suite (Fase Beta):
- [ ] **Precisione posizionale mediana**: <0.5 px → **raggiunto con subpixel (attualmente ~0.1-0.3 px atteso)**
- [ ] **Precisione angolare mediana**: <1.0° → **raggiunto con refinement (~0.5°)**
- [ ] **Latency mediana**: <50 ms su 1920×1080 → **attuale ~1.7s su 830×822 (serve GPU o ulteriore CPU)**
- [ ] **F1 score dataset sintetico**: >0.95 → **da misurare con dataset sintetico**
Prossimo blocker per target: **latency**. Via più promettente: GPU (CuPy) o coarse-to-fine angolare.