Patch Embedding
iaDéfinition
Le Patch Embedding est la technique de tokenisation d'images pour les Vision Transformers (ViT) et les LLMs multimodaux, qui divise une image en une grille de patches (petites regions carrees) de taille fixe (generalement 14x14 ou 16x16 pixels), puis projette lineairement chaque patch dans un espace d'embedding de dimension equivalente aux tokens textuels. Le mecanisme : une image de 224x224 pixels avec des patches de 16x16 produit (224/16)^2 = 196 patches. Chaque patch de 16x16x3 (RGB) = 768 valeurs est aplati et projete avec une matrice lineaire vers un espace d'd-model dimensions (768 pour ViT-Base, 1024 pour ViT-Large). Un token de classification [CLS] est prepend a ces 196 patch tokens. L'importance du positional embedding pour les patches : contrairement au texte ou les positions sont sequentielles, les patches ont des positions en 2D. Les positional embeddings 2D sinusoidaux ou appris sont essentiels pour que le modele comprenne la structure spatiale. Des variantes (RoPE 2D, positional embeddings relatifs) ameliorent la generalisation a des resolutions differentes de celles vues a l'entrainement. Integration dans les LLMs multimodaux (LLaVA, GPT-4V, Gemini) : les embeddings de patches sont produits par un encodeur visuel (ViT pre-entraine), puis projetes dans l'espace des tokens textuels du LLM via une couche de projection (MLP ou Q-Former). Ces 'visual tokens' sont concatenes aux tokens textuels et traites ensemble par le LLM. Les innovations recentes : (1) Dynamic resolution patching — ajuster la taille des patches selon la resolution de l'image (InternVL, LLaVA-HR), (2) Anyres patching — diviser les images haute resolution en sous-images de taille standard (LLaVA-1.6), (3) Token compression — reduire le nombre de visual tokens avant le LLM via le pooling ou l'attention (MobileVLM). Ces innovations permettent de traiter des images haute resolution sans exploser le contexte.
Patch Embedding en PyTorch (ViT)
import torch
import torch.nn as nn
class PatchEmbedding(nn.Module):
def __init__(self, img_size=224, patch_size=16, in_channels=3, embed_dim=768):
super().__init__()
self.n_patches = (img_size // patch_size) ** 2 # 196 pour 224/16
# Conv2D equivalente a la projection lineaire des patches
self.proj = nn.Conv2d(in_channels, embed_dim, kernel_size=patch_size, stride=patch_size)
def forward(self, x): # x: (B, 3, 224, 224)
x = self.proj(x) # (B, 768, 14, 14)
x = x.flatten(2) # (B, 768, 196)
x = x.transpose(1, 2) # (B, 196, 768)
return x # 196 patch tokens de dim 768
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h