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:
Xindica la versió del model (per exemple, 8 per a Yolo v8).Sizeindica la mida del model, que pot ser:n(nano),s(small),m(medium),l(large),x(extra large).ptindica 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ó.pto.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 | |
|---|---|
3. Detecció d'objectes en imatges
Per a fer una deteccio bàsica en una imatge, utilitza el mètode model.predict():
| Python | |
|---|---|
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.