Als ich mit Interesse versuchte, die Bilderkennung mit Keras zu implementieren, war dies unerwartet einfach. Daher entschied ich mich auf Empfehlung eines Freundes, der ein genaueres Modell implementieren möchte, für die Verwendung von VGG16. Ich bin ein Anfänger, also werde ich versuchen, mehr herauszufinden. Dieses Mal werden wir das Bild von Obayashi von Äpfeln verwenden, um zu bewerten, ob es auf Sorten angewendet werden kann. Nur ein Memo.
VGG16 ist ein 16-Schicht-CNN-Modell, das auf einem großen Bilddatensatz namens "ImageNet" trainiert wird. Es wurde im Jahr 2014 angekündigt. Es ist eines der bekanntesten trainierten Modelle, die in verschiedenen Studien verwendet werden. Andere mit ImageNet trainierte Modelle sind AlexNet, GoogLeNet und ResNet. https://www.y-shinno.com/keras-vgg16/
Das Folgende ist eine Referenz für den Vergleich mit AlexNet, GoogLeNet und ResNet hier.
(Quelle: http://thunders1028.hatenablog.com/entry/2017/11/01/035609)
Das Netzwerk des VGG-Teams der Universität Oxford, das beim ILSVRC 2014 den zweiten Platz belegte. Ein normales CNN, bestehend aus einer Faltschicht und einer Poolschicht, die eine tiefere Version von AlexNet ist, mit 16 oder 19 Gewichtsschichten (Faltschicht oder vollständig verbundene Schicht). Sie werden als VGG16 bzw. VGG19 bezeichnet.
Es verfügt über eine Struktur, in der zwei bis vier Faltschichten mit kleinen Filtern nacheinander gestapelt werden und die Größe mit einer Poolschicht halbiert wird. Es scheint, dass Features besser durch Falten mehrerer kleiner Filter (= Vertiefen der Ebene) extrahiert werden können, als das Bild mit einem großen Filter gleichzeitig zu falten. (Ich kenne den Grund nicht, aber die Häufigkeit, mit der die Aktivierungsfunktion übergeben wird, nimmt zu, sodass die Ausdruckskraft zunimmt?) [2]
GoogleNet scheint stärker zu sein, aber ich werde VGG mit Schwerpunkt auf Klarheit ausprobieren. (Dinge, die schwierig erscheinen, werden ab dem nächsten Mal sein)
Ich werde den Code sofort schreiben. Zunächst der Import von Keras
vgg16_fluits.py
!pip install keras
Importieren Sie als Nächstes die erforderlichen Bibliotheken. VGG16 ist in Keras enthalten. Das Gewicht ist in der dritten Zeile unten angegeben.
#Importieren Sie das Modell und zeigen Sie die Zusammenfassung an
import numpy as np
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)
model.summary()
Das diesmal verwendete Bild bewertet Äpfel (Orin).
#Bild lesen
from PIL import Image
#import glob
url = '/content/drive/My Drive/Colab Notebooks/img'
files=url+"/apple_orin.jpg "
image =Image.open(files)
image=image.convert('RGB')
image=image.resize((224,224))
#Konvertieren Sie das gelesene Bild im PIL-Format in ein Array
data = np.asarray(image)
#Auswertung
from keras.preprocessing import image
#Erhöhen Sie die Anzahl der Proben um eins, um einen vierdimensionalen Tensor zu erhalten
data = np.expand_dims(data, axis=0)
#Ausgabe top 5
preds = model.predict(preprocess_input(data))
results = decode_predictions(preds, top=5)[0]
for result in results:
print(result)
('n07742313', 'Granny_Smith', 0.9861995) ('n02948072', 'candle', 0.0040857443) ('n07747607', 'orange', 0.001778649) ('n03887697', 'paper_towel', 0.0016588464) ('n07693725', 'bagel', 0.0012920648)
Es wurde.
Was ist der 1. Platz "Granny_Smith"?
Granny Smith ist eine kultivierte Apfelsorte. Entwickelt in Australien im Jahr 1868 durch zufällige Sämlinge von Maria Ann Smith, dem Ursprung des Namens
Trotzdem ist das Bild selbst ziemlich nah, so dass die Genauigkeit hoch zu sein scheint. ImageNet hat möglicherweise keine Daten zu Wanglin.
Die Informationen zu Reihenfolge, Bezeichnung und Klassennamen für 1000 ImageNet-Klassen sind in der folgenden JSON-Datei zusammengefasst. Unten ist Granny_Smith.
https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json
Da es notwendig ist, separat zu lernen, um eine Bilderkennung durchzuführen, um den Typ zu bestimmen, werden wir dies ab dem nächsten Mal tun.
Dieses Mal war der Zweck, es auszuprobieren, also ist es in Ordnung.
Ab dem nächsten Mal werden wir ein Modell erstellen, das auf die Sorte angewendet werden kann.
Die wichtigsten Punkte bei der Verwendung des VGG16-Modells sind folgende.
model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)
Streit | Erläuterung |
---|---|
include_top | Gibt an, ob eine vollständig verbundene Schicht enthalten ist, die in 1000 Klassen unterteilt ist. |
True: Enthalten (Klicken Sie hier, um die ursprüngliche 1000-Klassifizierung zu verwenden.) | |
Falsch: Nicht enthalten (Zum Anpassen hier klicken) | |
weights | Gewichtstyp |
imagenet: Mit ImageNet gelernte Gewichte | |
Keine: Zufällig | |
input_tensor | Wird bei der Eingabe eines Modellbildes verwendet |
Beliebige Bilddaten: Verwenden Sie diese | |
Keine: Nicht verwendet | |
input_shape | Geben Sie die Form des Eingabebildes an |
Jede Form: benutze sie | |
None:(224, 224, 3)Wird genutzt |
Feinabstimmung mit VGG16 zur Merkmalsextraktion mit include_top auf False. (nächstes Mal)
Referenz (was Sie versuchen zu tun) http://aidiary.hatenablog.com/entry/20170131/1485864665
Recommended Posts