De code in jupyter notebook geplakt

 De code in jupyter notebook geplakt

 

 

German shepherd
 
met 98 % zekerheid een German shepherd
 
 
 
 
 
 
vlaamse gaai
 
De vogel is met 85,5% zekerheid
een jay = vlaamse gaai
 
 
 
kat
 
Is dit een kat ?
het model weet het niet
 
 
 
met 51 % zekerheid een bij
 
volgens Het MobileNet model zou dit
met 51% zekerheid een bij zijn
Het model herkend geen bloemen,
daarom heb ik het model aangepast
Afbeeldingen classificeren met Mobilenet..                     terug naar de inleiding

De schets is een python 3.7.6  schets. De pakketten zijn in anaconda binnen een virtuele omgeving geinstalleerd.
De schets maakt gebruik van keras versie 2.3.1, numpy versie 1.18.1 en tensorflow versie 2.1.0

Het MobileNet model is getrained met  1000 imagenet classes. Imagenet bevat meer dan 14 miljoen afbeeldingen verdeeld in 20.000 classes of categorieen

Stap 1, De benodigde pakketten importeren

 
 
import keras 
from keras.preprocessing import image 
from keras.models import Model 
from keras.applications import imagenet_utils 
from keras.applications import MobileNet 
from keras.applications.mobilenet import preprocess_input 
import numpy as np 

 
Stap 2, mobilenet_1_0_224_tf.h5 model downloaden
 "mobile" is het model object
https://github.com/fchollet/deep-learning-models
 
 
 
mobile = keras.applications.mobilenet.MobileNet() 


Stap 3, De te testen afbeelding laden

Stap 4, en omzetten naar een image array.
De waarden van de pixels zijn getallen <-1,1>

 

img = image.load_img('plaatjes/hond.jpg', target_size=(224, 224))  
#img = image.load_img('plaatjes/vogel.jpg', target_size=(224, 224))  
#img = image.load_img('plaatjes/kat.jpg', target_size=(224, 224))  
#img = image.load_img('plaatjes/bloem1.jpg', target_size=(224, 224))  
img_array = image.img_to_array(img)  
img_array.shape     #(224, 224, 3)

 
Stap 5, De image array omzetten in een numpy array met 4 assen (batch size,  W, H, color)
met axis=0 wordt er een as met lengte 1 aan het begin van de image array geplaatst
ipv color spreekt men ook van channels.
 
 
 
img_array_expanded_dims = np.expand_dims(img_array, axis=0) 
img_array_expanded_dims.shape    #(1, 244, 244, 3) 

 
Stap 6, Met de preprocess_input stap wordt de batch geschikt gemaakt voor het mobilenet model

 
 
preprocessed_image = keras.applications.mobilenet.preprocess_input(img_array_expanded_dims) 
preprocessed_image.shape   #(1, 224,224, 3) 


Stap 7, De preprocessed image array door het netwerk sturen

 
 
predictions = mobile.predict(preprocessed_image) 
predictions.shape  #(1, 1000)  


Stap 8, De output is de predictions array deze naar een python list omzetten (decode).
Stap 9, De results list printen.

 
 
results = imagenet_utils.decode_predictions(predictions) 
print(results) 

[[('n02106662', 'German_shepherd', 0.9798971), ('n02105162', 'malinois', 0.019698815),
 ('n02091467', 'Norwegian_elkhound', 0.00032357377), ('n02105251', 'briard',
 2.2722812e-05), ('n02105412', 'kelpie', 2.2068109e-05)]]

Te zien is dat de afbeelding met 98% zekerheid een German Shepherd is

Het classificatie resultaat van de vogel

[[('n01580077', 'jay', 0.855893), ('n01807496', 'partridge', 0.05049236),

('n01530575', 'brambling', 0.036979247), ('n01828970', 'bee_eater', 0.014948133),

('n01608432', 'kite', 0.0074693463)]]

Het classificatie resultaat van de kat

[[('n02091244', 'Ibizan_hound', 0.10332401), ('n02101556', 'clumber', 0.09446074),

('n02087046', 'toy_terrier', 0.093962625), ('n02094258', 'Norwich_terrier', 0.0813645),

('n02115913', 'dhole', 0.06622107)]]

Het classificatie resultaat van de bloem

[[('n02206856', 'bee', 0.5107316), ('n11939491', 'daisy', 0.31991774),

('n02190166', 'fly', 0.05764599), ('n02219486', 'ant', 0.018282568),

('n07718747', 'artichoke', 0.012232409)]]