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!
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!
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
Oh! was ist das? !!
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! !!
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