Model reference · open weights
PE-Core-L14-336 is an open-weight embedding model from Meta. PE-Core-L14-336 (BF16) weighs 2.7 GB; the smallest configuration that runs it is RTX 3060 12 GB.
Summary of the facebook/PE-Core-L14-336 model card, 2026-10-01
What it is
| Released by | Meta |
|---|---|
| Released | 2025-04-11 |
| VRAM | 2.7 GB for the weights |
What it runs on
| Card | Runs | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
From the model card
Perception Encoder (PE) is a state-of-the-art encoder for image and video understanding trained via simple vision-language learning. It was introduced in "Perception Encoder: The best visual embeddings are not at the output of the network".
Model Developer: Meta
Model Overview: Perception Encoder (PE) is a family of large-scale vision encoder models with state-of-the-art performance on a large variety of vision tasks. By using a robust contrastive pretraining recipe and finetuning on synthetically aligned videos, PE not only outperforms all existing models on classification and retrieval, but it also internally produces strong, general features that scale for downstream tasks. PE unlocks the ability for large-scale contrastive pretraining to transfer to downstream tasks with alignment tuning to capitalize on those general features.
PE core is our base model trained with our robust image pretraining schedule and finetuned on the data generated by our synthetic video data engine.
PE core curently comes in 3 sizes. PE core G is the main checkpoint, with L and B models distilled from it.
| Scale | Tower | Params | Width | Depth | MLP | Heads | CLIP Dim | Resolution / Context Len |
|---|---|---|---|---|---|---|---|---|
| B/16 | Vision | 0.09B | 768 | 12 | 3072 | 12 | 1024 | 224px |
| Text | 0.31B | 1024 | 24 | 4096 | 16 | 1024 | 32 tokens | |
| L/14 | Vision | 0.32B | 1024 | 24 | 4096 | 16 | 1024 | 336px |
| Text | 0.31B | 1024 | 24 | 4096 | 16 | 1024 | 32 tokens | |
| G/14 | Vision | 1.88B | 1536 | 50 | 8960 | 16 | 1280 | 448px |
| Text | 0.47B | 1280 | 24 | 5120 | 20 | 1280 | 72 tokens |
All PE core models use an attention pooling block with 8 heads on top of the vision tower. The L and B models additionally have a class token for global aggregation. See the paper for more details.
PE core obtains extremely strong results across the board on zero-shot image classification and retrieval as well as zero-shot video classification and retrieval. We present a sample of its performance across those domains below.
| Model | Checkpoint | IN-1k | IN-v2 | IN-A | ObjectNet | COCO-T2I | Kinetics-400 | VTT-T2I |
|---|---|---|---|---|---|---|---|---|
| B/16 224px | PE-Core-B16-224 | 78.4 | 71.7 | 62.4 | 71.9 | 50.9 | 65.6 | 47.6 |
| L/14 336px | PE-Core-L14-336 | 83.5 | 77.9 | 89.0 | 84.7 | 57.1 | 73.4 | 50.3 |
| G/14 448px | PE-Core-G14-448 | 85.4 | 80.2 | 92.6 | 88.2 | 58.1 | 76.9 | 51.2 |
PE core performs particularly well on the hard benchmarks such as ObjectNet and ImageNet-A.
We provide the model loading code in https://github.com/facebookresearch/perception_models
git clone https://github.com/facebookresearch/perception_models.git
cd perception_models
conda create --name perception_models python=3.12
conda activate perception_models
# Install PyTorch
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 xformers --index-url https://download.pytorch.org/whl/cu124
# We use torchcodec for decoding videos into PyTorch tensors
conda install ffmpeg -c conda-forge
pip install torchcodec==0.1 --index-url=https://download.pytorch.org/whl/cu124
pip install -e .
This will install an editable version of repo, allowing you to make changes to the code without needing to reinstall the package every time.
import torch
from PIL import Image
import core.vision_encoder.pe as pe
import core.vision_encoder.transforms as transforms
print("CLIP configs:", pe.CLIP.available_configs())
# CLIP configs: ['PE-Core-G14-448', 'PE-Core-L14-336', 'PE-Core-B16-224']
model = pe.CLIP.from_config("PE-Core-L14-336", pretrained=True) # Downloads from HF
model = model.cuda()
preprocess = transforms.get_image_transform(model.image_size)
tokenizer = transforms.get_text_tokenizer(model.context_length)
image = preprocess(Image.open("docs/assets/cat.png")).unsqueeze(0).cuda()
text = tokenizer(["a diagram", "a dog", "a cat"]).cuda()
with torch.no_grad(), torch.autocast("cuda"):
image_features, text_features, logit_scale = model(image, text)
text_probs = (logit_scale * image_features @ text_features.T).softmax(dim=-1)
print("Label probs:", text_probs) # prints: [[0.0, 0.0, 1.0]]
You can find more details in the GitHub repo.
If you find our code useful for your research, please consider citing:
@article{bolya2025PerceptionEncoder,
title={Perception Encoder: The best visual embeddings are not at the output of the network},
author={Daniel Bolya and Po-Yao Huang and Peize Sun and Jang Hyun Cho and Andrea Madotto and Chen Wei and Tengyu Ma and Jiale Zhi and Jathushan Rajasegaran and Hanoona Rasheed and Junke Wang and Marco Monteiro and Hu Xu and Shiyu Dong and Nikhila Ravi and Daniel Li and Piotr Doll{\'a}r and Christoph Feichtenhofer},
journal={arXiv},
year={2025}
}
@article{cho2025PerceptionLM,
title={PerceptionLM: Open-Access Data and Models for Detailed Visual Understanding},
author={Jang Hyun Cho and Andrea Madotto and Effrosyni Mavroudi and Triantafyllos Afouras and Tushar Nagarajan and Muhammad Maaz and Yale Song and Tengyu Ma and Shuming Hu and Hanoona Rasheed and PeizeQuoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.
How it works