Množina údajov ImageNet
Projekt ImageNet je veľká vizuálna databáza na výskum softvéru na vizuálne rozpoznávanie objektov. Myšlienku tohto projektu prišiel pred viac ako 15 rokmi výskumník AI Fei-Fei Li. Tím ImageNet predstavil svoj súbor údajov prvýkrát v roku 2009.
Keras sa dodáva s mnohými vopred natrénovanými klasifikačnými modelmi. Od verzie Keras 2.11 je k dispozícii 19 rôznych predtrénovaných modelov, pričom niektoré verzie obsahujú aj veľa variantov. Zoznam modelov nájdete tu. Tu použijeme nasledujúce vopred natrénované modely na predpovede na niekoľkých vzorových testovacích obrázkoch.
- VGG16
- ResNet50
- PočiatokV3
AI Image Recognition je proces využívania umelej inteligencie na identifikáciu a kategorizáciu objektov v obraze, čo je úloha, ktorá je síce intuitívna pre ľudí, ale pre stroje je zložitá kvôli značnému potrebnému výpočtovému výkonu.
Tu je jednoduché cvičenie Jupyter Notebook pre študentov na vykonanie klasifikácie obrázkov pomocou vopred natrénovaného modelu v množine údajov ImageNet. Toto cvičenie ich prevedie načítaním vopred natrénovaného modelu, predpovedaním a vizualizáciou výsledkov.
Cvičenie: Klasifikácia obrázkov pomocou ImageNet
Krok 1: Nastavenie
Najprv sa uistite, že máte nainštalované potrebné knižnice. Môžete ich nainštalovať pomocou pip, ak ste tak ešte neurobili:
%pip install torch torchvision matplotlib
Krok 2: Import knižníc
import torch
import torchvision.transforms as transforms
from torchvision import models
from PIL import Image
import matplotlib.pyplot as plt
import json
Krok 3: Načítanie vopred natrénovaného modelu
Načítajte vopred natrénovaný model (napr. ResNet-18) a nastavte ho do režimu vyhodnocovania:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
model = models.resnet18(pretrained=True)
model.eval()
Krok 4: Načítajte a predbežne spracujte obrázok
Načítajte obrázok a použite potrebné transformácie:
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)
Krok 5: Urobte predpovede
Odovzdajte vopred spracovaný obrázok cez model a získajte predpovede:
with torch.no_grad():
output = model(input_batch)
Krok 6: Dekódovanie predpovedí
Stiahnite si označenia tried ImageNet a dekódujte predpovede:
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}')
Predpokladaný štítok: elektrická vŕtačka
Krok 7: Vizualizácia obrazu a predpovede
Zobrazenie obrázka spolu s predpokladaným štítkom:
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)
Pokyny pre študentov
1. Podľa pokynov v poznámkovom bloku načítajte a predbežne spracujte obrázok.
2. Na predpovede použite vopred natrénovaný model ResNet-18.
3. Dekódujte predpovede a zobrazte obrázok s predpovedaným štítkom.
4. Experimentujte s rôznymi obrázkami a sledujte výkon modelu.
- Make a submission