Tutorial Gatos vs Cachorros 🙀x🐶
Tutorial de classificação de imagens
- Setup
- Baixando o dataset
- EDA (Explorando o Dataset)
- Dataloader
- Learner
- Verificação
- Testando com uma nova imagem
- Problemas a serem resolvidos
- Data Augmentation
from IPython.display import YouTubeVideo
YouTubeVideo('-Sw87Dyh3Kss')
!nvidia-smi
!pip install -Uqqq fastai
from fastai.vision.all import *
L(dir(URLs))
URLs.PETS
path = untar_data(URLs.PETS)/'images'
path
files = get_image_files(path)
files
Image.open(path/'pug_116.jpg')
Image.open(path/'British_Shorthair_201.jpg')
def labeler(x): return 'Gato' if x.name[0].isupper() else 'Cachorro'
labeler(path/'British_Shorthair_201.jpg')
labeler(path/'pug_116.jpg')
files = get_image_files(path)
files
labeler(files[0])
dblock = DataBlock(
blocks = [ImageBlock, CategoryBlock], # blocos que formata os dados
splitter = RandomSplitter(valid_pct = 0.2, seed = 42),
get_items = get_image_files, # função que carrega os dados
get_y = labeler,
# get_x = ...
item_tfms = Resize(224),
)
dls = dblock.dataloaders(path, num_workers = 2, bs = 64)
dls.show_batch()
xb, yb = dls.one_batch()
learn = cnn_learner(dls, resnet50, metrics=accuracy)
learn.fine_tune(3)
0.999323 ** 12
learn.show_results()
interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()
(996+1+1+480) / 7390
import ipywidgets as widgets
uploader = widgets.FileUpload()
uploader
img = PILImage.create(uploader.data[0])
label, _, probs = learn.predict(img)
if label == 'Gato':
print(f'Isso é um {label} com {(probs[1].item()*100):.1f}% de certeza')
else:
print(f'Isso é um {label} com {(probs[0].item()*100):.1f}% de certeza')
img.to_thumb(300)
dblock = DataBlock(
blocks = [ImageBlock, CategoryBlock],
get_items = get_image_files,
get_y = labeler,
item_tfms = Resize(256),
batch_tfms = aug_transforms(mult = 2, size = 224)
)
dls = dblock.dataloaders(path, num_workers = 2)
dls.show_batch(unique = True)