Évaluer les modèles de reconnaissance d'objets

Deep Learning pour les images avec PyTorch

Michal Oleszak

Machine Learning Engineer

Classification et localisation

localisation d'objets

  • Sortie 1 : classification (p. ex., chat)
Deep Learning pour les images avec PyTorch

Classification et localisation

localisation d'objets

  • Sortie 1 : classification (p. ex., chat)
  • Sortie 2 : régression de boîte englobante [x1, y1, x2, y2]
Deep Learning pour les images avec PyTorch

Intersection over union (IoU)

  • Objet d'intérêt : objet à détecter dans l'image (p. ex., chien)
  • Boîte vérité terrain : boîte englobante exacte autour de l'objet d'intérêt
  • Intersection over Union : mesure du chevauchement entre deux boîtes

jaccard

  • IoU = aire d'intersection / aire de l'union
    • IoU = 0 aucun chevauchement, IoU = 1 chevauchement parfait
    • IoU > 0,5 : bonne prédiction
Deep Learning pour les images avec PyTorch

IoU dans PyTorch

bbox1 = [50, 50, 150, 150]
bbox2 = [100, 100, 200, 200]


bbox1 = torch.tensor(bbox1).unsqueeze(0) bbox2 = torch.tensor(bbox2).unsqueeze(0)
from torchvision.ops import box_iou

iou = box_iou(bbox1, bbox2)
print(iou)
tensor([[0.1429]])
  • Deux ensembles de boîtes (x1, y1, x2, y2)

ensemble de 2 boîtes

  • Convertir les vecteurs en tenseurs 2D
  • Calculer l'IoU
Deep Learning pour les images avec PyTorch

Prédire des boîtes englobantes

model.eval()
with torch.no_grad():

output = model(input_image)
print(output)
[{'boxes': tensor([[ 42.8553, 271.9481, 180.6003, 346.7082],
                  [191.6016,  80.4759, 247.8009, 387.5475], ....),
'scores': tensor([1.0000, 1.0000, 0.9998, ... ]),
'labels': tensor([18,  1, 20, 18, 18, 18 ...])
}]
boxes = output[0]["boxes"]

scores = output[0]["scores"]
Deep Learning pour les images avec PyTorch

Suppression non maximale (NMS)

plusieurs boîtes

Deep Learning pour les images avec PyTorch

Suppression non maximale (NMS)

plusieurs boîtes

Suppression non maximale : technique courante pour retenir les boîtes englobantes les plus pertinentes

  • Non maximale : écarter les boîtes avec une faible confiance de contenir un objet

  • Suppression : écarter les boîtes avec une IoU faible

Deep Learning pour les images avec PyTorch

Suppression non maximale dans PyTorch

from torchvision.ops import nms


box_indices = nms( boxes=boxes, scores=scores, iou_threshold=0.5, ) print(box_indices)
tensor([ 0,   1,   2,   8])
filtered_boxes = boxes[box_indices]
  • boxes : tenseurs des coordonnées de boîtes englobantes de forme [N, 4]

  • scores : tenseur des scores de confiance pour chaque boîte, de forme [N]

  • iou_threshold : seuil entre 0,0 et 1,0

  • Sortie : indices des boîtes filtrées

Deep Learning pour les images avec PyTorch

Passons à la pratique !

Deep Learning pour les images avec PyTorch

Preparing Video For Download...