Ich habe einige -Literatur zu Fully Convolutional Networks untersucht und bin auf den folgenden Satz gestoßen ,

Ein vollständig gefaltetes Netzwerk wird erreicht, indem die parameterreichen vollständig verbundenen Schichten in Standard-CNN-Architekturen durch Faltungsschichten durch $ 1 \ times 1 $ Kernel.

Ich habe zwei Fragen.

  1. Was ist mit parameterreich gemeint? Wird es als parameterreich bezeichnet, weil die vollständig verbundenen Schichten Parameter ohne „räumliche“ Reduzierung weitergeben?

  2. Wie funktionieren $ 1 \ times 1 $ -Kernel? Bedeutet „t $ 1 \ times 1 $ -Kernel nicht einfach, dass man ein einzelnes Pixel über das Bild schiebt? Ich bin darüber verwirrt.

Antwort

Vollfaltungsnetzwerke

A FCN (Full Convolution Network) ist ein neuronales Netzwerk, das nur Faltungsoperationen (und Subsampling- oder Upsampling-Operationen) ausführt. Entsprechend ist ein FCN ein CNN ohne vollständig verbundene Schichten.

Faltungs-Neuronale Netze

Das typische Faltungs-Neuronale Netzwerk (CNN) ist nicht vollständig Faltungsnetzwerk, weil es enthält häufig auch vollständig verbundene Schichten (die die Faltungsoperation nicht ausführen), die parameterreich sind, in dem Sinne, dass sie viele Parameter haben (im Vergleich zu ihrer äquivalenten Faltung) schichten), obwohl die vollständig verbundenen schichten auch als faltungen mit ker angesehen werden können Knoten, die den gesamten Eingabebereich abdecken , was die Hauptidee bei der Konvertierung eines CNN in einen FCN ist. Siehe dieses Video von Andrew Ng, in dem erklärt wird, wie eine vollständig verbundene Schicht in eine Faltungsschicht konvertiert wird.

Ein Beispiel für eine FCN

Ein Beispiel für ein vollständig gefaltetes Netzwerk ist das U-net (auf diese Weise wegen seiner U-Form aufgerufen, die Sie aus der folgenden Abbildung sehen können), ein berühmtes Netzwerk, das für die -Semantik verwendet wird Segmentierung , dh Pixel eines Bildes so klassifizieren, dass Pixel, die derselben Klasse (z. B. einer Person) angehören, derselben Bezeichnung (dh Person) zugeordnet sind, auch pixelweise ( oder dichte) Klassifizierung.

Geben Sie hier die Bildbeschreibung ein.

Semantische Segmentierung

Bei der semantischen Segmentierung möchten Sie jedem Pixel (oder kleinen Pixelfeld) des Eingabebilds eine Beschriftung zuordnen. Hier ist eine suggestivere Darstellung eines neuronalen Netzwerks, das eine semantische Segmentierung durchführt.

Geben Sie hier die Bildbeschreibung ein

Instanzsegmentierung

Es gibt auch Instanzsegmentierung Hier möchten Sie auch verschiedene Instanzen derselben Klasse unterscheiden (z. B. möchten Sie zwei Personen im selben Bild unterscheiden, indem Sie sie unterschiedlich kennzeichnen). Ein Beispiel für ein neuronales Netzwerk, das zum Beispiel für die Segmentierung verwendet wird, ist die Maske R-CNN . Der Blog-Beitrag Segmentierung: U-Net, Maske R-CNN und medizinische Anwendungen (2020) von Rachel Draelos beschreibt diese beiden Probleme und Netzwerke sehr gut.

Hier ist ein Beispiel für ein Bild, in dem Instanzen derselben Klasse (dh Person) unterschiedlich gekennzeichnet wurden (orange und blau).

Geben Sie hier die Bildbeschreibung ein.

Sowohl semantische als auch Instanzsegmentierungen sind dichte Klassifizierungsaufgaben (insbesondere fallen sie in die Kategorie Bildsegmentierung ), dh Sie möchten jedes Pixel oder viele kleine Pixelfelder eines Bildes klassifizieren.

$ 1 \ times 1 $ Faltungen

Im obigen U-Net-Diagramm sehen Sie, dass es nur Faltungen, Kopieren und Zuschneiden, max. Pooling- und Upsampling-Operationen. Es gibt keine vollständig verbundenen Ebenen.

Wie ordnen wir jedem Pixel (oder einem kleinen Patch von p) eine Beschriftung zu? ixels) der Eingabe? Wie führen wir die Klassifizierung jedes Pixels (oder Patches) ohne eine endgültige vollständig verbundene Schicht durch?

Hier befindet sich der $ 1 \ times 1 $ Faltungs- und Upsampling-Operationen sind nützlich!

Im Fall des obigen U-Net-Diagramms (insbesondere des oberen rechten Teils des Diagramms, der zur Verdeutlichung unten dargestellt ist), zwei $ 1 \ times 1 \ times 64 $ Kernel werden auf das Eingabevolumen angewendet (nicht auf die Bilder!) um zwei Feature-Maps der Größe $ 388 \ times 388 $ zu erstellen. Sie verwendeten zwei $ 1 \ times 1 $ -Kerne, da ihre Experimente zwei Klassen enthielten (Zelle und Nicht-Zelle). Der erwähnte Blog-Beitrag gibt Ihnen auch die Intuition dahinter, daher sollten Sie ihn lesen.

Geben Sie hier die Bildbeschreibung ein.

Wenn Sie versucht haben, das U-Net-Diagramm sorgfältig zu analysieren, werden Sie feststellen, dass die Ausgabe zugeordnet ist haben andere räumliche (Größe und Gewicht) Abmessungen als die Eingabebilder, die Abmessungen $ 572 \ mal 572 \ mal 1 $ haben.

Das ist Gut, weil unser allgemeines Ziel darin besteht, eine dichte Klassifizierung durchzuführen (dh Patches des Bildes zu klassifizieren, wobei die Patches nur ein Pixel enthalten können ), obwohl ich sagte, dass wir eine pixelweise Klassifizierung durchgeführt hätten, haben Sie vielleicht erwartet, dass die Ausgaben genau die gleichen räumlichen Abmessungen der Eingaben haben. Beachten Sie jedoch, dass Sie in der Praxis auch die Ausgabekarten haben könnten die gleiche räumliche Dimension wie die Eingaben: Sie würden nur ne

Wie funktioniert $ 1 \ times 1 $ Faltungen?

A $ 1 \ times 1 $ Faltung ist nur die typische 2d-Faltung, jedoch mit einem $ 1 \ times1 $ -Kernel.

Wie Sie wahrscheinlich bereits wissen (und wenn Sie dies nicht wussten, wissen Sie es jetzt), wenn Sie einen $ g \ times g $ haben Kernel, der auf eine Eingabe der Größe $ h \ times w \ times d $ angewendet wird, wobei $ d $ ist die Tiefe des Eingabevolumens (bei Graustufenbildern beispielsweise $ 1 $ ), der Kernel hat tatsächlich die Form $ g \ times g \ times d $ , dh die dritte Dimension des Kernels entspricht der dritten Dimension der Eingabe, auf die er angewendet wird. Dies ist immer der Fall, außer bei 3D-Faltungen, aber wir sprechen jetzt über die typischen 2D-Faltungen! Weitere Informationen finden Sie unter dieser Antwort .

In dem Fall möchten wir also einen anwenden $ 1 \ times 1 $ Faltung zu einer Eingabe der Form $ 388 \ times 388 \ times 64 $ , wobei $ 64 $ ist die Tiefe der Eingabe, dann hat der tatsächliche $ 1 \ times 1 $ -Kern, den wir verwenden müssen, die Form $ 1 \ mal 1 \ mal 64 $ (wie ich oben für das U-Netz gesagt habe). Die Art und Weise, wie Sie die Tiefe der Eingabe mit $ 1 \ times 1 $ reduzieren, wird durch die Anzahl von $ 1 \ times 1 $ bestimmt Kernel, die Sie verwenden möchten. Dies ist genau das Gleiche wie bei jeder 2d-Faltungsoperation mit verschiedenen Kerneln (z. B. $ 3 \ times 3 $ ).

Im Fall von U-net werden die räumlichen Dimensionen der Eingabe auf die gleiche Weise reduziert, wie die räumlichen Dimensionen einer Eingabe in ein CNN reduziert werden (dh 2d-Faltung, gefolgt von Downsampling-Operationen). Der Hauptunterschied (abgesehen davon, dass keine vollständig verbundenen Schichten verwendet werden) zwischen dem U-Netz und anderen CNNs besteht darin, dass das U-Netz Upsampling-Operationen ausführt, sodass es als Codierer (linker Teil) gefolgt von einem Decodierer (rechter Teil) betrachtet werden kann.

Kommentare

  • Vielen Dank für Ihre ausführliche Antwort, ich weiß das wirklich zu schätzen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.