Ich mache gerade das Udacity Deep Learning Tutorial. In Lektion 3 sprechen sie über eine 1x1-Faltung. Diese 1x1-Faltung wird im Google Inception-Modul verwendet. Ich habe Probleme zu verstehen, was eine 1x1-Faltung ist.
Ich habe auch diesen Beitrag von Yann Lecun gesehen.
Könnte mir das bitte jemand erklären?
Antworten:
Angenommen, ich habe eine Konvektionsschicht, die einen -förmigen Tensor ausgibt wobei:( N, F, H, W)
Angenommen, diese Ausgabe wird in eine Conv-Ebene mit 1x1-Filtern, Null-Polsterung und Schritt 1 eingespeist . Dann hat die Ausgabe dieser 1x1-Conv-Ebene die Form .F1 (N,F1,H,W)
So können 1x1-Conv-Filter verwendet werden, um die Dimensionalität im Filterraum zu ändern. Wenn erhöhen wir die Dimensionalität, wenn , verringern wir die Dimensionalität in der Filterdimension.F1>F F1<F
In der Tat heißt es in dem Google Inception-Artikel " Going Deeper with Convolutions" (fett gedruckt, nicht von Originalautoren):
In der Inception-Architektur verwenden wir daher die 1x1-Faltungsfilter, um die Dimensionalität in der Filterdimension zu reduzieren. Wie ich oben erklärt habe, können diese 1x1-Conv-Layer im Allgemeinen verwendet werden, um die Filterraumdimensionalität zu ändern (entweder zu erhöhen oder zu verringern). In der Inception-Architektur sehen wir, wie effektiv diese 1x1-Filter für die Dimensionsreduzierung sein können, explizit im Filterdimensionsraum nicht die räumliche Dimension Raum.
Vielleicht gibt es andere Interpretationen von 1x1-Conv-Filtern, aber ich bevorzuge diese Erklärung, insbesondere im Zusammenhang mit der Google Inception-Architektur.
quelle
Eine 1x1-Faltung ordnet einfach ein Eingabepixel mit allen Kanälen einem Ausgabepixel zu und betrachtet nichts um sich herum. Es wird oft verwendet, um die Anzahl der Tiefenkanäle zu reduzieren, da es oft sehr langsam ist, Volumes mit extrem großen Tiefen zu multiplizieren.
Die unterste ist ca. 3,7x langsamer.
Theoretisch kann das neuronale Netzwerk mit dieser Option auswählen, welche Eingangsfarben angezeigt werden sollen, anstatt alles mit brachialer Gewalt zu multiplizieren.
quelle
num_weights = in_depth x out_depth x kernel_size = 256x256x4x4
. Im ersten Fallnum_weights = 256x64x1x1+64x265x4x4=256x64x17
. Nimm das Verhältnis und das ergibt 256/17 ~ 3.7. Auf diesem Papier auf Seite 9 finden Sie eine Visualisierung, wie sich die Anzahl der Gewichte auf die Ein- und Ausgabetiefe bezieht. arxiv.org/pdf/1603.07285.pdfDer Hauptgrund , warum ich nicht 1x1 Faltungen verstehen ist , weil ich nicht verstehen , wie Faltungen wirklich arbeitete der Schlüsselfaktor ist , wie eine Faltung von mehreren Kanälen Rechen / Filter funktioniert. Um dies zu verstehen, fand ich diese Antwort auch nützlich:any
https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work
Insbesondere ist Typ 2.2 die korrekte Beschreibung einer dortigen Faltung.
Eine weitere hilfreiche Antwort:
https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or
In dieser Antwort wird erläutert, wie Sie für jede In / Out-Kanalkombination einen eigenen Filter haben . Nach jeder Berechnung werden die Ergebnisse über die Eingangskanalachse summiert, wobei die Anzahl der Werte des Ausgangskanals übrig bleibt.
Hier ist ein Video, das mir geholfen hat zu verstehen, wie eine 1x1-Faltung funktioniert.
https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x
Hier sind die wichtigsten Dinge, die ich daraus gemacht habe:
quelle
Ich werde versuchen, es mit Abbildungen intuitiver und kurzer zu erklären!
Eine 1 * 1 Conv (aka Netzwerk im Netzwerk )?
Nehmen wir an, Sie geben Folgendes ein: (n_H, n_W, n_c_prev). Sie können denken , von (1 * 1 * n_c_prev) als ein einzelnes Neuron (ein vollständig verbundenes Netzwerk -ie warum N / w in N / w ) , die in der Eingabe in (n_c_prev) Zahlen ist unter ihnen mit (1 * 1 * n_c_prev Multiplikation ) und dann addieren und dann nehmen ReLu & Ausgabe (n_H, n_W) und wenn Sie mehrere Filter (n_c) haben, dann würde Ausgabe (n_H, n_W, n_C) sein.
Sie können also Pooling Layer verwenden, um räumliche Dimensionen (n_H, n_W) zu reduzieren, und 1 * 1 Conv verwenden, um n_c_prev (dh die Anzahl der Kanäle) zu reduzieren, wodurch eine Menge Berechnungen eingespart werden. Zum Beispiel
Daher ein Mitnehmen
Sie können eine 1x1-Faltungsschicht verwenden, um n_C zu reduzieren, aber nicht n_H, n_W.
Sie können eine Poolebene verwenden, um n_H, n_W und n_C zu reduzieren.
Mit anderen Worten,
quelle
Noch eine Idee zur Dimensionsreduzierung im Kontext von 1x1-Filtern:
Nehmen Sie zum Beispiel eine 4096x8x8 fc7-Ebene von FCN. Was passiert, wenn die nächste Ebene (nenne sie fc8) 2048x8x8 mit Filtergröße 1 ist? fc7 befindet sich sehr tief im Netzwerk, jede seiner 4096 Funktionen ist semantisch reichhaltig, aber jedes Neuron (z. B. Eingangsbild ist 250x250x3) hat ein großes Empfangsfeld. Mit anderen Worten, wenn ein Neuron sehr aktiv ist, wissen wir, dass irgendwo in seinem semantischen Feld ein entsprechendes Merkmal vorhanden ist.
Nehmen Sie zum Beispiel ein Neuron links oben in fc8 mit einem 1x1-Filter. Es verbindet sich mit allen 4096 Neuronen / Merkmalen nur in demselben Empfangsfeld (linke obere Ecke des Bildes), von denen jedes durch ein einzelnes Merkmal aktiviert wird. Einige (lasst uns 500 sein) von ihnen sind sehr aktiv. Wenn das resultierende Neuron auch sehr aktiv ist, bedeutet dies, dass es wahrscheinlich gelernt hat, ein oder mehrere Merkmale in diesem Rezeptorfeld zu identifizieren. Nachdem Sie dies 2048 Mal für die obersten linken Neuronen in fc8 getan haben, sind einige von ihnen (z. B. 250) sehr aktiv, was bedeutet, dass sie Merkmale aus demselben Empfangsfeld über fc7 'gesammelt' haben, und viele sehr wahrscheinlich mehr als einer.
Wenn Sie die Dimensionalität weiter verringern, lernt eine abnehmende Anzahl von Neuronen eine zunehmende Anzahl von Merkmalen aus demselben Empfangsfeld. Und da die räumlichen Parameter 8x8 gleich bleiben, ändern wir nicht die "Ansicht" jedes Neurons, verringern also nicht die räumliche Grobheit.
Vielleicht möchten Sie einen Blick auf 'Fully Convolutional Networks' von Long, Shelhamer und Darrel werfen.
quelle
Die mathematische Operation der Faltung bedeutet, das Produkt zweier (kontinuierlicher oder diskreter) Funktionen über alle möglichen Schaltpositionen zu berechnen.
Bildverarbeitungsanwendungen neuronaler Netze - einschließlich faltungsbedingter neuronaler Netze - wurden in [M. Egmont-Petersen, D. de Ridder, H. Handels. Bildverarbeitung mit neuronalen Netzen - ein Rückblick , Pattern Recognition , Vol. 35, Nr. 10, S. 2279-2301, 2002].
quelle