FastAI Example

FASTAI Example

Check for all installs and versions

!pip list | grep "torch"
torch                     2.4.0
torchvision               0.19.0
!nvcc --version
/bin/bash: line 1: nvcc: command not found
!pip list | grep "fastai"
fastai                    2.7.17
!pip list | grep "fastbook"
fastbook                  0.0.29
import torch
torch.cuda.is_available()
True

Generate Data Images

from fastbook import search_images_ddg
from fastdownload import download_url
from fastai.vision.all import *
download_url(search_images_ddg('elephant', max_images=2)[0], 'Data/elephant.jpg', show_progress=False)

im = Image.open('Data/elephant.jpg')
im.to_thumb(256,256)

download_url(search_images_ddg('tiger', max_images=1)[0], 'Data/tiger.jpg', show_progress=False)
Image.open('Data/tiger.jpg').to_thumb(256,256)

download_url(search_images_ddg('panda', max_images=2)[0], 'Data/panda.jpg', show_progress=False)
Image.open('Data/panda.jpg').to_thumb(256,256)

import os
from nbdevAuto import functions
!pip list | grep nbdevAuto
nbdevAuto                 0.3.26
path = Path('Data/animal_pics') #Replace with folder path

animals = ('chimpanzee', 'elephant', 'giraffe',
                    'kangaroo','lion','panda','rabbit',
                    'rhino', 'tiger', 'wolf')   

functions.create_data_folder(
    path,
    animals,
)
Create folder
Number of images failed: 118
resizing images for: chimpanzee
resizing images for: elephant
/home/ben-24/miniconda3/envs/fast/lib/python3.9/site-packages/PIL/Image.py:1056: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  warnings.warn(
resizing images for: giraffe
resizing images for: kangaroo
/home/ben-24/miniconda3/envs/fast/lib/python3.9/site-packages/PIL/Image.py:1056: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  warnings.warn(
resizing images for: lion
resizing images for: panda
/home/ben-24/miniconda3/envs/fast/lib/python3.9/site-packages/PIL/Image.py:1056: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  warnings.warn(
/home/ben-24/miniconda3/envs/fast/lib/python3.9/site-packages/PIL/Image.py:1056: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  warnings.warn(
/home/ben-24/miniconda3/envs/fast/lib/python3.9/site-packages/PIL/Image.py:1056: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  warnings.warn(
resizing images for: rabbit
resizing images for: rhino
/home/ben-24/miniconda3/envs/fast/lib/python3.9/site-packages/PIL/Image.py:1056: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  warnings.warn(
/home/ben-24/miniconda3/envs/fast/lib/python3.9/site-packages/PIL/Image.py:1056: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  warnings.warn(
resizing images for: tiger
/home/ben-24/miniconda3/envs/fast/lib/python3.9/site-packages/PIL/Image.py:1056: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
  warnings.warn(
resizing images for: wolf

Step 2: Train our model

from fastai.metrics import accuracy, error_rate

dls = DataBlock(
    blocks=(ImageBlock, CategoryBlock), 
    get_items=get_image_files, 
    splitter=RandomSplitter(valid_pct=0.2, seed=42),
    get_y=parent_label,
    item_tfms=[Resize(192, method='squish')]
).dataloaders(path)

dls.show_batch(max_n=6)

# Define your metrics
metrics = [accuracy, error_rate]
learn11 = vision_learner(dls, resnet18, metrics=metrics)
learn11.fine_tune(1)
Downloading: "https://download.pytorch.org/models/resnet18-f37072fd.pth" to /home/ben-24/.cache/torch/hub/checkpoints/resnet18-f37072fd.pth
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 44.7M/44.7M [00:07<00:00, 6.02MB/s]
epoch train_loss valid_loss accuracy error_rate time
0 1.986059 0.449849 0.873239 0.126761 00:11
epoch train_loss valid_loss accuracy error_rate time
0 0.604429 0.363233 0.904225 0.095775 00:04

Step 3: Display Results: Confusion Matrix

interp11 = ClassificationInterpretation.from_learner(learn11)
interp11.plot_confusion_matrix()

interp11.plot_top_losses(5,nrows = 2, figsize=(17,4))

Step 4: Display Results: t-SNE

from fastai.vision.all import *
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
features, labels = learn11.get_preds(dl=dls.valid)

# Replace 'val_features' with your extracted features
tsne = TSNE(n_components=2)
reduced_features = tsne.fit_transform(features)

# Replace 'labels' with your image labels if available
plt.scatter(reduced_features[:, 0], reduced_features[:, 1])
plt.xlabel('t-SNE Dimension 1')
plt.ylabel('t-SNE Dimension 2')
plt.title('t-SNE Visualization')
plt.show()

Step 5: Use our model

animal_list =  ('chimpanzee','elephant','giraffe',
                'kangaroo', 'lion','panda', 'rabbit',
                'rhino','tiger','wolf')
image= 'Data/panda.jpg'


is_real,_,probs = learn11.predict(PILImage.create(image))
max_value, max_index = torch.max(probs, dim=0)
print(f"This is a: {animal_list[max_index]} with probability: {max_value}.")

Image.open(image).to_thumb(256,256)
This is a: panda with probability: 0.9999741315841675.

animal_list =  ('chimpanzee','elephant','giraffe',
                'kangaroo', 'lion','panda', 'rabbit',
                'rhino','tiger','wolf')
for index, value in enumerate(animal_list):
    np.set_printoptions(suppress=True, precision=4)
    print(f"Probability of {value} is :{probs[index]:4f}.")
Probability of chimpanzee is :0.000000.
Probability of elephant is :0.000000.
Probability of giraffe is :0.000000.
Probability of kangaroo is :0.000000.
Probability of lion is :0.000015.
Probability of panda is :0.999974.
Probability of rabbit is :0.000000.
Probability of rhino is :0.000000.
Probability of tiger is :0.000000.
Probability of wolf is :0.000010.
Back to top