webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen dem Durchführen eines Upsamplings zusammen mit einer gestuften Transponierungsfaltung und einer Transponierungsfaltung nur mit Schritt 1?

Ich habe an einigen Stellen bemerkt, dass Leute so etwas benutzen, normalerweise in vollständig faltungsbasierten Netzwerken, Autoencodern und ähnlichem:

model.add(UpSampling2D(size=(2,2)))
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(1,1))

Ich frage mich, was ist der Unterschied zwischen dem und einfach:

model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(2,2))

Links zu Veröffentlichungen, die diesen Unterschied erklären, sind willkommen.

20

hier und hier finden Sie eine wirklich nette Erklärung, wie transponierte Windungen funktionieren. Um diese beiden Ansätze zusammenzufassen:

  1. In Ihrem ersten Ansatz nehmen Sie zunächst eine Überarbeitung Ihrer Feature-Map vor:

    [[1, 2], [3, 4]] -> [[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]]
    

    und dann wenden Sie eine klassische Faltung an (als Conv2DTranspose mit stride=1 und padding='same' ist äquivalent zu Conv2D).

  2. In Ihrem zweiten Ansatz bündeln Sie zunächst und (max) Ihre Feature-Map :

    [[1, 2], [3, 4]] -> [[1, 0, 2, 0], [0, 0, 0, 0], [3, 0, 4, 0], [0, 0, 0, 0]]
    

    und dann eine klassische Faltung mit filter_size, Filter` usw.

    enter image description here

Eine lustige Tatsache ist, dass - obwohl diese Ansätze unterschiedlich sind - sie etwas gemeinsam haben. Die Transponierungsfaltung soll die Annäherung des Faltungsgradienten sein, daher ist der erste Ansatz die Annäherung von sum pooling während zweite max pooling Gefälle. Dies führt bei den ersten Ergebnissen zu etwas gleichmäßigeren Ergebnissen.

Andere Gründe, warum Sie möglicherweise den ersten Ansatz sehen, sind:

  • Conv2DTranspose (und seine Äquivalente) sind in keras relativ neu, daher war die einzige Möglichkeit, ein lernfähiges Upsampling durchzuführen, die Verwendung von Upsample2D,
  • Der Autor von keras - Francois Chollet verwendete diesen Ansatz in einem seiner Tutorials,
  • In den vergangenen Äquivalenten der Transponierung schien die Faltung in keras aufgrund einiger API Inkonsistenzen schrecklich zu funktionieren.
23
Marcin Możejko