Derin Öğrenme (Deep Learning) - Bilgisayar Görmesi Örnekleri

Kuş Türü Tahmini (400 Kuş Türü)

Yayın tarihi :10-Mar-22
Bölüm kodlarını ve/veya veri setlerini indir.

Konu: 400 farklı kuş türüne ait resimler Derin Öğrenme modeli ile eğitilerek yeni girilen kuş türünü tahmin etmek.

Veri seti: 400 farklı klasör içersinde kuş türlerine ait farklı boyutlarda 58388 adet eğitim ve 2000 adet de test fotoğraflarının bulunduğu bir veri setidir.

Veri seti okuma işlemleri

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")

import glob
import pathlib
import PIL

from tensorflow.keras.models import Sequential,Model
from tensorflow.keras.layers import Dense,Dropout,BatchNormalization
from tensorflow.keras.utils import plot_model
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import model_from_json
from tensorflow.keras import losses
from tensorflow.keras.preprocessing import image
from tensorflow.data import AUTOTUNE
from tensorflow.keras.applications.xception import Xception

from tensorflow.compat.v1 import ConfigProto,InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

Veri seti "Kaggle" da bulunmaktadır. Kaggle'dan indirmek için tıklayınız. İndirdikten sonra çalışma dosyasının bulunduğu konuma çıkartabilirsiniz.

#Veri seti adresi tanımlanır
data_dir_train=pathlib.Path("100_bird_species/train/")
data_dir_test=pathlib.Path("100_bird_species/test/")

#Train veri setinde bulunan toplam resim sayısı
train_image_count=len(list(data_dir_train.glob("*/*")))
print("Train veri setinde toplam resim sayısı:{}".format(train_image_count))

#Train veri setinde bulunan toplam resim sayısı
test_image_count=len(list(data_dir_test.glob("*/*")))
print("Test veri setinde toplam resim sayısı:{}".format(test_image_count))

Çıktı:

Train veri setinde toplam resim sayısı:58388
Test veri setinde toplam resim sayısı:2000
#Train veri setinde bulunan "GAMBELS QUAIL" klasöründen bir tane örnek fotoğraf
GAMBELS_QUAIL=list(data_dir_train.glob("GAMBELS QUAIL/*"))
PIL.Image.open(GAMBELS_QUAIL[5])

Çıktı:

#Train veri setinde bulunan "RED FODY" klasöründen bir tane örnek fotoğraf
RED_FODY=list(data_dir_train.glob("RED FODY/*"))
PIL.Image.open(RED_FODY[2])

Çıktı:

Veri seti için Train ve Test verilerini ayırma işlemi

batch_size=64 #alınacak parti boyutu
img_height=224 #resim yüksekliği
img_width=224 #resim genişliği

image_data_gen=ImageDataGenerator(rescale=1./255)

train_ds=image_data_gen.flow_from_directory(
    directory=data_dir_train,
    batch_size=batch_size,
    target_size=(img_height,img_width),
    shuffle=True,
    class_mode="categorical"
)

test_ds=image_data_gen.flow_from_directory(
    directory=data_dir_test,
    batch_size=batch_size,
    target_size=(img_height,img_width),
    shuffle=True,
    class_mode="categorical"
)

Çıktı:

Found 58388 images belonging to 400 classes.
Found 2000 images belonging to 400 classes.

Yukarıdaki çıktıda görüldüğü üzere 58388 resim train verileri için ve 2000 resim de test verileri için kullanılacak olup toplam sınıf sayısı 400'dür.

#Verilerin bulunduğu klasörler(resimlerin sınıfları) listeleme işlemi
class_names=train_ds.class_indices
print(class_names)

Çıktı:

{'ABBOTTS BABBLER': 0, 'ABBOTTS BOOBY': 1, 'ABYSSINIAN GROUND HORNBILL': 2, ........}
#Train için ayrılan resimlerden birkaç tanesini görüntüleyelim
plt.figure(figsize=(15,10))

for i in range(25):
    ax=plt.subplot(5,5,i+1)
    plt.imshow(train_ds.next()[0][i])
    plt.xticks([])
    plt.yticks([])

Çıktı:

#64'li olarak gruplandırılan(bacth_size) Train verilerinin grup sayısı
print("Grup sayısı:{}".format(len(train_ds)))
#Train verilerindeki resim ve label boyutları

print("Resim boyutları:{}".format(train_ds.image_shape))
print("Label boyutları:{}".format(train_ds.labels.shape))

Çıktı:

Grup sayısı:913
Resim boyutları:(224, 224, 3)
Label boyutları:(58388,)
#64'li olarak gruplandırılan(bacth_size) Test verilerinin grup sayısı
print("Grup sayısı:{}".format(len(test_ds)))
#Train verilerindeki resim ve label boyutları

print("Resim boyutları:{}".format(test_ds.image_shape))
print("Label boyutları:{}".format(test_ds.labels.shape))

Çıktı:

Grup sayısı:32
Resim boyutları:(224, 224, 3)
Label boyutları:(2000,)

Model oluşturma ve model eğitme işlemleri

Bilgisayar CPU'sunun etkin bir şekilde kullanılabilmesi için aşağıdaki komutun eklenmesi gerekmetekdir.

autotune=AUTOTUNE

train_ds = train_ds.cache().prefetch(buffer_size=autotune)
test_ds = test_ds.cache().prefetch(buffer_size=autotune)

Xception ile ImageNet üzerinde önceden eğitilmiş ağırlıklarla yüklenen bir Keras görüntü sınıflandırma modeli döndürür. Bizde bu modeli başlangıç olarak kullanarak başarı oranımızı artıracağız. Modelin görselleştirilmesi aşamasında Xception ile modele eklenen katmanları görüntüleyebilirsiniz.

xception=Xception(
    input_shape=(img_height,img_width,3),
    include_top=False,
    weights="imagenet",
    pooling="avg",
    classes=3
)
xception.trainable=False

num_classes=len(class_names) #Çıktı boyutu

x=xception.output
x=BatchNormalization()(x)
x=Dense(512,activation="relu")(x)
x=Dropout(rate=0.2)(x)
x=Dense(256,activation="relu")(x)
x=Dropout(rate=0.2)(x)
x=Dense(num_classes,activation="softmax")(x)
model=Model(xception.input,x)
plot_model(model,show_shapes=True)

Çıktı:


model.compile(optimizer="adam",
              metrics=["accuracy"],
              loss=losses.CategoricalCrossentropy(label_smoothing=0.1)
             )
model.fit(
    train_ds,
    validation_data=test_ds,
    epochs=3,
    verbose=1,
    batch_size=64
)

Çıktı:

Epoch 1/3
913/913 [==============================] - 5378s 6s/step - loss: 2.7503 - accuracy: 0.5475 - val_loss: 1.6218 - val_accuracy: 0.8565
Epoch 2/3
913/913 [==============================] - 5500s 6s/step - loss: 1.9838 - accuracy: 0.7490 - val_loss: 1.4866 - val_accuracy: 0.8970
Epoch 3/3
913/913 [==============================] - 5284s 6s/step - loss: 1.8204 - accuracy: 0.7975 - val_loss: 1.4544 - val_accuracy: 0.9060

Kayıp değerleri(loss) ve başarı değerlerini(accuracy) train ve test verilerindeki durumlarına göre grafiksel olarak gözlemleyebiliriz. 

fig=plt.figure(figsize=(20,6))

#Accuracy Grafiklemesi
x1=fig.add_subplot(121)
x1.plot(model.history.history['accuracy'])
x1.plot(model.history.history['val_accuracy'])
x1.set_title('Model accuracy')
x1.set_ylabel('Accuracy')
x1.set_xlabel('Epoch')
x1.legend(['Train', 'Test'], loc='upper left')

#Loss Grafiklemesi
x2=fig.add_subplot(122)
x2.plot(model.history.history['loss'])
x2.plot(model.history.history['val_loss'])
x2.set_title('Model loss')
x2.set_ylabel('Loss')
x2.set_xlabel('Epoch')
x2.legend(['Train', 'Test'], loc='upper left')

plt.show()

Çıktı:

Modelin başarı yüzdesini gözlemleyelim;

_, accuracy=model.evaluate(test_ds)
print('Accuracy: %.2f' % (accuracy*100))

Çıktı:

32/32 [==============================] - 159s 5s/step - loss: 1.4544 - accuracy: 0.9060
Accuracy: 90.60

Sonuç olarak; Derin Öğrenme Functional API modeline önceden ağırlıkları hesaplanmış Xception eklenmesi sonucunda %90.60 oranında başarı elde edilmiş oldu. Bu model için başarı oranı artırılmak istenebilir, bunun için birkaç adım denenebilir, bu adımlardan bazıları yüksek bilgisayar gücü gerektirebilecektir. Bunlar;

  • Veri seti temizlemesi daha iyi yapılabilir.
  • Model katmanlarına "Dropout" katmanları da eklenebilir.
  • Model gizli katmanları artırılabilir.
  • Gizli katmanlardaki nöron sayısı artırılabilir.
  • Model fit işleminde epoch değeri artırılabilir.

Model kaydetme, okuma ve tahminleme işlemleri

#Model kayıt işlemi
model_json=model.to_json()
with open("model400BirdsFunctional.json", "w") as json_file:
    json_file.write(model_json)

#Model ağırlıkları kayıt işlemi
model.save_weights("model400BirdsFunctional.h5")

print("Model ve ağırlıkları dosya konumuna kaydedildi.")

Çıktı:

Model ve ağırlıkları dosya konumuna kaydedildi.
#Modeli yükle
json_file = open('model400BirdsFunctional.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)

# Model ağırlıklarını yükle
loaded_model.load_weights("model400BirdsFunctional.h5")

print("Model ve ağırlıkları dosya konumundan okundu.")

Çıktı:

Model ve ağırlıkları dosya konumundan okundu.
class_names={'ABBOTTS BABBLER': 0,
 'ABBOTTS BOOBY': 1,
 'ABYSSINIAN GROUND HORNBILL': 2,
 'AFRICAN CROWNED CRANE': 3,
 'AFRICAN EMERALD CUCKOO': 4,
 'AFRICAN FIREFINCH': 5,
 'AFRICAN OYSTER CATCHER': 6,
 'ALBATROSS': 7,
 'ALBERTS TOWHEE': 8,
 'ALEXANDRINE PARAKEET': 9,
 'ALPINE CHOUGH': 10,
 'ALTAMIRA YELLOWTHROAT': 11,
 'AMERICAN AVOCET': 12,
 'AMERICAN BITTERN': 13,
 'AMERICAN COOT': 14,
 'AMERICAN GOLDFINCH': 15,
 'AMERICAN KESTREL': 16,
 'AMERICAN PIPIT': 17,
 'AMERICAN REDSTART': 18,
 'AMETHYST WOODSTAR': 19,
 'ANDEAN GOOSE': 20,
 'ANDEAN LAPWING': 21,
 'ANDEAN SISKIN': 22,
 'ANHINGA': 23,
 'ANIANIAU': 24,
 'ANNAS HUMMINGBIRD': 25,
 'ANTBIRD': 26,
 'ANTILLEAN EUPHONIA': 27,
 'APAPANE': 28,
 'APOSTLEBIRD': 29,
 'ARARIPE MANAKIN': 30,
 'ASHY THRUSHBIRD': 31,
 'ASIAN CRESTED IBIS': 32,
 'AVADAVAT': 33,
 'AZURE JAY': 34,
 'AZURE TANAGER': 35,
 'AZURE TIT': 36,
 'BAIKAL TEAL': 37,
 'BALD EAGLE': 38,
 'BALD IBIS': 39,
 'BALI STARLING': 40,
 'BALTIMORE ORIOLE': 41,
 'BANANAQUIT': 42,
 'BAND TAILED GUAN': 43,
 'BANDED BROADBILL': 44,
 'BANDED PITA': 45,
 'BANDED STILT': 46,
 'BAR-TAILED GODWIT': 47,
 'BARN OWL': 48,
 'BARN SWALLOW': 49,
 'BARRED PUFFBIRD': 50,
 'BARROWS GOLDENEYE': 51,
 'BAY-BREASTED WARBLER': 52,
 'BEARDED BARBET': 53,
 'BEARDED BELLBIRD': 54,
 'BEARDED REEDLING': 55,
 'BELTED KINGFISHER': 56,
 'BIRD OF PARADISE': 57,
 'BLACK & YELLOW  BROADBILL': 58,
 'BLACK BAZA': 59,
 'BLACK COCKATO': 60,
 'BLACK FRANCOLIN': 61,
 'BLACK SKIMMER': 62,
 'BLACK SWAN': 63,
 'BLACK TAIL CRAKE': 64,
 'BLACK THROATED BUSHTIT': 65,
 'BLACK THROATED WARBLER': 66,
 'BLACK VULTURE': 67,
 'BLACK-CAPPED CHICKADEE': 68,
 'BLACK-NECKED GREBE': 69,
 'BLACK-THROATED SPARROW': 70,
 'BLACKBURNIAM WARBLER': 71,
 'BLONDE CRESTED WOODPECKER': 72,
 'BLUE COAU': 73,
 'BLUE GROUSE': 74,
 'BLUE HERON': 75,
 'BLUE THROATED TOUCANET': 76,
 'BOBOLINK': 77,
 'BORNEAN BRISTLEHEAD': 78,
 'BORNEAN LEAFBIRD': 79,
 'BORNEAN PHEASANT': 80,
 'BRANDT CORMARANT': 81,
 'BROWN CREPPER': 82,
 'BROWN NOODY': 83,
 'BROWN THRASHER': 84,
 'BULWERS PHEASANT': 85,
 'BUSH TURKEY': 86,
 'CACTUS WREN': 87,
 'CALIFORNIA CONDOR': 88,
 'CALIFORNIA GULL': 89,
 'CALIFORNIA QUAIL': 90,
 'CANARY': 91,
 'CAPE GLOSSY STARLING': 92,
 'CAPE LONGCLAW': 93,
 'CAPE MAY WARBLER': 94,
 'CAPE ROCK THRUSH': 95,
 'CAPPED HERON': 96,
 'CAPUCHINBIRD': 97,
 'CARMINE BEE-EATER': 98,
 'CASPIAN TERN': 99,
 'CASSOWARY': 100,
 'CEDAR WAXWING': 101,
 'CERULEAN WARBLER': 102,
 'CHARA DE COLLAR': 103,
 'CHATTERING LORY': 104,
 'CHESTNET BELLIED EUPHONIA': 105,
 'CHINESE BAMBOO PARTRIDGE': 106,
 'CHINESE POND HERON': 107,
 'CHIPPING SPARROW': 108,
 'CHUCAO TAPACULO': 109,
 'CHUKAR PARTRIDGE': 110,
 'CINNAMON ATTILA': 111,
 'CINNAMON FLYCATCHER': 112,
 'CINNAMON TEAL': 113,
 'CLARKS NUTCRACKER': 114,
 'COCK OF THE  ROCK': 115,
 'COCKATOO': 116,
 'COLLARED ARACARI': 117,
 'COMMON FIRECREST': 118,
 'COMMON GRACKLE': 119,
 'COMMON HOUSE MARTIN': 120,
 'COMMON IORA': 121,
 'COMMON LOON': 122,
 'COMMON POORWILL': 123,
 'COMMON STARLING': 124,
 'COPPERY TAILED COUCAL': 125,
 'CRAB PLOVER': 126,
 'CRANE HAWK': 127,
 'CREAM COLORED WOODPECKER': 128,
 'CRESTED AUKLET': 129,
 'CRESTED CARACARA': 130,
 'CRESTED COUA': 131,
 'CRESTED FIREBACK': 132,
 'CRESTED KINGFISHER': 133,
 'CRESTED NUTHATCH': 134,
 'CRESTED OROPENDOLA': 135,
 'CRESTED SHRIKETIT': 136,
 'CRIMSON CHAT': 137,
 'CRIMSON SUNBIRD': 138,
 'CROW': 139,
 'CROWNED PIGEON': 140,
 'CUBAN TODY': 141,
 'CUBAN TROGON': 142,
 'CURL CRESTED ARACURI': 143,
 'D-ARNAUDS BARBET': 144,
 'DARK EYED JUNCO': 145,
 'DEMOISELLE CRANE': 146,
 'DOUBLE BARRED FINCH': 147,
 'DOUBLE BRESTED CORMARANT': 148,
 'DOUBLE EYED FIG PARROT': 149,
 'DOWNY WOODPECKER': 150,
 'DUSKY LORY': 151,
 'EARED PITA': 152,
 'EASTERN BLUEBIRD': 153,
 'EASTERN GOLDEN WEAVER': 154,
 'EASTERN MEADOWLARK': 155,
 'EASTERN ROSELLA': 156,
 'EASTERN TOWEE': 157,
 'ELEGANT TROGON': 158,
 'ELLIOTS  PHEASANT': 159,
 'EMERALD TANAGER': 160,
 'EMPEROR PENGUIN': 161,
 'EMU': 162,
 'ENGGANO MYNA': 163,
 'EURASIAN GOLDEN ORIOLE': 164,
 'EURASIAN MAGPIE': 165,
 'EUROPEAN GOLDFINCH': 166,
 'EUROPEAN TURTLE DOVE': 167,
 'EVENING GROSBEAK': 168,
 'FAIRY BLUEBIRD': 169,
 'FAIRY TERN': 170,
 'FIORDLAND PENGUIN': 171,
 'FIRE TAILLED MYZORNIS': 172,
 'FLAME BOWERBIRD': 173,
 'FLAME TANAGER': 174,
 'FLAMINGO': 175,
 'FRIGATE': 176,
 'GAMBELS QUAIL': 177,
 'GANG GANG COCKATOO': 178,
 'GILA WOODPECKER': 179,
 'GILDED FLICKER': 180,
 'GLOSSY IBIS': 181,
 'GO AWAY BIRD': 182,
 'GOLD WING WARBLER': 183,
 'GOLDEN CHEEKED WARBLER': 184,
 'GOLDEN CHLOROPHONIA': 185,
 'GOLDEN EAGLE': 186,
 'GOLDEN PHEASANT': 187,
 'GOLDEN PIPIT': 188,
 'GOULDIAN FINCH': 189,
 'GRAY CATBIRD': 190,
 'GRAY KINGBIRD': 191,
 'GRAY PARTRIDGE': 192,
 'GREAT GRAY OWL': 193,
 'GREAT JACAMAR': 194,
 'GREAT KISKADEE': 195,
 'GREAT POTOO': 196,
 'GREATOR SAGE GROUSE': 197,
 'GREEN BROADBILL': 198,
 'GREEN JAY': 199,
 'GREEN MAGPIE': 200,
 'GREY PLOVER': 201,
 'GROVED BILLED ANI': 202,
 'GUINEA TURACO': 203,
 'GUINEAFOWL': 204,
 'GURNEYS PITTA': 205,
 'GYRFALCON': 206,
 'HAMMERKOP': 207,
 'HARLEQUIN DUCK': 208,
 'HARLEQUIN QUAIL': 209,
 'HARPY EAGLE': 210,
 'HAWAIIAN GOOSE': 211,
 'HAWFINCH': 212,
 'HELMET VANGA': 213,
 'HEPATIC TANAGER': 214,
 'HIMALAYAN BLUETAIL': 215,
 'HIMALAYAN MONAL': 216,
 'HOATZIN': 217,
 'HOODED MERGANSER': 218,
 'HOOPOES': 219,
 'HORNBILL': 220,
 'HORNED GUAN': 221,
 'HORNED LARK': 222,
 'HORNED SUNGEM': 223,
 'HOUSE FINCH': 224,
 'HOUSE SPARROW': 225,
 'HYACINTH MACAW': 226,
 'IBERIAN MAGPIE': 227,
 'IBISBILL': 228,
 'IMPERIAL SHAQ': 229,
 'INCA TERN': 230,
 'INDIAN BUSTARD': 231,
 'INDIAN PITTA': 232,
 'INDIAN ROLLER': 233,
 'INDIGO BUNTING': 234,
 'INLAND DOTTEREL': 235,
 'IVORY GULL': 236,
 'IWI': 237,
 'JABIRU': 238,
 'JACK SNIPE': 239,
 'JANDAYA PARAKEET': 240,
 'JAPANESE ROBIN': 241,
 'JAVA SPARROW': 242,
 'KAGU': 243,
 'KAKAPO': 244,
 'KILLDEAR': 245,
 'KING VULTURE': 246,
 'KIWI': 247,
 'KOOKABURRA': 248,
 'LARK BUNTING': 249,
 'LAZULI BUNTING': 250,
 'LESSER ADJUTANT': 251,
 'LILAC ROLLER': 252,
 'LITTLE AUK': 253,
 'LONG-EARED OWL': 254,
 'MAGPIE GOOSE': 255,
 'MALABAR HORNBILL': 256,
 'MALACHITE KINGFISHER': 257,
 'MALAGASY WHITE EYE': 258,
 'MALEO': 259,
 'MALLARD DUCK': 260,
 'MANDRIN DUCK': 261,
 'MANGROVE CUCKOO': 262,
 'MARABOU STORK': 263,
 'MASKED BOOBY': 264,
 'MASKED LAPWING': 265,
 'MIKADO  PHEASANT': 266,
 'MOURNING DOVE': 267,
 'MYNA': 268,
 'NICOBAR PIGEON': 269,
 'NOISY FRIARBIRD': 270,
 'NORTHERN CARDINAL': 271,
 'NORTHERN FLICKER': 272,
 'NORTHERN FULMAR': 273,
 'NORTHERN GANNET': 274,
 'NORTHERN GOSHAWK': 275,
 'NORTHERN JACANA': 276,
 'NORTHERN MOCKINGBIRD': 277,
 'NORTHERN PARULA': 278,
 'NORTHERN RED BISHOP': 279,
 'NORTHERN SHOVELER': 280,
 'OCELLATED TURKEY': 281,
 'OKINAWA RAIL': 282,
 'ORANGE BRESTED BUNTING': 283,
 'ORIENTAL BAY OWL': 284,
 'OSPREY': 285,
 'OSTRICH': 286,
 'OVENBIRD': 287,
 'OYSTER CATCHER': 288,
 'PAINTED BUNTING': 289,
 'PALILA': 290,
 'PARADISE TANAGER': 291,
 'PARAKETT  AKULET': 292,
 'PARUS MAJOR': 293,
 'PATAGONIAN SIERRA FINCH': 294,
 'PEACOCK': 295,
 'PELICAN': 296,
 'PEREGRINE FALCON': 297,
 'PHILIPPINE EAGLE': 298,
 'PINK ROBIN': 299,
 'POMARINE JAEGER': 300,
 'PUFFIN': 301,
 'PURPLE FINCH': 302,
 'PURPLE GALLINULE': 303,
 'PURPLE MARTIN': 304,
 'PURPLE SWAMPHEN': 305,
 'PYGMY KINGFISHER': 306,
 'QUETZAL': 307,
 'RAINBOW LORIKEET': 308,
 'RAZORBILL': 309,
 'RED BEARDED BEE EATER': 310,
 'RED BELLIED PITTA': 311,
 'RED BROWED FINCH': 312,
 'RED FACED CORMORANT': 313,
 'RED FACED WARBLER': 314,
 'RED FODY': 315,
 'RED HEADED DUCK': 316,
 'RED HEADED WOODPECKER': 317,
 'RED HONEY CREEPER': 318,
 'RED NAPED TROGON': 319,
 'RED TAILED HAWK': 320,
 'RED TAILED THRUSH': 321,
 'RED WINGED BLACKBIRD': 322,
 'RED WISKERED BULBUL': 323,
 'REGENT BOWERBIRD': 324,
 'RING-NECKED PHEASANT': 325,
 'ROADRUNNER': 326,
 'ROBIN': 327,
 'ROCK DOVE': 328,
 'ROSY FACED LOVEBIRD': 329,
 'ROUGH LEG BUZZARD': 330,
 'ROYAL FLYCATCHER': 331,
 'RUBY THROATED HUMMINGBIRD': 332,
 'RUDY KINGFISHER': 333,
 'RUFOUS KINGFISHER': 334,
 'RUFUOS MOTMOT': 335,
 'SAMATRAN THRUSH': 336,
 'SAND MARTIN': 337,
 'SANDHILL CRANE': 338,
 'SATYR TRAGOPAN': 339,
 'SCARLET CROWNED FRUIT DOVE': 340,
 'SCARLET IBIS': 341,
 'SCARLET MACAW': 342,
 'SCARLET TANAGER': 343,
 'SHOEBILL': 344,
 'SHORT BILLED DOWITCHER': 345,
 'SMITHS LONGSPUR': 346,
 'SNOWY EGRET': 347,
 'SNOWY OWL': 348,
 'SORA': 349,
 'SPANGLED COTINGA': 350,
 'SPLENDID WREN': 351,
 'SPOON BILED SANDPIPER': 352,
 'SPOONBILL': 353,
 'SPOTTED CATBIRD': 354,
 'SRI LANKA BLUE MAGPIE': 355,
 'STEAMER DUCK': 356,
 'STORK BILLED KINGFISHER': 357,
 'STRAWBERRY FINCH': 358,
 'STRIPED OWL': 359,
 'STRIPPED MANAKIN': 360,
 'STRIPPED SWALLOW': 361,
 'SUPERB STARLING': 362,
 'SWINHOES PHEASANT': 363,
 'TAILORBIRD': 364,
 'TAIWAN MAGPIE': 365,
 'TAKAHE': 366,
 'TASMANIAN HEN': 367,
 'TEAL DUCK': 368,
 'TIT MOUSE': 369,
 'TOUCHAN': 370,
 'TOWNSENDS WARBLER': 371,
 'TREE SWALLOW': 372,
 'TROPICAL KINGBIRD': 373,
 'TRUMPTER SWAN': 374,
 'TURKEY VULTURE': 375,
 'TURQUOISE MOTMOT': 376,
 'UMBRELLA BIRD': 377,
 'VARIED THRUSH': 378,
 'VENEZUELIAN TROUPIAL': 379,
 'VERMILION FLYCATHER': 380,
 'VICTORIA CROWNED PIGEON': 381,
 'VIOLET GREEN SWALLOW': 382,
 'VIOLET TURACO': 383,
 'VULTURINE GUINEAFOWL': 384,
 'WALL CREAPER': 385,
 'WATTLED CURASSOW': 386,
 'WATTLED LAPWING': 387,
 'WHIMBREL': 388,
 'WHITE BROWED CRAKE': 389,
 'WHITE CHEEKED TURACO': 390,
 'WHITE NECKED RAVEN': 391,
 'WHITE TAILED TROPIC': 392,
 'WHITE THROATED BEE EATER': 393,
 'WILD TURKEY': 394,
 'WILSONS BIRD OF PARADISE': 395,
 'WOOD DUCK': 396,
 'YELLOW BELLIED FLOWERPECKER': 397,
 'YELLOW CACIQUE': 398,
 'YELLOW HEADED BLACKBIRD': 399}
class_names_values_list=list(class_names.values())
class_names_item_list=list(class_names.items())
def predictImage(img_path):
    #Resim 224x224 boyutlarında ve kendi rengi ile okunur.
    img = image.load_img(img_path, target_size=(224,224))
  
    #Okunan resim matrise çevrilir.
    img_array = image.img_to_array(img)
    img_batch = np.expand_dims(img_array, axis=0)
    
    #Tahminleme işlemi uygulanır
    pred=loaded_model.predict(img_batch)
    
    #Grafikleme yapılır.
    labels=class_names_values_list
    
    plt.imshow(img)
    plt.title("Yüklenen Fotoğraf")
    plt.xticks([])
    plt.yticks([])
    
    fig=plt.figure(figsize=(20,4))
    plt.bar(labels,pred[0])
    plt.title("Tahmin Değeri")
    plt.xticks(rotation=90,fontsize=8)
    
    ratio=np.round(pred[0][np.argmax(pred[0])]*100,2)
    type_=class_names_item_list[np.argmax(pred[0])]
 
    return "%{} oranında '{}' olarak tahmin edilmiştir.".format(ratio,type_)

Bir kaç tane kuş fotoğrafı yükleyelim ve tahminleme işlemi sonrasında yüklenen fotoğrafların türünü gözlemleyelim.

predictImage("100_bird_species/images to test/1.jpg")

Çıktı:

"%95.35 oranında '('NORTHERN SHOVELER', 280)' olarak tahmin edilmiştir."



predictImage("100_bird_species/images to test/001.jpg")

Çıktı:

"%99.99 oranında 'ailuropoda-melanoleuca' olarak tahmin edilmiştir."




Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.