09/07/2024
În lumea dinamică a viziunii computerizate și a inteligenței artificiale, modelele YOLO (You Only Look Once) reprezintă un standard de aur pentru detecția de obiecte în timp real. Aceste sisteme sunt renumite pentru viteza și precizia lor, fiind esențiale într-o multitudine de aplicații, de la vehicule autonome la supraveghere inteligentă. Un aspect fundamental, adesea subestimat, în obținerea performanței optime a modelelor YOLO este înțelegerea și aplicarea corectă a regulilor de dimensionare a imaginilor. Acest ghid detaliază cum YOLO, în special versiunile moderne precum YOLOv3, YOLOv4 și YOLOv8, gestionează imaginile de diverse rezoluții și rapoarte de aspect, oferind o perspectivă aprofundată asupra proceselor de antrenament și predicție.

- Ce este YOLO și de ce contează dimensiunea imaginilor?
- Gestionarea dimensiunilor în timpul Antrenamentului (Training)
- Gestionarea imaginilor în timpul Predicției (Inference)
- Cazul Specific: Antrenarea YOLOv4 cu ResNet18 și Provocările Loss-ului
- Întrebări Frecvente despre Dimensionarea Imaginilor în YOLO
- De ce trebuie ca dimensiunile imaginilor să fie multipli de 32?
- Ce este "letterboxing" și de ce este folosit?
- Pot folosi imagini de dimensiuni diferite în timpul antrenamentului YOLO?
- Pot folosi imagini de dimensiuni diferite în timpul predicției YOLO?
- Cum afectează parametrul imgsz performanța modelului YOLO?
Ce este YOLO și de ce contează dimensiunea imaginilor?
YOLO este o familie de algoritmi de detecție a obiectelor care procesează o imagine printr-o singură trecere printr-o rețea neuronală, spre deosebire de metodele mai vechi care foloseau mai multe etape. Această abordare unificată îi conferă o viteză remarcabilă. Versiunile recente, cum ar fi YOLOv8, dezvoltată de echipa Ultralytics, extind capabilitățile dincolo de detecția de obiecte, incluzând estimarea poziției și segmentarea. Unul dintre aspectele cheie ale flexibilității YOLO este capacitatea sa de a lucra cu diverse rezoluții și rapoarte de aspect ale imaginilor. Cu toate acestea, există reguli specifice care trebuie respectate pentru a asigura funcționarea corectă și eficientă a modelului.
Regula de bază este că lățimea și înălțimea imaginilor de intrare trebuie să fie un multiplu de 32. Această cerință provine din arhitectura rețelei neuronale. Rețelele YOLO sunt rețele complet convoluționale, iar stratul lor de backbone (coloana vertebrală) are un "stride" maxim de 32. "Stride-ul" se referă la numărul de pixeli cu care un filtru se deplasează pe imagine. Pentru ca operațiile convoluționale și de pooling să se alinieze corect și să producă hărți de caracteristici coerente pe parcursul rețelei, dimensiunile imaginii trebuie să fie divizibile cu acest stride maxim. Nerespectarea acestei reguli poate duce la erori de calcul sau la o performanță suboptimă a modelului.
Gestionarea dimensiunilor în timpul Antrenamentului (Training)
Un aspect crucial al antrenamentului oricărei rețele neuronale, inclusiv YOLO, este crearea mini-batch-urilor de date. Pentru a putea grupa mai multe imagini într-un singur tensor (mini-batch) pentru procesare paralelă pe GPU, toate imaginile din acel batch trebuie să aibă aceeași dimensiune. Acest lucru impune o preprocesare specifică a imaginilor înainte de a fi introduse în model.

Metoda predominantă utilizată de YOLO pentru a gestiona acest aspect este tehnica de letterboxing. Aceasta implică redimensionarea imaginii inițiale pentru a-i păstra raportul de aspect, prevenind astfel distorsiunile, și apoi "umplerea" (padding) cu bare negre (sau o altă culoare neutră) pentru a atinge o dimensiune pătrată sau o dimensiune țintă predefinită (de exemplu, 640x640 sau 512x512). Parametrul imgsz în configurația de antrenament selectează această dimensiune țintă la care vor fi redimensionate toate imaginile.
Exemplu de Letterboxing în Antrenament:
Să presupunem că avem o imagine de 800x700 pixeli și dorim să o antrenăm la o dimensiune de 640x640:
| Dimensiune Originală (Lățime x Înălțime) | Raport de Aspect Original | Dimensiune Țintă imgsz | Dimensiune Redimensionată (fără padding) | Dimensiune Finală (cu padding) |
|---|---|---|---|---|
| 800x700 | ~1.14 | 640x640 | 640x560 (aproximativ) | 640x640 (cu bare negre sus/jos) |
| 1080x810 | ~1.33 | 512x512 | 512x384 (aproximativ) | 512x512 (cu bare negre sus/jos) |
Observați că, chiar dacă imaginea originală nu este pătrată, ea este adusă la o formă pătrată prin adăugarea de bare negre, asigurând că toate imaginile din batch au exact aceeași dimensiune (e.g., torch.Size([16, 3, 512, 512]) pentru un batch de 16 imagini).
Gestionarea imaginilor în timpul Predicției (Inference)
Spre deosebire de faza de antrenament, procesul de predicție (sau inferență) oferă o flexibilitate considerabil mai mare în ceea ce privește dimensiunile imaginilor de intrare. Deoarece, în timpul predicției, imaginile sunt adesea procesate individual sau în batch-uri mici care nu necesită neapărat aceeași formă, modelul YOLO poate gestiona imagini de dimensiuni arbitrare, atâta timp cât ambele laturi sunt un multiplu de 32.

În timpul predicției, cea mai lungă latură a imaginii este redimensionată la valoarea specificată de imgsz, iar latura mai scurtă este ajustată pentru a menține raportul de aspect, fiind, de asemenea, un multiplu de 32. Avantajul aici este că nu este întotdeauna necesară umplerea cu bare negre (padding) pentru a face imaginea pătrată, deoarece nu se formează batch-uri mari de tensori de forme diferite. Acest lucru poate reduce timpul de preprocesare și, în unele cazuri, poate îmbunătăți acuratețea prin evitarea zonelor umplute care nu conțin informații relevante.
Exemplu de gestionare a imaginilor în Predicție:
Să luăm exemplele din textul furnizat:
Dimensiune Originală (im0s) | Dimensiune imgsz | Dimensiune Intrare Model (im) | Observații |
|---|---|---|---|
| (1080, 810, 3) | 512 | torch.Size([1, 3, 512, 384]) | Latura lungă (810) este redimensionată la 512; 1080 devine 384 (multiplu de 32). |
| (720, 1280, 3) | 512 | torch.Size([1, 3, 288, 512]) | Latura lungă (1280) este redimensionată la 512; 720 devine 288 (multiplu de 32). |
Acest comportament permite modelului să se adapteze mai eficient la diverse intrări video sau imagini, optimizând utilizarea resurselor computaționale și menținând performanța.
Cazul Specific: Antrenarea YOLOv4 cu ResNet18 și Provocările Loss-ului
Textul furnizat menționează o situație specifică de antrenament YOLOv4 cu un backbone ResNet18, pe un set de date KITTI, rulând pe AWS cu 4 GPU-uri. Utilizatorul a raportat valori inițiale ale funcției de loss extrem de ridicate (aproximativ 24 de milioane), care scad la câteva mii până la finalul celor 80 de epoci. Deși inițial s-a suspectat o problemă de dimensionare a imaginilor, s-a confirmat că aceasta nu era cauza principală.

Acest scenariu subliniază importanța înțelegerii parametrilor de configurare a antrenamentului. O valoare mare a loss-ului la începutul antrenamentului este adesea normală, deoarece modelul pornește de la ponderi inițializate aleatoriu și face predicții foarte slabe. Cheia este modul în care această valoare scade pe parcursul epocilor, indicând că modelul învață. O scădere de la milioane la mii, chiar dacă inițial pare dramatică, sugerează că modelul converge.
Detalii de Configurație YOLOv4 (ResNet18):
Configurația implicită utilizată în acest caz oferă o privire detaliată asupra parametrilor care influențează antrenamentul:
| Parametru | Valoare/Descriere | Rol |
|---|---|---|
random_seed | 42 | Asigură reproductibilitatea antrenamentului. |
big_anchor_shape | (114.94, 60.67), etc. | Dimensiunile ancorelor predefinite pentru detecția obiectelor mari. |
mid_anchor_shape | (42.99, 31.91), etc. | Dimensiunile ancorelor predefinite pentru detecția obiectelor de mărime medie. |
small_anchor_shape | (15.60, 13.88), etc. | Dimensiunile ancorelor predefinite pentru detecția obiectelor mici. |
box_matching_iou | 0.25 | Pragul IoU pentru potrivirea ancorelor cu adevărul fundamental. |
loss_loc_weight | 0.8 | Ponderea componentei de localizare (bounding box) a funcției de loss. |
loss_neg_obj_weights | 100.0 | Ponderea pentru prezicerea incorectă a non-obiectelor. |
loss_class_weights | 0.5 | Ponderea componentei de clasificare a funcției de loss. |
label_smoothing | 0.0 | O tehnică pentru a preveni supra-încrederea modelului. |
batch_size_per_gpu | 8 | Numărul de imagini procesate per GPU într-un singur pas. |
num_epochs | 80 | Numărul total de iterații complete asupra setului de date. |
learning_rate | soft_start_cosine_annealing (min 1e-7, max 1e-4) | Strategia de ajustare a ratei de învățare pe parcursul antrenamentului. |
optimizer | adam | Algoritmul de optimizare utilizat pentru actualizarea ponderilor modelului. |
augmentation_config | hue, saturation, exposure, horizontal_flip, jitter, mosaic_prob | Tehnici de mărire a datelor pentru a îmbunătăți robustețea modelului. |
output_width, output_height | 1248, 384 | Dimensiunile de ieșire ale imaginii după augmentare. |
target_class_mapping | car->car, pedestrian->pedestrian, van->car, etc. | Maparea claselor din setul de date la clasele țintă ale modelului. |
Această configurație detaliază modul în care modelul este pregătit să învețe. Parametrii precum ratele de învățare, ponderile loss-ului și tehnicile de augmentare joacă un rol crucial în stabilizarea antrenamentului și în atingerea unei performanțe optime. Chiar și cu valori inițiale mari ale funcției de loss, o configurație bine echilibrată și un număr suficient de epoci pot duce la o convergență reușită.
Întrebări Frecvente despre Dimensionarea Imaginilor în YOLO
De ce trebuie ca dimensiunile imaginilor să fie multipli de 32?
Această cerință este impusă de arhitectura rețelei neuronale YOLO. Straturile convoluționale și de pooling din "backbone"-ul modelului reduc progresiv dimensiunea spațială a hărților de caracteristici. Stride-ul maxim al acestor operații este 32. Pentru ca operațiile să se încheie corect și să producă hărți de ieșire coerente fără erori de dimensiune, dimensiunile de intrare (lățimea și înălțimea) trebuie să fie divizibile exact cu acest stride maxim. Altfel, se pot produce erori de "mismatch" dimensional sau o pierdere neintenționată de informație.

Ce este "letterboxing" și de ce este folosit?
"Letterboxing" este o tehnică de preprocesare a imaginilor utilizată pentru a redimensiona imagini de diferite rapoarte de aspect la o dimensiune țintă fixă, menținând în același timp raportul de aspect original al imaginii. Acest lucru se realizează prin redimensionarea imaginii la cea mai mare dimensiune posibilă care se încadrează în dimensiunea țintă fără a distorsiona raportul de aspect și apoi prin adăugarea de bare de "padding" (de obicei negre) pe laturile rămase goale. Este folosit în special în timpul antrenamentului pentru a asigura că toate imaginile dintr-un batch au exact aceeași formă, ceea ce este esențial pentru procesarea paralelă pe GPU.
Pot folosi imagini de dimensiuni diferite în timpul antrenamentului YOLO?
Nu, nu direct. În timpul fazei de antrenament, pentru a forma mini-batch-uri și a le alimenta eficient în rețeaua neuronală, toate imaginile dintr-un batch trebuie să aibă aceeași dimensiune. Acesta este motivul pentru care se aplică tehnici precum "letterboxing" și se specifică o dimensiune fixă (imgsz) pentru antrenament. Imaginile originale sunt transformate la această dimensiune uniformă.
Pot folosi imagini de dimensiuni diferite în timpul predicției YOLO?
Da, în general, versiunile moderne de YOLO (de la v3 în sus) pot gestiona imagini de dimensiuni diferite în timpul predicției, atâta timp cât ambele laturi sunt multipli de 32. Acest lucru este posibil deoarece, în faza de predicție, imaginile sunt adesea procesate individual sau în batch-uri mici care nu necesită o formă uniformă strictă. Modelul va redimensiona automat imaginea, ajustând laturile pentru a menține raportul de aspect și a se asigura că sunt multipli de 32, fără a adăuga neapărat padding pentru a obține o formă pătrată.

Cum afectează parametrul imgsz performanța modelului YOLO?
Parametrul imgsz (dimensiunea imaginii) are un impact semnificativ asupra performanței și acurateței modelului YOLO. O valoare mai mare pentru imgsz (de exemplu, 640x640 sau 1248x384) înseamnă că modelul procesează o imagine cu mai multe detalii, ceea ce poate duce la o acuratețe mai bună, mai ales pentru detectarea obiectelor mici. Cu toate acestea, o dimensiune mai mare a imaginii crește și cerințele computaționale (memorie GPU, timp de procesare), ceea ce poate încetini antrenamentul și inferența. O valoare mai mică a imgsz va fi mai rapidă, dar poate reduce acuratețea. Alegerea optimă depinde de resursele hardware disponibile și de cerințele specifice ale aplicației.
În concluzie, înțelegerea și aplicarea corectă a regulilor de dimensionare a imaginilor sunt esențiale pentru oricine lucrează cu modele YOLO. De la constrângerile impuse de arhitectura rețelei (multipli de 32) la strategiile de preprocesare precum "letterboxing", fiecare detaliu contribuie la eficiența și acuratețea sistemelor de detecție a obiectelor. Prin stăpânirea acestor concepte, puteți asigura că modelele dumneavoastră YOLO operează la potențialul lor maxim, indiferent de complexitatea datelor de intrare.
Dacă vrei să descoperi și alte articole similare cu Dimensiuni Imagini în YOLO: Ghid Complet, poți vizita categoria Fitness.
