U-Net
U-Net ist ein U-förmiges CNN aus Encoder und Decoder, dessen Skip Connections mit wenigen Trainingsbildern eine pixelgenaue Segmentierung ermöglichen. Behandelt werden Architektur, Varianten und Code.
U-Net ist ein Faltungsneuronales Netz (CNN) für die semantische Segmentierung, bei der jedem Pixel eines Bildes eine Klasse zugeordnet wird. Olaf Ronneberger, Philipp Fischer und Thomas Brox von der Universität Freiburg stellten es 2015 in U-Net: Convolutional Networks for Biomedical Image Segmentation vor. Ein Encoder verkleinert das Bild, um dessen Inhalt zu erfassen. Ein Decoder vergrößert das Ergebnis wieder auf die ursprüngliche Auflösung. Skip-Verbindungen geben dem Decoder auf jeder Skala die feinen Details des Encoders weiter, sodass Objektgrenzen scharf abgebildet werden. U-Net ließ sich mit einigen Dutzend annotierten Mikroskopiebildern gut trainieren, gewann zwei Kategorien der ISBI-Zellverfolgungs-Challenge 2015 mit großem Abstand und ist weiterhin ein Standardmodell für die medizinische Bildanalyse. Später wurde sein Aufbau zum Entrauschungsnetzwerk vieler Diffusionsmodelle.
So funktioniert U-Net#
Das Netzwerk besteht aus zwei symmetrischen Hälften, die wie die beiden Schenkel eines U aussehen:
- Verengender Pfad (Encoder): Wiederholte Paare aus 3×3-Faltungen mit ReLU-Aktivierungen. Auf jedes Paar folgt ein 2×2-Max-Pooling, das die Auflösung halbiert. Die Kanalzahl verdoppelt sich auf jeder Ebene von 64 auf 1.024. So tauscht das Netzwerk räumliche Details gegen ein größeres rezeptives Feld und aussagekräftigere Merkmale ein.
- Erweiternder Pfad (Decoder): Auf jeder Ebene verdoppelt eine 2×2-Transponierte Faltung die Auflösung und halbiert die Kanalzahl. Das Ergebnis wird mit der Merkmalskarte des Encoders derselben Ebene zusammengeführt, anschließend verbinden zwei 3×3-Faltungen die Merkmale. Eine abschließende 1×1-Faltung ordnet den Merkmalen jedes Pixels Klassenwerte zu.
Das ursprüngliche Netzwerk hat 23 Faltungsschichten und vier Pooling-Schritte. Es verwendete Faltungen ohne Padding, sodass ein Eingabeausschnitt mit 572×572 Pixeln eine Segmentierungskarte mit 388×388 Pixeln ergab. Große Bilder wurden in überlappende Ausschnitte segmentiert. Die meisten heutigen Implementierungen verwenden Padding für die Faltungen, sodass die Ausgabe dieselbe Größe wie die Eingabe hat.
Skip-Verbindungen#
Pooling verwirft die genaue Position jedes Merkmals. Am Engpass weiß das Netzwerk zwar, dass sich in einem Bereich eine Zellmembran befindet, aber nicht, durch welche Pixel sie verläuft. Skip-Verbindungen kopieren die hochauflösende Merkmalskarte jeder Encoder-Ebene über das U hinweg zum Decoder. Dieser kombiniert so das „Was“ des hochskalierten Pfads mit dem „Wo“ des Encoders. U-Net führt beide entlang der Kanalachse zusammen, während die Residualverbindungen von ResNet Merkmale innerhalb eines Blocks addieren. Dieser PyTorch-Code erstellt eine Encoderebene, einen Engpass und eine Decoderebene:
import torch
from torch import nn
# One encoder level, a bottleneck, and one decoder level of a U-Net
encoder = nn.Sequential(nn.Conv2d(3, 16, 3, padding=1), nn.ReLU())
bottleneck = nn.Sequential(nn.MaxPool2d(2), nn.Conv2d(16, 32, 3, padding=1), nn.ReLU())
upsample = nn.ConvTranspose2d(32, 16, kernel_size=2, stride=2)
decoder = nn.Sequential(nn.Conv2d(32, 16, 3, padding=1), nn.ReLU())
head = nn.Conv2d(16, 2, kernel_size=1) # 2 classes, e.g. cell and background
image = torch.randn(1, 3, 128, 128)
skip = encoder(image) # full-resolution features kept for the decoder
context = bottleneck(skip) # half resolution, twice the channels, wider context
# Skip connection: concatenate upsampled context with the saved high-resolution features
merged = torch.cat([upsample(context), skip], dim=1)
logits = head(decoder(merged))
print(f"context {tuple(context.shape)} -> merged {tuple(merged.shape)} -> logits {tuple(logits.shape)}")Es gibt context (1, 32, 64, 64) -> merged (1, 32, 128, 128) -> logits (1, 2, 128, 128) aus: Die 16 hochskalierten Kontextkanäle und die 16 Kanäle aus der Skip-Verbindung ergeben zusammen 32. Die Ausgabe enthält für jedes der Eingabepixel mit einer Auflösung von 128×128 zwei Klassenwerte.
Training mit wenigen Daten#
Der ursprüngliche Trainingsdatensatz für neuronale Strukturen in der Elektronenmikroskopie enthielt 30 Bilder mit jeweils 512×512 Pixeln. U-Net machte das mit umfangreicher Datenerweiterung wett, insbesondere mit zufälligen elastischen Verformungen, die die Biegung von Gewebe nachahmen. Außerdem kam ein gewichteter Kreuzentropieverlust zum Einsatz, der die schmalen Hintergrundlücken zwischen sich berührenden Zellen stärker gewichtet, damit benachbarte Zellen als getrennte Bereiche erkannt werden. Medizinische Segmentierungsmodelle werden heute oft mit dem Dice-Verlust trainiert. Er misst direkt die Überlappung der Masken und kommt damit zurecht, wenn eine kleine Struktur nur wenige Prozent der Pixel einnimmt.
Varianten und Weiterentwicklungen#
- 3D U-Net und V-Net: Ersetzen 2D-Operationen durch 3D-Operationen, um Volumen wie CT- und MRT-Aufnahmen zu segmentieren.
- Attention U-Net und UNet++: Ergänzen Attention-Gates oder verschachtelte, dicht verbundene Skip-Pfade, um die Auswahl der Merkmale aus dem Encoder für den Decoder zu verfeinern.
- nnU-Net: Ein Framework, das Vorverarbeitung, Architektur und Training automatisch für einen neuen Datensatz konfiguriert. Eine Studie der MICCAI 2024 ergab, dass gut abgestimmte CNN-basierte U-Nets in diesem Framework bei einer sorgfältigen Validierung neuere Transformer- und Mamba-Architekturen für die medizinische 3D-Segmentierung weiterhin übertreffen.
- Diffusions-U-Nets: DDPM und Stable Diffusion 1.x verwenden ein U-Net, um das Rauschen in einem Bild oder latenten Raum vorherzusagen. Ergänzte Attention-Schichten ermöglichen es dem Prompt, die Generierung zu steuern. Das U-Net von Stable Diffusion 1.x hat etwa 860 Millionen Parameter, und ControlNet wird an den Encoder dieses U-Nets angeschlossen. Neuere Generatoren ersetzen das U-Net durch Diffusion-Transformer.
U-Net und verwandte Modelle im Vergleich#
- Vollständig gefaltete Netze (FCN): Das FCN von 2014 machte aus Klassifikatoren Vorhersagemodelle für einzelne Pixel und führte grobe und feine Vorhersagen durch Addition von Klassenwertkarten zusammen. U-Net erstellte einen vollständigen Decoder, der auf jeder Ebene Merkmale zusammenführt.
- Autoencoder: Sie bestehen ebenfalls aus einem Encoder und Decoder, werden aber darauf trainiert, ihre Eingabe durch einen schmalen Engpass hindurch zu rekonstruieren. Skip-Verbindungen würden es einem Autoencoder ermöglichen, diesen Engpass zu umgehen, während U-Net sie benötigt, um pixelgenau ausgerichtete Beschriftungen zu erzeugen.
- Modelle zur Instanzsegmentierung: Ein U-Net gibt für jedes Pixel eine Klasse aus. Daher erhalten zwei sich berührende Objekte derselben Klasse dieselbe Beschriftung, sofern das Training oder die Nachbearbeitung sie nicht voneinander trennt.
Die semantischen Segmentierungsmodelle von Ultralytics YOLO26 mit dem Suffix -sem verwenden eine verkürzte Form des U-Net-Decoders. Ihr Neck skaliert die Ausgabe des Backbones mit Maßstab 1/32 zweimal hoch und führt dabei Backbone-Merkmale mit den Maßstäben 1/16 und 1/8 zusammen. Anschließend klassifiziert er Pixel mit Maßstab 1/8 und skaliert die Klassenwerte um den Faktor 8 auf die Eingabegröße hoch.
Anwendungen in der Praxis#
- Analyse von Satellitenbildern: Landbedeckungskarten ordnen jedes Pixel Wasser, Wald, Ackerland oder Gebäuden zu, um Abholzung und Stadtwachstum zu verfolgen.
- Industrielle Inspektion: Pixelmasken von Kratzern, Rissen und Korrosion messen die genaue Größe und Form eines Defekts – was mit einer Begrenzungsbox nicht möglich ist.
- Medizinische Bildgebung: U-Nets markieren Organe, Tumoren und Läsionen in CT- und MRT-Aufnahmen für Diagnose und Bestrahlungsplanung und trennen einzelne Zellen in Mikroskopiebildern voneinander. Bei der ISBI-Zellverfolgungs-Challenge 2015 erreichte ein mit 20 teilweise annotierten Bildern von HeLa-Zellen trainiertes U-Net einen durchschnittlichen IoU von 77,5 %, gegenüber 46 % für die zweitbeste Methode.










