Leitfaden zur Verwendung von ControlNets zur Steuerung des Generierungsprozesses von Latent Diffusion Fashions
In diesem Beitrag stellen wir einen Leitfaden zum Coaching vor ControlNet um Benutzern eine präzise Kontrolle über den Generierungsprozess eines zu ermöglichen Modell der latenten Diffusion (wie stabile Diffusion!). Unser Ziel ist es, die bemerkenswerten Fähigkeiten dieser Modelle bei der Übersetzung von Gehirnbildern über verschiedene Kontraste hinweg zu demonstrieren. Um dies zu erreichen, werden wir die Leistungsfähigkeit der kürzlich eingeführten Technologien nutzen Open-Supply-Erweiterung für MONAI, Generative MONAI-Modelle!

Unser Projektcode ist in diesem öffentlichen Repository verfügbar https://github.com/Warvito/generative_brain_controlnet
Einführung
In den letzten Jahren wurden bei Textual content-zu-Bild-Diffusionsmodellen bemerkenswerte Fortschritte erzielt, die die Erzeugung äußerst realistischer Bilder auf der Grundlage von Textbeschreibungen im offenen Bereich ermöglichen. Diese generierten Bilder zeichnen sich durch reichhaltige Particulars, klar definierte Umrisse, kohärente Strukturen und eine aussagekräftige Kontextdarstellung aus. Trotz der bedeutenden Erfolge von Diffusionsmodellen bleibt es jedoch weiterhin eine Herausforderung, eine präzise Kontrolle über den generativen Prozess zu erreichen. Selbst bei langen und komplizierten Textbeschreibungen kann es schwierig sein, die gewünschten Ideen des Benutzers genau zu erfassen.
Die Einführung von Kontrollnetzewie von Lvmin Zhang und Maneesh Agrawala in ihrer bahnbrechenden Arbeit vorgeschlagen „Hinzufügen bedingter Kontrolle zu Text-zu-Bild-Diffusionsmodellen“ (2023) hat die Steuerbarkeit und Anpassung von Diffusionsmodellen erheblich verbessert. Diese neuronalen Netze fungieren als leichte Adapter, die eine präzise Steuerung und Anpassung ermöglichen und gleichzeitig die ursprüngliche Generierungsfähigkeit von Diffusionsmodellen bewahren. Durch die Feinabstimmung dieser Adapter unter Beibehaltung des ursprünglichen Diffusionsmodells können Textual content-zu-Bild-Modelle effizient für eine Vielzahl von Bild-zu-Bild-Anwendungen erweitert werden.
Was ControlNet auszeichnet, ist seine Lösung für die Herausforderung der räumlichen Konsistenz. Im Gegensatz zu früheren Methoden ermöglicht ControlNet eine explizite Kontrolle über räumliche, strukturelle und geometrische Aspekte generierter Strukturen, während die semantische Kontrolle, die aus Textbeschriftungen abgeleitet wird, erhalten bleibt. In der ursprünglichen Studie wurden verschiedene Modelle vorgestellt, die eine bedingte Generierung auf der Grundlage von Kanten, Pose, semantischen Masken und Tiefenkarten ermöglichen und so den Weg für spannende Fortschritte im Bereich Laptop Imaginative and prescient ebnen.
Im Bereich der medizinischen Bildgebung sind zahlreiche Bild-zu-Bild-Anwendungen von großer Bedeutung. Unter diesen Anwendungen besteht eine bemerkenswerte Aufgabe darin, Bilder zwischen verschiedenen Bereichen zu übersetzen, beispielsweise die Umwandlung von Computertomographie-Scans (CT) in Magnetresonanztomographie (MRT) oder die Umwandlung von Bildern zwischen unterschiedlichen Kontrasten, beispielsweise von T1-gewichteten in T2-gewichtete MRT-Bilder . In diesem Beitrag konzentrieren wir uns auf einen konkreten Fall: die Verwendung 2D-Schnitte von Gehirnbildern, die aus einem FLAIR-Bild gewonnen wurden, um das entsprechende T1-gewichtete Bild zu erzeugen. Unser Ziel ist es zu zeigen, wie unsere neue Erweiterung für MONAI (Generative MONAI-Modelle) und ControlNets können effektiv genutzt werden, um generative Modelle auf medizinischen Daten zu trainieren und auszuwerten. Indem wir uns mit diesem Beispiel befassen, möchten wir Einblicke in die praktische Anwendung dieser Technologien im Bereich der medizinischen Bildgebung geben.

Coaching des latenten Diffusionsmodells

Um T1-gewichtete (T1w) Bilder aus FLAIR-Bildern zu generieren, Der erste Schritt besteht darin, ein Diffusionsmodell zu trainieren, das T1w-Bilder erzeugen kann. In unserem Beispiel verwenden wir 2D-Schnitte, die aus MRT-Bildern des Gehirns extrahiert wurden Datensatz der britischen Biobank (hier verfügbar Datenvereinbarung). Nachdem Sie die ursprünglichen 3D-Gehirne mit Ihrer bevorzugten Methode (z. B. Ameisen oder UniRes) extrahieren wir fünf 2D-Schnitte aus dem zentralen Teil des Gehirns. Wir haben diese Area ausgewählt, da sie verschiedene Gewebe aufweist, was die Auswertung der von uns durchgeführten Bildübersetzung erleichtert. Benutze dies Skriptwir endeten mit ungefähr 190.000 Scheiben mit einer räumlichen Dimension von 224 × 160 Pixel. Als Nächstes teilen wir unser Bild mithilfe dieses Skripts in die Sätze „Zug“ (ca. 180.000 Slices), „Validierung“ (ca. 5.000 Slices) und „Take a look at“ (ca. 5.000 Slices) auf. Nachdem unser Datensatz vorbereitet ist, können wir mit dem Coaching unseres Latent-Diffusion-Modells beginnen!
Um die Rechenressourcen zu optimieren, verwendet das latente Diffusionsmodell eine Encoder um das Eingabebild x in einen niedrigerdimensionalen latenten Raum z umzuwandeln, der dann von a rekonstruiert werden kann Decoder. Dieser Ansatz ermöglicht das Coaching von Diffusionsmodellen auch mit begrenzter Rechenkapazität und behält dabei ihre ursprüngliche Qualität und Flexibilität bei. Ähnlich wie in unserem vorherigen Beitrag (Medizinische Bilder mit MONAI generieren)wir benutzen das Autoencoder mit KL-Regularisierungsmodell aus generativen MONAI-Modellen, um unser Komprimierungsmodell zu erstellen. Durch die Nutzung diese Konfiguration und der L1-Verlust zusammen mit der KL-Regularisierung, Wahrnehmungsverlust Und gegnerischer Verlust, Wir haben einen Autoencoder entwickelt, der Gehirnbilder mit hoher Wiedergabetreue kodieren und dekodieren kann (mit diesem Skript). Die Qualität der Rekonstruktion des Autoencoders ist entscheidend für die Leistung des Latent Diffusion Mannequin, da sie die Obergrenze der Qualität unserer generierten Bilder definiert. Wenn der Decoder des Autoencoders verschwommene Bilder oder Bilder von geringer Qualität erzeugt, ist unser generatives Modell nicht in der Lage, Bilder mit höherer Qualität zu erzeugen.

Benutze dies Skriptkönnen wir die Genauigkeit des Autoencoders mithilfe von quantifizieren Multiskalige Messung des Strukturähnlichkeitsindex (MS-SSIM) zwischen den Originalbildern und ihren Rekonstruktionen. In diesem Beispiel erhalten wir eine hohe Leistung mit einer MS-SSIM-Metrik von 0,9876.
Nachdem wir den Autoencoder trainiert haben, trainieren wir den Diffusionsmodell auf dem Latentraum z. Beim Diffusionsmodell handelt es sich um ein Modell, das Bilder aus einem reinen Rauschbild erzeugen kann, indem es über eine Reihe von Zeitschritten iterativ entrauscht wird. Normalerweise wird ein verwendet U-Web-Architektur (das ein Encoder-Decoder-Format hat), wo wir Schichten des Encoder-Sprungs haben, die mit Schichten im Decoder-Teil verbunden sind (über lengthy Verbindungen überspringen), was die Wiederverwendbarkeit von Funktionen ermöglicht und Coaching und Konvergenz stabilisiert.

Während des Trainings lernt das Latent Diffusion Mannequin anhand dieser Eingabeaufforderungen eine bedingte Lärmvorhersage. Auch hier verwenden wir MONAI, um dieses Netzwerk aufzubauen und zu trainieren. In diesem Skriptdamit instanziieren wir das Modell Aufbauwo die Schulung und Bewertung in diesem durchgeführt wird Teil des Codes. Da uns die Textaufforderungen in diesem Tutorial nicht allzu sehr interessieren, verwenden wir für alle Bilder dasselbe (einen Satz mit der Aufschrift „ „T1-gewichtetes Bild eines Gehirns.”).

Auch hier können wir die Leistung unseres trainierten generativen Modells quantifizieren, dieses Mal bewerten wir die Qualität der Proben (unter Verwendung von Fréchet-Anfangsdistanz (FID)) und die Diversität des Modells (Berechnung des MS-SSIM zwischen allen Probenpaaren einer Gruppe von 1.000 Proben). Mit diesen paar Skripten (1 Und 2) haben wir einen FID = 2,1986 und eine MS-SSIM-Diversität = 0,5368 erhalten.
Wie Sie in den vorherigen Bildern und Ergebnissen sehen können, verfügen wir nun über ein Modell, das hochauflösende Bilder mit hervorragender Qualität erzeugen kann. Allerdings haben wir keine räumliche Kontrolle darüber, wie die Bilder aussehen. Zu diesem Zweck werden wir ein ControlNet verwenden, um die Generierung unseres latenten Diffusionsmodells zu steuern.
ControlNet-Schulung

Der ControlNet-Architektur besteht aus zwei Hauptkomponenten: a trainierbare Model des Encoders aus dem U-Web-Modell, einschließlich der mittleren Blöcke, und a vorab trainierte „gesperrte“ Model des Diffusionsmodells. Hier behält die gesperrte Kopie die generative Fähigkeit bei, während die trainierbare Kopie auf bestimmte Bild-zu-Bild-Datensätze trainiert wird, um die bedingte Steuerung zu erlernen. Diese beiden Komponenten sind über a miteinander verbunden „Null-Faltung“-Schicht– eine 1×1-Faltungsschicht mit initialisierten Gewichten und Bias, die auf Null gesetzt sind. Die Faltungsgewichte gehen schrittweise von Nullen zu optimierten Parametern über und stellen so sicher, dass während der ersten Trainingsschritte die Ausgaben sowohl der trainierbaren als auch der gesperrten Kopien mit dem übereinstimmen, was sie wären, wenn das ControlNet nicht vorhanden wäre. Mit anderen Worten: Wenn ein ControlNet vor einer Optimierung auf bestimmte neuronale Netzwerkblöcke angewendet wird, führt es zu keinem zusätzlichen Einfluss oder Rauschen auf die tiefen neuronalen Merkmale.
Durch die Integration dieser beiden Komponenten ermöglicht uns das ControlNet, das Verhalten jeder Ebene im U-Web des Diffusionsmodells zu steuern.
In unserem Beispiel instanziieren wir das ControlNet in dieses Skriptunter Verwendung des folgenden äquivalenten Snippets.
import torch
from generative.networks.nets import ControlNet, DiffusionModelUNet
# Load pre-trained diffusion mannequin
diffusion_model = DiffusionModelUNet(
spatial_dims=2,
in_channels=3,
out_channels=3,
num_res_blocks=2,
num_channels=[256, 512, 768],
attention_levels=[False, True, True],
with_conditioning=True,
cross_attention_dim=1024,
num_head_channels=[0, 512, 768],
)
diffusion_model.load_state_dict(torch.load("diffusion_model.pt"))
# Create ControlNet
controlnet = ControlNet(
spatial_dims=2,
in_channels=3,
num_res_blocks=2,
num_channels=[256, 512, 768],
attention_levels=[False, True, True],
with_conditioning=True,
cross_attention_dim=1024,
num_head_channels=[0, 512, 768],
conditioning_embedding_in_channels=1,
conditioning_embedding_num_channels=[64, 128, 128, 256],
)
# Create trainable copy of the diffusion mannequin
controlnet.load_state_dict(diffusion_model.state_dict(), strict=False)
# Lock the weighht of the diffusion mannequin
for p in diffusion_model.parameters():
p.requires_grad = False
Da wir ein latentes Diffusionsmodell verwenden, erfordert dies, dass ControlNets bildbasierte Bedingungen in denselben latenten Raum umwandelt, um sie an die Faltungsgröße anzupassen. Dafür verwenden wir a Faltungsnetzwerk gemeinsam mit dem Vollmodell trainiert. In unserem Fall haben wir drei Downsampling-Ebenen (ähnlich dem Autoencoder KL) definiert „conditioning_embedding_num_channels=[64, 128, 128, 256]”. Da es sich bei unserem bedingten Bild um ein FLAIR-Bild mit einem Kanal handelt, müssen wir auch die Anzahl der Eingangskanäle angeben „conditioning_embedding_in_channels=1“.
Nachdem wir unser Netzwerk initialisiert haben, trainieren wir es ähnlich einem Diffusionsmodell. Im folgenden Ausschnitt (und in diesem Teil des Codes), können wir sehen, dass wir zuerst unser bedingtes FLAIR-Bild an das trainierbare Netzwerk übergeben und die Ausgaben von seinen Skip-Verbindungen erhalten. Anschließend werden diese Werte bei der Berechnung des vorhergesagten Lärms in das Diffusionsmodell eingegeben. Intern summiert das Diffusionsmodell die Sprungverbindung von den ControlNets mit seinen eigenen, bevor es den Decoder-Teil einspeist (Code).
# Coaching Loop
...
photos = batch["t1w"].to(gadget)
cond = batch["flair"].to(gadget)
...
noise = torch.randn_like(latent_representation).to(gadget)
noisy_z = scheduler.add_noise(
original_samples=latent_representation, noise=noise, timesteps=timesteps
)
# Compute trainable half
down_block_res_samples, mid_block_res_sample = controlnet(
x=noisy_z, timesteps=timesteps, context=prompt_embeds, controlnet_cond=cond
)
# Utilizing controlnet outputs to manage diffusion mannequin behaviour
noise_pred = diffusion_model(
x=noisy_z,
timesteps=timesteps,
context=prompt_embeds,
down_block_additional_residuals=down_block_res_samples,
mid_block_additional_residual=mid_block_res_sample,
)
# Then compute diffusion mannequin loss as ordinary
...
ControlNet-Probenahme und -Bewertung
Nachdem wir unsere Modelle trainiert haben, können wir sie testen und bewerten. Hierverwenden wir die FLAIR-Bilder aus dem Testsatz, um konditionierte T1w-Bilder zu erstellen. Ähnlich wie bei unserem Coaching ist der Sampling-Prozess dem des Diffusionsmodells sehr ähnlich. Der einzige Unterschied besteht darin, dass wir das Zustandsbild an das trainierte ControlNet übergeben und dessen Ausgabe verwenden, um das Diffusionsmodell in jedem Sampling-Zeitschritt zu füttern . Wie wir aus der folgenden Abbildung sehen können, Unsere erzeugten Bilder folgen mit hoher räumlicher Genauigkeit der Originalkonditionierungwobei die Gyri-Kortex ähnlichen Formen folgt und die Bilder die Grenze zwischen verschiedenen Geweben bewahren.

Nachdem wir die Bilder unserer Modelle abgetastet haben, können wir die Leistung unseres ControlNet bei der Übersetzung der Bilder zwischen verschiedenen Kontrasten quantifizieren. Da wir die erwarteten T1w-Bilder aus dem Testsatz haben, können wir auch deren Unterschiede überprüfen und den Abstand zwischen den realen und synthetischen Bildern mithilfe von berechnen mittlerer absoluter Fehler (MAE), Gipfel Sign-Rausch-Verhältnis (PSNR)Und MS-SSIM. In unserem Testsatz haben wir bei der Ausführung einen PSNR=26,2458+-1,0092, einen MAE=0,02632+-0,0036 und einen MSSIM=0,9526+-0,0111 erhalten Skript.
Und das ist alles! ControlNet bietet eine unglaubliche Kontrolle über unsere Diffusionsmodelle und neuere Ansätze haben seine Methode erweitert, um verschiedene trainierte ControlNets zu kombinieren (Multi-ControlNet), arbeiten mit verschiedenen Konditionierungsarten im selben Modell (T2I-Adapter) und konditionieren das Modell sogar an Stilen (mit Methoden wie ControlNet 1.1 –Nur als Referenz). Wenn diese Methoden interessant klingen, vergessen Sie nicht, mir zu folgen, um weitere Anleitungen wie diese zu erhalten! 😁
Weitere Tutorials zum MONAI Generative Mannequin und mehr über unsere Funktionen finden Sie in unserem Tutorial-Seite!
Hinweis: Alle Bilder stammen, sofern nicht anders angegeben, vom Autor
Steuerbare medizinische Bilderzeugung mit ControlNets wurde ursprünglich veröffentlicht in Auf dem Weg zur Datenwissenschaft auf Medium, wo die Leute das Gespräch fortsetzen, indem sie diese Geschichte hervorheben und darauf reagieren.