pipeline in linea single thread

This commit is contained in:
administrator
2026-05-19 08:52:44 +02:00
parent 98b43ce903
commit f728524ee6
43 changed files with 5245 additions and 154 deletions

View File

@@ -0,0 +1,166 @@
# Aggiornamento 2026-05-17 20:57
## Obiettivo
Provare la strada del dataset aumentato per il riconoscimento OCR numerico via YOLO, senza integrare ancora nulla in `flywms`.
## Dataset aumentato
Creato lo script:
```text
C:\devel\yolo-ocr\tools\augment_yolo_dataset.py
```
Generato il dataset:
```text
C:\devel\yolo-ocr\dataset_augmented
```
Composizione:
```text
train: 247 immagini, 1482 bbox
val: 5 immagini, 30 bbox
test: 2 immagini, 12 bbox
```
Nota importante: l'aumento dati e' applicato solo al train. Validation e test restano immagini originali, quindi sono utili per misurare se il modello generalizza.
Augmentation applicate:
- piccole rotazioni;
- piccole traslazioni;
- scala leggera;
- contrasto/luminosita';
- CLAHE;
- sharpening;
- blur leggero;
- rumore;
- compressione JPEG simulata.
## Training GPU
Addestramento eseguito sulla RTX 3050:
```powershell
yolo detect train data=C:\devel\yolo-ocr\dataset_augmented\data.yaml model=yolov8n.pt epochs=120 imgsz=640 batch=16 workers=0 device=0 project=C:\devel\yolo-ocr\training_runs name=digits_yolov8n_aug_gpu patience=30 seed=42
```
Il training e' terminato con early stopping:
```text
Best epoch: 11
Epoch completate: 41
Durata: circa 0.098 ore
```
Metriche YOLO finali su validation:
```text
precision: 0.826
recall: 0.873
mAP50: 0.990
mAP50-95: 0.745
```
Velocita' indicativa:
```text
preprocess: 0.6 ms
inference: 7.7 ms
postprocess: 4.1 ms
```
## Artefatti
Peso PyTorch:
```text
C:\devel\yolo-ocr\models\udc_digits_yolov8n_aug.pt
```
Export ONNX:
```text
C:\devel\yolo-ocr\models\udc_digits_yolov8n_aug.onnx
```
Run originale:
```text
C:\devel\yolo-ocr\training_runs\digits_yolov8n_aug_gpu
```
## Valutazione codice intero
Con soglia standard:
```powershell
python C:\devel\yolo-ocr\tools\evaluate_code_accuracy.py --model C:\devel\yolo-ocr\training_runs\digits_yolov8n_aug_gpu\weights\best.pt --dataset C:\devel\yolo-ocr\dataset_augmented --split test --device 0 --conf 0.25 --iou 0.50 --output C:\devel\yolo-ocr\outputs\code_eval_aug_test
```
Risultato su test:
```text
images=2
code_ok=0
code_accuracy=0.0000
char_accuracy=0.3333
```
Il problema era una cifra mancante nei due codici:
```text
187184 -> 17184
182368 -> 18268
```
Abbassando la soglia a `conf=0.15`, sui 2 test il codice completo diventa corretto:
```text
conf=0.15, iou=0.35..0.65
code_accuracy=1.0000
char_accuracy=1.0000
```
Pero' sulla validation originale, sempre con `conf=0.15`, il risultato resta insufficiente:
```text
images=5
code_ok=1
code_accuracy=0.2000
char_accuracy=0.7812
```
Esempi validation:
```text
187184 -> 187184 OK
182430 -> 18243601 NO
182519 -> 182610 NO
182511 -> 182611 NO
182242 -> 18224 NO
```
## Conclusione
La strada del dataset aumentato e' utile: le metriche YOLO sugli oggetti sono migliorate molto e la GPU funziona bene.
Pero' il problema reale non e' ancora risolto, perche' noi non dobbiamo solo rilevare cifre: dobbiamo ricostruire un codice numerico affidabile. Il modello ora e' sensibile alla soglia di confidenza e produce ancora cifre duplicate, mancanti o confuse.
Non conviene integrare questo OCR in `flywms` in questa forma.
## Prossimo passo tecnico
Prima di altro training, serve migliorare il post-processing del codice:
- soglia bassa controllata;
- ordinamento sinistra-destra;
- clustering/merge dei bbox vicini;
- vincolo codice a 6 cifre;
- gestione duplicati;
- report per capire quali cifre sono davvero ambigue.
Solo dopo questa fase ha senso decidere se aumentare ancora il dataset o cambiare architettura.