Salta el contingut

2. Detecció d'objectes

1. Detecció

La detecció d'objectes és una tasca que consisteix a identificar la ubicació i la classe dels objectes en una imatge o flux de vídeo.

La sortida d'un detector d'objectes és un conjunt de caixes delimitadores, BB o Bounding Box que engloben els objectes detectats de la imatge, juntament amb les etiquetes de classe i les puntuacions de confiança per a cada caixa.

La detecció d'objectes és una bona opció quan cal identificar objectes d'interès en una escena, però no cal saber exactament on és l'objecte o la seva forma exacta.

2. Càrrega del model

Yolo ofereix diversos models preentrenats per a la detecció d'objectes. Els models solen tindre un nom del composat com segueix, yolovX_Size.pt, on:

  • X indica la versió del model (per exemple, 8 per a Yolo v8).
  • Size indica la mida del model, que pot ser:
  • n (nano),
  • s (small),
  • m (medium),
  • l (large),
  • x (extra large).
  • pt indica que és un model PyTorch.

Un model PyTorch és un model entrenat utilitzant la biblioteca PyTorch, que és una de les biblioteques més populars per a l'aprenentatge profund. Els models PyTorch es guarden en fitxers amb l'extensió .pt o .pth.

La càrrega del model seria com segueix. Si el model no està disponible localment, es descarregarà automàticament des del repositori d'Ultralytics.

Python
1
2
3
4
from ultralytics import YOLO

# Carrega un model preentrenat de Yolo per a la detecció d'objectes
model = YOLO("yolov8n.pt")  # Model petit i ràpid

3. Detecció d'objectes en imatges

Per a fer una deteccio bàsica en una imatge, utilitza el mètode model.predict():

Python
results = model.predict(source="path/to/image.jpg")

Anem a veure que conté l'objecte results. La variable results és una llista d'objectes Result, on cada objecte correspon a una imatge processada.

Cada objecte Result conté informació sobre les deteccions realitzades en la imatge, incloent les caixes delimitadores, les etiquetes de classe i les puntuacions de confiança. Destaquem:

  • names: Un diccionari que mapeja els IDs de classe als noms de les classes.
  • boxes: Un objecte que conté una col·leecció o llista de les caixes delimitadores detectades, les etiquetes. Per a cada boxe trobem:
  • Coordeenades de la caixa. Poden ser:

    • xyxy: Les coordenades de la caixa delimitadora en format (x1, y1, x2, y2). Son les coordenades de la cantonada superior esquerra (x1, y1) i la cantonada inferior dreta (x2, y2).
    • xyxyn: Les coordenades normalitzades de la caixa delimitadora en format (x1, y1, x2, y2). Son les coordenades de la cantonada superior esquerra (x1, y1) i la cantonada inferior dreta (x2, y2), totes normalitzades entre 0 i 1 respecte a les dimensions de la imatge.
    • xywh: Les coordenades de la caixa delimitadora en format (x, y, w, h). On (x, y) és el centre de la caixa, i w i h són l'amplada i l'alçada de la caixa.
    • xywhn: Les coordenades normalitzades de la caixa delimitadora en format (x, y, w, h). On (x, y) és el centre de la caixa, i w i h són l'amplada i l'alçada de la caixa, totes normalitzades entre 0 i 1 respecte a les dimensions de la imatge.

    Les coordenades com son arrays, hem d'accedir a elles com boxes.xyxy[0], boxes.xywh[0]etc.

  • cls: L'ID de la classe de l'objecte detectat. El nom està al diccionari names[cls].

  • conf: La puntuació de confiança de la detecció.

El mètode predict() també permet especificar diversos paràmetres per a controlar el procés de detecció, com el llindar de confiança, la mida de la imatge d'entrada, entre altres. Més concretament:

  • source: La ruta a la imatge o el directori d'imatges on es vol fer la detecció.
  • conf: El llindar de confiança per a filtrar les deteccions. Només es consideraran les deteccions amb una confiança superior a aquest valor.
  • iou: El llindar d'Intersecció sobre Unió (IoU) per a la supressió no màxima (NMS). Aquest paràmetre ajuda a eliminar les deteccions redundants. Això el que fa és que quan dos imatges destectades es superposen fa un càlcula a veeure el que tenen en comú i si aquest valor és més gran que el llindar d'IoU, es manté només la detecció amb la puntuació de confiança més alta:
  • 0 significa que no hi ha superposició.
  • 1 significa que les dues caixes estan completament superposades.
  • Donarem uns valors recomanats per a aquest paràmetre:
  • Llindar massa baix (ex: 0.1): El model és molt agressiu netejant. Si hi ha dos gossos superposats, el model pensarà que són el mateix i n'esborrarà un. Perds objectes junts o molt junts.
  • Llindar massa alt (ex: 0.9): El model és molt permissiu. Si hi ha dues caixes pel mateix gos lleugerament desplaçades, les deixarà totes dues. Tens duplicats.
  • imgsz: La mida a la qual es redimensionarà la imatge d'entrada abans de la detecció. Això pot afectar la velocitat i la precisió de la detecció.

Més informació sobre els paràmetres del mètode predict() es pot trobar a la documentació oficial.