Bildgrößenänderung und -auffüllung für CNN

13

Ich möchte eine CNN für die Bilderkennung trainieren. Bilder für das Training haben keine feste Größe. Ich möchte, dass die Eingabegröße für die CNN beispielsweise 50 x 100 (Höhe x Breite) beträgt. Wenn ich einige kleine Bilder (zum Beispiel 32x32) auf die Eingabegröße verkleinere, wird der Inhalt des Bildes horizontal zu stark gestreckt, aber für einige mittelgroße Bilder sieht es in Ordnung aus.

Was ist die richtige Methode, um die Größe von Bildern zu ändern und gleichzeitig zu vermeiden, dass der Inhalt zerstört wird?

(Ich denke über das Auffüllen von Bildern mit Nullen nach, um die Größe zu vervollständigen, nachdem ich sie zu einem gewissen Grad unter Beibehaltung des Verhältnisses von Breite und Höhe verkleinert habe. Wäre es in Ordnung mit dieser Methode?)

Odgiiv
quelle

Antworten:

9

Diese Frage zum Stackoverflow könnte Ihnen helfen. Zusammenfassend sind einige Deep-Learning-Forscher der Meinung, dass das Auffüllen eines großen Teils des Bildes keine gute Praxis ist, da das neuronale Netz lernen muss, dass der aufgefüllte Bereich für die Klassifizierung nicht relevant ist, und dies muss nicht gelernt werden, wenn Sie dies tun Verwenden Sie zum Beispiel Interpolation.

David Masip
quelle
4

Sie haben einige Möglichkeiten:

Für kleine Bilder:

  • Upsampling durch Interpolation
  • Füllen Sie das Bild mit Nullen auf

Wenn Sie das Seitenverhältnis über das Upsampling nicht beibehalten können, können Sie die überschüssigen Pixel in der größten Dimension upsamplen und auch zuschneiden. Dies würde natürlich zu Datenverlusten führen, aber Sie können den Mittelpunkt Ihres Ernteguts wiederholt verschieben. Dies würde Ihrem Modell helfen, robuster zu sein.


Für große Bilder:

  • Downsample
  • Beschneide es auf deine Eingabegröße

Wenn Sie ein Fully Convolutional Network (FCN) verwenden, müssen Sie die Größe Ihrer Bilder nicht ändern.

TL; DR:

ja, das Auffüllen mit Nullen ist eine gültige Option.

Benji Albert
quelle
Wenn ich Gewichte für ein vollständig faltungsfähiges Netzwerk trainiert habe, das 3 verkettete Videoframes akzeptiert, wie kann ich diese Gewichte für ein Netzwerk mit derselben Architektur verwenden, mit der Ausnahme, dass die Eingabegröße auf 11 verkettete Frames erhöht wird? Ich mache nur Vorhersagen, trainiere nicht weiter. Meine Frage ist hier: datascience.stackexchange.com/questions/55737/…
mLstudent33
3

Sie können Folgendes tun: Ändern Sie zunächst die Größe der Bilder bis zu einem bestimmten Grad und füllen Sie das Bild dann von allen Seiten auf, was dazu beitragen kann, die Funktionen im Bild beizubehalten.

Rohit Jere
quelle