Implementierung von Light CNN (Python Keras)

Einführung

In diesem Artikel habe ich ein Deep-Learning-Modell namens Light CNN (LCNN) implementiert und es daher zusammengefasst. Wir werden zuerst LCNN und seine Funktion, Max Feature Mapping (MFM), erläutern und sie dann implementieren und bewerten. Der gesamte Code ist Python und LCNN wird mit Tensorflow, Keras, implementiert. Bitte beachten Sie den Code zur Implementierung von LCNN auf Github. Github URL : https://github.com/ozora-ogino/LCNN Light CNN LCNN wurde 2015 von STC vorgeschlagen und wird derzeit in Bereichen wie Bildklassifizierung und Sprachklassifizierung als Deep-Learning-Methode verwendet, die von einer Institution namens STC untersucht wird. LCNN besteht aus 8 Faltungsschichten, und es ist ein Hauptmerkmal, dass die Aktivierungsfunktion in jeder Schicht das sogenannte Max Feature Mapping verwendet. Max Feature Mapping Weitere Informationen zu MFM finden Sie unter hier. Ich werde auch das Originalpapier veröffentlichen. "A Light CNN for Deep Face Representation with Noisy Labels " (https://arxiv.org/pdf/1511.02683.pdf)

Implementierung

Der Code ist der gleiche wie auf GitHub.

lcnn.py



import tensorflow as tf
from keras.layers import Activation, Dense, BatchNormalization, MaxPool2D, Lambda, Input, Flatten, Dropout
from keras.layers.convolutional import Conv2D
from keras.models import Model
from keras.initializers import he_normal

#Custom layer
from .layers import Maxout


#function that return the stuck of Conv2D and MFM
def MaxOutConv2D(x, dim, kernel_size, strides, padding='same'):
    conv_out = Conv2D(dim, kernel_size=kernel_size, strides=strides, padding=padding)(x)
    mfm_out = Maxout(int(dim/2))(conv_out)
    return mfm_out


#function that return the stuck of FC and MFM
def MaxOutDense(x, dim):
    dense_out = Dense(dim)(x)
    mfm_out = Maxout(int(dim/2))(dense_out)
    return mfm_out

# this function helps to build LCNN. 
def build_lcnn(shape, n_label=2):
    """
    Auguments:
     shape (list) : 
      Input shape for LCNN. (Example : [128, 128, 1])
     n_label (int) : 
      Number of label that LCNN should predict.
    """
    
    input = Input(shape=shape)

    conv2d_1 = MaxOutConv2D(input, 64, kernel_size=5, strides=1, padding='same')
    maxpool_1 = MaxPool2D(pool_size=(2, 2), strides=(2,2))(conv2d_1)

    conv_2d_2 = MaxOutConv2D(maxpool_1, 64, kernel_size=1, strides=1, padding='same')
    batch_norm_2 = BatchNormalization()(conv_2d_2)

    conv2d_3 = MaxOutConv2D(batch_norm_2, 96, kernel_size=3, strides=1, padding='same')
    maxpool_3 = MaxPool2D(pool_size=(2, 2), strides=(2,2))(conv2d_3)
    batch_norm_3 = BatchNormalization()(maxpool_3)

    conv_2d_4 = MaxOutConv2D(batch_norm_3, 96, kernel_size=1, strides=1, padding='same')
    batch_norm_4 = BatchNormalization()(conv_2d_4)

    conv2d_5 = MaxOutConv2D(batch_norm_4, 128, kernel_size=3, strides=1, padding='same')
    maxpool_5 = MaxPool2D(pool_size=(2, 2), strides=(2,2))(conv2d_5)

    conv_2d_6 = MaxOutConv2D(maxpool_5, 128, kernel_size=1, strides=1, padding='same')
    batch_norm_6 = BatchNormalization()(conv_2d_6)

    conv_2d_7 = MaxOutConv2D(batch_norm_6, 64, kernel_size=3, strides=1, padding='same')
    batch_norm_7 = BatchNormalization()(conv_2d_7)

    conv_2d_8 = MaxOutConv2D(batch_norm_7, 64, kernel_size=1, strides=1, padding='same')
    batch_norm_8 = BatchNormalization()(conv_2d_8)

    conv_2d_9 = MaxOutConv2D(batch_norm_8, 64, kernel_size=3, strides=1, padding='same')
    maxpool_9 = MaxPool2D(pool_size=(2, 2), strides=(2,2))(conv_2d_9)
    flatten = Flatten()(maxpool_9)

    dense_10 = MaxOutDense(flatten, 160)
    batch_norm_10 = BatchNormalization()(dense_10)
    dropout_10 = Dropout(0.75)(batch_norm_10)

    output = Dense(n_label, activation='softmax')(dropout_10)
            
    return Model(inputs=input, outputs=output)

Auswertung

Das implementierte LCNN wird das Modell sein, das im Spracherkennungswettbewerb verwendet wird, aber ich habe mit mnist und CIFAR10 versucht, herauszufinden, wie viel Leistung mit einfacher Bilderkennung erzielt werden kann. Ich habe das Modell überhaupt nicht abgestimmt, aber ich konnte mit mnist eine Leistung von 99% und mit CIFAR 10 eine Leistung von etwa 75% zeigen. mnist

test_mint.py


import numpy as np
from keras.callbacks import EarlyStopping
from keras.utils import to_categorical
from keras.datasets import mnist

lr = 0.001
epochs = 10
batch_size =256

[x_train, y_train], [x_test, y_test] = mnist.load_data()
x_train = x_train / 255
x_train = x_train.reshape((x_train.shape[0], x_train.shape[1], x_train.shape[2], 1))
y_train = to_categorical(y_train)
input_shape = x_train.shape[1:]

lcnn = build_lcnn(input_shape, n_label=10)
lcnn.compile(optimizer=Adam(learning_rate=lr), loss='categorical_crossentropy', metrics=['accuracy'])
es = EarlyStopping(monitor='val_loss', patience=3, verbose=1)
history = lcnn.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, validation_split=0.2, callbacks=[es])

x_test = x_test / 255
x_test = x_test.reshape((x_test.shape[0], x_test.shape[1], x_test.shape[2], 1))
y_test = to_categorical(y_test)

loss, acc = lcnn.evaluate(x_test, y_test)

print(f'Accuracy : {acc*100}') # Result --> Accuracy : 99.90999794006348
print(f'Loss : {loss}')# Result --> Loss : 0.04250425341885457

CIFAR10

test_cifar10.py


import numpy as np
from keras.callbacks import EarlyStopping
from keras.utils import to_categorical
from keras.datasets import cifar10

lr = 0.001
epochs = 100
batch_size =64

[x_train, y_train], [x_test, y_test] =cifar10.load_data()

x_train = x_train / 255
y_train = to_categorical(y_train)
input_shape = x_train.shape[1:]

lcnn = build_lcnn(input_shape, n_label=10)
lcnn.compile(optimizer=Adam(learning_rate=lr), loss='categorical_crossentropy', metrics=['accuracy'])
es = EarlyStopping(monitor='val_loss', patience=5 , verbose=1)
history = lcnn.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, validation_split=0.2, callbacks=[es])


x_test = x_test / 255
y_test = to_categorical(y_test)

loss, acc = lcnn.evaluate(x_test, y_test)
print(f'Accuracy : {acc*100}') # Result --> Accuracy : 75.1200020313263
print(f'Loss : {loss}')# Result --> Loss : 1.2616282165050507

Zusammenfassung

Ich habe ein Deep-Learning-Modell namens LCNN implementiert und es daher zusammengefasst. Ich bin froh, wenn Sie es als Referenz verwenden können. Github URL : https://github.com/ozora-ogino/LCNN Reference "A Light CNN for Deep Face Representation with Noisy Labels" "STC Antispoofing Systems for the ASVspoof2019 Challenge" "Audio replay attack detection with deep learning frameworks"

Recommended Posts

Implementierung von Light CNN (Python Keras)
Python-Implementierung des Partikelfilters
Implementierung der schnellen Sortierung in Python
Python-Implementierung eines selbstorganisierenden Partikelfilters
Implementierung eines Lebensspiels in Python
Implementierung der ursprünglichen Sortierung in Python
Implementierung der Dyxtra-Methode durch Python
Python: Grundlagen der Bilderkennung mit CNN
Python: Anwendung der Bilderkennung mit CNN
Python-Implementierung eines kontinuierlichen Hidden-Markov-Modells
Python-Grundlagen ①
Grundlagen von Python ①
Shakedrops Keras-Implementierung
Kopie von Python
Einführung von Python
Warum die Python-Implementierung von ISUCON 5 Bottle verwendet
TRIE-Baumimplementierung mit Python und LOUDS
[Coding Interview] Implementierung der Enigma-Kryptografiemaschine (Python)
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
[Python] Implementierung von Clustering mit einem gemischten Gaußschen Modell
[Python] Operation der Aufzählung
Implementierungsbeispiel eines einfachen LISP-Verarbeitungssystems (Python-Version)
Höchstwahrscheinlich Schätzungsimplementierung des Themenmodells in Python
RNN-Implementierung in Python
Tensorflow / Keras-Zusammenfassung
Vereinheitlichung der Python-Umgebung
Kopie der Python-Einstellungen
Grundlagen der Python-Scraping-Grundlagen
[Python] Verhalten von Argmax
Vergleich der Implementierung mehrerer exponentieller gleitender Durchschnitte (DEMA, TEMA) in Python
Verwendung von Python-Einheimischen ()
der Zen von Python
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Installieren von Python 3.3 rc1
Implementierung der Fibonacci-Sequenz
# 4 [Python] Grundlagen der Funktionen
Grundkenntnisse in Python
Nüchterne Trivia von Python3
Implementierung der Bayes'schen Varianzschätzung des Themenmodells in Python
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Grundlagen von Python: Ausgabe
[Python] Code zur Messung des Umgebungslichts RGB von APDS9960
Installation von matplotlib (Python 3.3.2)
Anwendung von Python 3 vars
SVM-Implementierung in Python
Verschiedene Verarbeitung von Python
Python-Implementierung des CSS3-Mischmodus und Diskussion über den Farbraum
Implementierung von VGG16 mit Keras, die ohne Verwendung eines trainierten Modells erstellt wurden
Eine einfache Python-Implementierung der k-Neighborhood-Methode (k-NN)
[Mit einfacher Erklärung] Scratch-Implementierung einer Deep Boltsman-Maschine mit Python ②
[Mit einfacher Erklärung] Scratch-Implementierung einer tiefen Boltzmann-Maschine mit Python ①
Ich habe versucht, die handschriftliche Zeichenerkennung von Runenzeichen mit CNN mithilfe von Keras zu erkennen
Quantum Computer Implementierung von Quantum Walk 2
Visualisieren Sie das Keras-Modell mit Python 3.5
Hellblau mit AtCoder @Python
Auf dem Weg zum Ruhestand von Python2
Implementierung von TF-IDF mit Gensim