15 ausgewählte Computer-Vision-Interviewfragen, gruppiert nach Erfahrungsstufe. Nutzen Sie diese zur Überprüfung von Grundlagen, praktischen Abwägungen und dem produktionsrelevanten Denken auf Senior-Niveau.
1Was ist eine diskrete 2D-Faltung auf einem Bild, und wie hängt sie mit Kerneln, Filtern und Kreuzkorrelation zusammen?
Eine diskrete 2D-Faltung auf einem Bild ist eine lineare, räumliche Filteroperation, bei der eine Gewichtsmatrix (ein Kernel) über das Eingabebild gleitet. An jeder räumlichen Position berechnet sie ein elementweises Produkt zwischen den Kernel-Gewichten und dem überlappenden lokalen Bildsegment (rezeptives Feld) und summiert die Ergebnisse (oft wird ein Bias-Term hinzugefügt), um einen einzelnen Pixelwert in der Ausgabe-Feature-Map zu erzeugen. In der klassischen Mathematik und Signalverarbeitung beinhaltet die echte Faltung das Spiegeln (Drehen um 180 Grad) des Kernels horizontal und vertikal, bevor das gleitende Skalarprodukt berechnet wird:
$$(I * K)(i, j) = \sum_m \sum_n I(i - m, j - n) K(m, n)$$
Im Gegensatz dazu berechnet die Kreuzkorrelation das gleitende Skalarprodukt direkt, ohne den Kernel zu spiegeln:
$$(I \star K)(i, j) = \sum_m \sum_n I(i + m, j + n) K(m, n)$$
In Deep-Learning-Frameworks wie PyTorch und TensorFlow ist die Operation, die unter dem Namen „Faltung“ implementiert ist, tatsächlich eine Kreuzkorrelation. Da Kernel-Gewichte lernbare Parameter sind, die direkt über Backpropagation optimiert werden, lernt das Netzwerk einfach die entsprechend ausgerichteten Gewichte, wodurch das mathematische Kernel-Flipping während des Trainings und der Inferenz rechnerisch redundant wird.
2Wann verwenden Sie RGB, HSV, Lab, YCbCr oder Graustufen in einer Bildverarbeitungspipeline?
Wählen Sie eine Darstellung, die die benötigten Signale erhält und zur Vorverarbeitung im Training passt. Die Kanalreihenfolge Rot–Grün–Blau (RGB) ist für gelernte Modelle üblich; viele OpenCV-Programmierschnittstellen (APIs) verwenden dagegen Blau–Grün–Rot (BGR). Prüfen Sie die Kanalreihenfolge, statt eine Frameworkgarantie anzunehmen. Darstellungen aus Farbton, Sättigung und Helligkeitswert (HSV) beziehungsweise Helligkeit (HSL) erleichtern die Wahl von Farbschwellen, doch der Farbton ist nahe Sättigung null instabil und allgemein weder beleuchtungs- noch weißabgleichsinvariant. Der Lab-Farbraum der Internationalen Beleuchtungskommission (CIE) trennt Helligkeit von Gegenfarbkoordinaten und ist unter festgelegten Betrachtungs- und Referenzweißannahmen ungefähr wahrnehmungsgleichmäßig. Der euklidische Abstand Delta E 1976 ist nur eine Näherung der wahrgenommenen Farbdifferenz. YCbCr trennt das Helligkeitssignal Y′ von den Blau- und Rotdifferenzkanälen Cb und Cr und unterstützt in vielen Bild-/Videoformaten eine reduzierte Abtastung der Farbinformation. Koeffizienten, Wertebereiche und Transferfunktionen hängen vom Standard ab. Graustufen sind sinnvoll, wenn Farbe irrelevant ist; bei gleicher Präzision sinkt der rohe Kanalspeicher von drei auf einen Kanal. Das garantiert aber keine Verringerung der gesamten Modellberechnung um zwei Drittel. Erhalten Sie Farbe wenn sie Informationen über die Zielklasse trägt und prüfen Sie Skalierungs- und Konvertierungskonventionen.
import cv2
import numpy as np
# Sample image: saturated red under normal and shaded lighting
img_bgr = np.zeros((100, 100, 3), dtype=np.uint8)
img_bgr[:, :50] = [0, 0, 255] # Bright Red in BGR
img_bgr[:, 50:] = [0, 0, 120] # Shaded/Dark Red in BGR
# Convert to HSV (OpenCV H: 0-179, S: 0-255, V: 0-255)
img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
# Red Hue wraps around 0/180; track red with single Hue range [0, 10] & high saturation
lower_red = np.array([0, 100, 50])
upper_red = np.array([10, 255, 255])
mask_hsv = cv2.inRange(img_hsv, lower_red, upper_red)
print("HSV segmented pixels:", np.count_nonzero(mask_hsv), "out of", mask_hsv.size)
3Warum sind kanalweise Bildnormalisierung, Normalisierung pro Bild und konsistente Pixelskalierung in Computer-Vision-Systemen wichtig?
Verwenden Sie in Training und Inferenz denselben vom Modell erwarteten Pixelbereich, dieselbe Kanalreihenfolge und Normalisierung. Bei 8-Bit-Bildern bildet Division durch 255 nach [0,1] ab, zentriert aber nicht um null. Abbildung nach [−1,1] zentriert den Bereich, nicht unbedingt den Datenmittelwert. Bilder können andere Ganzzahlbittiefen oder Gleitkommawerte in physikalischen Einheiten verwenden. Große unskalierte Werte können Optimierung schlecht konditionieren, verursachen aber nicht zwangsläufig explodierende Gradienten. Kanalstandardisierung verwendet (x−mu_c)/sigma_c mit Trainingsstatistiken oder vorgeschriebenen Konstanten eines vortrainierten Modells. Mittelwert null und Varianz eins gelten für die Schätzverteilung, nicht jedes neue Bild oder jeden Datensatz. Ein Z-Score pro Bild nutzt dessen Mittelwert und Standardabweichung mit Schutz vor nahezu verschwindender Varianz. Min-Max-Skalierung ist eine andere Operation. InstanceNorm ist eine Netzwerkschicht, die typischerweise je Bild und Kanal über räumliche Dimensionen normalisiert, kein Synonym für beliebige bildweise Vorverarbeitung. Bildweise Normalisierung kann Helligkeits-/Kontrastvariation reduzieren, aber auch nützliche Informationen über absolute Intensitäten entfernen. Validieren Sie sie aufgabenspezifisch.
import torch
import torchvision.transforms as T
from PIL import Image
import numpy as np
# Create a mock uint8 RGB image
raw_img = Image.fromarray(np.random.randint(0, 256, (224, 224, 3), dtype=np.uint8))
# Standard transform pipeline:
# 1. ToTensor scales uint8 [0, 255] -> float32 [0.0, 1.0] and permutes HWC -> CHW
# 2. Normalize standardizes per-channel using dataset mean and std
preprocess = T.Compose([
T.ToTensor(),
T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
tensor_img = preprocess(raw_img)
print("Tensor shape:", tensor_img.shape)
print("Tensor dtype:", tensor_img.dtype)
print("Channel 0 min/max:", round(tensor_img[0].min().item(), 2), round(tensor_img[0].max().item(), 2))
4Wie fördern geometrische und photometrische Augmentierungen die Invarianz, und wie entscheiden Sie, ob eine Augmentierung Labels erhält?
Geometrische Augmentierungen (wie Rotation, Translation, Skalierung und Spiegelung) verändern die räumliche Koordinatenabbildung von Pixeln, während photometrische Augmentierungen (wie Helligkeit, Kontrast, Farbton-Jitter und Unschärfe) die Pixelintensität und Farbkanäle ändern, ohne die räumlichen Koordinaten zu modifizieren. Bei der Klassifikation setzen beide Kategorien das Modell realistischen Variationen aus und fördern so das Erlernen invarianter Repräsentationen, bei denen Vorhersagen trotz Änderungen in Pose, Blickwinkel oder Lichtverhältnissen stabil bleiben. Bei räumlichen Vorhersageaufgaben (Detektion und Segmentierung) erfordern geometrische Transformationen passende Transformationen für Ground-Truth-Boxen oder -Masken, um Äquivarianz zu erhalten. Die Entscheidung, ob eine Augmentierung Labels erhält, erfordert die Bewertung von Domänensemantik und physikalischen Annahmen. Eine Transformation ist Label-erhaltend, wenn das resultierende Bild eine plausible Instanz der ursprünglichen Zielklasse bleibt, ohne deren semantische Identität zu verändern. Zum Beispiel erhält horizontales Spiegeln die Identität für allgemeine Objekte (wie Autos oder Tiere), verändert jedoch die Identität oder invalidiert Zeichen in der optischen Zeichenerkennung (OCR) und der Ziffernklassifikation. Ähnlich ist eine vollständige 360-Grad-Rotation in der Histologie oder bei Satellitenbildern gültig, wo keine kanonische Ausrichtung existiert, aber unnatürlich beim autonomen Fahren, wo auf dem Kopf stehende Objekte physikalische Beschränkungen der realen Welt verletzen.
5Was sind Nächster-Nachbar-, bilineare, bikubische und Flächeninterpolation, und wie können Größenänderungen Aliasing oder Unschärfe verursachen?
Interpolationsmethoden schätzen Pixelintensitäten an kontinuierlichen Koordinaten, wenn auf ein neues diskretes Gitter resampelt wird:
- **Nächster-Nachbar-Interpolation:** Weist die Intensität des nächsten diskreten Pixels zu. Sie ist rechnerisch $O(1)$ und bewahrt exakte Originalwerte, erzeugt aber beim Hochskalieren (Upsampling) blockartige Artefakte und beim Herunterskalieren (Downsampling) stark gezackte Kanten.
- **Bilineare Interpolation:** Berechnet einen distanzgewichteten Durchschnitt der $2 \times 2$ (4 nächsten) Nachbarpixel unter Verwendung linearer Interpolation entlang beider Achsen, was sanfte Übergänge mit moderater Unschärfe ergibt.
- **Bikubische Interpolation:** Sampelt eine $4 \times 4$ (16 nächste) Nachbarschaft unter Verwendung kubischer Polynomkerne. Sie erfasst lokale Intensitätsgradienten und erzeugt schärfere Kanten und glattere Kurven als die bilineare Interpolation, kann aber Überschwingen/Ringing-Artefakte an scharfen Übergängen verursachen.
- **Flächeninterpolation (Area Interpolation):** Berechnet die fraktionelle Flächenüberlappung von Zielpixeln, die auf Quellpixel projiziert werden, und mittelt die zugrunde liegenden Quellintensitäten. Sie ist besonders effektiv für das Herunterskalieren ohne Moiré-Effekte.
**Mechanismen von Aliasing und Unschärfe:**
- **Aliasing** tritt beim Herunterskalieren auf, wenn hochfrequenter Inhalt die Nyquist-Frequenz ($f_s / 2$) der neuen Abtastrate ohne ausreichende Tiefpassfilterung überschreitet. Hochfrequenzen falten sich in niedrigere Frequenzbänder zurück, was zu falschen Mustern, Moiré und gezackten Kanten führt.
- **Unschärfe** tritt auf, wenn Interpolationskerne als tiefpassfilternde Glättungsfilter wirken, die legitime Hochfrequenzen dämpfen (z.B. bilineare Glättung), oder wenn hochfrequente Details beim Herunterskalieren gemittelt werden.
6Gegen welche realen visuellen Fehlermodi sollte ein Vision-System evaluiert werden, und wie verschieben diese die Eingabeverteilung?
Reale visuelle Fehlermodi fallen in mehrere Hauptkategorien: Umgebungsbedingungen (wenig Licht, direkte Blendung, Regen, Schnee, Nebel), Sensor- und optische Effekte (Bewegungsunschärfe, Unschärfe durch Defokussierung, Sensorrauschen bei hoher ISO-Empfindlichkeit, Rolling-Shutter-Verzerrung), Kompressions- und Übertragungsbeeinträchtigungen (JPEG (Joint Photographic Experts Group)-Blockbildung, Video-Bitraten-Drosselung, Downsampling) sowie semantische/räumliche Verschiebungen (teilweise Verdeckung, Abschneidung, Objektposen außerhalb der Trainingsverteilung).
Diese Fehlermodi verschieben die Eingabeverteilung auf mehreren Ebenen von den nominellen Trainingsdomänen weg. Auf Pixelebene verändern sie die Luminanz- und Chrominanz-Histogramme, zerstören den lokalen Kontrast, reduzieren das Signal-Rausch-Verhältnis (SNR) und führen künstliche Hochfrequenzartefakte oder Unschärfekerne ein. Auf struktureller und semantischer Ebene schwächen sie Kantenverläufe ab, verdecken wichtige visuelle Merkmale, verzerren Silhouetten und verbergen kritische Diagnosebereiche. Wenn Modelle, die mit sauberen Daten trainiert wurden, auf diese verschobenen Eingaben stoßen, aktivieren niederstufige Faltungs- oder Aufmerksamkeits-Merkmalsextraktoren nicht korrekt, was zu verpassten Detektionen, halluzinierten Fehlalarmen bei Rauschmustern und übertrieben selbstsicheren Fehlern führt.
7Wie stellen klassische Deskriptoren wie HOG (Histogram of Oriented Gradients) die Bildstruktur dar, und welche Einschränkungen haben sie im Vergleich zu gelernten CNN (Convolutional Neural Network)-Features?
Das Histogram of Oriented Gradients (HOG) ist ein klassischer handgefertigter Feature-Deskriptor, der entwickelt wurde, um lokale Objektform und Aussehen durch die Verteilung von Intensitätsgradientenorientierungen zu erfassen. Die HOG-Berechnungspipeline umfasst:
(1) Die Berechnung horizontaler und vertikaler Bildgradienten (z.B. mit 1D-Ableitungsfiltern [-1, 0, 1]), um Gradientenbetrag und -orientierung zu erhalten.
(2) Die Aufteilung des Bildes in kleine räumliche Regionen, sogenannte 'Zellen' (z.B. 8x8 Pixel), und die Akkumulation von 1D-Histogrammen der Gradientenorientierungen, gewichtet nach dem Gradientenbetrag.
(3) Die Gruppierung benachbarter Zellen zu größeren überlappenden 'Blöcken' (z.B. 2x2 Zellen) und die Normalisierung der Block-Feature-Vektoren (mittels L2-Norm oder L1-sqrt), um Robustheit gegenüber lokalen Beleuchtungs-, Kontrast- und Schattenvariationen zu erreichen.
(4) Die Verkettung normalisierter Block-Vektoren zu einer finalen 1D-Feature-Repräsentation, historisch gepaart mit linearen SVMs (Support Vector Machines) für die Personen- und Objekterkennung.
Im Vergleich zu gelernten Convolutional Neural Network (CNN)-Features hat HOG größere Einschränkungen: Erstens sind HOG-Features fixiert und handgefertigt; sie erfassen nur lokale Kantenorientierungsstatistiken auf niedriger Ebene und haben nicht die Fähigkeit, aufgabenspezifische hierarchische Repräsentationen (wie Texturen, Objektteile und semantische Konzepte) zu lernen. Zweitens bietet HOG eine sehr begrenzte geometrische Invarianz: Während die Blocknormalisierung monotone Beleuchtungsänderungen und kleine räumliche Verschiebungen innerhalb von Zellen verarbeitet, ist HOG anfällig unter 3D-Rotationen außerhalb der Ebene, signifikanten Skalierungsänderungen, nicht-starren Posenartikulationen und starkem Hintergrundrauschen. Im Gegensatz dazu lernen CNNs mehrschichtige nicht-lineare Abstraktionen, die End-to-End für das Ziel optimiert sind.
8Wie bestimmen Stride (Schrittweite), Padding (Auffüllung), Dilatation (Erweiterung) und Kernelgröße (Filtergröße) die Größe des Faltungsausgangs und das rezeptive Feld?
Die räumlichen Ausgangsdimensionen einer Faltungsschicht und ihr kumulatives rezeptives Feld (RF) werden durch die Kernelgröße $k$, den Stride $s$, das Padding $p$ und die Dilatation $d$ bestimmt:
1. **Räumliche Ausgangsgröße**:
Dilatation führt $(d - 1)$ Lücken zwischen Kernelelementen ein, was eine effektive Kernelgröße von $k' = d(k - 1) + 1$ ergibt. Die Ausgangsdimension entlang einer Achse ist gegeben durch:
$$
O = \left\lfloor \frac{I + 2p - k'}{s} \right\rfloor + 1 = \left\lfloor \frac{I + 2p - d(k - 1) - 1}{s} \right\rfloor + 1
$$
Hierbei reduziert der Stride die Auflösung, indem er den Kernel $s$ Pixel pro Schritt vorrückt, Padding fügt virtuelle Randpixel hinzu, um die räumlichen Dimensionen zu erhalten oder anzupassen, und Dilatation erweitert den Fußabdruck des Filters, ohne zusätzliche Parameter hinzuzufügen.
2. **Rezeptives Feld (RF)**:
Das theoretische rezeptive Feld beschreibt die räumliche Ausdehnung im Eingabebild, die eine bestimmte Aktivierung beeinflusst. Über gestapelte Schichten hinweg aktualisieren sich das rezeptive Feld $RF_l$ und der kumulative Stride (Sprung $j_l$) rekursiv:
* Sprung: $j_l = j_{l-1} \cdot s_l$, mit $j_0 = 1$
* Rezeptives Feld: $RF_l = RF_{l-1} + (k'_l - 1) \cdot j_{l-1}$, mit $RF_0 = 1$
Strides und Pooling erweitern das rezeptive Feld multiplikativ über die Tiefe hinweg, da nachfolgende Kernel-Schritte der Schichten größeren Pixelsprüngen im ursprünglichen Eingabekoordinatenraum entsprechen. Dilatation erweitert das rezeptive Feld additiv innerhalb einer einzelnen Schicht, indem sie $k'_l$ ohne räumliche Herunterskalierung erhöht.
9Wie entspricht ein Faltungskern einem klassischen linearen Bildfilter, und wann kann ein 2D-Filter separierbar gemacht werden?
In der klassischen linearen Signal- und Bildverarbeitung repräsentiert ein Faltungskern die räumliche Impulsantwort (Punktspreizfunktion) eines linearen, verschiebungsinvarianten (LSI) Systems. Das Anwenden des Kerns ist eine lineare Filteroperation im Raumdomain, die den Frequenzgang des Bildes (seine 2D-Fouriertransformation) formt. Tiefpassfilterkerne (z.B. Gauß-Filter, Box-Filter) dämpfen hohe Raumfrequenzen, um Rauschen zu unterdrücken und Texturen zu glätten, während Hochpass- oder Bandpassfilterkerne (z.B. Sobel, Laplace, Prewitt) hohe Frequenzen verstärken, um Kanten und Gradienten zu erkennen. Ein 2D-Filterkern $K \in \mathbb{R}^{M \times N}$ ist räumlich separierbar, wenn er in das äußere Produkt zweier 1D-Filter zerlegt werden kann: $K = u \cdot v^T$, wobei $u \in \mathbb{R}^{M \times 1}$ und $v \in \mathbb{R}^{N \times 1}$. In Begriffen der linearen Algebra ist eine 2D-Matrix genau dann separierbar, wenn ihr Matrixrang 1 ist. Dies kann mittels Singulärwertzerlegung (SVD) überprüft werden, bei der genau ein Singulärwert ungleich Null ist ($ \sigma_1 > 0, \sigma_2 = \dots = 0$). Separierbarkeit reduziert die Rechenkomplexität erheblich. Das Anwenden eines nicht-separierbaren $K \times K$-Kerns auf ein $H \times W$-Bild erfordert $O(H \cdot W \cdot K^2)$ Multiplikationen und Additionen. Wenn er in zwei aufeinanderfolgende 1D-Durchläufe (horizontal und dann vertikal) zerlegt wird, sinkt die Komplexität auf $O(H \cdot W \cdot 2K)$. Für einen $15 \times 15$-Kernel führt dies zu einer ungefähr $7.5$-fachen Beschleunigung.
10Wie verändern Größenänderung, zentrales Zuschneiden, zufälliges Zuschneiden mit Größenänderung, Strecken und Letterboxing die Eingabeverteilung?
Verschiedene Strategien zur Größenänderung und zum Zuschneiden verschieben die Eingabedatenverteilung hinsichtlich Geometrie, Skalierung, Inhaltsabdeckung und räumlichen Grenzen: 1. **Direkte Größenänderung (Strecken/Stauchen):** Skaliert das Bild nicht-isotrop auf eine Zielabmessung $(H, W)$ und verzerrt dabei die ursprünglichen Seitenverhältnisse. Dies zwingt das Modell, deformierte Objektformen zu verarbeiten (z.B. werden kreisförmige Objekte zu länglichen Ellipsen). 2. **Zentrales Zuschneiden:** Extrahiert einen zentralen Bildausschnitt fester Größe oder festen Verhältnisses. Es bewahrt das ursprüngliche Seitenverhältnis und die lokale Skalierung, führt aber eine starke zentrale Verzerrung ein (unter der Annahme, dass Ziele zentral gerahmt sind) und verwirft peripheren Kontext oder schneidet randständige Objekte ab. 3. **Zufälliges Zuschneiden mit Größenänderung (RRC):** Extrahiert zufällige Teilbereiche über variierende Flächenskalen und Seitenverhältnisse und skaliert diese dann auf eine feste Dimension. Dies erweitert die Skalierungsverteilung des Trainings und fördert das Lernen teilbasierter Merkmale, aber extreme Zuschnitte können das Zielobjekt vollständig ausschließen. 4. **Letterboxing (Isotrope Größenänderung mit Auffüllen):** Skaliert das Bild gleichmäßig, bis seine längste Dimension in die Zielgröße passt, und füllt dann die verbleibenden Ränder mit einem konstanten Wert auf. Es bewahrt die wahren Objektproportionen und Seitenverhältnisse, führt aber künstliche, kontrastreiche Ränder und nicht-informative aufgefüllte Pixel ein.
11Welche Modi des Annotationsrauschens (annotation noise modes) treten in Computer-Vision-Datensätzen auf, und wie würden Sie diese erkennen oder mindern?
Computer-Vision-Datensätze weisen typischerweise vier primäre Modi des Annotationsrauschens auf:
1. **Kategoriales Label-Rauschen (Categorical Label Noise):** Einem Bild oder Objekt wird das falsche Klassenlabel zugewiesen (z.B. eine Katze als Hund falsch klassifizieren oder subtile feingranulare Klassen verwechseln).
2. **Fehlende Annotationen (Auslassungsrauschen, Omission Noise):** Gültige Vordergrundobjekte bleiben unannotiert. Bei der Objekterkennung (object detection) werden weggelassene Ziele als Hintergrund-Negative behandelt, was korrekte Modell-Detektionen während des Trainings direkt bestraft.
3. **Bounding-Box- / Keypoint-Jitter (Lokalisierungsrauschen, Localization Noise):** Ungenaue, zu große oder verschobene Bounding-Box-Koordinaten und Landmarken-Positionen, verursacht durch die Inkonsistenz menschlicher Annotatoren.
4. **Masken-Grenzen-Unklarheit (Mask Boundary Ambiguity):** Inkonsistente oder grobe Segmentierungskonturen entlang komplexer oder unscharfer Grenzen (z.B. Haare, halbtransparente Oberflächen, Bewegungsunschärfe).
**Erkennungs- und Minderungsstrategien (Detection and Mitigation Strategies):**
- **Tracking von Verlust-Ausreißern & Confident Learning:** Das Verfolgen des Stichprobenverlusts über Trainings-Epochen hinweg identifiziert persistente Ausreißer mit hohem Verlust, die oft auf falsch gelabelte oder weggelassene Instanzen hindeuten. Algorithmen wie Confident Learning schätzen Rauschverteilungen, um Fehler zu bereinigen oder zu korrigieren.
- **Out-of-Fold (OOF) Prädiktionsdiskrepanzen:** Das Training von Kreuzvalidierungsmodellen und der Vergleich von Holdout-Vorhersagen mit der Ground Truth zeigt falsch gelabelte Bilder und fehlende Bounding Boxes auf.
- **Inter-Annotator Agreement (IAA) & Adjudikation:** Das Messen von Metriken wie Cohens Kappa (für Klassifikation) oder dem mittleren Intersection-over-Union (für Lokalisierung) über mehrere Annotatoren hinweg kennzeichnet Proben mit geringer Übereinstimmung zur Konsensprüfung.
- **Robuste Verlustformulierungen (Robust Loss Formulations):** Die Verwendung von Label-Smoothing, rausch-toleranten Klassifikationsverlusten oder robusten IoU-basierten Regressionsverlusten reduziert die Empfindlichkeit gegenüber Jitter und Fehletikettierung.
import torch
import torch.nn.functional as F
def find_label_noise_candidates(model, dataloader, device, top_k=50):
model.eval()
sample_losses = []
with torch.no_grad():
for batch_idx, (images, targets, sample_ids) in enumerate(dataloader):
images, targets = images.to(device), targets.to(device)
logits = model(images)
loss_per_sample = F.cross_entropy(logits, targets, reduction='none')
for sid, l, target, pred in zip(sample_ids, loss_per_sample.cpu(), targets.cpu(), logits.argmax(dim=-1).cpu()):
sample_losses.append({'id': sid, 'loss': l.item(), 'target': target.item(), 'pred': pred.item()})
sample_losses.sort(key=lambda x: x['loss'], reverse=True)
return sample_losses[:top_k]
12Wie beeinflusst Klassenungleichgewicht das Training von Bildklassifikation, Objekterkennung und dichter Prädiktion?
Klassenungleichgewicht beeinflusst die Optimierungsdynamik und Verlustlandschaften über verschiedene Computer-Vision-Aufgaben hinweg: 1. **Bildklassifikation:** Wenn Mehrheitsklassen Minderheitsklassen zahlenmäßig übertreffen, führt die empirische Risikominimierung (Empirical Risk Minimization) dazu, dass Parameteraktualisierungen von den Gradienten der Mehrheitsklassen dominiert werden. Das Modell lernt die empirische Klassenpriorität $P(Y)$ und verzerrt seine Entscheidungsgrenze gegenüber seltenen Klassen. Dies führt zu einer hohen Gesamt-Top-1-Genauigkeit, während der Recall für Minderheitsklassen stark abfällt. 2. **Objekterkennung:** - *Vordergrund-Hintergrund-Ungleichgewicht:* Bei dichten Single-Stage- und Anchor-basierten Detektoren werden Hunderttausende von Kandidatenpositionen pro Bild bewertet, wobei über 99% Hintergrund sind. Selbst wenn einzelne, einfache Hintergrund-Anker geringe Verluste verursachen, überlagert ihr großer aggregierter Gradient die informativen Gradientensignale von spärlichen Vordergrundobjekten. - *Vordergrund-Klassenungleichgewicht:* Häufige Objektkategorien treten um Größenordnungen häufiger auf als seltene Kategorien, was die effektive Stichprobengröße und das Lernsignal für seltene Klassen reduziert. 3. **Dichte Prädiktion (Segmentierung):** Das Ungleichgewicht auf Pixelebene ist gravierend, da große Hintergrund- und 'Stuff'-Klassen (z.B. Straße, Himmel) Millionen von Pixeln einnehmen, während kleine 'Thing'-Klassen (z.B. Verkehrsschilder, Fußgänger) möglicherweise weniger als 0,1% der Bildpixel belegen. Die standardmäßige pixelweise Kreuzentropie-Verlustfunktion (Cross-Entropy Loss) wird von großflächigen Klassen dominiert, was zu einer Untersegmentierung oder dem vollständigen Verschwinden kleiner, dünner Strukturen führt.
13Wie diagnostizieren Sie ungültige Zahlenwerte (NaN) oder instabilen Verlust bei großem verteiltem Computer-Vision-Training?
Grenzen Sie bei datenparallelem verteiltem Training (DDP) fehlerhafte Eingaben, Über- und Unterläufe bei automatischer Berechnung mit gemischter Genauigkeit (AMP) und Optimierungsinstabilität zwischen Workern ein. Erfassen Sie reproduzierbare Eingaben, Seeds und Konfiguration. Aktivieren Sie torch.autograd.set_detect_anomaly(True), wobei Anomalieerkennung die Ausführung nicht selbst deterministisch macht. Gradienten-/Aktivierungshooks lokalisieren die erste NaN-Schicht. Validieren Sie im DataLoader endliche Werte, beschädigte Null-Byte-Bilder, leere Boxen und Normalisierung mit Varianz null. Loggen Sie pro Minibatch und Rank Verlust, Kennungen der Eingabedaten, Gradientennorm vor Clipping und GradScaler-Faktoren. Prüfen Sie AMP und dynamische Verlustskalierung: Gradienten in 16-Bit-Gleitkommadarstellung (FP16) über 65504 laufen über. GradScaler überspringt ungültige Updates und reduziert die Skala mit dem konfigurierten Reduktionsfaktor. Dauerhafter Skaleneinbruch ist ein Diagnosehinweis, keine normale Konvergenz gegen null. Instabile Operationen wie Softmax, LayerNorm, Focal-Loss-Exponenten oder Nenner des Verhältnisses aus Schnitt- und Vereinigungsfläche (IoU) in 32-Bit-Gleitkommadarstellung (FP32) beziehungsweise im 16-Bit-Format BF16 mit dem Dynamikbereich von FP32 stabilisieren häufig. Prüfen Sie außerdem die NaN-Ausbreitung von einem Prozess auf alle anderen durch All-Reduce sowie Anlaufphase und Skalierung der Lernrate bei großen globalen Trainingsstapeln, etwa gemäß der linearen Skalierungsregel. Begrenzen Sie Gradienten erst nach dem Rückgängigmachen der AMP-Skalierung. Leere Annotationen können gültige Negative sein. Prüfen Sie den Aufgabenvertrag, statt jedes leere Bild abzulehnen.
import torch
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4)
for step, (images, targets, uris) in enumerate(dataloader):
# 1. Input sanitization
if not torch.isfinite(images).all():
print(f"Corrupt input detected from URIs: {uris}")
continue
optimizer.zero_grad(set_to_none=True)
with autocast(dtype=torch.float16):
outputs = model(images)
loss = criterion(outputs, targets)
if not torch.isfinite(loss):
print(f"NaN/Inf loss at step {step} on rank {torch.distributed.get_rank()}; skipping step.")
continue
scaler.scale(loss).backward()
# Unscale before clipping to inspect true gradient norms
scaler.unscale_(optimizer)
grad_norm = torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
if torch.isnan(grad_norm) or torch.isinf(grad_norm):
print(f"Warning: Grad norm is {grad_norm}. Scaler will adjust.")
scaler.step(optimizer)
scaler.update()
14Wie entwerfen Sie eine digitale Online-Videostabilisierung für eine Kamera mit Bildzittern?
Schätzen Sie robuste Interframe-Bewegung aus verfolgten Ecken oder einander zugeordneten Deskriptoren, verwerfen Sie Vordergrundbewegung und wählen Sie ein passendes Translations-, Ähnlichkeits-, affines oder Homografiemodell. Definieren Sie Transformationsrichtungen explizit. Bei Spaltenvektoren und H_t von Frame t−1 nach t gilt für den Referenz-zu-aktuell-Pfad P_t = H_t * P_{t−1}. Glätten Sie den Pfad zu S_t mit kausalem Filter oder begrenztem Vorausblick und korrekter Rotations-/Transformationsbehandlung statt beliebiger Mittelung von Matrixeinträgen. Die Vorwärtskorrektur vom aktuellen in das stabilisierte Bild ist C_t = S_t * inverse(P_t). Übergeben Sie sie oder ihre Inverse entsprechend der Abtastkonvention der Programmierschnittstelle (API) für die Bildtransformation. Begrenzen Sie Zuschnitt und Vergrößerung und Stärke gegen ungültige Ränder. Bei Trackingverlust oder Szenenschnitt wird zurückgesetzt oder wiederhergestellt. Starke Parallaxe und zeitversetztes zeilenweises Sensorauslesen (Rolling Shutter) können komplexere Modelle oder Trägheitssensoren erfordern. Strikt kausale Verarbeitung nutzt keine zukünftigen Frames; jeder Vorausblickframe erhöht Aufnahmelatenz. Wählen Sie Pufferung und Zuschnittsregeln anhand gemessener Qualität und Latenzanforderungen.
15Wie optimieren Sie eine Echtzeit-Vision-Pipeline, wenn der Detektor langsamer als die Zielbildrate ist?
Kann ein Detektor etwa nur 15–20 Bilder pro Sekunde (FPS) eines Streams mit 60 FPS verarbeiten, entkoppelt eine asynchrone mehrthreadige Pipeline aufwendige Detektion und Echtzeitausgabe. Ein Erfassungsthread erfasst kontinuierlich Frames. Ein Hintergrund-Worker führt den aufwendigen Detektor auf ausgewählten Keyframes aus. Ein leichter Tracker, etwa Lucas-Kanade-Fluss oder Korrelationsfilter, optional mit Kalman-Prognose, verarbeitet jeden Frame mit 60 FPS und erhält Objektzustände zwischen Detektionen. ByteTrack/BoT-SORT sind Tracking-by-Detection-Verfahren und benötigen ohne neue Detektionen eine explizite Prognose-/Visual-Tracking-Regel. Trackalter, Unsicherheit und Erkennungsrate neuer Objekte sind zu überwachen. Begrenzte Ringbuffer und Regeln zum Verwerfen alter zugunsten neuester Frames verhindern unbegrenzte Latenz bei Rückstau. Ist die Detektion für T_0 erst bei T_curr fertig, ist sie veraltet. Ordnen Sie ihr Ergebnis dem historischen Tracklet-Zustand bei T_0 zu, korrigieren Sie Identitäten und übersehene Tracks und propagieren Sie diese Korrektur über Bewegungsvektoren beziehungsweise Kalman-Vorhersageschritte bis T_curr.
import queue
import threading
frame_queue = queue.Queue(maxsize=1) # Drop stale frames, keep latest
det_result_queue = queue.Queue()
def detector_worker():
while True:
frame, frame_id, timestamp = frame_queue.get()
boxes, scores, classes = heavy_detector.infer(frame)
det_result_queue.put({'frame_id': frame_id, 'boxes': boxes, 'timestamp': timestamp})
def realtime_pipeline(video_stream):
tracker = FastTracker() # e.g. Optical flow or Kalman tracker
for frame, frame_id, timestamp in video_stream:
if frame_queue.empty():
frame_queue.put((frame, frame_id, timestamp))
if not det_result_queue.empty():
det_result = det_result_queue.get()
tracker.reconcile_and_correct(det_result, current_frame_id=frame_id)
active_tracks = tracker.update(frame)
display_or_downstream(frame, active_tracks)