Conjunto de dados ImageNet
O projeto ImageNet é um grande banco de dados visual para pesquisa de software de reconhecimento de objetos visuais. A ideia deste projeto foi concebida há mais de 15 anos pelo investigador de IA Fei-Fei Li. A equipa da ImageNet apresentou o seu conjunto de dados pela primeira vez em 2009.
Keras vem junto com muitos modelos de classificação pré-treinados. A partir da versão 2.11 do Keras, existem 19 modelos pré-treinados diferentes disponíveis, onde algumas versões também contêm muitas variantes. A lista de modelos pode ser encontrada aqui. Aqui usaremos os seguintes modelos pré-treinados para fazer previsões em várias imagens de teste de amostra.
- VGG16
- ResNet50
- InceptionV3
AI Image Recognition é o processo de usar inteligência artificial para identificar e categorizar objetos dentro de uma imagem, uma tarefa que, embora intuitiva para humanos, é complexa para máquinas devido ao poder de processamento significativo necessário.
Aqui está um exercício simples do Jupyter Notebook para que os alunos realizem a classificação de imagens usando um modelo pré-treinado no conjunto de dados do ImageNet. Este exercício irá guiá-los através do carregamento de um modelo pré-treinado, fazendo previsões e visualizando os resultados.
Exercício: Classificação de imagens com o ImageNet
Etapa 1: Configuração
%pip install torch torchvision matplotlib
Etapa 2: Importar bibliotecas
import torch
import torchvision.transforms as transforms
from torchvision import models
from PIL import Image
import matplotlib.pyplot as plt
import json
Etapa 3: Carregar modelo pré-treinado
Carregue um modelo pré-treinado (por exemplo, ResNet-18) e defina-o para o modo de avaliação:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
model = models.resnet18(pretrained=True)
model.eval()
Etapa 4: Carregar e pré-processar a imagem
Carregue uma imagem e aplique as transformações necessárias:
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)
Etapa 5: Faça previsões
Passe a imagem pré-processada pelo modelo para obter previsões:
with torch.no_grad():
output = model(input_batch)
Etapa 6: Decodificar previsões
Baixe os rótulos de classe do ImageNet e decodifice as previsões:
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}')
Rótulo previsto: furadeira elétrica
Etapa 7: Visualize a imagem e a previsão
Apresenta a imagem junto com o rótulo previsto:
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)
Instruções para Estudantes
1. Siga os passos no bloco de notas para carregar e pré-processar uma imagem.
2. Use o modelo ResNet-18 pré-treinado para fazer previsões.
3. Decodifique as previsões e apresente a imagem com o rótulo previsto.
4. Experimente diferentes imagens e observe o desempenho do modelo.
- Make a submission