Skip to content
Snippets Groups Projects
Select Git revision
  • 541a849cb866849c42d8d4c1d34d1092ebd1da4a
  • main default protected
2 results

BE2_GAN_and_cGAN.py

Blame
  • Forked from Dellandrea Emmanuel / MSO_3_4-TD2
    Source project has a limited visibility.
    exercice 3.ipynb 4.27 KiB

    TD2: Deep learning

    import matplotlib.pyplot as plt
    In [2]:
    import torch
    from torchvision import transforms
    from torchvision import models
    
    
    # check if CUDA is available
    train_on_gpu = torch.cuda.is_available()
    
    if not train_on_gpu:
        print("CUDA is not available.  Training on CPU ...")
    else:
        print("CUDA is available!  Training on GPU ...")
    Out [2]:
    CUDA is not available.  Training on CPU ...
    

    Exercise 3: working with pre-trained models.

    PyTorch offers several pre-trained models https://pytorch.org/vision/0.8/models.html
    We will use ResNet50 trained on ImageNet dataset (https://www.image-net.org/index.php). Use the following code with the files imagenet-simple-labels.json that contains the imagenet labels and the image dog.png that we will use as test.

    import json
    from PIL import Image
    
    # Choose an image to pass through the model
    test_image = "dog.png"
    
    # Configure matplotlib for pretty inline plots
    #%matplotlib inline
    #%config InlineBackend.figure_format = 'retina'
    
    # Prepare the labels
    with open("imagenet-simple-labels.json") as f:
        labels = json.load(f)
    
    # First prepare the transformations: resize the image to what the model was trained on and convert it to a tensor
    data_transform = transforms.Compose(
        [
            transforms.Resize((224, 224)),
            transforms.ToTensor(),
            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
        ]
    )
    
    # Load the image
    image = Image.open(test_image)
    plt.imshow(image), plt.xticks([]), plt.yticks([])
    
    # Now apply the transformation, expand the batch dimension, and send the image to the GPU
    # image = data_transform(image).unsqueeze(0).cuda()
    image = data_transform(image).unsqueeze(0)
    
    # Download the model if it's not there already. It will take a bit on the first run, after that it's fast
    model = models.resnet50(pretrained=True)
    
    # Send the model to the GPU
    # model.cuda()
    # Set layers such as dropout and batchnorm in evaluation mode
    model.eval()
    
    # Get the 1000-dimensional model output
    out = model(image)
    # Find the predicted class
    print("Predicted class is: {}".format(labels[out.argmax()]))

    Experiments:

    Study the code and the results obtained. Possibly add other images downloaded from the internet.

    What is the size of the model? Quantize it and then check if the model is still able to correctly classify the other images.

    Experiment with other pre-trained CNN models.