[PYTHON] Aufgeblasenes Lernbild

Einführung

Bibliothek

$ pip install numpy==1.16.5 pillow

Aufbau

config.py


CLASSES = [
    'Abe Otsu',
    'Satomi Ishihara',
    'Yuno Ohara',
    'Koshiba Fuka',
    'Haruna Kawaguchi',
    'Nana Mori',
    'Minami Hamabe',
    'Kaya Kiyohara',
    'Haruka Fukuhara',
    'Kuroshima Yuina'
]

BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DATA_PATH = os.path.join(BASE_PATH, 'data')
FACE_PATH = os.path.join(DATA_PATH, 'face')
TRAIN_PATH = os.path.join(DATA_PATH, 'train')
TEST_PATH = os.path.join(DATA_PATH, 'test')
AUGMENT_PATH = os.path.join(DATA_PATH, 'augment')

TRAIN_NUM = 0
TEST_NUM = 100
AUGMENT_NUM = 6000

Duplizieren Sie das Gesichtsbild in ein Lernbild und ein Testbild

--Überprüfen Sie den Pfad des Gesichtsbilds, des Lernbilds und des Testbilds. --Erstellen Sie eine Liste mit Gesichtsbildern.

save_train_test_from_face.py


def split(query):
    """Holen Sie sich eine Liste mit Gesichtsbildern, teilen Sie diese auf und kopieren Sie sie in Lernen und Testen."""

    face_path = os.path.join(FACE_PATH, query)
    train_path = os.path.join(TRAIN_PATH, query)
    test_path = os.path.join(TEST_PATH, query)

    face_file_list = glob.glob(os.path.join(face_path, '*.jpeg'))
    face_file_list.sort()

save_train_test_from_face.py


    random.shuffle(face_file_list)

    train_file_list = face_file_list[:-TEST_NUM]
    test_file_list = face_file_list[len(train_file_list):]

--Erstellen Sie ein Duplikat des Trainingsbildes und des Testbildes. ――Wenn Sie das ursprüngliche Gesichtsbild beibehalten, können Sie sich das Wiederherstellen ersparen.

save_train_test_from_face.py


    for face_file in train_file_list:
        train_file = os.path.join(train_path, os.path.basename(face_file))
        shutil.copy(face_file, train_file)

    for face_file in test_file_list:
        test_file = os.path.join(test_path, os.path.basename(face_file))
        shutil.copy(face_file, test_file)
$ python save_train_test_from_face.py
query:Abe Otsu, face: 415, train: 315, test: 100
query:Satomi Ishihara, face: 492, train: 392, test: 100
query:Yuno Ohara, face: 372, train: 272, test: 100
query:Koshiba Fuka, face: 400, train: 300, test: 100
query:Haruna Kawaguchi, face: 369, train: 269, test: 100
query:Nana Mori, face: 389, train: 289, test: 100
query:Minami Hamabe, face: 481, train: 381, test: 100
query:Kaya Kiyohara, face: 428, train: 328, test: 100
query:Haruka Fukuhara, face: 420, train: 320, test: 100
query:Kuroshima Yuina, face: 448, train: 348, test: 100

Aufgeblasenes Lernbild

――Ich habe mich auf Folgendes bezogen.

Horizontal invertierte Funktion

def horizontal_flip(image, rate=0.5):
    """Horizontal umkehren."""

    image = np.array(image, dtype=np.float32)

    if np.random.rand() < rate:
        image = np.fliplr(image)

    return Image.fromarray(np.uint8(image))

Zufällige Erntefunktion

def random_crop(image, size=0.8):
    """Ernte in zufälliger Größe."""

    image = np.array(image, dtype=np.float32)

    height, width, _ = image.shape
    crop_size = int(min(height, width) * size)

    top = np.random.randint(0, height - crop_size)
    left = np.random.randint(0, width - crop_size)
    bottom = top + crop_size
    right = left + crop_size
    image = image[top:bottom, left:right, :]

    return Image.fromarray(np.uint8(image))

Aufblasbehandlung

def augment(query):
    """Laden, aufblasen und speichern Sie Lernbilder."""

    train_path = os.path.join(TRAIN_PATH, query)
    augment_path = os.path.join(AUGMENT_PATH, query)

--Erstellen Sie eine Liste mit Gesichtsbildern.

    train_list = glob.glob(os.path.join(train_path, '*.jpeg'))
    train_list.sort()
    loop_num = math.ceil(AUGMENT_NUM / len(train_list))
    augment_num = 0
    for num in range(1, loop_num + 1):
        for train_file in train_list:
            if augment_num == AUGMENT_NUM:
                break

            image = Image.open(train_file)

            image = horizontal_flip(image)
            image = random_crop(image)

            augment_file = os.path.join(AUGMENT_PATH, query, os.path.basename(train_file).split('.')[0] + '-{:04d}.jpeg'.format(num))
            image.save(augment_file, optimize=True, quality=95)
            print('query: {}, train_file: {}, augment_file: {}'.format(
                query, os.path.basename(train_file), os.path.basename(augment_file)))

            augment_num += 1

abschließend

Recommended Posts

Aufgeblasenes Lernbild
Deep Learning Bilderkennung 1 Theorie
Trainingsdaten aufblasen [Image Date Generator]
Deep Learning Bilderkennung 2 Modellimplementierung
[AI] Deep Learning für das Entrauschen von Bildern
Echtzeit-Persönliche Schätzung (Lernen)
Deep Learning 2 durch Implementierung gelernt (Bildklassifizierung)
Lernaufzeichnung
Lernrekord Nr. 3
Lernrekord Nr. 1
Maschinelles Lernen
Entfernung von Bildrauschen
Python lernen
Bildausrichtung: von SIFT bis Deep Learning
Lernrekord Nr. 2
Bilderkennung
6/10 Lerninhalte
Deep Learning Bilderkennung 3 nach der Modellerstellung
Tiefes Lernen
Numpy-Sigmoid-Lernen
Bildcrawler
Bildbewertungssystem für kleine Mädchen Lolinco maschinelles Lernen
Lesen und implementieren Sie Deep Residual Learning für die Bilderkennung
Implementierung eines Deep Learning-Modells zur Bilderkennung