Is yolov8 a good tool to train a model on custom data?

Antrenează-ți Modelul YOLOv8 Personalizat

24/10/2023

Rating: 4.43 (998 votes)

În lumea în continuă evoluție a inteligenței artificiale și a viziunii computerizate, detectarea obiectelor joacă un rol fundamental. De la mașini autonome și sisteme de supraveghere inteligentă, până la aplicații medicale și de producție, capacitatea de a identifica și localiza obiecte în imagini și videoclipuri este crucială. Printre cele mai avansate și eficiente arhitecturi de detectare a obiectelor se numără familia YOLO (You Only Look Once), iar YOLOv8 reprezintă una dintre cele mai recente și performante iterații. Deși modelele pre-antrenate sunt adesea disponibile, adevărata putere a YOLOv8 se dezvăluie atunci când îl antrenați cu date personalizate, adaptate nevoilor specifice ale proiectului dumneavoastră. Acest proces, deși meticulos, deschide uși către soluții inovatoare și extrem de precise.

How do I train a Yolo model?

Antrenarea unui model YOLOv8 personalizat nu este doar despre rularea unui script; este o călătorie care implică o înțelegere profundă a datelor, o pregătire riguroasă și o optimizare continuă. Fie că doriți să detectați specii rare de animale, defecte minuscule pe o linie de producție, sau obiecte specifice într-un mediu complex, pașii pe care îi vom detalia în acest ghid vă vor echipa cu cunoștințele necesare pentru a naviga cu succes prin acest proces. Vom parcurge fiecare etapă, de la colectarea și etichetarea imaginilor, până la antrenarea efectivă a modelului și evaluarea performanței sale, asigurându-vă că veți obține un model robust și de încredere.

Cuprins

De ce să Antrenezi un Model YOLOv8 Personalizat?

Modelele YOLOv8 pre-antrenate sunt excelente pentru sarcini de detectare generală, cum ar fi identificarea persoanelor, mașinilor sau animalelor de companie, deoarece au fost antrenate pe seturi de date vaste și diverse precum COCO. Totuși, dacă proiectul dumneavoastră implică detectarea unor obiecte foarte specifice, rare sau care apar în contexte neobișnuite, un model generic nu va fi suficient. Antrenarea personalizată vă permite să:

  • Adaptați Modelul: Să detectați obiecte unice care nu fac parte din categoriile standard (ex: un anumit tip de unelte, insecte specifice, tipuri de celule).
  • Îmbunătățiți Precizia: Să obțineți o precizie mult mai mare pentru clasele de obiecte relevante pentru dumneavoastră, chiar și în condiții dificile (iluminare slabă, ocluzii, unghiuri neobișnuite).
  • Reduceți Fals-Pozitivele/Negativele: Să minimizați erorile specifice domeniului dumneavoastră de aplicare.
  • Optimizați Performanța: Să creați un model mai eficient pentru resursele disponibile, prin concentrarea pe datele relevante.

Pasul 1: Colectarea și Pregătirea Datelor – Fundamentul Succesului

Calitatea și cantitatea datelor sunt, fără îndoială, cei mai importanți factori care influențează performanța finală a modelului dumneavoastră. Un model excepțional antrenat pe date de slabă calitate va eșua, în timp ce un model mediocru antrenat pe date excelente poate produce rezultate surprinzătoare.

Identificarea Claselor de Obiecte

Primul pas este să definiți clar ce obiecte doriți să detectați. Faceți o listă detaliată a fiecărei clase. De exemplu, dacă construiți un sistem pentru un depozit, clasele ar putea fi: 'cutie mare', 'cutie mică', 'palet', 'stivuitor'. Asigurați-vă că aceste clase sunt distincte și că nu există ambiguitate între ele.

Colectarea Setului de Date

Acum începe munca de detectiv. Colectați imagini și videoclipuri care conțin obiectele pe care doriți să le detectați. Este crucial ca acest set de date să fie cât mai divers posibil. Gândiți-vă la:

  • Variații de Iluminare: Imagini la lumina zilei, pe înserat, pe întuneric, cu umbre puternice.
  • Variații de Unghi și Perspectivă: Obiecte fotografiate din față, lateral, de sus, de jos.
  • Variații de Dimensiune: Obiecte care apar mici în imagine (departe) și mari (aproape).
  • Variații de Context: Obiecte în diferite medii (interior, exterior, pe fundaluri aglomerate sau simple).
  • Ocluzii: Imagini cu obiecte parțial blocate de alte obiecte.
  • Deformări: Obiecte ușor deformate sau comprimate, dacă este relevant.

Numărul de imagini necesare variază, dar pentru un model rezonabil, ar trebui să țintiți spre cel puțin câteva sute de imagini pe clasă, ideal mii, mai ales pentru clasele dificile. Cu cât aveți mai multe exemple diverse, cu atât modelul va generaliza mai bine.

Pasul 2: Anotarea Imaginilor – Etichetarea Precisă

Odată ce ați colectat imaginile, trebuie să spuneți modelului unde se află fiecare obiect de interes în fiecare imagine. Acest proces se numește anotare sau etichetare și implică desenarea unor casete de delimitare (bounding boxes) în jurul fiecărui obiect și atribuirea unei etichete de clasă.

Instrumente de Anotare

Există mai multe instrumente excelente pentru anotare. Unele dintre cele mai populare includ:

  • LabelImg: Un instrument desktop gratuit și open-source, foarte simplu de utilizat pentru casete de delimitare.
  • Roboflow: O platformă online care oferă instrumente de anotare, gestionare a datelor, preprocesare și augmentare, toate într-un singur loc. Este ideală pentru proiecte mari și colaborare.
  • Labelme: Un alt instrument open-source care suportă nu doar casete de delimitare, ci și segmente poligonale și puncte cheie.

Precizia Anotării

Anotarea precisă este absolut crucială. Orice eroare în anotare (casete prea mari, prea mici, greșit poziționate, etichete greșite) va fi învățată de model și va duce la performanțe slabe. Asigurați-vă că:

  • Casetele de delimitare acoperă întregul obiect, dar nu includ prea mult din fundal.
  • Fiecare obiect de interes este etichetat.
  • Etichetele de clasă sunt consistente (de exemplu, nu folosiți 'cutie' și 'cutie_mare' pentru aceeași clasă).
  • Obiectele parțial ocluzate sunt etichetate dacă o parte semnificativă este vizibilă.

Formatul Anotărilor

YOLOv8 utilizează un format specific pentru anotări: un fișier `.txt` pentru fiecare imagine. Fiecare rând din acest fișier reprezintă un obiect detectat și conține:

[ID_clasa] [centru_x] [centru_y] [lățime] [înălțime]

Unde toate valorile sunt normalizate (între 0 și 1) în raport cu lățimea și înălțimea imaginii. Majoritatea instrumentelor de anotare pot exporta direct în acest format.

Pasul 3: Preprocesarea și Augmentarea Datelor – Crearea unui Model Robust

După anotare, datele trebuie pregătite pentru antrenament. Aceasta implică de obicei împărțirea setului de date și, foarte important, augmentarea datelor.

Împărțirea Setului de Date

Setul dumneavoastră de date anotate trebuie împărțit în trei subseturi:

  • Antrenament (Training Set): Aproximativ 70-80% din date. Modelul învață din aceste imagini.
  • Validare (Validation Set): Aproximativ 10-15% din date. Folosit pentru a monitoriza performanța modelului în timpul antrenamentului și pentru a ajusta hiperparametrii. Aceste imagini nu sunt văzute de model în timpul învățării.
  • Test (Test Set): Aproximativ 10-15% din date. Folosit pentru a evalua performanța finală a modelului după antrenament. Aceste imagini nu sunt folosite deloc în timpul antrenamentului sau validării.

Asigurați-vă că distribuția claselor este relativ similară în toate cele trei seturi.

Augmentarea Datelor

Augmentarea datelor este o tehnică esențială pentru a crește diversitatea setului de date de antrenament fără a colecta noi imagini. Aceasta ajută modelul să devină mai robust și să generalizeze mai bine la date nevăzute. Tehnicile comune de augmentare includ:

Tehnică de AugmentareDescriereBeneficiu
RotireRotirea imaginii cu un anumit unghi.Modelul învață să recunoască obiecte la diferite orientări.
Răsturnare (Flip)Răsturnarea orizontală sau verticală a imaginii.Utila pentru obiecte simetrice sau pentru a dubla setul de date.
Scalare (Zoom)Mărirea sau micșorarea imaginii.Ajută modelul să detecteze obiecte de diferite dimensiuni.
Modificarea Luminozității/ContrastuluiAjustarea luminozității sau contrastului.Îmbunătățește rezistența la variațiile de iluminare.
Adăugarea de ZgomotIntroducerea de zgomot aleatoriu în imagine.Crește rezistența la imperfecțiunile senzorilor.
Tăiere aleatorie (Random Crop)Extragerea unei porțiuni aleatorii din imagine.Ajută modelul să se concentreze pe părți ale obiectului și pe context.
Mozaic (Mosaic)Combinarea a 4 imagini într-una singură.Mărește diversitatea contextului și a numărului de obiecte pe o singură imagine.

YOLOv8 integrează multe dintre aceste tehnici de augmentare direct în procesul său de antrenament, ceea ce simplifică mult lucrurile. Cu toate acestea, înțelegerea modului în care funcționează este crucială.

Pasul 4: Configurarea Mediului de Antrenament

Pentru a antrena un model YOLOv8, veți avea nevoie de un mediu de dezvoltare configurat corespunzător.

Cerințe Hardware

Antrenarea modelelor de deep learning, în special cele de detectare a obiectelor, este intensivă din punct de vedere computațional și necesită un GPU (Unitate de Procesare Grafică) puternic. Cu cât GPU-ul este mai performant și are mai multă memorie VRAM, cu atât antrenamentul va fi mai rapid. Un GPU NVIDIA cu suport CUDA este aproape obligatoriu.

Instalarea Dependențelor

YOLOv8 este construit pe PyTorch și este disponibil prin biblioteca Ultralytics. Pașii de instalare sunt relativ simpli:

pip install ultralytics

Asigurați-vă că aveți un mediu Python (ideal Python 3.8+) și PyTorch instalat cu suport CUDA. Puteți verifica instalarea PyTorch cu import torch; print(torch.cuda.is_available()).

How to improve Yolo model performance?

Pasul 5: Configurarea Antrenamentului – Fișierul YAML

YOLOv8 utilizează fișiere YAML pentru a configura setul de date și parametrii de antrenament.

Fișierul de Configurare a Datelor (de exemplu, custom_dataset.yaml)

Acest fișier definește căile către imaginile și etichetele dumneavoastră, precum și numele claselor:

path: /calea/catre/folderul/dataset-ului
train: images/train
val: images/val
test: images/test

nc: 3 # Numărul de clase (de exemplu, 3 pentru 'cutie mare', 'cutie mică', 'palet')
names: ['cutie mare', 'cutie mica', 'palet'] # Numele claselor, în ordinea ID-urilor

Asigurați-vă că structura folderelor dumneavoastră corespunde cu aceste căi (de exemplu, /calea/catre/folderul/dataset-ului/images/train și /calea/catre/folderul/dataset-ului/labels/train).

Parametrii de Antrenament

Aceștia sunt parametrii pe care îi veți ajusta pentru a optimiza antrenamentul:

  • model: Calea către fișierul de configurare al modelului YOLOv8 (ex: yolov8n.pt pentru nano, yolov8s.pt pentru small etc.). Puteți începe cu un model pre-antrenat pentru a beneficia de transfer learning.
  • data: Calea către fișierul YAML al setului de date (custom_dataset.yaml).
  • epochs: Numărul de epoci (treceri complete prin întregul set de date de antrenament). Începeți cu 100-300 și ajustați.
  • imgsz: Dimensiunea imaginilor la care vor fi redimensionate pentru antrenament (ex: 640).
  • batch: Dimensiunea lotului (numărul de imagini procesate simultan). Alegeți o valoare care se potrivește memoriei VRAM a GPU-ului dumneavoastră (ex: 16, 32, 64).
  • patience: Numărul de epoci de așteptat fără îmbunătățiri înainte de oprirea antrenamentului (Early Stopping).
  • optimizer: Tipul de optimizator (ex: SGD, AdamW).
  • lr0: Rata de învățare inițială.
  • device: Specificați dispozitivul de antrenament (0 pentru primul GPU, 0,1 pentru mai multe GPU-uri, cpu pentru CPU - nerecomandat pentru antrenament).

Pasul 6: Lansarea Antrenamentului – Monitorizarea Progresului

Cu toate setările la locul lor, sunteți gata să lansați antrenamentul!

Comanda de Antrenament

Antrenamentul se lansează dintr-un terminal folosind comanda yolo din biblioteca Ultralytics:

yolo train model=yolov8n.pt data=custom_dataset.yaml epochs=100 imgsz=640 batch=16 name=yolov8_custom_v1

Această comandă va începe procesul de antrenament. Parametrul name este util pentru a organiza rezultatele antrenamentelor, creând un folder separat în runs/detect/.

Monitorizarea Progresului

În timpul antrenamentului, consola va afișa diverse metrici. Cele mai importante sunt:

  • Box Loss, Cls Loss, Dfl Loss: Acestea sunt funcțiile de pierdere care măsoară cât de bine prezice modelul casetele de delimitare, clasele și distribuția de calitate a predicțiilor. Valorile ar trebui să scadă constant.
  • mAP50: Mean Average Precision la un prag de IOU (Intersection Over Union) de 0.50. Este o măsură cheie a preciziei globale a modelului.
  • mAP50-95: Mean Average Precision calculată pe o gamă de praguri IOU de la 0.50 la 0.95. Oferă o imagine mai completă a performanței modelului, în special în ceea ce privește precizia localizării.
  • Precision și Recall: Acestea sunt metrici standard care indică rata de adevărați pozitivi și fals-pozitivi/negativi.

Ultralytics generează, de asemenea, grafice de progres și imagini de validare în folderul de rezultate (runs/detect/nume_antrenament), pe care le puteți inspecta pentru a înțelege cum evoluează modelul.

Pasul 7: Evaluarea Modelului – Înțelegerea Performanței

După ce antrenamentul s-a încheiat (fie prin atingerea numărului maxim de epoci, fie prin early stopping), este esențial să evaluați performanța finală a modelului pe setul de test. Folosiți comanda val:

yolo val model=runs/detect/yolov8_custom_v1/weights/best.pt data=custom_dataset.yaml

Aceasta va rula modelul pe setul de validare (sau pe setul de test dacă îl specificați explicit) și va afișa metricile finale. Acordați o atenție deosebită mAP50 și mAP50-95. De asemenea, puteți rula inferențe pe imagini noi pentru a vizualiza vizual predicțiile.

Pasul 8: Optimizarea și Implementarea – Rafinarea și Utilizarea

Rareori primul antrenament produce un model perfect. Procesul este iterativ.

Tehnici de Optimizare

  • Ajustarea Hiperparametrilor: Experimentați cu rata de învățare, dimensiunea lotului, numărul de epoci, optimizatorul.
  • Mai Multă Dată: Dacă modelul nu generalizează bine, cel mai bun remediu este adesea adăugarea mai multor date diverse.
  • Curățarea Datelor: Verificați anotările. Chiar și câteva etichetări greșite pot afecta performanța.
  • Transfer Learning: Dacă ați început de la zero, încercați să inițializați modelul cu greutăți pre-antrenate (de exemplu, yolov8n.pt).
  • Modele Mai Mari/Mici: Dacă modelul este sub-antrenat, încercați o variantă mai mare (ex: yolov8m.pt). Dacă este supra-antrenat sau prea lent, încercați una mai mică (ex: yolov8n.pt).

Implementarea Modelului

Odată ce sunteți mulțumit de performanță, puteți exporta modelul în diverse formate pentru implementare:

yolo export model=runs/detect/yolov8_custom_v1/weights/best.pt format=onnx

Formate comune includ ONNX, OpenVINO, TensorRT, sau chiar TFLite pentru dispozitive mobile. Acest lucru permite integrarea modelului în aplicații web, mobile, desktop sau sisteme embedded.

Întrebări Frecvente (FAQ)

Cât timp durează antrenamentul unui model YOLOv8 personalizat?
Durata variază enorm în funcție de dimensiunea setului de date, complexitatea modelului (nano, small, medium, large), numărul de epoci și, cel mai important, puterea GPU-ului dumneavoastră. Poate dura de la câteva ore la câteva zile sau chiar săptămâni.

De ce este importantă augmentarea datelor?
Augmentarea datelor ajută la creșterea diversității setului de date de antrenament fără a colecta fizic noi imagini. Acest lucru face modelul mai robust, mai puțin predispus la supra-antrenare și capabil să generalizeze mai bine la condiții variate din lumea reală (schimbări de lumină, unghiuri, dimensiuni).

Ce fac dacă modelul meu nu este precis?
Verificați calitatea și cantitatea datelor. Este cea mai frecventă cauză. Asigurați-vă că anotările sunt precise. Încercați să ajustați hiperparametrii (rata de învățare, batch size, epochs). Considerați adăugarea mai multor date diverse sau utilizarea unui model pre-antrenat mai mare.

Pot folosi CPU pentru antrenament?
Tehnic, da, dar este puternic nerecomandat pentru modelele de detectare a obiectelor. Antrenamentul pe CPU va fi extrem de lent, putând dura zile sau săptămâni pentru un antrenament care pe GPU ar dura ore. Un GPU NVIDIA cu suport CUDA este esențial.

Cum aleg dimensiunea imaginii (imgsz)?
O dimensiune mai mare a imaginii (ex: 1280) poate duce la o precizie mai bună, deoarece modelul vede mai multe detalii, dar necesită mai multă memorie VRAM și va încetini antrenamentul. O dimensiune mai mică (ex: 320, 640) este mai rapidă și necesită mai puține resurse, dar poate reduce precizia, în special pentru obiectele mici.

Concluzie

Antrenarea unui model YOLOv8 personalizat este un proces complex, dar incredibil de satisfăcător. Prin urmarea acestor pași – de la colectarea și anotarea riguroasă a datelor, până la configurarea inteligentă a antrenamentului și evaluarea atentă – veți fi bine echipați pentru a crea soluții de detectare a obiectelor de înaltă performanță. Amintiți-vă că răbdarea și iterarea sunt cheia. Fiecare proiect este unic, iar ajustările fine bazate pe observațiile dumneavoastră vor duce la rezultate remarcabile. Acum, sunteți pregătiți să dați viață viziunii dumneavoastră și să construiți modele YOLOv8 care depășesc așteptările!

Dacă vrei să descoperi și alte articole similare cu Antrenează-ți Modelul YOLOv8 Personalizat, poți vizita categoria Fitness.

Go up