Deep Learning ist aufgrund der steigenden Nachfrage und der zunehmenden Rahmenbedingungen leichter zu erreichen. aber, Es ist mühsam, einen Datensatz vorzubereiten!
Da Tausende oder Zehntausende von Daten erforderlich sind, ist es sehr schwierig, Daten zu sammeln, es sei denn, jemand bereitet sie wie handgeschriebene Zeichen vor. Erweitern Sie daher von einer kleinen Anzahl von Bildern auf mehrere Bilder und vergrößern Sie diese! Es gibt einen Mechanismus namens.
Ich musste den Datensatz auch selbst vorbereiten, also habe ich ihn mir angesehen und werde ihn als Memo aufschreiben. Wenn Sie Fehler oder bessere Möglichkeiten haben, lassen Sie es uns bitte wissen!
Es fiel mir auch schwer, mehr als 1.000 meiner eigenen Hände zu schießen. Aufgrund der Erhöhung der Anzahl auf 54.000 durch Auffüllen mit dieser Erweiterung ist das Innere des Verzeichnisses ein wenig entsetzlich. Ich hatte Angst, dass mein Bekannter krank sein könnte.
Die Umgebung des Autors ist wie folgt.
Wenn Sie sicherstellen möchten, dass es funktioniert, erstellen Sie eine Umgebung mit anaconda
oder pyenv
und führen Sie sie von dort aus aus.
Python 3.5.3
Keras==2.0.4
numpy==1.12.1
tensorflow==1.0.0
keras
läuft im Tensor Flow
Backend.
Wenn Sie eine ungefähre Vorstellung von "Keras" erhalten möchten, lesen Sie bitte Frühere Artikel. Es ist wirklich rau. Wenn Sie weitere Details erfahren möchten, lesen Sie bitte Offizielles Dokument usw.
Ich werde dieses "Keras" dieses Mal verwenden, Da dies nur zum Erstellen eines Datensatzes dient, verwenden Sie ihn bitte für Ihr bevorzugtes Framework wie "Keras", "Maschinelles Lernen", "Chainer", "Tensor Flow" und "Caffe". Vielleicht hat jedes Framework ähnliche Funktionen, aber wenn Sie es umständlich finden, nachzuschlagen und es schnell zu erweitern, versuchen Sie einfach den folgenden Code.
Verschieben Sie es einfach in das Verzeichnis des Datasets, um das Dataset zu erweitern und in einem anderen Verzeichnis zu speichern. Bitte verwenden Sie es entsprechend dem Zweck, z. B. wie viele Blätter von einem Blatt erweitert werden sollen, und dem Namen des Ausgabeverzeichnisses.
Standardmäßig werden alle "jpg" -Dateien im aktuellen Verzeichnis um jeweils 10 erweitert und an ". / Extened" ausgegeben (andernfalls werden sie erstellt).
dataset_generator.py
import os
import glob
import numpy as np
from keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array, array_to_img
def draw_images(generator, x, dir_name, index):
#Ausgabedateieinstellungen
save_name = 'extened-' + str(index)
g = generator.flow(x, batch_size=1, save_to_dir=output_dir, save_prefix=save_name, save_format='jpg')
#Geben Sie an, wie viele Bilder von einem Eingabebild erweitert werden sollen
# g.next()Wird um die Anzahl der Male erweitert
for i in range(10):
bach = g.next()
if __name__ == '__main__':
#Ausgabeverzeichniseinstellungen ausgeben
output_dir = "extended"
if not(os.path.exists(output_dir)):
os.mkdir(output_dir)
#Laden erweiterter Bilder
images = glob.glob(os.path.join('./', "*.jpg "))
#Einstellungen für die Erweiterung
generator = ImageDataGenerator(
rotation_range=90, #Bis zu 90 ° drehen
width_shift_range=0.1, #Nach dem Zufallsprinzip horizontal verschieben
height_shift_range=0.1, #Zufällige Verschiebung in vertikaler Richtung
channel_shift_range=50.0, #Zufällige Farbänderung
shear_range=0.39, #Diagonale Richtung(pi/Bis zu 8)Ziehen Sie zu
horizontal_flip=True, #Zufällig vertikal gedreht
vertical_flip=True #Nach dem Zufallsprinzip horizontal drehen
)
#Erweitern Sie die geladenen Bilder der Reihe nach
for i in range(len(images)):
img = load_img(images[i])
#Bilder anordnen und verschieben a
x = img_to_array(img)
x = np.expand_dims(x, axis=0)
#Bilderweiterung
draw_images(generator, x, output_dir, i)
generator = ImageDataGenerator(
rotation_range=90,
width_shift_range=0.1,
height_shift_range=0.1,
channel_shift_range=50.0,
shear_range=0.39,
zoom_range=0.2,
horizontal_flip=True,
vertical_flip=True
)
Durch Umschreiben dieses Teils können verschiedene Erweiterungen vorgenommen werden. Bitte passen Sie es entsprechend Ihrer Anwendung an.
Die Arten und Erklärungen der Argumente sind wie folgt. Die Erklärung ist fast die gleiche wie bei Dokument, ich weiß nicht ...
Einfach zu bedienen und leicht zu verstehen
-- Rotationsbereich
: Ganzzahl. Drehbereich (0-180), um das Bild zufällig zu drehen
--width_shift_range
: Gleitkommazahl (Verhältnis zu Breite). Verschiebt sich zufällig horizontal innerhalb des angegebenen Bereichs.
--height_shift_range
: Gleitkommazahl (Verhältnis zur Höhe). Verschiebt sich zufällig vertikal innerhalb des angegebenen Bereichs.
--shear_range
: Gleitkommazahl. Scherfestigkeit (Scherwinkel gegen den Uhrzeigersinn (Bogenmaß)). Führen Sie [Scherkonvertierung] durch (https://en.wikipedia.org/wiki/Shear_mapping). Kurz gesagt, es wird zufällig innerhalb des angegebenen Bereichs gezogen.
--zoom_range
: Gleitkommazahl oder [unten, oben]. Zoomt zufällig mit einer Vergrößerung innerhalb des angegebenen Werts. Bei einer Gleitkommazahl ist [unterer, oberer] = [1-Zoombereich, 1 + Zoombereich].
--channel_shift_range
: Gleitkommazahl. Verschieben Sie die Kanäle innerhalb des Bereichs nach dem Zufallsprinzip. Die Farbe ändert sich.
--horizontal_flip
: Wahrheitswert. Invertiert die Eingabe zufällig horizontal. Dies ist eine Kontraindikationseinstellung, die nicht zur Zeichenerkennung verwendet werden sollte.
--vertical_flip
: Wahrheitswert. Spiegelt die Eingabe zufällig vertikal. Dies ist eine Kontraindikationseinstellung, die nicht zur Zeichenerkennung verwendet werden sollte.
Was du nicht verstehst (ich würde es begrüßen, wenn du es erklären könntest)
--featurewise_center
: Wahrheitswert. Durchschnitt der Eingaben im gesamten Datensatz auf 0.
--samplewise_center
: Wahrheitswert. Setzen Sie den Durchschnitt jeder Probe auf 0.
--featurewise_std_normalization
: Wahrheitswert. Normalisiert die Eingabe mit der Standardabweichung des Datensatzes.
--samplewise_std_normalization
: Wahrheitswert. Normalisieren Sie jeden Eingang mit seiner Standardabweichung.
-- zca_whitening
: Wahrheitswert. Wenden Sie ZCA Whitening an.
--zca_epsilon
: ZCA-Whitening-Epsilon. Der Standardwert ist 1e-6.
--fill_mode
: {"Konstante", "Nächste", "Reflektieren", "Umschließen"}. Füllt die Grenzen des Eingabebildes entsprechend dem angegebenen Modus.
-- cval
: Gleitkommazahl oder Ganzzahl; Wert, der verwendet wird, wenn fill_mode = "Konstante" ist.
--rescale
: Rescale-Faktor. Der Standardwert ist None. Wenn angegeben, wird der angegebene Wert vor jeder anderen Konvertierung zu den Daten hinzugefügt.
--preprocessing_function
: Die Funktion, die auf jeden Eingang angewendet wird. Diese Funktion wird ausgeführt, bevor andere Änderungen vorgenommen werden. Diese Funktion muss definiert werden, um einen dreidimensionalen Numpy-Tensor als Argument zu verwenden und einen Tensor derselben Form auszugeben.
--data_format
: Geben Sie "channel_last" (Standard) oder "channel_first" an. Im Fall von "canal_last" ist die Eingabeform (Samples, Höhe, Breite, Kanäle) und im Fall von "channel_first" (Samples, Kanäle, Höhe, Breite). Der Standardwert ist der Wert von image_data_format in der Keras-Konfigurationsdatei ~ / .keras / keras.json. Wenn Sie den Wert noch nie geändert haben, lautet er "channel_last".
Es scheint viele Male hartnäckig zu sein, aber ich bin immer noch eine unerfahrene Person, also bringen Sie mir bitte verschiedene Dinge bei!
Recommended Posts