2017-12-28 2 views
0

Kürzlich habe ich ein paar Tutorials zum maschinellen Lernen gefolgt, und jetzt möchte ich testen, ob ich selbst ein Bilderkennungsprogramm machen kann. Dazu möchte ich den CIFAR 10 Datensatz verwenden, aber ich denke, ich habe ein kleines Problem bei der Konvertierung des Datensatzes.Überprüfen Sie, ob cifar10 gut konvertiert ist

Für wer ist nicht vertraut mit diesem Satz: der Datensatz kommt als Listen von n Zeilen und 3072 Spalten, in denen die ersten 1024 Spalten die roten Werte, die zweite 1024 die grünen Werte und die letzten sind die blauen Werte. Jede Reihe ist ein einzelnes Bild (Größe 32x32) und die Pixelreihen sind aufeinander gestapelt (die ersten 32 Werte sind die roten Werte für die oberste Reihe von Pixeln usw.)

Was ich damit machen wollte Datensatz ist es in einen 4D Tensor (mit numpy) zu transformieren, so dass ich die Bilder mit Matplotlibs .imshow() ansehen kann. der Tensor, den ich gemacht habe, hat diese Form: (n, 32, 32, 3), so speichert die erste Dimension alle Bilder, die zweite speichert Reihen von Pixeln, die dritte speichert einzelne Pixel und die letzte repräsentiert die RGB-Werte dieser Pixel. Hier ist die Funktion, die ich gemacht, dass das tun soll:

def rawToRgb(data): 
    length = data.shape[0] 

    # convert to flat img array with rgb pixels 
    newAr = np.zeros([length, 1024, 3]) 
    for img in range(length): 
     for pixel in range(1024): 
      newAr[img, pixel, 0] = data[img, pixel] 
      newAr[img, pixel, 1] = data[img, pixel+1024] 
      newAr[img, pixel, 2] = data[img, pixel+2048] 

    # convert to 2D img array 
    newAr2D = newAr.reshape([length, 32, 32, 3]) 
    # plt.imshow(newAr2D[5998]) 
    # plt.show() 
    return newAr2D 

, die einen einzigen Parameter (ein Tensor Form (n, 3072)). Ich habe den Pyplot-Code auskommentiert, da dies nur zum Testen ist, aber beim Testen habe ich festgestellt, dass alles in Ordnung ist (ich kann die Formen der Objekte in den Bildern erkennen, aber ich bin nicht sicher, ob die Farben gut sind oder nicht, wie ich ein paar seltsam farbige Bilder sowie einige ziemlich normale Bilder bekommen ... Hier sind einige Beispiele:. purple plane, blue cat, normal horse, blue frog

Kann mir jemand sagen, ob ich einen Fehler mache oder nicht wahr?

Tanks im Voraus !!

Antwort

1

die Bilder, die seltsam farbig erscheinen sind die negative des tatsächlichen Bildes, s o Sie müssen jeden Pixelwert von 255 subtrahieren, um den wahren Wert zu erhalten. Wenn Sie wollen einfach nur, um zu sehen, was die Originalbilder aussehen, verwenden Sie:

from scipy.misc import imread 
import matplotlib.pyplot as plt 
img = imread(file_path) 
plt.imshow(255 - img) 
plt.show() 

Die ursprüngliche Ursache des Problems ist, dass die CIFAR-10 Daten speichert die Pixelwerte auf einer Skala von 0 bis 255, aber matplotlib der imshow() Methode (die ich vermute, dass Sie verwenden) erwartet Eingaben zwischen 0 und 1. Bei einer Eingabe, die nicht zwischen 0 und 1 skaliert wird, führt imshow() intern eine gewisse Normalisierung durch, wodurch einige Bilder negativ werden.

Verwandte Themen