Benützer:


Verzeichnisse

Storyboard

>Modell

ID:(1779, 0)



Verzeichnis-Array generieren

Beschreibung

>Top


Wenn Sie nach einer Liste mit den Namen der Verzeichnisse suchen,



die mit dem Verzeichnis sample_directory

Beispiel: 'F:/go/face_scrapper/faces/samples/'

verbunden sind, können Sie den Befehl listdir von die Bibliothek < b>os:

import os

# definiciones
sample_directory = 'F:/go/face_scrapper/faces/samples/'

# obtener arreglo de directorios
classes = []
maincls = os.listdir(sample_directory)

for cls in maincls:
    # generar list de archivos
    file = os.listdir(sample_directory+'/'+cls+'/')
    # agregar subdirectorios si contienen imagenes
    if len(file) > 0:
        classes.append(cls)

# mostrar classes
print(classes)


Schließt nur Ordner mit Bildern ein.

ID:(13748, 0)



Verzeichnis-Array mit Unterverzeichnissen generieren

Beschreibung

>Top


Wenn Sie nach einer Liste mit den Namen der Unterverzeichnisse suchen,



die einem Hauptverzeichnis sample_directory zugeordnet sind

Beispiel: 'F:/go/face_scrapper/faces/samples/'

kann man den Befehl listdir verwenden aus der Bibliothek os:

import os

# definitions
sample_directory = 'F:/go/face_scrapper/faces/samples/'

# get directory array
classes = []
maincls = os.listdir(sample_directory)

for subcls in maincls:

    # get subdirectory array
    clslst = os.listdir(sample_directory+subcls+'/')
    for cls in clslst:
        file = os.listdir(sample_directory+subcls+'/'+cls+'/')
    
        # add subdirectories to the array
        if len(file) > 0:
            classes.append(cls)
            
# show classes
print(classes)

ID:(13781, 0)



Prüfen ob es Doppelte gibt im Array

Beschreibung

>Top


Um sicherzustellen, dass das Array classes keine Klasse für jeden Typ enthält, müssen alle Elemente auf ihre Eindeutigkeit überprüft werden:

import collections
print([item for item, count in collections.Counter(classes).items() if count > 1])
print('number of elements:'+str(len(classes)))


Das Klassenarray darf keine Doubles enthalten.

ID:(13782, 0)



Verzeichnisse für Modell erstellen

Beschreibung

>Top


Um die Modelle auszuführen, werden die Verzeichnisse erstellt
- train
- validate
- test
mit den Unterverzeichnissen jedes Bildes derselben Klassifikation abhängig vom Arbeitsverzeichniss the work directory work_directory

Beispiel: 'F:/go/face_scrapper/faces/work/':

import os

# define directories
work_directory = 'F:/go/face_scrapper/faces/work/'

train_path = work_directory+'train/'
validate_path = work_directory+'validate/'
test_path = work_directory+'test/'

# create subdirectories
for subcls in classes:
    # define train directory
    FOLDER_EXIST = os.path.isdir(train_path+subcls)
    # check and create
    if not FOLDER_EXIST: os.mkdir(train_path+subcls)
    # define validate directory
    FOLDER_EXIST = os.path.isdir(validate_path+subcls)
    # check and create
    if not FOLDER_EXIST: os.mkdir(validate_path+subcls)
    # define test directory
    FOLDER_EXIST = os.path.isdir(test_path+subcls)
    # check and create
    if not FOLDER_EXIST: os.mkdir(test_path+subcls)

ID:(13749, 0)



Bilder in Verzeichnisse kopieren

Beschreibung

>Top


Nachdem die Verzeichnisse generiert wurden, müssen die Bilder in jedes Unterverzeichnis kopiert werden. Dazu müssen Sie die Unterverzeichnisse durchgehen, die vom Sample-Verzeichnis abhängig sind sample_directory

Beispiel 'F:/go/face_scrapper/faces/sample/'

und kopieren Sie sie in die Arbeitsverzeichnisse work_directory

Beispiel 'F:/go/face_scrapper/faces/work/'

in seinen Versionen trainieren (trainieren), validieren (validieren) und testen (testen).

Die zu kopierende Zahl muss die Brüche haben
- 80% train
- 15% validate
- 5% test

import shutil

# definitions
sample_directory = 'F:/go/face_scrapper/faces/samples/'
work_directory = 'F:/go/face_scrapper/faces/work/'

train_path = work_directory+'train/'
validate_path = work_directory+'validate/'
test_path = work_directory+'test/'

for subcls in classes:

    # get subclasses
    subclslst = os.listdir(sample_directory+subcls)

    # numbers
    nlen = len(subclslst)
    if nlen > 0:
        nlen1 = round(nlen*0.8)
        if nlen1 == 0: nlen1 = 1
        nlen2 = round(nlen*0.15)
        if nlen2 == 0: nlen2 = 1
        nlen3 = round(nlen*0.05)
        if nlen3 == 0: nlen3 = 1
        if nlen1 + nlen2 + nlen3 > nlen:
            npos3 = nlen - 1
        else:
            npos3 = nlen1 + nlen2
        if nlen1 + nlen2 > nlen:
            npos1 = nlen - 1
            npos2 = nlen
        else:
            npos1 = nlen1
            npos2 = nlen1 + nlen2            
        print(cls+','+str(nlen1)+','+str(nlen2)+','+str(nlen3))
        # copy files
        for i in range(0,nlen1):
            shutil.copyfile(sample_directory+subcls+'/'+subclslst[i],train_path+subcls+'/'+subclslst[i])
        for i in range(npos1,npos2):
            shutil.copyfile(sample_directory+subcls+'/'+subclslst[i],validate_path+subcls+'/'+subclslst[i])
        for i in range(npos3,nlen):
            shutil.copyfile(sample_directory+subcls+'/'+subclslst[i],test_path+subcls+'/'+subclslst[i])

ID:(13750, 0)



Bilder in Verzeichnisse kopieren mit Unterverzeichnisse

Beschreibung

>Top


Nachdem die Verzeichnisse generiert wurden, müssen die Bilder in jedes Unterverzeichnis kopiert werden. Dazu müssen Sie die Unterverzeichnisse durchgehen, die vom Sample-Verzeichnis abhängig sind sample_directory

Beispiel 'F:/go/face_scrapper/faces/sample/'

und kopieren Sie sie in die Arbeitsverzeichnisse work_directory

Beispiel 'F:/go/face_scrapper/faces/work/'

in seinen Versionen trainieren (trainieren), validieren (validieren) und testen (testen).

Die zu kopierende Zahl muss die Brüche haben
- 80% train
- 15% validate
- 5% test

import shutil

# definitions
sample_directory = 'F:/go/face_scrapper/faces/samples/'
work_directory = 'F:/go/face_scrapper/faces/work/'

train_path = work_directory+'train/'
validate_path = work_directory+'validate/'
test_path = work_directory+'test/'

# get directory array
maincls = os.listdir(sample_directory)

for subcls in maincls:

    # get subclasses
    temp = os.listdir(sample_directory+subcls+'/')    

    for cls in temp:

        # file list
        filelst = os.listdir(sample_directory+subcls+'/'+cls+'/')

        # numbers
        nlen = len(filelst)
        if nlen > 0:
            nlen1 = round(nlen*0.8)
            if nlen1 == 0: nlen1 = 1
            nlen2 = round(nlen*0.15)
            if nlen2 == 0: nlen2 = 1
            nlen3 = round(nlen*0.05)
            if nlen3 == 0: nlen3 = 1
            if nlen1 + nlen2 + nlen3 > nlen:
                npos3 = nlen - 1
            else:
                npos3 = nlen1 + nlen2
            if nlen1 + nlen2 > nlen:
                npos1 = nlen - 1
                npos2 = nlen
            else:
                npos1 = nlen1
                npos2 = nlen1 + nlen2            

            print(cls+','+str(nlen1)+','+str(nlen2)+','+str(nlen3))

            # copy files
            for i in range(0,nlen1):
                shutil.copyfile(sample_directory+subcls+'/'+cls+'/'+filelst[i],train_path+cls+'/'+filelst[i])
            for i in range(npos1,npos2):
                shutil.copyfile(sample_directory+subcls+'/'+cls+'/'+filelst[i],validate_path+cls+'/'+filelst[i])
            for i in range(npos3,nlen):
                shutil.copyfile(sample_directory+subcls+'/'+cls+'/'+filelst[i],test_path+cls+'/'+filelst[i])

ID:(13783, 0)



Bilder für den Lernprozess generieren

Beschreibung

>Top


Um das Modell zu trainieren, wird eine Vorverarbeitung durchgeführt, in der
- die Bilder werden auf die definierte Größe skaliert (es wird unabhängig davon skaliert, ob das Originalbild größer, kleiner und / oder nicht quadratisch ist).
- Kontrast wird erhöht indem mit einer anderen Farbpalette gearbeitet wird

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# definitions
work_directory = 'F:/go/face_scrapper/faces/work/'

train_path = work_directory+'train/'
validate_path = work_directory+'validate/'
test_path = work_directory+'test/'

# generate images
train_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input).flow_from_directory(directory=train_path, target_size=(224,224), classes=classes, batch_size=10)
valid_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input).flow_from_directory(directory=valid_path, target_size=(224,224), classes=classes, batch_size=10)
test_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input).flow_from_directory(directory=test_path, target_size=(224,224), classes=classes, batch_size=10, shuffle=False)


Wenn Sie Ihr eigenes Modell trainieren, kann die Größe der Bilder (target_size) einen beliebigen Wert annehmen. Wird jedoch ein vortrainiertes Modell verwendet, muss die Größe an die Bilder des Originalmodells angepasst werden.

ID:(13751, 0)



Dateiformat train, validate und test

Beschreibung

>Top


La función ImageDataGenerator genera archivos con el formato dado por:

{'image_data_generator': ,

'target_size': (224, 224),

'color_mode': 'rgb',

'data_format': 'channels_last',

'image_shape': (224, 224, 3),

'save_to_dir': None,

'save_prefix': '',

'save_format': 'png',

'interpolation': 'nearest',

'split': None,

'subset': None,

'directory': 'F:/go/face_scrapper/faces/work/test/',

'classes': array([ 0, 1, 2, ..., 288, 289]),

'class_mode': 'categorical',

'dtype': 'float32',

'samples': 663,

'num_classes': 290,

'class_indices': {'arraya-andi': 0, 'arraya-marielle': 1, ...,'wagner-mancho': 288, 'wagner-richard': 289},

'filenames': ['arraya-andi

eg087_002_003_603-625-293-375.jpg',

...,

'wagner-richard\\sony-cybershot-20011204-1806002_001_201-163-141-172.jpg'],

'_filepaths': ['F:/go/face_scrapper/faces/work/test/arraya-andi

eg087_002_003_603-625-293-375.jpg',

...,

'F:/go/face_scrapper/faces/work/test/wagner-richard\\sony-cybershot-20011204-1806002_001_201-163-141-172.jpg'],

'n': 663,

'batch_size': 10,

'seed': None,

'shuffle': False,

'batch_index': 4,

'total_batches_seen': 140,

'lock': ,

'index_array': array([ 0, 1, 2, ..., 661, 662]),

'index_generator': }

test_

ID:(13799, 0)