Hoppa till innehållet
AI-grafen
E· Universitetdatorseende· ca 150 min· utvecklande· verifierad 2026-09-20

Bildklassificering end-to-end

Kunna träna, utvärdera och felanalysera en bildklassificerare på riktig data.

Förkunskaper

Intuition

Projektet: en bildklassificerare på data du samlat eller hämtat själv, med en ärlig utvärdering.

Leverabler:

DelKrav
Data≥ 4 klasser, ≥ 150 bilder per klass, stratifierad train/val/test
Baslinjemajoritetsklass + förtränad modell med fryst kropp
Modelltransfer learning med augmentering
Utvärderingper klass, förväxlingsmatris, bootstrap-intervall
Felanalys30 felklassade bilder granskade och kategoriserade
Åtgärden förbättring härledd ur felanalysen, med före/efter

Det som skiljer godkänt från starkt är felanalysen. Att titta på 30 fel tar tjugo minuter och avslöjar nästan alltid något strukturellt: en klass med tvetydiga etiketter, en bakgrundsgenväg, eller bilder som inte borde vara med.

Kod

import numpy as np, torch
from sklearn.metrics import classification_report, confusion_matrix

@torch.no_grad()
def utvardera(modell, loader, klassnamn, device="cuda"):
    modell.eval()
    y, p, konf, sokvagar = [], [], [], []
    for xb, yb, paths in loader:
        ut = modell(xb.to(device)).softmax(-1).cpu()
        p += ut.argmax(1).tolist(); konf += ut.max(1).values.tolist()
        y += yb.tolist(); sokvagar += list(paths)
    y, p, konf = np.array(y), np.array(p), np.array(konf)

    print(classification_report(y, p, target_names=klassnamn, digits=3))
    print(confusion_matrix(y, p))

    # Bootstrap-intervall för träffsäkerheten
    rng = np.random.default_rng(0)
    acc = [np.mean(y[i] == p[i]) for i in (rng.integers(0, len(y), len(y)) for _ in range(2000))]
    print("accuracy", round(float(np.mean(y == p)), 3), np.percentile(acc, [2.5, 97.5]).round(3))

    # De 30 värsta felen: fel OCH hög konfidens — där finns de intressanta problemen
    fel = np.where(y != p)[0]
    varsta = fel[np.argsort(-konf[fel])][:30]
    return [{"fil": sokvagar[i], "sant": klassnamn[y[i]], "gissat": klassnamn[p[i]],
             "konfidens": round(float(konf[i]), 3)} for i in varsta]

Kategorisera felen i fyra högar när du granskat dem: fel etikett i datan, genuint svår bild, genväg som modellen tagit, saknad variation i träningsdatan. Varje hög har en egen åtgärd — och bara den sista löses med mer träning.

Behärskning innebär

  • Tränar och utvärderar en bildklassificerare på riktig data
  • Gör felanalys som leder till en åtgärd
  • Rapporterar per klass med osäkerhet

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser