Font size
  • A-
  • A
  • A+
Site color
  • R
  • A
  • A
  • A
Skip to main content
AI4VET AI4VET
  • Home
  • Calendar
  • More
You are currently using guest access
Log in
AI4VET
Home Calendar
Expand all Collapse all
  1. AI/ML Fundamentals
  2. AIML-SR
  3. 4. Neuronske mreže (SR)
  4. Vežba 11: Mreža VGG-16 i zadatak klasifikacije

Vežba 11: Mreža VGG-16 i zadatak klasifikacije

colab

U ovoj svesci možeš oprobati kako zaista rade konvolutivne neuronske mreže. Koristićemo mrežu VGG-16 i testirati je u zadatku klasifikacije slika. Na raspolaganju imamo čak 1000 klasa!

Na samom početku učitaćemo standardne biblioteke koje su nam neophodne za dalji rad.

#%pip install pandas

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

Posebno , iz biblioteke TensorFlow učitavamo istreniran model VGG-16. Prilikom učitavanja ovog modela potrebno je da naglasimo da želimo da koristimo model koji je obučavan na slikama iz skupa ImageNet. To možemo uraditi tako što ćemo postaviti argument ` weights ` funkcije ` VGG16 ` koja se koristi za učitavanje modela na vrednost ` imagenet `. Samo učitavanje modela će malo potrajati.

#%pip install tensorflow
#%pip install --upgrade numpy

from tensorflow.keras.applications import VGG16
model = VGG16(weights='imagenet')

VGG16 je algoritam za detekciju i klasifikaciju objekata koji je u stanju da klasifikuje 1000 slika 1000 različitih kategorija sa 92,7% tačnosti. To je jedan od popularnih algoritama za klasifikaciju slika i jednostavan je za korišćenje sa prenosnim učenjem.

VGG16 Architecture

Dalje ćemo se uveriti od kojih se sve slojeva sastoji ova mreža. Nemoj da te zbuni ako ne razumeš sve detalje koji se prikazuju. Važno je da znaš da se na ulazu očekuje slika dimenzije 224x224 piksela u boji (zato je i pored ulaznog sloja navedeno 224, 224, 3) i da na izlazu imaš jednu od 1000 klasa. Ispis možeš da uporediš i sa slikom modela VGG-16 koju smo razmatrali i tako otkriješ više informacija.

model.summary()

Možemo da vidimo da je broj parametara ove mreže preko 138 miliona. Mi mrežu nećemo trenirati, već ćemo samo korisiti istreniran model. Zato je važno da parametre modela u toku rada ne menjamo - svaki ima svoj doprinos.

Ideja je da slika nad kojom ćemo testirati mrežu bude neka proizvoljna slika sa veba. Da bismo to uspeli da uradimo koristićemo par biblioteka. Biblioteka PIL je standardna biblioteka jezika Python za rad sa slikama dok ćemo biblioteke urlib i io iskoristiti za učitavanje slike.

from PIL import Image
from urllib import request
from io import BytesIO

Funkcija `load_image` će nam pomoći da prevučemo koju god sliku želimo sa veba. Dovoljno je da joj zadamo URL putanju.

def load_image(url_path):
    response = request.urlopen(url_path).read()
    return Image.open(BytesIO(response))

Mi smo odabrali sliku sliku zlatnog retrivera! Promenom putanje u promenljivoj `image_url` možeš da postaviš sliku koju želiš.

image_url = 'https://images.unsplash.com/photo-1558788353-f76d92427f16?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=738&q=80' # https://unsplash.com/photos/x5oPmHmY3kQ
test_image = load_image(url_path=image_url)

Sada ćemo i prikazati učitanu sliku.

plt.imshow(test_image)
plt.axis('off')
plt.show()

Prilikom izbora slike važno je imati na umu da klasa objekta na slici mora biti poznata modelu. Pošto je model VGG-16 treniran na preko 1.2 miliona slika poznaje jako puno objekata, čak 1000 različitih. Kako je upoznao zlatnog retrivera možemo očekivati dobar rezultat. Ukoliko modelu damo sliku sa nekim objektom koji ne poznaje, daće nam predikcije klasa čije slike najviše podsećaju na našu. Videćemo na kraju koje sve klase objekata nalikuju na zlatnog retrivera.

Pošto slika koju treba da prosledimo modelu, treba da bude specijalno pripremljena, sledi deo sa pripremama.

Učitaćemo i par biblioteka koje će nam olakšati posao. Uobičajeno je da prilikom deljenja modela zajednica podeli i sve propratne funkcionalosti koje nam znače u tim koracima.

from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import preprocess_input, decode_predictions

Prvo ćemo pripremiti sliku tako što ćemo joj postaviti dimenzije na 224x224 i reći da koristi tri kanala boja RGB.

test_image = test_image.resize((224, 224))
test_image = test_image.convert('RGB')
plt.imshow(test_image)
plt.axis('off')
plt.show()

Dalje ćemo se osigurati da je slika u odgovarajućem matričnom formatu.

matrix_form_test_image = image.img_to_array(test_image)
print(matrix_form_test_image.shape)

Kao što znaš, mreže uvek rade sa paketićima podataka. Zato ćemo napraviti i paketić koji sadrži našu sliku. Kao što očekuješ njegova dimenzija će biti 1 x 224 x 224 x 3 jer imamo samo jednu sliku u paketiću.

batch = np.expand_dims(matrix_form_test_image, axis=0)
print(f'(number_of_test_images, height, width, number_of_channels) = {batch.shape}')

Dalje sledi deo koji se tiče numeričkog pretprocesiranja slike u vidu normalizacije. U tome će nam pomoći posebna funkcija ` preprocess_input ` koja prati model.

test_image_batch = preprocess_input(batch)

Pošto smo završili sa pripremom, sada možemo da iskoristimo model za zadatak klasifikacije. Funkcija koja će nam pomoći u tom delu se zove ` predict `.

model_predictions = model.predict(test_image_batch)

Dobijene predikcije modela predstavljaju verovatnoće pripadnosti naše slike svakoj od 1000 klasa.

model_predictions.shape

Da bismo izdvojili klasu kojoj pripada naša slika, možemo iskorisiti funkciju ` decode_predictions ` koja će nam vratiti verovatnoće i imena za 5 najverovatnijih klasa. Ovo će nam dati uvid u to koliko je model siguran prilikom klasifikacije.

most_likely_classes = decode_predictions(model_predictions)[0]
print(most_likely_classes)

Kao što možemo da vidimo, na prvom mestu je klasa *golden retriever* i to sa verovatnoćom 0.8042132. Da bismo lakše ispratili izlaz modela, možemo ga i grafički prikazati.

class_names = [item[1] for item in most_likely_classes]
class_probabilities = [item[2] for item in most_likely_classes]
plt.figure(figsize=(10, 4))
plt.bar(class_names, class_probabilities, color=['teal', 'yellow', 'green', 'blue', 'orange'])
plt.title('Top 5 Most Likely Classes')
plt.ylabel('Probability')
plt.show()

Vidimo da je model sa velikom sigurnošću predvideo da je slika koju smo odabrali slika zlatnog retrivera. Neke od drugih klasa koje je model uzeo u obzir su neke druge vrste retrivera. Neobično je da se u listi rezultata pojavila i teniska loptica. smile

Completion requirements:
  • Make a submission
Previous activity Vežba 10: Obučavanje neuronskih mreža
Next activity Vežba12: Algoritam K-sredina
You are currently using guest access (Log in)
Data retention summary
Get the mobile app
Get the mobile app
Play Store App Store
Powered by Moodle

This theme was proudly developed by

Conecti.me