2017-12-17 5 views

Antwort

1

Eine gängige Methode, um das zu tun, was Sie verlangen, ist einfach die Größe der Bilder auf die gewünschte Auflösung zu ändern, die für die Eingabeschicht in das CNN erforderlich ist. Da Sie Ihre Frage mit gekennzeichnet haben, verfügt keras über ein Vorverarbeitungsmodul, mit dem Sie Bilder laden und optional die gewünschte Größe angeben können, mit der Sie das Bild skalieren möchten. Wenn Sie sich die tatsächliche Quelle der Methode ansehen: https://github.com/keras-team/keras/blob/master/keras/preprocessing/image.py#L321, verwendet sie intern Kisseninterpolationsmethoden, um das Bild auf die gewünschte Auflösung zu skalieren.

Da die MNIST-Ziffern ursprünglich Graustufen sind, müssen Sie das Einzelkanalbild in ein Mehrkanalbild replizieren, so dass es künstlich zu RGB wird. Dies bedeutet, dass die roten, grünen und blauen Kanäle alle gleich sind und das Gegenstück zum MNIST-Graustufenbild sind. Die Methode load_img verfügt über das zusätzliche Flag grayscale, das Sie auf False setzen können, um das Bild als RGB-Bild zu laden.

Sobald Sie diese Bilder in RGB konvertiert und skaliert haben, können Sie die Übertragung mit VGG19 durchführen. In der Tat wurde es schon einmal gemacht. Diesen Link finden Sie hier: https://www.analyticsvidhya.com/blog/2017/06/transfer-learning-the-art-of-fine-tuning-a-pre-trained-model/ und sehen Sie Abschnitt 6: Verwenden Sie das vortrainierte Modell zur Identifizierung der Ziffern.

Ich würde Sie gerne warnen, dass die Aufnahme eines 28 x 28 Bildes und die Größenanpassung auf ein 224 x 224 Bild starke Interpolationsartefakte haben wird. Sie würden Transfer-Lernen auf Bilddaten durchführen, die aufgrund von Upsampling Rauschen enthalten würden, aber das wurde in dem Blogpost getan, den ich vorher verlinkte. Ich würde empfehlen, dass Sie die Interpolation zu etwas wie bilinear oder bicubic ändern. Standardmäßig wird der nächste Nachbar verwendet, was für das Upsampling von Bildern schrecklich ist.

YMMV, versuchen Sie also, das Bild auf die gewünschte Größe der Eingabeschicht zu skalieren und das Bild mit drei Kanälen aufzufüllen, um es RGB zu machen und zu sehen, was passiert.

+0

Vielen Dank für die Hinweise. Ich habe so etwas versucht. https://pastebin.com/Gmcb97y8 Und ich habe Typeerror: ‚Tensor‘ Objekt unterstützt keine Artikel Zuordnung – user1159517

+0

Ich nehme einen Blick. Lass mich auf dich zurückkommen. – rayryeng

0

Dies hängt stark von dem Modell ab, das Sie verwenden möchten. Im Fall von VGGNet müssen Sie die Eingabe auf die erwartete Zielgröße umskalieren, da das VGG-Netzwerk die FC-Ebene enthält, deren Form den Bilddimensionen nach einer bestimmten Anzahl von Neuauflösungen entspricht. Beachten Sie, dass konvolutionelle Schichten jede Bildgröße aufgrund der Parameterfreigabe annehmen können.

Moderne CNNs folgen jedoch dem Trend zum Umschalten auf Faltung und lösen das Problem des willkürlichen Transferlernens. Wenn Sie diesen Pfad wählen, nehmen Sie einen der neuesten Inception models. In diesem Fall sollte das Modell außerhalb des Modells in der Lage sein, auch kleine 28 × 28 × 1-Bilder zu akzeptieren.

Verwandte Themen