Faltung und CNN
Was ein Faltungskern tut, warum dieselbe Operation Kanten findet und Katzen erkennt, und wie sich Ausgabegröße und Aufwand berechnen.
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
| Kern | Wirkung |
|---|---|
[[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.0Die drei Regler
| Regler | Wirkung |
|---|---|
| Kernelgröße | Wie viel Kontext ein Filter sieht. Meist 3, selten 5 oder 7. |
| Stride | Schrittweite. Stride 2 halbiert die Ausgabegröße. |
| Padding | Rand 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
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,4e9je 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.
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
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.
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.
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.
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.
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.
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.
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.
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.