Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -542,7 +542,7 @@
"tags": []
},
"source": [
"## Section 1 : Creation d'une video de test\n",
"## Section 1 : Création d'une video de test\n",
"\n",
"Avant de manipuler des videos, nous devons en créer une. Nous allons generer des frames colorees\n",
"avec du texte superpose a l'aide de PIL, puis les assembler en video avec imageio.\n",
Expand Down Expand Up @@ -726,7 +726,7 @@
"tags": []
},
"source": [
"### Interpretation : Creation de la video de test\n",
"### Interpretation : Création de la video de test\n",
"\n",
"| Aspect | Valeur | Signification |\n",
"|--------|--------|---------------|\n",
Expand All @@ -735,7 +735,7 @@
"| Taille fichier | Variable | La compression H.264 reduit enormement la taille par rapport aux frames brutes |\n",
"| Memoire RAM | ~N x W x H x 3 bytes | En memoire, chaque frame occupe width * height * 3 octets |\n",
"\n",
"**Points cles** :\n",
"**Points clés** :\n",
"1. La generation de frames avec PIL est simple mais lente pour de grandes resolutions\n",
"2. imageio fournit une interface Python propre au-dessus de FFmpeg\n",
"3. Le rapport de compression entre les frames brutes et le fichier MP4 est généralement superieur a 10:1\n",
Expand Down Expand Up @@ -1109,7 +1109,7 @@
"| Overlay texte | `CompositeVideoClip([clip, txt])` | Superpose des éléments visuels |\n",
"| Ecriture | `clip.write_videofile(path)` | Encode et sauvegarde le résultat |\n",
"\n",
"**Points cles** :\n",
"**Points clés** :\n",
"1. moviepy travaille de maniere paresseuse (lazy) : les frames ne sont calculees qu'a l'ecriture\n",
"2. Toujours fermer les clips avec `.close()` pour liberer les handles FFmpeg\n",
"3. Dans moviepy 2.x, `TextClip(text=..., font=chemin_ttf, ...)` rend le texte via Pillow : il faut un fichier de police TTF (ici DejaVuSans, embarquee avec matplotlib)\n",
Expand Down Expand Up @@ -1760,11 +1760,11 @@
"\n",
"Dans la Section 3, nous avons utilise `ffmpeg.probe()` pour extraire les metadonnees d'une seule video. Nous construisons maintenant une **fonction d'analyse comparative** qui prend plusieurs fichiers video et presente leurs metadonnees cote a cote.\n",
"\n",
"**Contexte** : Lorsqu'on travaille avec un jeu de données video (dataset d'entrainement ML, collection de rushes), il est essentiel de pouvoir comparer rapidement les caractéristiques techniques de chaque fichier : resolution, codec, duree, bitrate, presence d'audio.\n",
"**Contexte** : Lorsqu'on travaille avec un jeu de données video (dataset d'entraînement ML, collection de rushes), il est essentiel de pouvoir comparer rapidement les caractéristiques techniques de chaque fichier : resolution, codec, duree, bitrate, presence d'audio.\n",
"\n",
"**Étapes** :\n",
"1. Créer une fonction `analyze_video_collection(paths)` qui appelle `ffmpeg.probe()` sur chaque fichier\n",
"2. Extraire les metadonnees cles (resolution, codec, fps, duree, taille, bitrate, audio)\n",
"2. Extraire les metadonnees clés (resolution, codec, fps, duree, taille, bitrate, audio)\n",
"3. Presenter les résultats dans un DataFrame pandas trie par taille ou duree\n",
"4. Ajouter une colonne \"ratio qualite\" (bitrate / resolution) pour comparer l'efficacite de compression\n",
"\n",
Expand Down Expand Up @@ -2035,7 +2035,7 @@
"source": [
"### Lecture du résultat — le mode interactif\n",
"\n",
"La sortie est volontairement laconique : **`Mode interactif non disponible (execution\n",
"La sortie est volontairement laconique : **`Mode interactif non disponible (exécution\n",
"automatisee)`**. En `BATCH_MODE = \"true\"` (le défaut Papermill), la cellule remplace\n",
"l'invite par ce message et rend la main immédiatement — pas d'erreur, pas d'attente :\n",
"un notebook automatisé doit s'exécuter de bout en bout sans saisie humaine (règle C.1).\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"**VRAM :** 0 (CPU uniquement)\n",
"\n",
"> **Ce notebook est une accrétion optionnelle**, extraite de la conclusion de\n",
"> [01-1-Video-Operations-Basics](01-1-Video-Operations-Basics.ipynb) pour rendre la\n",
"> [01-1-Video-Opérations-Basics](01-1-Video-Operations-Basics.ipynb) pour rendre la\n",
"> lane principale plus claire. Il reprend intégralement le challenge qui figurait en\n",
"> fin du 01-1, sans modification du fond ni de la forme. Les étudiants qui veulent\n",
"> transformer les manipulations moviepy/imageio du 01-1 en **produit livrable**\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@
"tags": []
},
"source": [
"## Section 1 : Creation de la video de test et extraction de frames\n",
"## Section 1 : Création de la video de test et extraction de frames\n",
"\n",
"Nous creons une video de test plus riche que dans le notebook 01-1, avec plusieurs\n",
"\"scenes\" distinctes pour que GPT-5 puisse demontrer son raisonnement temporel.\n",
Expand Down Expand Up @@ -922,7 +922,7 @@
"| **Uniforme** | Couverture temporelle reguliere | Peut rater des transitions | Videos a rythme constant |\n",
"| **Keyframe** | Capture les changements majeurs | Peut ignorer les passages calmes | Videos avec scenes distinctes |\n",
"\n",
"**Points cles** :\n",
"**Points clés** :\n",
"1. Le choix de la stratégie depend du type de video et de la question posee\n",
"2. Plus de frames = meilleure comprehension mais cout API plus eleve\n",
"3. L'encodage JPEG avec quality=85 offre un bon rapport qualite/taille\n",
Expand Down Expand Up @@ -1438,7 +1438,7 @@
"\n",
"Dans la Section 3, nous avons pose manuellement trois questions a GPT-5. L'objectif est de créer un système qui **genere automatiquement des questions** pertinentes a partir d'une analyse initiale, puis les pose.\n",
"\n",
"**Contexte** : Un pipeline Video Q&A complet analyse d'abord la video pour identifier les éléments cles, puis genere des questions ciblees pour verifier ou approfondir la comprehension.\n",
"**Contexte** : Un pipeline Video Q&A complet analyse d'abord la video pour identifier les éléments clés, puis genere des questions ciblees pour verifier ou approfondir la comprehension.\n",
"\n",
"**Étapes** :\n",
"1. Faire une première analyse globale de la video (description courte)\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@
"tags": []
},
"source": [
"L'environnement Python est configure. Cette etape verifie la disponibilite du GPU CUDA, mesure la VRAM disponible et determine si le modèle Qwen2.5-VL-7B peut etre charge en precision bfloat16."
"L'environnement Python est configure. Cette étape verifie la disponibilite du GPU CUDA, mesure la VRAM disponible et determine si le modèle Qwen2.5-VL-7B peut etre charge en precision bfloat16."
]
},
{
Expand Down Expand Up @@ -509,7 +509,7 @@
"\n",
"La trace rendue par la cellule de chargement affiche d'abord le bandeau `--- CHARGEMENT DU MODELE ---`, puis une série de warnings `[ERROR]` émis par le validateur de docstrings internes de la bibliothèque `transformers` (concernant `loss` et `logits` qui seraient partie de la signature `Qwen2_5_VLCausalLMOutputWithPast.__init__` sans être documentés). Ces warnings sont **cosmétiques** : ils proviennent de la vérification statique des docstrings par les outils `transformers` (le validateur cherche des champs explicitement décrits dans la docstring de la dataclass, et `loss` / `logits` ne sont pas des champs de dataclass dans cette version — c'est un faux positif connu). **Aucune erreur fonctionnelle**, le modèle se charge en mémoire GPU après ces warnings.\n",
"\n",
"**Pour le lecteur étudiant** : ces warnings sont le type de bruit qui apparaît sur les versions récentes de `transformers` (≥ 4.45) quand on charge un modèle avec `device_map='cuda'` et `torch_dtype=torch.bfloat16`. Ils ne doivent pas être confondus avec une erreur de chargement — voir Une etape de verification. **Si un `[ERROR]` indique `CUDA out of memory`**, c'est cette cellule qui échoue, et la stratégie est de réduire `max_frames` avant le chargement. La cellule 10 (création vidéo de test) et 13 (analyse) montreront les outputs de l'analyse effective."
"**Pour le lecteur étudiant** : ces warnings sont le type de bruit qui apparaît sur les versions récentes de `transformers` (≥ 4.45) quand on charge un modèle avec `device_map='cuda'` et `torch_dtype=torch.bfloat16`. Ils ne doivent pas être confondus avec une erreur de chargement — voir Une étape de verification. **Si un `[ERROR]` indique `CUDA out of memory`**, c'est cette cellule qui échoue, et la stratégie est de réduire `max_frames` avant le chargement. La cellule 10 (création vidéo de test) et 13 (analyse) montreront les outputs de l'analyse effective."
]
},
{
Expand Down Expand Up @@ -1149,7 +1149,7 @@
"tags": []
},
"source": [
"## Section 2 : Creation de la video de test et analyse\n",
"## Section 2 : Création de la video de test et analyse\n",
"\n",
"Nous reutilisons le même type de video multi-scenes que dans le notebook 01-2\n",
"pour pouvoir comparer les résultats entre GPT-5 et Qwen-VL. En ajoutant du texte\n",
Expand Down Expand Up @@ -1314,13 +1314,13 @@
"**Étapes** :\n",
"1. Définir la verite terrain : les 5 textes attendus et leurs timestamps\n",
"2. Implementer une fonction de comparaison qui calcule le taux de correspondance\n",
"3. Appliquer une metrique de similarite textuelle (Levenshtein ou simple inclusion)\n",
"3. Appliquer une métrique de similarite textuelle (Levenshtein ou simple inclusion)\n",
"4. Retourner un tableau de résultats avec score par texte\n",
"\n",
"**Indices** :\n",
"- La verite terrain est déjà dans la variable `event_timestamps` et `scenes`\n",
"- Pour une metrique simple, verifiez si le texte attendu est inclus dans la reponse OCR\n",
"- Pour une metrique plus fine, la distance de Levenshtein est disponible dans `difflib.SequenceMatcher`"
"- Pour une métrique simple, verifiez si le texte attendu est inclus dans la reponse OCR\n",
"- Pour une métrique plus fine, la distance de Levenshtein est disponible dans `difflib.SequenceMatcher`"
]
},
{
Expand Down Expand Up @@ -1416,7 +1416,7 @@
"tags": []
},
"source": [
"La video de test est maintenant disponible. Une etape de verification."
"La video de test est maintenant disponible. Une étape de verification."
]
},
{
Expand Down Expand Up @@ -1626,7 +1626,7 @@
"tags": []
},
"source": [
"La video de test est créée avec cinq scenes distinctes. Cette etape envoie cette video au modèle Qwen2.5-VL pour obtenir une description globale du contenu et de la progression temporelle."
"La video de test est créée avec cinq scenes distinctes. Cette étape envoie cette video au modèle Qwen2.5-VL pour obtenir une description globale du contenu et de la progression temporelle."
]
},
{
Expand Down Expand Up @@ -1790,7 +1790,7 @@
"tags": []
},
"source": [
"La description globale est generee. Une etape de verification, et le temporal grounding pour localiser des événements précis avec leurs timestamps."
"La description globale est generee. Une étape de verification, et le temporal grounding pour localiser des événements précis avec leurs timestamps."
]
},
{
Expand Down Expand Up @@ -6168,4 +6168,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@
"tags": []
},
"source": [
"## Section 1 : Creation d'une video basse resolution\n",
"## Section 1 : Création d'une video basse resolution\n",
"\n",
"Pour tester l'upscaling, nous creons d'abord une video \"haute resolution\" de reference,\n",
"puis nous la degradons en basse resolution. Cela nous permet de comparer objectivement\n",
Expand Down Expand Up @@ -647,11 +647,11 @@
"tags": []
},
"source": [
"### Exercice 1 : Metrique NIQE sans reference (simplifiee)\n",
"### Exercice 1 : Métrique NIQE sans reference (simplifiee)\n",
"\n",
"La Section 1 créé des paires HR/LR pour calculer PSNR et SSIM (metriques avec reference). L'objectif est d'implementer une **metrique sans reference** qui estime la qualite d'une image sans connaitre l'originale.\n",
"La Section 1 créé des paires HR/LR pour calculer PSNR et SSIM (metriques avec reference). L'objectif est d'implementer une **métrique sans reference** qui estime la qualite d'une image sans connaitre l'originale.\n",
"\n",
"**Contexte** : En production, on ne dispose pas toujours d'une image de reference pour evaluer la qualite de l'upscaling. Une metrique sans reference mesure la nettete et la presence d'artefacts directement sur l'image resultante.\n",
"**Contexte** : En production, on ne dispose pas toujours d'une image de reference pour evaluer la qualite de l'upscaling. Une métrique sans reference mesure la nettete et la presence d'artefacts directement sur l'image resultante.\n",
"\n",
"**Étapes** :\n",
"1. Calculer la variance du Laplacien (mesure de nettete) sur chaque frame\n",
Expand Down Expand Up @@ -755,7 +755,7 @@
"2. **Upscaler** chaque frame avec Real-ESRGAN\n",
"3. **Reassembler** les frames upscalees en video\n",
"\n",
"Real-ESRGAN utilise un reseau RRDB (Residual-in-Residual Dense Block) entraine\n",
"Real-ESRGAN utilise un réseau RRDB (Residual-in-Residual Dense Block) entraine\n",
"sur des paires d'images haute/basse resolution."
]
},
Expand Down Expand Up @@ -1275,7 +1275,7 @@
"\n",
"**Metriques PSNR et SSIM attendues (Real-ESRGAN):**\n",
"\n",
"| Metrique | Plage | Valeur typique Real-ESRGAN | Signification |\n",
"| Métrique | Plage | Valeur typique Real-ESRGAN | Signification |\n",
"|----------|-------|---------------------------|---------------|\n",
"| **PSNR** | 0 - inf dB | 28-35 dB | Plus élevé = meilleure qualité |\n",
"| **SSIM** | 0 - 1 | 0.85-0.95 | Similarité structurelle perçue |\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"- [ ] Comprendre l'architecture AnimateDiff (motion module + base model)\n",
"- [ ] Charger un pipeline AnimateDiff avec la bibliotheque diffusers\n",
"- [ ] Generer des videos a partir de descriptions textuelles\n",
"- [ ] Explorer les paramètres cles (num_frames, guidance_scale, num_inference_steps)\n",
"- [ ] Explorer les paramètres clés (num_frames, guidance_scale, num_inference_steps)\n",
"- [ ] Sauvegarder les résultats en GIF et MP4\n",
"- [ ] Comparer différents prompts et paramètres\n",
"\n",
Expand Down Expand Up @@ -1034,7 +1034,7 @@
"- Catégorie \"paysage\" : negatifs = \"people, text, watermark, oversaturated\"\n",
"- Catégorie \"personnage\" : negatifs = \"extra limbs, deformed hands, blurry face\"\n",
"- Catégorie \"mouvement\" : negatifs = \"static, frozen, jittery\"\n",
"- Utilisez des mots-cles dans le prompt pour detecter la catégorie (ex: \"lake\" -> paysage)"
"- Utilisez des mots-clés dans le prompt pour detecter la catégorie (ex: \"lake\" -> paysage)"
]
},
{
Expand Down Expand Up @@ -4222,4 +4222,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
Loading