[PYTHON] Ich habe versucht, den Teil, in dem die Pflanze gezeigt wird, mithilfe von Deep Learning aus dem Foto der Veranda zu extrahieren, aber es hat nicht funktioniert, daher werde ich den Inhalt von Versuch und Irrtum zusammenfassen. Teil 2

Letzte Zusammenfassung

Eine Aktie, die mit ein wenig Aufwand begann. Ich hätte jedoch nie gedacht, dass sich eine neue Coronavirus-Infektion durchsetzen würde, und ich habe wahrscheinlich keine Investition ohne Auslassung getätigt, und die Ersparnisse, die ich bisher beim Kauf meines Hauses gespart hatte, wurden völlig leer und ich wurde verzweifelt und verzweifelt. Als ich die Seebrücke entlang ging, wurde ich von hinten gefragt: "Es ist eine Weile her. Wie geht es dir ?!" ...

... das ist ein Witz, und ich werde den Artikel zum Thema Extrahieren von Objekten aus Fotos fortsetzen!

Ich habe versucht, den Teil, in dem die Pflanze gezeigt wird, mithilfe von Deep Learning aus dem Foto der Veranda zu extrahieren, aber es hat nicht funktioniert, daher werde ich den Inhalt von Versuch und Irrtum zusammenfassen. Teil 1

Erwägung

Selbst wenn ich nach dem ersten Teil einige Parameter ändere, hat dies überhaupt keine Auswirkung und nur die leere Zeit fließt ...

In der Zwischenzeit kam ich plötzlich auf "Transferlernen". Es ist eine Methode, um anhand der Ausgabe des trainierten Modells eine hochgenaue Identifizierung aus einer kleinen Datenmenge zu realisieren ...

Ich weiß überhaupt nicht, wie ich es machen soll, aber vorerst habe ich beschlossen, es mit meinem Wissen zu versuchen!

Lernen

Lesen Sie dieselben Daten wie im ersten Teil, lassen Sie das trainierte Modell sie identifizieren und das neuronale Netzwerk das Ergebnis als Eingabe trainieren.

python


from glob import glob
import random

X = []
y = []

dirs = ["9*/*.jpg ", "0*/*.jpg "]

i = 0
min = 1500

for d in dirs:
    files = glob(d)
    files = random.sample(files, min if len(files) > min else len(files))
    
    for f in files:
        X.append(f)
        y.append(i)

    i += 1
    
import pandas as pd

df = pd.DataFrame({"X" : X, "y" : y})

from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions

#Holen Sie sich ein geschultes Modell von VGG16
model_VGG16 = VGG16()

import cv2
import numpy as np
from keras.preprocessing import image

X = []
y = []

cnt = 0

for idx in df.index:

    f = df.loc[idx, "X"]
    l = df.loc[idx, "y"]

    print("\r{:05} : [{}] {}".format(cnt, l, f), end="")
    i += 1

    #Laden von Bildern
    img = image.load_img(f, target_size=model_VGG16.input_shape[1:3])

    X.append(image.img_to_array(img))
    y.append(l)

    cnt += 1

print()

#Vorverarbeitung
X = np.array(X)
X = preprocess_input(X)

#Identifizierung durch VGG16
preds = model_VGG16.predict(X)
print('preds.shape: {}'.format(preds.shape))  # preds.shape: (1, 1000)

#Stellen Sie das Identifikationsergebnis als Eingabe ein
X = preds

from sklearn import model_selection

test_size = 0.2

#Aufgeteilt zum Lernen, Validieren und Testen
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=test_size, random_state=42)
X_valid, X_test, y_valid, y_test = model_selection.train_test_split(X_test, y_test, test_size=.5, random_state=42)

from keras.utils.np_utils import to_categorical

y_train = to_categorical(y_train)
y_valid = to_categorical(y_valid)
y_test = to_categorical(y_test)

from keras.layers import Dense
from keras.models import Sequential

#Erstellen eines Lernmodells
model = Sequential()

model.add(Dense(64, input_dim=len(X_train[0]), activation='relu'))
model.add(Dense(64, activation='sigmoid'))

model.add(Dense(len(y_train[0]), activation='softmax'))

#kompilieren
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

#Lernen
history = model.fit(
    X_train, y_train, batch_size=25, epochs=60, 
    verbose=1, shuffle=True,
    validation_data=(X_valid, y_valid))

import matplotlib.pyplot as plt

#Bewertung und Anzeige des Generalisierungssystems
score = model.evaluate(X_test, y_test, batch_size=32, verbose=0)
print('validation loss:{0[0]}\nvalidation accuracy:{0[1]}'.format(score))

#acc, val_gem. Grundstück
plt.plot(history.history["accuracy"], label="acc", ls="-", marker="o")
plt.plot(history.history["val_accuracy"], label="val_acc", ls="-", marker="x")
plt.ylabel("accuracy")
plt.xlabel("epoch")
plt.legend(loc="best")
plt.show()

#loss, val_Verlustplot
plt.plot(history.history["loss"], label="loss", ls="-", marker="o")
plt.plot(history.history["val_loss"], label="val_loss", ls="-", marker="x")
plt.ylabel("loss")
plt.xlabel("epoch")
plt.legend(loc="best")
plt.show()

Lauf! !!

validation loss:0.0818712607031756
validation accuracy:0.9797570705413818

Unknown1.pngUnknown2.png

Oh! was ist das? !!

Identifizierung und Kennzeichnung

python


import cv2
import numpy as np

div = 10
cl = (0, 0, 255)

i = 0

#Holen Sie sich eine Liste der Testbilder
testFiles = glob("test/*.JPG")
testFiles.sort()

for f in testFiles:

    print(f.split("/")[-1])

    #Datei lesen
    img = cv2.imread(f)
    img_output = cv2.imread(f)
    #print(img.shape)

    h, w, c = img.shape
    print(f, h, w, c)

    #Holen Sie sich die kurze Seite und stellen Sie die geteilte Größe ein
    size = h if h < w else w
    size = int(size / 10)
    print(size)

    i = 0
    k = 0

    while size * (i + 1) < h:
        j = 0
        while size * (j + 1) < w:

            #Get geteiltes Bild
            img_x = img[size*i:size*(i+1), size*j:size*(j+1)]
            
            #Identifizierung durch VGG16
            img_test = cv2.resize(img_x, model_VGG16.input_shape[1:3])
            img_test = cv2.cvtColor(img_test, cv2.COLOR_BGR2RGB)
            X = np.array([img_test])
            X = preprocess_input(X)
            preds = model_VGG16.predict(X)

            #Identifizierung
            pred = model.predict(preds, batch_size=32)
            m = np.argmax(pred[0])

            #Die Genauigkeit beträgt 85%Wenn es als Pflanze identifiziert wird
            if pred[0][m] > 0.85 and m == 1:
                #Zeichnen Sie ein rotes Quadrat, in dem es als Pflanze identifiziert wird
                cv2.rectangle(img_output, (size*j + 5, size*i + 5), (size*(j+1) - 5, size*(i+1) - 5), cl, thickness=2)

            j += 1
            k += 1

        i += 1
    
    img_output = img_output[0:size*i, 0:size*j]

    f_new = "predicted/{}".format(f.split("/")[-1])
    cv2.imwrite(f_new, img_output)

    print()

Lauf! !!

IMG_0791.JPG IMG_0805.JPG IMG_0826_転移学習_EPOC100.JPG

Perfekt! !!

Transferlernen ist unglaublich! ... kann sich vom Transferlernen im ursprünglichen Sinne unterscheiden. Schweiß

Ich habe es übrigens nicht von Hand markiert. Lol

Was machen wir als nächstes?

Recommended Posts

Ich habe versucht, den Teil, in dem die Pflanze gezeigt wird, mithilfe von Deep Learning aus dem Foto der Veranda zu extrahieren, aber es hat nicht funktioniert, daher werde ich den Inhalt von Versuch und Irrtum zusammenfassen. Teil 2
Ich habe die Größenänderung von TensorFlow nicht verstanden und sie daher visuell zusammengefasst.
Der tree.plot_tree von scikit-learn war sehr einfach und bequem, daher habe ich versucht, zusammenzufassen, wie man es einfach benutzt.
Ich habe das Verhalten von Argsort of Numpy nicht verstanden, deshalb werde ich es zusammenfassen
Ich habe versucht, Java mit Termux unter Verwendung von Termux Arch zu verwenden, aber es hat nicht funktioniert
Ich habe versucht, Twitter Scraper mit AWS Lambda zu verwenden, aber es hat nicht funktioniert.
[Teil 4] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 2] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
[Qiita API] [Statistik • Maschinelles Lernen] Ich habe versucht, die bisher veröffentlichten Artikel zusammenzufassen und zu analysieren.
[Deep Learning von Grund auf neu] Ich habe versucht, Sigmoid Layer und Relu Layer zu implementieren
Ich habe PySide2 installiert, aber pyside2-uic hat nicht funktioniert, also habe ich es geschafft.
Ich habe versucht, Docker unter Windows 10 Home zu installieren, aber es hat nicht funktioniert
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Ich wollte das Suchmodul von Ansible2 verwenden, aber es hat einige Zeit gedauert, machen Sie sich also eine Notiz
Verwenden Sie Pillow, um das Bild transparent zu machen und nur einen Teil davon zu überlagern
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Docker x Visualization hat nicht funktioniert und ich war süchtig danach, also habe ich es zusammengefasst!
Ich habe versucht, Hanana Oba und Emiri Otani durch tiefes Lernen zu klassifizieren (Teil 2)
Ich habe mein Bestes versucht, um eine Optimierungsfunktion zu erstellen, aber es hat nicht funktioniert.
Bestimmen Sie anhand des Bildes des Shiba-Hundes anhand des Bildes des Shiba-Hundes, ob es sich um ein Kind handelt