alt.freeweights.text / pe-a-frame-large
From: facebook <huggingface.co/facebook>Newsgroups: alt.freeweights.textSubject:

pe-a-frame-large

Date: 2026-11-15Commit: d7fd29eSigned: 2DC28CC7B26A283B ✓

Model with 1.5B parameters. Safetensors weights, 5.83 GB in all. Published by facebook under Apache-2.0.

1.5B params5.83GBpe-a-frame-largesafetensorspermissive
FactsParams1.5BSize5.83 GBFormatssafetensorsTasknot taggedLicenseApache-2.0From sourcepermissive
$ fw get facebook/pe-a-frame-large
# manifest sha256 ad593bb0f9ff… · 5.83 GB · 9 files
$ fw verify ./pe-a-frame-large facebook/pe-a-frame-large
From sourceHosted (signed)facebook/pe-a-frame-largeLast check: 2026-11-15 02:32 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Overview

Size
5.83 GB
Weights
5.83 GB (safetensors)
Parameters
1.5B
Formats
safetensors
Task
not tagged
License
Apache-2.0 (permissive)
Files
9, each with a sha256
Publisher
facebook
Added
2026-11-15
Section
alt.freeweights.text
Lineage

Original release from the publisher.

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:32 UTCpassed

Model card

From the publisher at commit d7fd29e. Shown as plain text with links; images open at the publisher.

Perception Encoder Audio Frame (PE-A-Frame)#

PE-A-Frame is a state-of-the-art audio-text embedding model. For text, the model produces a single embedding. For audio, it produces a sequence of embeddings (onen for every 40ms of audio). These embeddings can then be used for audio event localization. For convienience, model outputs temporal spans (start and end timestamps) indicating when that event (freeform audio description) occurs in the audio.

Model Description#

PE-A-Frame uses contrastive learning to align frame-level audio representations with text descriptions. The model can identify precise time ranges when described audio events occur

Model Variants#

We release multiple model checkpoints with varying sizes:

Quick Start#

Basic Usage: Audio Event Localization#
import torch
from core.audio_visual_encoder import PEAudioFrame, PEAudioFrameTransform

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# Load model and transform
model = PEAudioFrame.from_config("pe-a-frame-large", pretrained=True).to(device)
transform = PEAudioFrameTransform.from_config("pe-a-frame-large")

# Define audio file and event descriptions
audio_file = "office_conversation.wav"
descriptions = ["a person talking", "keyboard typing", "phone ringing"]

# Process inputs
inputs = transform(audio=[audio_file], text=descriptions).to(device)

# Run inference
with torch.inference_mode():
    outputs = model(**inputs, return_spans=True)

# Print detected time spans for each event
for description, spans in zip(descriptions, outputs.spans):
    if spans:
        span_str = ", ".join([f"({start:.2f}s, {end:.2f}s)" for start, end in spans])
        print(f'"{description}": [{span_str}]')
    else:
        print(f'"{description}": No events detected')

Example Output:

"a person talking": [(2.34s, 5.67s), (8.90s, 12.45s)]
"keyboard typing": [(1.20s, 3.40s), (6.78s, 9.12s)]
"phone ringing": No events detected
Batch Processing Multiple Audio Files#
import torch
from core.audio_visual_encoder import PEAudioFrame, PEAudioFrameTransform

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = PEAudioFrame.from_config("pe-a-frame-large", pretrained=True).to(device)
transform = PEAudioFrameTransform.from_config("pe-a-frame-large")

# Process multiple audio files with different descriptions
audio_files = ["meeting.wav", "street.wav", "kitchen.wav"]
descriptions = [
    "people discussing in a meeting",
    "cars passing by",
    "water running from a faucet"
]

inputs = transform(audio=audio_files, text=descriptions).to(device)

with torch.inference_mode():
    outputs = model(**inputs, return_spans=True)

# Each audio-text pair gets its own span predictions
for audio, description, spans in zip(audio_files, descriptions, outputs.spans):
    if spans:
        span_str = ", ".join([f"({start:.2f}s, {end:.2f}s)" for start, end in spans])
        print(f'"{description}": [{span_str}] in {audio}')
    else:
        print(f'"{description}": No events detected in {audio}')
Adjusting Detection Threshold#

The threshold parameter controls sensitivity for event detection. Lower values detect more events (higher recall), while higher values are more selective (higher precision):

# High sensitivity - detect more events (may include false positives)
outputs_sensitive = model(**inputs, threshold=0.2)
Extracting Embeddings Without Spans#

If you only need embeddings without temporal localization:

inputs = transform(audio=[audio_file], text=descriptions).to(device)

with torch.inference_mode():
    outputs = model(**inputs, return_spans=False)

# Access embeddings
audio_embeds = outputs.audio_embeds  # Shape: [batch_size, num_frames, embed_dim]
text_embeds = outputs.text_embeds    # Shape: [batch_size, embed_dim]

# Compute similarity between audio frames and text
# audio_embeds is frame-level, so you can see which frames match the description
similarities = torch.einsum("btd,bd->bt", audio_embeds, text_embeds)
# similarities shape: [batch_size, num_frames]
Usage with 🤗 Transformers#
model = PeAudioFrameLevelModel.from_pretrained("facebook/pe-a-frame-large")
processor = PeAudioProcessor.from_pretrained("facebook/pe-a-frame-large")

inputs = transform(audio=[audio_file], text=descriptions, return_tensors="pt").to(device)

with torch.inference_mode():
    outputs = model(**inputs)

# Access embeddings
audio_embeds = outputs.audio_embeds  # Shape: [batch_size, num_frames, embed_dim]
text_embeds = outputs.text_audio_embeds    # Shape: [batch_size, embed_dim]

# Compute similarity between audio frames and text
# audio_embeds is frame-level, so you can see which frames match the description
similarities = torch.einsum("btd,bd->bt", audio_embeds, text_embeds)
# similarities shape: [batch_size, num_frames]

Citation#

@misc{vyas2025pushingfrontieraudiovisualperception,
      title={Pushing the Frontier of Audiovisual Perception with Large-Scale Multimodal Correspondence Learning},
      author={Apoorv Vyas and Heng-Jui Chang and Cheng-Fu Yang and Po-Yao Huang and Luya Gao and Julius Richter and Sanyuan Chen and Matt Le and Piotr Dollár and Christoph Feichtenhofer and Ann Lee and Wei-Ning Hsu},
      year={2025},
      eprint={2512.19687},
      archivePrefix={arXiv},
      primaryClass={cs.SD},
      url={https://arxiv.org/abs/2512.19687},
}

License#

This model is released under the Apache 2.0 license.

Files

9 files · 5.83 GBWeights 5.83 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 9 files with their sha256
FileSizesha256
.gitattributes1.52 KB11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361
README.md5.84 KB21c73f6077ce114d251baf2c1159b60e390a04ec761e94f4236537d52d55cd48
config.json3.81 KB5ec0a11bae3125281eb6d8ec3d3559f311ebbfb285764ca321b5ab7720a710a0
model.safetensors5.83 GB779eb2e645bc986a3899d7b6195cd12b42ce57c0eb27b87494e336df746438db
preprocessor_config.json225 B0ee55f8b2de0849b9fdebdc96486fcbb12eafe8e63d688f3a307a24048d80efa
processor_config.json338 B9bf1e54b150eca3ff5301a6b9896395043906766f5fdeb04c6fc7ceb1c4f5150
special_tokens_map.json694 Bea97ecdbcc73713039d8d64dbb05e3689495c96657fbd9a18f5bed381be81049
tokenizer.json3.58 MB43e9ea931bb0f359d16d0e435c26abbebd9a42a7298270b8ab7e5c9fa1be1dcb
tokenizer_config.json429 Bc16e13355ed389742590152634aa4923a6bc6cd180958d73ed43283fa1f0e8a2
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
d7fd29e06e pinned now2026-11-15 02:32 UTC9 files · 5.83 GB

Use it

$ fw get facebook/pe-a-frame-large
# manifest sha256 ad593bb0f9ff… · 5.83 GB · 9 files
$ fw verify ./pe-a-frame-large facebook/pe-a-frame-large
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/facebook/pe-a-frame-large.json --dir ./pe-a-frame-large $ python3 fw.py verify ./pe-a-frame-large ./facebook__pe-a-frame-large.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download facebook/pe-a-frame-large --revision d7fd29e06effc0fe5630de3b6e4ca784876a1a16 --local-dir ./pe-a-frame-large

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
21c73f6077ce114d251baf2c1159b60e390a04ec761e94f4236537d52d55cd48
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: facebook <huggingface.co/facebook>Newsgroups: alt.freeweights.textSubject: pe-a-frame-largeDate: 2026-11-15Commit: d7fd29eSigned: 2DC28CC7B26A283B ✓
Upstream
facebook/pe-a-frame-large
Pinned commit
d7fd29e06effc0fe5630de3b6e4ca784876a1a16
Manifest
pe-a-frame-large.json · .minisig
Manifest sha256
ad593bb0f9ff083d8821797a7ae868d548a51466c0aa3507271ba0f4a978e9bf
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:32 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/facebook/pe-a-frame-large.json $ curl -O https://freeweights.allternit.com/manifests/facebook/pe-a-frame-large.json.minisig $ minisign -Vm pe-a-frame-large.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

No related models in this catalog.Nothing here lists this model as its parent, and it names no parent.
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download facebook/pe-a-frame-large
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. pe-a-frame-large.json. Provenance. Takedown history: none.
From: laion <huggingface.co/laion>Subject: a2-rl-e2egit_large-50-32B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-large-15-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-v2-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_pymethods2test-large-80-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_unitsyn-python-large-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_mix_h2_language_proportional-65-8B