ImageNet Dataset
Projekat ImageNet je velika vizuelna baza podataka za istraživanje softvera za vizuelno prepoznavanje objekata. Ideju za ovaj projekat osmislio je pre više od 15 godina istraživač AI Fei-Fei Li. ImageNet tim je predstavio svoj skup podataka po prvi put u 2009. godini.
Keras dolazi u paketu sa mnogim unapred obučenim modelima klasifikacije. Od Keras verzije 2.11, na raspolaganju je 19 različitih unapred obučenih modela, gde neke verzije sadrže i mnoge varijante. Spisak modela možete naći ovde. Ovde ćemo koristiti sledeće unapred obučene modele za predviđanje na nekoliko uzoraka test slika.
- VGG16
- ResNet50
- PočetakV3
AI Prepoznavanje slike je proces korišćenja veštačke inteligencije za identifikaciju i kategorizaciju objekata unutar slike, zadatak koji je, iako intuitivan za ljude, složen za mašine zbog značajne potrebne procesorske snage.
Evo jednostavne vežbe Jupiter Notebook za studente da izvrše klasifikaciju slika koristeći unapred obučeni model na skupu podataka ImageNet. Ova vežba će ih voditi kroz učitavanje unapred obučenog modela, predviđanja i vizualizaciju rezultata.
Vežba: Klasifikacija slike sa ImageNet-om
Korak 1: Podešavanje
Prvo, proverite da li imate instalirane potrebne biblioteke. Možete ih instalirati pomoću pip ako već niste:
%pip install torch torchvision matplotlib
Korak 2: Uvoz biblioteka
import torch
import torchvision.transforms as transforms
from torchvision import models
from PIL import Image
import matplotlib.pyplot as plt
import json
Korak 3: Učitajte unapred obučeni model
Učitajte unapred obučeni model (npr. ResNet-18) i podesite ga na režim evaluacije:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
model = models.resnet18(pretrained=True)
model.eval()
Korak 4: Učitajte i preprocesirajte sliku
Učitajte sliku i primenite neophodne transformacije:
def preprocess_image(image_path):
input_image = Image.open(image_path)
preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0)
return input_batch
import urllib.request
# Download a sample image
image_url = 'https://erasmus.tsp.edu.rs/wp-content/uploads/2024/12/rcd1024.jpg' # Replace with a valid image URL
image_path = 'rcd1024.jpg'
urllib.request.urlretrieve(image_url, image_path)
input_batch = preprocess_image(image_path)
Korak 5: Napravite predviđanja
Prođite prethodno obrađenu sliku kroz model da biste dobili predviđanja:
with torch.no_grad():
output = model(input_batch)
Korak 6: Dekodiranje predviđanja
Preuzmite oznake klase ImageNet i dekodirajte predviđanja:
import urllib.request
# Download the labels file
labels_url = 'https://raw.githubusercontent.com/anishathalye/imagenet-simple-labels/master/imagenet-simple-labels.json'
labels_path = 'imagenet-simple-labels.json'
urllib.request.urlretrieve(labels_url, labels_path)
# Load the labels
with open(labels_path) as f:
labels = json.load(f)
# Get the predicted label
_, predicted_idx = torch.max(output, 1)
predicted_label = labels[predicted_idx.item()]
print(f'Predicted label: {predicted_label}')
Predviđena oznaka: bušilica
Korak 7: Vizuelizujte sliku i predviđanje
Prikažite sliku zajedno sa predviđenom oznakom:
def show_image(image_path, label):
image = Image.open(image_path)
plt.imshow(image)
plt.title(f'Predicted: {label}')
plt.axis('off')
plt.show()
show_image(image_path, predicted_label)
Uputstvo za studente
1. Pratite korake u beležnici da biste učitali i prethodno obradili sliku.
2. Koristite unapred obučeni ResNet-18 model da biste predviđali.
3. Dekodirajte predviđanja i prikažite sliku sa predviđenom oznakom.
4. Eksperimentišite sa različitim slikama i posmatrajte performanse modela.
- Make a submission