[PYTHON] Bilderkennung von Früchten mit VGG16

1. 1. Hintergrund

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.

2. Was ist VGG16 überhaupt? : Denken:

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)

3. 3. Einführung von VGG16 (mit Google Colab)

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()
model.summary () result
Model: "vgg16" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_3 (InputLayer) (None, 224, 224, 3) 0 _________________________________________________________________ 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 _________________________________________________________________ predictions (Dense) (None, 1000) 4097000 ================================================================= Total params: 138,357,544 Trainable params: 138,357,544 Non-trainable params: 0 _________________________________________________________________

Das diesmal verwendete Bild bewertet Äpfel (Orin). apple_orin.jpg

  #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.

4. Ergebnis

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 commodity-granny-smith.jpg

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.

5. Erwägung

Die wichtigsten Punkte bei der Verwendung des VGG16-Modells sind folgende.

model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)

Einzelheiten

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

Bilderkennung von Früchten mit VGG16
Python: Grundlagen der Bilderkennung mit CNN
Anwendung der CNN2-Bilderkennung
Bilderfassung von Firefox mit Python
Beurteilung des hintergrundbeleuchteten Bildes mit OpenCV
Bilderkennung
Kategorieschätzung mit der Bilderkennungs-API von docomo
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Bild der Schließung
Ich habe versucht, Bilder mit CIFAR-10 mit Keras-Learning- zu erkennen.
So codieren Sie eine Drohne mithilfe der Bilderkennung
Nogizaka-Erkennungsprogramm (mit Yolov5) Inhaltsverzeichnis
Akkorderkennung mit Chromagramm der Python Library Librosa
Ich habe versucht, Bilder von CIFAR-10 mit Keras-Bilderkennung zu erkennen.
Grundprinzipien der Bilderkennungstechnologie (für Anfänger)
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Maschinelles Lernen: Bilderkennung von MNIST mithilfe von PCA und Gaussian Native Bayes
Bilderkennung mit Keras
Pfeffer-Tutorial (7): Bilderkennung
Bildsegmentierung mit U-Net
Grundlagen der CNN 1-Bilderkennung
Beispiel für die Verwendung von Lambda
Implementierung von VGG16 mit Keras, die ohne Verwendung eines trainierten Modells erstellt wurden
Bestimmung von Baumkrankheiten durch Bilderkennung mit CNTK und SVM
Sammeln Sie eine große Anzahl von Bildern mit der Bildsuch-API von Bing
Bilderkennung mit API aus null Wissen mit AutoML Vision
Beurteilung des Sieges oder der Niederlage von Shadova anhand der Bilderkennung
Klassifizieren Sie CIFAR-10-Bilddatensätze mithilfe verschiedener Modelle des Deep Learning
Ähnliche Gesichtsbilderkennung mit Gesichtserkennung und PCA- und K-Mittel-Clustering
Ich habe versucht, die handschriftliche Zeichenerkennung von Runenzeichen mit CNN mithilfe von Keras zu erkennen
[PyTorch] Bildklassifizierung von CIFAR-10
Implementierung von TF-IDF mit Gensim
Versuchen Sie es mit Jupyters Docker-Image
Alterserkennung mit Peppers API
Deep Learning Bilderkennung 1 Theorie
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Python: Grundlagen der Verwendung von Scikit-Learn ①
Bilderkennung von Müll mit Edge (Raspberry Pi) aus null Wissen mit AutoML Vsion und TPU
Einführung von Kaffee mit Pyenv
Bilderkennung mit Keras + OpenCV
Ein Memorandum zur Verwendung von eigen3
Verstehen Sie die Funktion der Faltung am Beispiel der Bildverarbeitung
Test der Spracherkennung mit Azure mit Python (Eingabe vom Mikrofon)
Eine Geschichte, die die elektronische Bewertung von Prüfungen mit Bilderkennung unterstützt
Implementierung der Datetime-Picker-Aktion mit line-bot-sdk-python und Beispielimplementierung von Image Carousel