Objekterkennung
Boxen statt Etiketten: wie ein Modell mehrere Objekte gleichzeitig findet, was IoU und mAP bedeuten und warum NMS über die Zählung entscheidet.
Die Idee
Eine Klassifikation sagt „auf diesem Bild ist eine Palette". Eine Erkennung sagt „hier, hier und hier ist je eine Palette" und zeichnet Rechtecke darum. Damit lässt sich zählen, positionieren und prüfen, ob etwas fehlt.
Wozu es gut ist
- Bestand in einem Lager zählen.
- Fehlende Teile in einer Baugruppe finden.
- Schutzausrüstung auf einer Baustelle prüfen.
- Regalbestand gegen ein Planogramm abgleichen.
Die Nachverarbeitung
Ein Erkennungsmodell gibt zunächst tausende Kandidatenboxen aus. Zwei Regler machen daraus eine Zählung:
| Regler | Wirkung wenn zu niedrig | Wirkung wenn zu hoch |
|---|---|---|
| Konfidenzschwelle | Viele Fehlalarme | Objekte werden übersehen |
| NMS-IoU-Schwelle | Ein Objekt wird mehrfach gezählt | Nahe beieinanderstehende Objekte verschmelzen |
import numpy as np
def iou(a, b):
"""a, b als (x1, y1, x2, y2)."""
x1, y1 = max(a[0], b[0]), max(a[1], b[1])
x2, y2 = min(a[2], b[2]), min(a[3], b[3])
schnitt = max(0, x2 - x1) * max(0, y2 - y1)
fl_a = (a[2] - a[0]) * (a[3] - a[1])
fl_b = (b[2] - b[0]) * (b[3] - b[1])
return schnitt / (fl_a + fl_b - schnitt)
def nms(boxen, scores, schwelle=0.5):
ordnung = np.argsort(scores)[::-1]
behalten = []
while len(ordnung):
i = ordnung[0]; behalten.append(i)
# Alle Boxen verwerfen, die zu stark mit der besten ueberlappen.
ordnung = np.array([j for j in ordnung[1:]
if iou(boxen[i], boxen[j]) < schwelle])
return behalten- Beide Schwellwerte gehören in die Betriebsdokumentation, weil sie das Ergebnis ändern.
- Bei dicht stehenden Objekten Soft-NMS statt hartem NMS prüfen.
- Die Konfidenzschwelle an der Kostenrechnung ausrichten, nicht an einem Standardwert von 0,25.
Die Formeln
Durchgerechnet: A = (0,0,100,100), B = (50,50,150,150). Der Schnitt ist
50 × 50 = 2.500, die Flächen je 10.000, die Vereinigung
10.000 + 10.000 − 2.500 = 17.500. Also IoU = 2.500/17.500 = 0,143, trotz
deutlicher sichtbarer Überlappung weit unter der üblichen Schwelle von 0,5. Das
zeigt, wie streng das Maß ist.
Die Architekturfamilien
| Familie | Idee | Stärke |
|---|---|---|
| Zweistufig (Faster R-CNN) | Erst Vorschläge, dann Klassifikation | Höchste Genauigkeit, langsam |
| Einstufig (YOLO, SSD) | Boxen direkt aus dem Gitter | Echtzeitfähig |
| Ankerfrei (FCOS, CenterNet) | Mittelpunkt statt Ankerboxen | Weniger Hyperparameter |
| Transformerbasiert (DETR) | Menge von Abfragen, kein NMS | Elegant, datenhungrig |
Aufwand in der Praxis
Ein YOLO-Modell mittlerer Größe bei 640 × 640 benötigt rund 50 bis 80 GFLOPs je
Bild. Auf einer Karte mit effektiv 30 TFLOP/s in float16 sind das theoretisch
über 300 Bilder je Sekunde, praktisch je nach Vor- und Nachverarbeitung 60 bis
150. Für eine Kamera mit 25 Bildern je Sekunde reicht damit eine Karte für mehrere
Ströme gleichzeitig, siehe
Inferenz schneller machen.
Passende Kurse und Quellen
Hugging Face Computer-Vision-Kurs
Von der Bildvorverarbeitung über Faltungsnetze bis zu Vision Transformern, mit lauffähigen Beispielen zu Erkennung und Segmentierung.
Für Entwicklung mit Bilddaten; setzt Python voraus, liefert dafür lauffähige Beispiele.
You Only Look Once
Erkennung in einem einzigen Durchlauf statt in Vorschlägen und Prüfungen. Der Grund, warum Objekterkennung in Echtzeit möglich wurde.
Für Objekterkennung in Echtzeit; erklärt, warum sie überhaupt möglich wurde.