Benützer:


Gesichtserkennungsmodelle ändern

Storyboard

>Modell

ID:(1784, 0)



Modell vgg16

Beschreibung

>Top


Das Modell vgg16 ist auf die Bildanalyse spezialisiert und bei Keras erhältlich. Es wird mit keras.applications in tensorflow (tf) geladen:

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Activation, Dense, Flatten, BatchNormalization, Conv2D, MaxPool2D

# vgg16 Modell laden
vgg16_model = tf.keras.applications.vgg16.VGG16()

ID:(13759, 0)



Formularmodell

Beschreibung

>Top


Bevor Sie mit dem Trainieren des Modells fortfahren, sollten die Schichten, die nicht trainiert werden sollen, blockiert werden, da sie bereits in der Strukturierung des Modells enthalten waren.

# Modell definieren
vgg_model = Sequential()
# Sperre von 16 Schichten um deren schulung zu verhindern
for layer in vgg16_model.layers[:-1]:
    vgg_model.add(layer)

ID:(13760, 0)



Modell anzeigen

Beschreibung

>Top


Die Zusammenfassung des Modells kann mit summary angezeigt werden:

# show summary
vgg_model.summary()


Es sollte erwähnt werden, dass
- die MaxPooling-Befehle reduzieren die Größe der Bilder von 224 auf 112, 56, 28, 14 und 7
- die Faltungen (Conv2D) dafür erhöhen sie die Dimensionen der Farbpalette von 64 auf 128, 256 und 512

Model: 'sequential'
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 4096)              16781312  
=================================================================
Total params: 134,260,544
Trainable params: 134,260,544
Non-trainable params: 0
_________________________________________________________________\

ID:(13761, 0)



Bereits trainierte Ebenen sperren

Beschreibung

>Top


Um ein erneutes Training der Schichten des Originalmodells im Lernprozess zu vermeiden, wird der Parameter trainierbar blockiert:

# sperren von schichten um dere training zu verhindern
for layer in vgg_model.layers:
    layer.trainable = False


Um die bereits beim Lernen im Originalmodell gewonnenen Informationen nutzen zu können, muss das Lernen dieser Schichten blockiert werden.

ID:(13762, 0)



Letzte Ebene hinzufügen

Beschreibung

>Top


Das Modell wird angepasst, indem eine letzte Schicht der Größe der vorherzusagenden Kategorien hinzugefügt wird:

# Schlussschicht beifügen (dicht)
vgg_model.add(Dense(units=len(classes),activation='softmax'))


Die units müssen der Anzahl der vorherzusagenden Klassen entsprechen.

ID:(13763, 0)



Modifiziertes Modell anzeigen

Beschreibung

>Top


Um zu zeigen, wie das Modell geändert wurde, können Sie wieder die Funktion summary verwenden:

# anzeigen der Strukture des veränderten Modells
vgg_model.summary()

In der Liste der Schichten sehen Sie am Ende die dichte Schicht mit den Klassen, die Sie prognostizieren möchten:

Model: 'sequential_1'

_________________________________________________________________

Layer (type) Output Shape Param #

=================================================================

block1_conv1 (Conv2D) (None, 224, 224, 64) 1792

_________________________________________________________________

block1_conv2 (Conv2D) (None, 224, 224, 64) 36928

_________________________________________________________________

block1_pool (MaxPooling2D) (None, 112, 112, 64) 0

_________________________________________________________________

block2_conv1 (Conv2D) (None, 112, 112, 128) 73856

_________________________________________________________________

block2_conv2 (Conv2D) (None, 112, 112, 128) 147584

_________________________________________________________________

block2_pool (MaxPooling2D) (None, 56, 56, 128) 0

_________________________________________________________________

block3_conv1 (Conv2D) (None, 56, 56, 256) 295168

_________________________________________________________________

block3_conv2 (Conv2D) (None, 56, 56, 256) 590080

_________________________________________________________________

block3_conv3 (Conv2D) (None, 56, 56, 256) 590080

_________________________________________________________________

block3_pool (MaxPooling2D) (None, 28, 28, 256) 0

_________________________________________________________________

block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160

_________________________________________________________________

block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808

_________________________________________________________________

block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808

_________________________________________________________________

block4_pool (MaxPooling2D) (None, 14, 14, 512) 0

_________________________________________________________________

block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808

_________________________________________________________________

block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808

_________________________________________________________________

block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808

_________________________________________________________________

block5_pool (MaxPooling2D) (None, 7, 7, 512) 0

_________________________________________________________________

flatten (Flatten) (None, 25088) 0

_________________________________________________________________

fc1 (Dense) (None, 4096) 102764544

_________________________________________________________________

fc2 (Dense) (None, 4096) 16781312

_________________________________________________________________

dense_1 (Dense) (None, 290) 1188130

=================================================================

Total params: 135,448,674

Trainable params: 1,188,130

Non-trainable params: 134,260,544

_________________________________________________________________

ID:(13764, 0)



Modell erstellen

Beschreibung

>Top


Um das Modell zu erstellen, müssen Sie es kompilieren:

# Kompilieren des Modells
vgg_model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy',metrics=['accuracy'])

ID:(13765, 0)



Lernprozess

Beschreibung

>Top


# Lernprozess mit dem modifizierten vgg16-Modell
vgg_model.fit(x=train_batches, validation_data=validate_batches, epochs=5,verbose=2)

Epoch 1/5

373/373 - 336s - loss: 2.4201 - accuracy: 0.2790 - val_loss: 2.2614 - val_accuracy: 0.3023

Epoch 2/5

373/373 - 340s - loss: 1.7795 - accuracy: 0.4362 - val_loss: 2.0955 - val_accuracy: 0.3639

Epoch 3/5

373/373 - 339s - loss: 1.5116 - accuracy: 0.5241 - val_loss: 2.0217 - val_accuracy: 0.3868

Epoch 4/5

373/373 - 339s - loss: 1.3313 - accuracy: 0.5754 - val_loss: 1.9925 - val_accuracy: 0.3926

Epoch 5/5

373/373 - 341s - loss: 1.1973 - accuracy: 0.6296 - val_loss: 1.9473 - val_accuracy: 0.4169

ID:(13766, 0)