KI‑Kompass
Kompass

Faltung und CNN

Was ein Faltungskern tut, warum dieselbe Operation Kanten findet und Katzen erkennt, und wie sich Ausgabegröße und Aufwand berechnen.

·2 Min. Lesezeit·Von Fachredaktion Technik
DETAILGRAD
3 Abschnitte

Die Idee

Legen Sie eine Schablone mit neun Feldern über ein Bild. Multiplizieren Sie jeden Pixel unter der Schablone mit der Zahl im entsprechenden Feld, addieren Sie alles und schreiben Sie das Ergebnis in ein neues Bild. Dann verschieben Sie die Schablone um einen Pixel und wiederholen das.

Das ist eine Faltung. Je nachdem, welche Zahlen in der Schablone stehen, zeichnet das Ergebnis Kanten nach, zeichnet weich, schärft oder hebt bestimmte Muster hervor.

Bekannte Kerne

KernWirkung
[[0,0,0],[0,1,0],[0,0,0]]Nichts, das Bild bleibt gleich
1/9 · [[1,1,1],[1,1,1],[1,1,1]]Weichzeichnen
[[0,-1,0],[-1,5,-1],[0,-1,0]]Schärfen
[[-1,0,1],[-2,0,2],[-1,0,1]]Senkrechte Kanten (Sobel)

Faltung von Hand

import cv2, numpy as np

img = cv2.imread("bauteil.jpg", cv2.IMREAD_GRAYSCALE).astype(np.float32)

schaerfen = np.array([[ 0, -1,  0],
                      [-1,  5, -1],
                      [ 0, -1,  0]], dtype=np.float32)
scharf = cv2.filter2D(img, -1, schaerfen)

# Die Summe der Kernwerte bestimmt die Helligkeit des Ergebnisses:
# Summe 1 laesst sie unveraendert, Summe 0 ergibt ein dunkles Kantenbild.
print(schaerfen.sum())    # 1.0

Die drei Regler

ReglerWirkung
KernelgrößeWie viel Kontext ein Filter sieht. Meist 3, selten 5 oder 7.
StrideSchrittweite. Stride 2 halbiert die Ausgabegröße.
PaddingRand ergänzen, damit die Ausgabe gleich groß bleibt.
  • Für gleiche Ausgabegröße bei Kernel 3 immer Padding 1 setzen.
  • Pooling reduziert die Auflösung ohne Parameter; Stride 2 tut dasselbe mit Parametern.
  • Bei mehreren Kanälen hat ein Kernel immer die volle Kanaltiefe der Eingabe.

Die Formeln

Diskrete 2D-Faltung

S(i,j) = Σ_m Σ_n I(i+m, j+n) · K(m, n)

Jeder Ausgabewert ist die Summe der Produkte aus Kernwerten und den darunterliegenden Bildwerten.

I
das Eingabebild
K
der Kernel der Größe m mal n
S
die Ausgabe, auch Merkmalskarte genannt

Ausgabegröße, Parameter und Aufwand

H_out = ⌊(H + 2p − k) / s⌋ + 1 Parameter = k² · C_in · C_out + C_out FLOPs ≈ 2 · H_out · W_out · k² · C_in · C_out

Die Ausgabegröße folgt aus Padding und Stride, die Parameterzahl aus Kernfläche mal Kanälen, der Aufwand aus beidem zusammen.

H, W
Höhe und Breite der Eingabe
k
Kernelgröße
p
Padding
s
Stride
C_in, C_out
Anzahl Eingangs- und Ausgangskanäle

Durchgerechnet

Eine Schicht mit H = W = 224, k = 3, p = 1, s = 1, C_in = 64, C_out = 128:

  • H_out = ⌊(224 + 2 − 3)/1⌋ + 1 = 224: die Auflösung bleibt erhalten.
  • Parameter: 9 × 64 × 128 + 128 = 73.856
  • FLOPs: 2 × 224 × 224 × 9 × 64 × 128 ≈ 7,4e9 je Bild

Eine einzige Schicht kostet also 7,4 GFLOPs. Ein Netz mit fünfzig solchen Schichten liegt bei mehreren hundert GFLOPs je Bild, und daraus ergibt sich unmittelbar die benötigte Rechenleistung, siehe Warum Grafikkarten.

Warum getrennte Faltungen so viel sparen

Eine tiefenweise trennbare Faltung zerlegt den Vorgang in eine Faltung je Kanal und eine anschließende 1 mal 1 Faltung über die Kanäle.

Ersparnis durch trennbare Faltung

Verhältnis = 1/C_out + 1/k²

Der Aufwand sinkt um den Kehrwert der Kanalzahl plus den Kehrwert der Kernfläche.

k
Kernelgröße
C_out
Anzahl Ausgangskanäle

Für k = 3 und C_out = 128 ergibt das 1/128 + 1/9 = 0,119: knapp ein Achtel des Aufwands. Genau darauf beruhen MobileNet und alle Architekturen, die auf Randgeräten laufen sollen.

Passende Kurse und Quellen

StudieKostenlosEN

An Image is Worth 16x16 Words

Bilder als Folge von Feldern, verarbeitet wie Text. Die Arbeit, die Transformer in die Bildverarbeitung gebracht hat.

Für alle, die Bild und Text in einem Modell verarbeiten wollen.

KursTeilweise kostenlos7200 Min.EN

Deep Learning Specialization

Fünf Kurse von den Grundlagen neuronaler Netze bis zu Sequenzmodellen. Ausführlich, mit Programmierübungen, und in Teilen älter als die aktuelle Praxis.

Für alle mit Programmierkenntnissen, die den Bereich vollständig durcharbeiten wollen.

DeepLearning.AIZum Angebot
StudieKostenlosEN

Deep Residual Learning

Die Abkürzung über Schichten hinweg, die Netze mit hundert Schichten trainierbar machte. Heute in jeder Architektur enthalten.

Für das Verständnis, warum Netze überhaupt tief werden konnten.

BuchKostenlosEN

Dive into Deep Learning

Lehrbuch mit ausführbarem Code neben jeder Herleitung. Jedes Kapitel lässt sich als Notebook öffnen und nachrechnen.

Für alle, die beim Lesen mitrechnen wollen; jedes Kapitel lässt sich als Notizbuch öffnen.

KursKostenlos1500 Min.EN

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.

Hugging FaceZum Angebot
KursKostenlos4200 Min.EN

Practical Deep Learning for Coders

Beginnt mit einem lauffähigen Modell in der ersten Stunde und liefert die Theorie danach. Der kürzeste Weg von Python-Grundkenntnissen zum eigenen trainierten Modell.

Für Ungeduldige mit Python-Kenntnissen: das erste eigene Modell läuft in der ersten Stunde.

StudieKostenlosEN

U-Net

Segmentierung mit wenigen Beispielen, entstanden in der Bildgebung der Medizin. Bis heute die erste Wahl für Segmentierung.

Für Segmentierung mit wenigen Beispielen; bis heute die erste Wahl.

StudieKostenlosEN

Very Deep Convolutional Networks

Die Arbeit, die zeigte, dass Tiefe mit kleinen Filtern schlägt. Der Aufbau, an dem Faltungsnetze üblicherweise erklärt werden.

Für den Einstieg in Faltungsnetze; der Aufbau, an dem sie üblicherweise erklärt werden.

War diese Seite hilfreich?
Faltung und CNN