――Die Gesamtgröße des Trainingsbilds, des Testbilds und des gepolsterten Bildes beträgt diesmal etwa 1,4 GB. ――Das Laden dieser Bilder dauert einige Zeit, wenn das Lernprogramm implementiert ist. —— Wenn Sie ein Lernprogramm in einer anderen Umgebung ausführen, tritt eine Übertragungszeit auf. ―― Außerdem dauert es einige Zeit, die Bildgröße zu ändern und von Farbe in Grau umzuwandeln. ――Durch die Erstellung eines Datensatzes mit geänderter Größe und Graukonvertierung im Voraus konnten wir einen Wert von ca. 50 MB erreichen.
Numpy`` Pillow
.DATASETS_PATH
gespeichert.
--IMG_ROWS`` IMG_COLS
ist eine Größenänderung der Bildgröße. Dieses Mal werden wir die Größe auf "28 x 28" ändern.config.py
DATASETS_PATH = os.path.join(DATA_PATH, 'datasets')
IMG_ROWS, IMG_COLS = 28, 28
--Erstellen Sie eine Dateiliste mit Trainingsbildern, Testbildern und aufgefüllten Bildern.
Abfrage`` 6000
erstellt. Wenn es nicht ausreicht, liegt ein Fehler vor.def make_filesets(augment):
"""Erstellen einer Dateigruppe."""
filesets = {'train': dict(), 'test': dict(), 'augment': dict()}
for query in CLASSES:
train_path = os.path.join(TRAIN_PATH, query)
test_path = os.path.join(TEST_PATH, query)
augment_path = os.path.join(AUGMENT_PATH, query)
if not os.path.isdir(train_path):
print('no train path: {}'.format(train_path))
return None
if not os.path.isdir(test_path):
print('no test path: {}'.format(test_path))
return None
if not os.path.isdir(augment_path):
print('no augment path: {}'.format(augment_path))
return None
train_files = glob.glob(os.path.join(train_path, '*.jpeg'))
train_files.sort()
filesets['train'][query] = train_files
test_files = glob.glob(os.path.join(test_path, '*.jpeg'))
test_files.sort()
filesets['test'][query] = test_files
augment_files = glob.glob(os.path.join(augment_path, '*.jpeg'))
random.shuffle(augment_files)
filesets['augment'][query] = augment_files
if augment and len(augment_files) < AUGMENT_NUM:
print('less augment num: {}, path: {}'.format(len(augment_files), augment_path))
return None
return filesets
LANCZOS
braucht Zeit, aber die Größe wird mit guter Qualität geändert. Der Standardwert ist "NEAREST". Geschwindigkeit hat Vorrang vor Qualität.def read_image(filename):
"""Laden, Ändern der Größe, Graukonvertierung."""
image = Image.open(filename)
image = image.resize((IMG_ROWS, IMG_COLS), Image.LANCZOS)
image = image.convert('L')
image = np.array(image, dtype=np.uint8)
return image
def make_datasets(augment, filesets):
"""Erstellen eines Datensatzes."""
train_images = []
train_labels = []
test_images = []
test_labels = []
CLASSES
wie 0
.augment
, um zu bestimmen, ob das aufgefüllte Bild verwendet werden soll. Wenn Sie es verwenden möchten, setzen Sie nur die in "AUGMENT_NUM" beschriebene Nummer auf "train_files".tqdm
wird auch zum Lesen jedes Bildes verwendet. Der Verarbeitungsfortschritt wird angezeigt, was leicht zu verstehen ist. for num, query in enumerate(CLASSES):
print('create dataset: {}'.format(query))
if augment:
train_files = filesets['augment'][query][:AUGMENT_NUM]
else:
train_files = filesets['train'][query]
test_files = filesets['test'][query]
for train_file in tqdm.tqdm(train_files, desc='create train', leave=False):
train_images.append(read_image(train_file))
train_labels.append(num)
for test_file in tqdm.tqdm(test_files, desc='create test', leave=False):
test_images.append(read_image(test_file))
test_labels.append(num)
DATASET_PATH
CLASSES`` IMG_ROWS`` IMG_COLS
Entscheiden Sie den Dateinamen des Datasets basierend darauf, ob das aufgefüllte Bild verwendet wird oder nicht. datasets = ((np.array(train_images), (np.array(train_labels))), (np.array(test_images), (np.array(test_labels))))
datasets_path = os.path.join(DATASETS_PATH, ','.join(CLASSES))
os.makedirs(datasets_path, exist_ok=True)
train_num = AUGMENT_NUM if augment else 0
datasets_file = os.path.join(datasets_path, '{}x{}-{}.pickle'.format(IMG_ROWS, IMG_COLS, train_num))
with open(datasets_file, 'wb') as fout:
pickle.dump(datasets, fout)
print('save datasets: {}'.format(datasets_file))
――Die Verwendung aufgeblähter Bilder wird mit den folgenden Optionen umgeschaltet.
$ python save_datasets.py
$ python save_datasets.py --augment
$ du -d1 -h .
115M ./train
33M ./test
51M ./datasets
1.4G ./augment
$ ls
3.2M 12 15 23:22 28x28-0.pickle
46M 12 15 22:24 28x28-6000.pickle
――Wir haben einen Datensatz erstellt, dessen Größe geändert und die Bilddaten grau skaliert wurden, damit sie problemlos aus dem Lernprogramm verwendet werden können. ――Sie können verschiedene Datensätze erstellen, indem Sie die Anzahl der aufgefüllten Bilder und mehrere Größen ändern und sie beim Wechseln nach Dateinamen verwenden. ――Nächstes Mal plane ich, ein Teil zu erstellen, um den Datensatz aus dem Trainingsprogramm zu lesen.
Recommended Posts