<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Nathan Thoumine</title>
    <description>Portfolio et Blog de Nathan Thoumine. Ingénieur en IA Embarquée, Robotique et HPC.  Découvrez mes explorations sur la vision par ordinateur, le calcul haute performance et l&apos;autonomie.</description>
    <link>https://deicidia.github.io/</link>
    <atom:link href="https://deicidia.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 02 Jun 2026 19:46:40 +0000</pubDate>
    <lastBuildDate>Tue, 02 Jun 2026 19:46:40 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Reconstruction 3D Autonome</title>
        <description>&lt;figure style=&quot;text-align: center;&quot;&gt;
    &lt;img src=&quot;/images/prometheus.gif&quot; alt=&quot;Drone scanning simulation&quot; width=&quot;100%&quot; style=&quot;border-radius: 8px;&quot; /&gt;
    &lt;figcaption&gt;&lt;i&gt;Je fixe une caméra 360° sur un drone, probablement.&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Ce nouveau projet vise à optimiser la trajectoire de vol d’un drone via l’&lt;a href=&quot;https://fr.wikipedia.org/wiki/Apprentissage_par_renforcement&quot;&gt;Apprentissage par Renforcement (RL)&lt;/a&gt; afin d’améliorer la qualité et la vitesse d’une reconstruction 3D basée sur le &lt;a href=&quot;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/&quot;&gt;3D Gaussian Splatting (3DGS)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;L’idée centrale repose sur l’efficacité : au lieu de scanner naïvement une zone entière, le drone utilise un signal d’incertitude fourni par le modèle pour cibler les zones mal reconstruites. C’est le principe de la planification du prochain meilleur point de vue (Next-Best-View Planning). L’objectif est de maximiser le gain d’information tout en minimisant le temps de vol.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objectif :&lt;/strong&gt; Tester le 3DGS pour obtenir une vision claire des contraintes et de la faisabilité du projet. Il est à noter que le choix de la stack technique (RL &amp;amp; 3DGS) est avant tout dicté par mes intérêts personnels et une volonté d’apprentissage.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;architecture-du-pipeline&quot;&gt;Architecture du Pipeline&lt;/h2&gt;

&lt;p&gt;Pour atteindre cette autonomie, le système repose sur une architecture en boucle fermée où le traitement lourd est déporté sur une station de calcul fixe. Voici l’architecture &lt;em&gt;Perception-Action&lt;/em&gt; envisagée :&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    classDef drone fill:#ef4444,stroke:#ef4444,stroke-width:2px,color:#fff;
    classDef pc fill:#3b82f6,stroke:#3b82f6,stroke-width:2px,color:#fff;
    classDef start fill:#10b981,stroke:#10b981,stroke-width:2px,color:#fff;

    subgraph UAV [&quot;UAV (Drone)&quot;]
        Start([Start]):::start --&amp;gt; Acquisition[Acquisition visuelle]:::drone
        PID[PID stabilisation &amp;amp; suivi de consigne]:::drone
    end

    subgraph PC [&quot;Station de calcul (PC)&quot;]
        Poses[Estimation de poses COLMAP]:::pc
        Recon[Reconstruction 3D BRUSH]:::pc
        Agent[Agent RL planification]:::pc
    end

    Acquisition --&amp;gt; Poses
    Poses --&amp;gt; Recon
    Recon --&amp;gt;|État: carte d&apos;incertitude + pose + budget| Agent
    Agent --&amp;gt;|Action: next-best-view| PID
    PID -.-&amp;gt; Acquisition

    style UAV fill:#f8f9fa,stroke:#ccc,stroke-width:1px,stroke-dasharray: 5 5
    style PC fill:#f8f9fa,stroke:#ccc,stroke-width:1px,stroke-dasharray: 5 5
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Le pipeline débute par l’acquisition des flux vidéo et inertiels, lesquels alimentent une reconstruction 3DGS incrémentale. L’&lt;strong&gt;analyse d’incertitude&lt;/strong&gt; est ici le pivot : en identifiant les zones où la densité des gaussiennes est faible ou les gradients de couleur instables, l’agent peut déterminer le prochain point de vue optimal (Next-Best-View) pour “remplir les trous”. Dans le cas où les temps de calcul sont trop longs, on peut envisager de faire atterrir le drone en attendant que la reconstruction soit terminée, cela va dépendre de la batterie du drone et des temps de calcul requis.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;analyse-des-premières-expérimentations&quot;&gt;Analyse des premières expérimentations&lt;/h2&gt;

&lt;p&gt;La faisabilité d’un pilotage autonome repose sur la fluidité de la chaîne de traitement. Cette phase d’expérimentation vise donc à mesurer les performances brutes de la reconstruction afin de déterminer si les temps de calcul sont compatibles avec les exigences d’un vol drone.&lt;/p&gt;

&lt;p&gt;Une première référence a été établie via une approche mobile (Scaniverse / SuperSplat) sur un sujet simple :&lt;/p&gt;

&lt;div class=&quot;scan-grid&quot;&gt;
  &lt;a href=&quot;/scans/panda-roux.html&quot; class=&quot;scan-card&quot;&gt;
    &lt;div class=&quot;badge&quot;&gt;Vidéo&lt;/div&gt;
    &lt;h3&gt;Scan Panda roux&lt;/h3&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;blockquote class=&quot;alert-info&quot;&gt;
  &lt;p&gt;Pour une meilleure manipulation du sujet dans le viewer, un double-clic dessus permet de tourner autour.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si cette méthode est rapide et efficace, elle reste une “boîte noire” dépendante d’optimisations propriétaires et d’un traitement local optimisé, ce qui la rend difficilement transposable telle quelle à un système embarqué drone.&lt;/p&gt;

&lt;p&gt;Pour me rapprocher des conditions d’un drone porteur d’une optique de qualité, j’ai réalisé une série de tests avec un Fujifilm XT-2 (23mm f/2). Le traitement, effectué sur une station fixe (RX 7800XT), a immédiatement mis en évidence la lourdeur du calcul &lt;a href=&quot;https://en.wikipedia.org/wiki/Structure_from_motion&quot;&gt;Structure-from-Motion (SfM)&lt;/a&gt;. Qu’il s’agisse d’un matching exhaustif sur photos (environ 10 minutes pour 30 clichés) ou d’un matching séquentiel sur flux vidéo (environ 5 minutes), les temps de calcul restent incompatibles avec une boucle de contrôle réactive.&lt;/p&gt;

&lt;p&gt;Ces essais avec le XT-2 ont également souligné certaines contraintes matérielles. Si la focale de 23mm (eq. 35mm) est en réalité un avantage pour le SfM formel (le grand-angle maximisant le recouvrement entre images), elle complique la reconstruction d’un sujet isolé s’il n’est pas proprement masqué (via segmentation ou &lt;em&gt;bounding box&lt;/em&gt; ajustée), surchargeant alors inutilement le calcul de &lt;em&gt;matching&lt;/em&gt;. Plus problématique encore : l’absence de stabilisation (IBIS) sur le boîtier et l’objectif nécessite des vitesses d’obturation très rapides pour éviter le flou de bougé qui dégrade instantanément la qualité des gaussiennes, confirmant les points de vigilance soulevés dans ce &lt;a href=&quot;https://developer.playcanvas.com/user-manual/gaussian-splatting/creating/taking-photos/#:~:text=Taking%20Photos-,Taking%20Photos,-The%20quality%20of&quot;&gt;Guide sur la prise de vue pour le 3DGS&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;scan-grid&quot;&gt;
  &lt;a href=&quot;/scans/zigoto.html&quot; class=&quot;scan-card&quot;&gt;
    &lt;div class=&quot;badge&quot;&gt;Vidéo&lt;/div&gt;
    &lt;h3&gt;Scan Zigoto&lt;/h3&gt;
  &lt;/a&gt;
  &lt;a href=&quot;/scans/fuji.html&quot; class=&quot;scan-card&quot;&gt;
    &lt;div class=&quot;badge&quot;&gt;Vidéo&lt;/div&gt;
    &lt;h3&gt;Scan Bibliothèque&lt;/h3&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Le passage à l’échelle sur un appartement complet a soulevé des questions techniques importantes, notamment sur la stabilité du pipeline COLMAP sur ma configuration (RX 7800XT).&lt;/p&gt;

&lt;blockquote class=&quot;alert-caution&quot;&gt;
  &lt;p&gt;Bien que le GPU soit nativement compatible via ROCm/OpenCL, les crashs systématiques rencontrés sous WSL2 semblent davantage liés aux couches d’abstraction de la virtualisation qu’aux limites matérielles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;S’il est possible de basculer les calculs sur le CPU, les temps de traitement deviennent prohibitifs. Ce constat renforce l’idée qu’un pivot vers une approche moins dépendante du SfM classique est une piste sérieuse à explorer pour fiabiliser le pipeline de développement.&lt;/p&gt;

&lt;p&gt;De plus, ce test sur une scène plus vaste m’a fait réaliser qu’il est facile d’oublier certains angles de vue critiques. Ces lacunes se traduisent directement par l’apparition d’artefacts ou de zones de mauvaise reconstruction dans le splat final.&lt;/p&gt;

&lt;figure style=&quot;text-align: center;&quot;&gt;
    &lt;img src=&quot;/images/appart.png&quot; alt=&quot;Exemple d&apos;artéfacts&quot; width=&quot;100%&quot; style=&quot;border-radius: 8px;&quot; /&gt;
    &lt;figcaption&gt;&lt;i&gt;Exemple d&apos;artéfacts.&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;pistes-doptimisation--lalternative-au-sfm-classique&quot;&gt;Pistes d’optimisation : L’alternative au SfM classique&lt;/h2&gt;

&lt;p&gt;L’analyse des premiers tests indique que le verrou technologique ne se situe pas dans l’entraînement des gaussiennes, mais dans l’estimation de pose (SfM). Plusieurs alternatives &lt;em&gt;SfM-Free&lt;/em&gt; ou architectures optimisées sont à l’étude :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/colmap/glomap&quot;&gt;GLOMAP&lt;/a&gt; : En tant que SfM &lt;em&gt;Global&lt;/em&gt; (plutôt qu’incrémental comme COLMAP), il résout toutes les poses à la fin, ce qui le rend théoriquement beaucoup plus rapide mais moins pertinent pour ingérer un flux vidéo continu lors du vol.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/NVlabs/CF-3DGS&quot;&gt;CF-3DGS (COLMAP-Free 3DGS)&lt;/a&gt; : Apprentissage conjoint des poses et de la géométrie, mais le code est dépendant de CUDA.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/graphdeco-inria/on-the-fly-nvs?tab=readme-ov-file&quot;&gt;On the fly NVS&lt;/a&gt; : Entraînement en temps réel, piste la plus prometteuse mais également dépendante de CUDA, ce qui complique son usage sur ma configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le drone d’expérimentation envisagé (Tello EDU) est dépourvu de GPS et se base sur un capteur de flux optique inférieur. Comme sa télémétrie subit une importante dérive rapide et que le 3DGS exige une précision millimétrique, exploiter la seule télémétrie est illusoire. La stratégie retenue consiste donc à s’appuyer sur un &lt;strong&gt;SLAM visuel rapide&lt;/strong&gt; (comme ORB-SLAM3 ou VINS-Mono) pour initialiser les poses et remplacer le lourd pipeline COLMAP. Cette approche permet de fournir des poses “suffisamment bonnes” pour que l’optimisation 3DGS prenne le relais. L’objectif est de passer d’une capture statique à un système capable de naviguer activement pour optimiser la collecte de données.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;le-choix-de-luav&quot;&gt;Le choix de l’UAV&lt;/h2&gt;

&lt;p&gt;Le passage de la théorie à l’expérimentation nécessite un support matériel adapté aux contraintes de développement en intérieur (indoor). Deux options principales se sont dégagées pour ce projet : le &lt;a href=&quot;https://www.ryzerobotics.com/tello-edu&quot;&gt;DJI Tello EDU&lt;/a&gt;, une plateforme robuste et accessible, et le &lt;a href=&quot;https://www.bitcraze.io/products/crazyflie-2-1-plus/&quot;&gt;Crazyflie 2.1 Plus&lt;/a&gt;, une solution ultra-compacte plébiscitée par la recherche. Mon choix s’est finalement porté sur le Tello EDU, privilégiant l’intégration immédiate d’une caméra HD et un rapport simplicité/prix imbattable pour une phase de prototypage.&lt;/p&gt;

&lt;h3 id=&quot;comparatif-technique&quot;&gt;Comparatif Technique&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Caractéristique&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;DJI Tello EDU&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Crazyflie 2.1 Plus&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Poids&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;87g&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;~27g&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Autonomie&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;~13 min&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;~7 min&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Caméra&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Intégrée (720p HD)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Modulaire (via AI-deck)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Logiciel&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SDK Propriétaire / Python&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Open Source (Complet)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Prix Approx.&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;~140€&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;~220€ + Decks&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote class=&quot;alert-info&quot;&gt;
  &lt;p&gt;Bien que le DJI Tello EDU ne soit plus commercialisé officiellement, il reste disponible sur le marché de l’occasion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Côté logiciel, le Tello EDU bénéficie d’une bibliothèque open source en Python, &lt;a href=&quot;https://github.com/damiafuentes/DJITelloPy&quot;&gt;DJITelloPy&lt;/a&gt;, ainsi que d’une intégration ROS2 avec &lt;a href=&quot;https://github.com/tentone/tello-ros2&quot;&gt;tello-ros2&lt;/a&gt;, facilitant l’envoi de commandes de vol et la récupération des flux vidéo en temps réel.&lt;/p&gt;

&lt;h3 id=&quot;espace-de-travail-envisagé&quot;&gt;Espace de travail envisagé&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Étape&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Outil envisagé&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Rôle&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Vol &amp;amp; Vidéo&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://github.com/damiafuentes/DJITelloPy&quot;&gt;DJITelloPy&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Envoi de commandes et récupération d’images.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Poses (SfM)&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Mission Pads ou &lt;a href=&quot;https://github.com/UZ-SLAMLab/ORB_SLAM3&quot;&gt;ORB-SLAM3&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Éviter COLMAP pour avoir des poses rapides.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Cœur 3DGS&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://github.com/nerfstudio-project/gsplat&quot;&gt;gsplat&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Entraînement incrémental et calcul de l’incertitude.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Agent RL&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;a href=&quot;https://github.com/DLR-RM/stable-baselines3&quot;&gt;Stable Baselines3&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Apprentissage du Next-Best-View (NBV).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;L’entraînement d’algorithmes comme PPO (Proximal Policy Optimization) nécessitant des milliers d’itérations, la formation de l’agent ne pourra pas s’effectuer sur le matériel volant en direct (batterie très limitée). Elle s’effectuera d’abord via un environnement de &lt;strong&gt;Simulation 3D&lt;/strong&gt;, le drone n’intervenant in fine que pour l’inférence.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsplat&lt;/code&gt; s’est ajouté à ma liste de solutions à explorer car son architecture native PyTorch permet une intégration fluide avec l’agent de Reinforcement Learning. Ces deux solutions et celles évoquées dans l’article précédent seront à départager ultérieurement.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;premiers-tests-et-blocages-techniques&quot;&gt;Premiers tests et blocages techniques&lt;/h2&gt;

&lt;p&gt;La mise en service du drone via WSL2 a révélé des défis réseaux inattendus. Le drone utilise des ports UDP spécifiques (8889, 8890, 11111) qui sont souvent bloqués par le NAT de WSL2.&lt;/p&gt;

&lt;figure style=&quot;text-align: center;&quot;&gt;
    &lt;img src=&quot;/images/dog-meme.gif&quot; alt=&quot;Drone scanning simulation&quot; width=&quot;30%&quot; style=&quot;border-radius: 8px;&quot; /&gt;
    &lt;figcaption&gt;&lt;i&gt;Moi être comme.&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;L’activation du mode &lt;strong&gt;Mirrored Network&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;networkingMode=mirrored&lt;/code&gt;) dans WSL2 permet d’assurer la transmission des commandes, mais la réception du flux vidéo reste capricieuse. Même avec le pare-feu désactivé, le problème de réception des paquets UDP persiste, rendant le débogage de la stack vidéo prioritaire pour la suite du projet.&lt;/p&gt;
</description>
        <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
        <link>https://deicidia.github.io/robotics/rl/3dgs/2025/12/09/UAV-RL-3DGS.html</link>
        <guid isPermaLink="true">https://deicidia.github.io/robotics/rl/3dgs/2025/12/09/UAV-RL-3DGS.html</guid>
        
        <category>UAV</category>
        
        <category>RL</category>
        
        <category>3DGS</category>
        
        <category>WIP</category>
        
        
        <category>Robotics</category>
        
        <category>RL</category>
        
        <category>3DGS</category>
        
      </item>
    
      <item>
        <title>Liste de ressources</title>
        <description>&lt;h2 id=&quot;algorithmique--fondations&quot;&gt;Algorithmique &amp;amp; Fondations&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Ressource&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
      &lt;th&gt;Format&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://usaco.guide/CPH.pdf&quot;&gt;Competitive Programmer’s Handbook&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Guide pour compétitions d’algorithmique.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-file-pdf&quot; title=&quot;PDF&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://jeffe.cs.illinois.edu/teaching/algorithms/book/Algorithms-JeffE.pdf&quot;&gt;Algorithms (Jeff Erickson)&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Approche théorique de l’algorithmique.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-file-pdf&quot; title=&quot;PDF&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://cp-algorithms.com/&quot;&gt;Algorithms for Competitive Programming&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Implémentations d’algorithmes classiques.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://xlinux.nist.gov/dads/&quot;&gt;Dictionary of Algorithms&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Référence NIST exhaustive des structures et algorithmes.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://tryalgo.org/&quot;&gt;TryAlgo&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Ressource algorithmique en français.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLrS21S1jm43igE57Ye_edwds_iL7ZOAG4&quot;&gt;A&amp;amp;DS (Playlist)&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Cours vidéo complet sur DSA.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-video&quot; title=&quot;Vidéos&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;architecture--performance&quot;&gt;Architecture &amp;amp; Performance&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Ressource&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
      &lt;th&gt;Format&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://modal.com/gpu-glossary/device-hardware/cuda-device-architecture&quot;&gt;CUDA Architecture Glossary&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Glossaire technique CUDA (SM, Warp, Occupancy, etc.).&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://en.algorithmica.org/hpc/&quot;&gt;Algorithmica&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Performance, efficience et architectures processeurs modernes.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://bitmath.blogspot.com/&quot;&gt;Bits, Math and Performance&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Manipulation de bits, intrinsèques SIMD (AVX/SSE).&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.makingsoftware.com/&quot;&gt;Making Software&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Visualisations sur sujets variés de l’informatique.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://curiouscoding.nl/posts/&quot;&gt;CuriousCoding&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Algorithmes et structures de données appliquées à la bio-informatique.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://dlsun.github.io/probability/box-models.html#exm:committee-chair&quot;&gt;Introduction to Probability&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Fondations en probabilités et statistiques.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;langages--systèmes&quot;&gt;Langages &amp;amp; Systèmes&lt;/h2&gt;

&lt;h3 id=&quot;c&quot;&gt;C++&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Ressource&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
      &lt;th&gt;Format&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.learncpp.com/&quot;&gt;Learn C++&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Cours de C++ moderne pour débutants.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://google.github.io/styleguide/cppguide.html&quot;&gt;Google C++ Style Guide&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Les conventions de codage utilisées chez Google.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;zig&quot;&gt;Zig&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Ressource&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
      &lt;th&gt;Format&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://codeberg.org/ziglings/exercises&quot;&gt;Ziglings&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Apprendre Zig par des exercices pratiques.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pedropark99.github.io/zig-book/&quot;&gt;Introduction to Zig&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Guide d’introduction au langage Zig.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;rust&quot;&gt;Rust&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Ressource&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
      &lt;th&gt;Format&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/microsoft/RustTraining&quot;&gt;RustTraining&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Cours par Microsoft.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/rust-lang/rustlings&quot;&gt;Rustlings&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Apprendre Rust par des exercices pratiques.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;programmation-gpu-cuda&quot;&gt;Programmation GPU (CUDA)&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Ressource&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
      &lt;th&gt;Format&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://jamesakl.com/posts/cuda-ontology/&quot;&gt;CUDA Ontology&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Comprendre les versions, l’API et la compatibilité.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.aleksagordic.com/blog/matmul&quot;&gt;NVIDIA GPU Anatomy&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Analyse de noyaux MatMul sur GPU NVIDIA (PTX/Tensor Cores).&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/xlite-dev/LeetCUDA&quot;&gt;LeetCUDA&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Implémentation de kernels CUDA.&lt;/td&gt;
      &lt;td&gt;&lt;span class=&quot;source-badge&quot;&gt;&lt;i class=&quot;fa-solid fa-globe&quot; title=&quot;Site&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

</description>
        <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
        <link>https://deicidia.github.io/ressources/2025/12/08/Ressources.html</link>
        <guid isPermaLink="true">https://deicidia.github.io/ressources/2025/12/08/Ressources.html</guid>
        
        <category>Algorithmique</category>
        
        <category>Mathématiques</category>
        
        <category>Programmation</category>
        
        
        <category>ressources</category>
        
      </item>
    
  </channel>
</rss>
