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-SK
  3. 4. Neural Networks (SK)
  4. Cvičenie 11: VGG-16 Úloha klasifikácie sietí a obrázkov

Cvičenie 11: VGG-16 Úloha klasifikácie sietí a obrázkov

VGG-16 Úloha klasifikácie siete a obrázkov

colab

V tomto poznámkovom bloku si môžete vyskúšať, ako konvolučné neurónové siete vlastne fungujú. Použijeme sieť VGG-16 a otestujeme ju v úlohe klasifikácie obrázkov. K dispozícii máme až 1000 tried! Hneď na začiatku načítame štandardné knižnice potrebné pre ďalšiu prácu.

#%pip install pandas

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


Konkrétne z knižnice TensorFlow načítame predtrénovaný model VGG-16. Pri načítavaní tohto modelu musíme uviesť, že chceme použiť model, ktorý bol natrénovaný na obrázkoch z množiny údajov ImageNet. Urobíme to tak, že nastavíme argument "váhy" funkcie "VGG16" na "imagenet". Načítanie samotného modelu môže chvíľu trvať.

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

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

Ďalej skontrolujeme vrstvy, ktoré tvoria túto sieť. Nenechajte sa zmiasť, ak nerozumiete všetkým zobrazeným detailom. Je dôležité vedieť, že vstupom sa očakáva farebný obrázok s rozmermi 224 x 224 pixelov (preto 224, 224, 3 vedľa vstupnej vrstvy) a že výstup je jedna z 1000 tried. Ak chcete zistiť viac informácií, výstup môžete porovnať so schémou modelu VGG-16, o ktorej sme hovorili.

model.summary()

Vidíme, že počet parametrov tejto siete je viac ako 138 miliónov. Nebudeme trénovať sieť, ale budeme používať iba vopred natrénovaný model. Preto je dôležité nemeniť parametre modelu počas prevádzky - každý z nich má svoj vlastný príspevok. Cieľom je otestovať sieť pomocou ľubovoľného obrázka z webu. Aby sme to dosiahli, použijeme niekoľko knižníc. Knižnica PIL je štandardná knižnica Pythonu na prácu s obrázkami, zatiaľ čo na načítanie obrázka použijeme knižnice urllib a io.

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


Funkcia "load_image" nám pomôže načítať akýkoľvek obrázok, ktorý chceme z webu. Stačí mu 

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


Vybrali sme obrázok zlatého retrievera! Zmenou cesty v premennej "image_url" môžete nastaviť požadovaný obrázok.

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)

Teraz zobrazíme načítaný obrázok.

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


Pri výbere obrázka je dôležité mať na pamäti, že model musí poznať triedu objektu na obrázku. Keďže model VGG-16 je trénovaný na viac ako 1,2 milióna obrázkov, rozpoznáva veľa objektov, dokonca 1000 rôznych. Ako sa dozvedel o zlatom retrieverovi, môžeme očakávať dobrý výsledok. Ak dáme modelu obrázok s objektom, ktorý nerozpozná, poskytne nám predpovede tried, ktorých obrazy sa najviac podobajú našim. Na konci uvidíme, ktoré triedy objektov sa podobajú zlatému retrieverovi. Keďže obrázok, ktorý potrebujeme odovzdať modelu, musí byť špeciálne pripravený, nasledujúca časť sa zaoberá prípravami.

Načítame aj niekoľko knižníc, ktoré nám uľahčia prácu. Je bežné, že komunita zdieľa všetky sprievodné funkcie, ktoré sú užitočné v týchto krokoch pri zdieľaní modelov.

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


Najprv pripravíme obrázok nastavením jeho rozmerov na 224x224 a určením, že používa tri farebné kanály RGB.

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

Ďalej zabezpečíme, aby bol obrázok v príslušnom formáte matice.

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


Ako viete, siete vždy pracujú s dátovými dávkami. Preto vytvoríme dávku, ktorá obsahuje náš obrázok. Ako sa dalo očakávať, jeho rozmer bude 1 x 224 x 224 x 3, pretože v dávke máme iba jeden obrázok.

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

Nasleduje časť, ktorá sa zaoberá numerickým predspracovaním obrazu vo forme normalizácie. Pomôže nám v tom špeciálna funkcia "preprocess_input", ktorá sprevádza model.

test_image_batch = preprocess_input(batch)

Keďže sme dokončili prípravu, môžeme teraz použiť model na klasifikačnú úlohu. Funkcia, ktorá nám v tejto časti pomôže, sa nazýva "predict".

model_predictions = model.predict(test_image_batch)

Získané modelové predpovede predstavujú pravdepodobnosti nášho obrazu patriaceho do každej z 1000 tried.

model_predictions.shape

Na extrakciu triedy, do ktorej patrí náš obrázok, môžeme použiť funkciu "decode_predictions", ktorá vráti pravdepodobnosti a názvy 5 najpravdepodobnejších tried. To nám poskytne prehľad o tom, aký istý je model počas klasifikácie.

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

Ako vidíme, na prvom mieste je trieda *zlatý retriever* s pravdepodobnosťou 0,8042132. Aby sme lepšie sledovali výstup modelu, môžeme ho zobraziť aj graficky.

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()


Vidíme, že modelka s vysokou istotou predpovedala, že obrázok, ktorý sme vybrali, je zlatý retriever. Niektoré z ďalších tried, ktoré model zvažoval, sú iné typy retrieverov. Zaujímavosťou je, že v zozname výsledkov sa objavila aj tenisová loptička. smile

Completion requirements:
  • Make a submission
Previous activity Cvičenie 10: Trénovanie neurónových sietí
Next activity Cvičenie 12: Algoritmus K-Means
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