Ocena modeli rozpoznawania obiektów

Głębokie uczenie dla obrazów z PyTorch

Michal Oleszak

Machine Learning Engineer

Klasyfikacja i lokalizacja

lokalizacja obiektu

  • Wyjście 1: Klasyfikacja (np. kot)
Głębokie uczenie dla obrazów z PyTorch

Klasyfikacja i lokalizacja

lokalizacja obiektu

  • Wyjście 1: Klasyfikacja (np. kot)
  • Wyjście 2: Regresja ramki ograniczającej [x1, y1, x2, y2]
Głębokie uczenie dla obrazów z PyTorch

Intersection over Union (IoU)

  • Obiekt zainteresowania: obiekt na obrazie, który chcemy wykryć (np. pies)
  • Ramka rzeczywista: dokładna ramka ograniczająca wokół obiektu zainteresowania
  • Intersection over Union: metryka mierząca nakładanie się dwóch ramek

jaccard

  • IoU = Pole przecięcia / Pole sumy
    • IoU = 0 brak nakładania, IoU = 1 idealne pokrycie
    • IoU > 0,5 to dobra predykcja
Głębokie uczenie dla obrazów z PyTorch

IoU w 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]])
  • Dwa zbiory ramek (x1, y1, x2, y2)

dwie ramki

  • Konwersja wektorów do tensorów 2D
  • Obliczenie IoU
Głębokie uczenie dla obrazów z PyTorch

Przewidywanie ramek ograniczających

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"]
Głębokie uczenie dla obrazów z PyTorch

Tłumienie niemaksymalne (NMS)

wiele ramek

Głębokie uczenie dla obrazów z PyTorch

Tłumienie niemaksymalne (NMS)

wiele ramek

Tłumienie niemaksymalne: technika wyboru najbardziej trafnych ramek ograniczających

  • Niemaksymalne: odrzucanie ramek o niskim wskaźniku pewności wykrycia obiektu

  • Tłumienie: odrzucanie ramek o niskim IoU

Głębokie uczenie dla obrazów z PyTorch

Tłumienie niemaksymalne w 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: tensory ze współrzędnymi ramek ograniczających o kształcie [N, 4]

  • Scores: tensor z poziomem pewności dla każdej ramki o kształcie [N]

  • iou_threshold: próg z zakresu 0,0–1,0

  • Wyjście: indeksy przefiltrowanych ramek ograniczających

Głębokie uczenie dla obrazów z PyTorch

Czas na ćwiczenia!

Głębokie uczenie dla obrazów z PyTorch

Preparing Video For Download...