Projet :
Vous devez créer un pipeline d'apprentissage automatique, basé sur les réseau de neurones, sur la tâche Visual Question Answering (VQA). Ceci comprend:*
Creation d'un modèle
Les images sont de tailles 124x124. Les modèles classiques proposés par pytorch prennent en entrée des images de taille 224x224.
Nous voulons un modèle qui prennent en entrée les images de tailles 112x112.
Ce modèle encode l'image avec un CNN, et intègre la question dans le pipeline.
Creation d'un dataloader
Entraînement selon les splits
Il faut créer une procédure d'entrainement et selectionner votre meilleur modèle. Vous aurez surement besoin des methodes torch.save et torch.load pour gérer la sauvegarde de vos modèles.
Pour plus de facilités, vous pouvez directement connecter votre google drive a votre colab. https://colab.research.google.com/notebooks/io.ipynb
Il y a plein de manières d'améliorer votre entrainement, voici quelques pistes :
Pas permis:
Ne pas oublier
PS: Utiliser adam optimizer comme pour la scéance CNN.
Test sur le split de test:
Pour la compétition, il faut reporter la réponse choisie par le modèle (argmax) (cf sample_submission.csv).
Pour le rapport, il faut reporter l'accuracy top-1 (donnée par le argmax, i.e. cette réponse est elle la bonne réponse) et l'accuracy top-5 (la bonne réponse se trouve-elle dans les 5 plus grandes confiances données par votre modèle? )
Ecriture d'un rapport Scientifique
Au minimum, expliquer les points ci-dessus.
Cela peut comprendre:
!file=1pfd5-i_F20zViKIYwbQ8jL1p78s_E6uX && wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id='${file} -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id="${file} -O images.zip && rm -rf /tmp/cookies.txt \
&& unzip -qq images.zip && \
git clone https://github.com/jbdel/miniVQA
!ls && ls -d miniVQA/*
!wc -l miniVQA/*.csv
import json
import random
import matplotlib.pyplot as plt
import cv2
from PIL import Image
image_question = json.load(open('miniVQA/image_question.json'))
plt.figure(figsize=([30, 20]))
for i in range(5):
plt.subplot(1, 5, i+1)
random_image = random.choice(list(image_question.keys()))
_, random_question = random.choice(image_question[random_image])
plt.imshow(Image.open('image124/'+random_image+'.jpg'))
plt.xlabel('image_id: '+random_image)
plt.title(random_question)
!pip install sentence_transformers
from sentence_transformers import SentenceTransformer
import time
model = SentenceTransformer('distilbert-base-nli-mean-tokens').cuda() # ne pas toucher
sentences = 'This framework generates embeddings for each input sentence word hello ok'
time_start = time.time()
sentence_embeddings = model.encode(sentences)
print(time.time()-time_start)
print(sentence_embeddings.shape)
(0.01*56000)/60