Auf jeden Fall ist die Anzahl der Bilder erforderlich, um Bilder mit Deep Learning genau zu klassifizieren. Es ist jedoch schwierig, eine große Anzahl von Bildern manuell vorzubereiten und zu kennzeichnen. Daher wird die Anzahl der Bilder durch Verarbeiten der markierten Bilder erhöht (aufgeblasen).
Dieses Mal möchte ich aus dem TensorFlow-Code lernen, wie man sich aufbläst.
Insbesondere werden wir aus dem Code von CIFAR-10 lernen. cifar10/cifar10_input.py
Im eigentlichen Code wurde das Bild aufgeblasen, indem mehrere Prozesse wie unten gezeigt kombiniert wurden.
# Image processing for training the network. Note the many random
# distortions applied to the image.
# Randomly crop a [height, width] section of the image.
distorted_image = tf.random_crop(reshaped_image, [height, width, 3])
# Randomly flip the image horizontally.
distorted_image = tf.image.random_flip_left_right(distorted_image)
# Because these operations are not commutative, consider randomizing
# the order their operation.
distorted_image = tf.image.random_brightness(distorted_image, max_delta=63)
distorted_image = tf.image.random_contrast(distorted_image, lower=0.2, upper=1.8)
# Subtract off the mean and divide by the variance of the pixels.
float_image = tf.image.per_image_whitening(distorted_image)
Bei jedem Blick gab es fünf Dinge im CIFAR-10-Code:
Wir werden ** visuell ** verstehen, was jeder tut.
tf.random_crop(value, size, seed=None, name=None) Die Funktion random_crop ist eine Funktion zum zufälligen Zuschneiden eines Bildes mit einer bestimmten Größe. Das folgende Bild ist das Ergebnis des tatsächlichen Zuschneidens eines 256x170-Bildes mit einer Größe von 100x100:
Die Trimmposition ändert sich abhängig vom Wert, der dem Saatgut gegeben wird. Wenn der Startwert gleich ist, wird das gleiche Bild generiert, unabhängig davon, wie oft es ausgeführt wird.
tf.image.random_flip_left_right(image, seed=None)
Die Funktion random_flip_left_right ist eine Funktion zum zufälligen horizontalen Spiegeln eines Bildes. Das folgende Bild ist das Ergebnis der tatsächlichen Anwendung der Funktion random_flip_left_right:
Da die Inversion probabilistisch durchgeführt wird, darf sie abhängig vom Startwert nicht invertiert werden.
Eine andere Funktion, die random_flip_left_right ähnelt, ist random_flip_up_down. Während random_flip_left_right horizontal kippt, kippt random_flip_up_down vertikal. ..
tf.image.random_brightness(image, max_delta, seed=None)
Die Funktion random_brightness ist eine Funktion zum Anpassen der Helligkeit eines Bildes um einen Zufallsfaktor. Das folgende Bild ist das Ergebnis der tatsächlichen Anwendung der Funktion random_brightness:
Der Helligkeitsgrad ändert sich abhängig von den Werten von max_delta und seed.
tf.image.random_contrast(image, lower, upper, seed=None)
Die Funktion random_contrast ist eine Funktion zum Anpassen des Kontrasts eines Bildes aufgrund eines Zufallsfaktors. Das folgende Bild ist das Ergebnis der tatsächlichen Anwendung der Funktion random_contrast:
Sie können sehen, dass Kontrast1 den Kontrast verringert und Kontrast2 den Kontrast verbessert hat. Die unteren und oberen Festigkeitsgrenzen können mit den unteren und oberen eingestellt werden.
tf.image.per_image_whitening(image)
Die Funktion per_image_whitening ist eine Funktion zum Aufhellen eines Bildes, sodass der Durchschnitt 0 beträgt. Das folgende Bild ist das Ergebnis der tatsächlichen Anwendung der Funktion per_image_whitening:
Tatsächlich wird jeder Pixelwert mit (x --mean) / adjust_stddev berechnet. Mittelwert ist der Durchschnitt aller Pixelwerte im Bild, und adjustiertes_stddev ist definiert als angepasstes_stddev = max (stddev, 1,0 / sqrt (image.NumElements ())). Wobei stddev die Standardabweichung aller Pixelwerte im Bild ist.
Es gibt andere Funktionen, die zum Auffüllen verwendet werden können, obwohl sie im TensorFlow CIFAR-10-Beispiel nicht verwendet werden. Ich werde ungefähr 5 davon vorstellen. tf.image.transpose_image(image) Die Funktion transpose_image ist eine Funktion, die ein Bild transponiert. Das folgende Bild ist das Ergebnis der tatsächlichen Anwendung der Funktion transpose_image:
Da es nur transponiert wird, ist das Ergebnis das gleiche, egal wie oft es ausgeführt wird. Wenn Sie das verschobene Bild weiter verschieben, kehrt es zum Originalbild zurück.
tf.image.rot90(image, k=1) Die rot90-Funktion dreht das Bild alle 90 Grad gegen den Uhrzeigersinn. Das folgende Bild ist das Ergebnis der tatsächlichen Anwendung der rot90-Funktion:
Sie können angeben, wie oft gedreht werden soll, indem Sie den Wert von k ändern.
tf.image.random_hue(image, max_delta, seed=None) Die Funktion random_hue ist eine Funktion zum Anpassen des Farbtons eines RGB-Bildes aufgrund eines Zufallsfaktors. Das folgende Bild ist das Ergebnis der tatsächlichen Anwendung der Funktion random_hue:
max_delta muss im Bereich von 0 bis 0,5 liegen.
tf.image.random_saturation(image, lower, upper, seed=None) Die Funktion random_saturation ist eine Funktion zum Anpassen der Sättigung eines RGB-Bildes. Das folgende Bild ist das Ergebnis der tatsächlichen Anwendung der Funktion random_saturation:
Bitte beachten Sie die folgenden Informationen zur Vergrößerung / Verkleinerung:
Recommended Posts