lucidrains/perceiver-pytorch
Implementation of Perceiver, General Perception with Iterative Attention, in Pytorch
perceiver‑pytorch – Perceiver 계열 어텐션 모델의 PyTorch 구현
개요 – 논문 “Perceiver: General Perception with Iterative Attention” 및 *“Perceiver IO: A General Architecture for Structured Inputs & Outputs”*의 Perceiver 및 Perceiver IO 아키텍처(및 소규모 실험적 변형)를 재현한 순수 Python 라이브러리입니다. 이 모델들은 매우 크고 고차원적인 입력(이미지, 비디오, 오디오, 포인트 클라우드 등)을 먼저 학습된 작은 잠재 벡터 세트에 투영한 다음, 교차 어텐션과 자기 어텐션을 반복적으로 적용하여 처리하도록 설계된 Transformer 스타일의 신경망입니다.
중요성 – 원본 Perceiver 논문은 단일 아키텍처가 모달리티별 설계 없이도 많은 모달리티를 처리할 수 있음을 보여주었습니다. 이 저장소를 통해 연구자와 개발자는 PyTorch에서 이 아이디어를 쉽게 실험하고, 이미지 분류, 언어 모델링 또는 모든 사용자 지정 작업에 모델을 적용할 수 있습니다.
퀵 스타트
pip install perceiver-pytorch
이미지 분류 예제 (vanilla Perceiver)
import torch
from perceiver_pytorch import Perceiver
model = Perceiver(
input_channels=3, # RGB 이미지
input_axis=2, # 2‑D 데이터 (높이 × 너비)
num_freq_bands=6,
max_freq=10.,
depth=6,
num_latents=256,
latent_dim=512,
cross_heads=1,
latent_heads=8,
cross_dim_head=64,
latent_dim_head=64,
num_classes=1000,
attn_dropout=0.,
ff_dropout=0.,
weight_tie_layers=False,
fourier_encode_data=True,
self_per_cross_attn=2,
)
img = torch.randn(1, 224, 224, 3) # batch‑size‑1 ImageNet‑size 이미지
logits = model(img) # → shape (1, 1000)
유연한 출력의 Perceiver IO
from perceiver_pytorch import PerceiverIO
model = PerceiverIO(
dim=32,
queries_dim=32,
logits_dim=100,
depth=6,
num_latents=256,
latent_dim=512,
cross_heads=1,
latent_heads=8,
cross_dim_head=64,
latent_dim_head=64,
weight_tie_layers=False,
seq_dropout_prob=0.2,
)
seq = torch.randn(1, 512, 32) # 임의의 입력 시퀀스
queries = torch.randn(128, 32) # 디코더 쿼리
out = model(seq, queries=queries) # → (1, 128, 100)
언어 모델링 변형 (PerceiverLM)
from perceiver_pytorch import PerceiverLM
model = PerceiverLM(
num_tokens=20000,
dim=32,
depth=6,
max_seq_len=2048,
num_latents=256,
latent_dim=512,
cross_heads=1,
latent_heads=8,
cross_dim_head=64,
latent_dim_head=64,
weight_tie_layers=False,
)
seq = torch.randint(0, 20000, (1, 512))
mask = torch.ones(1, 512).bool()
logits = model(seq, mask=mask) # → (1, 512, 20000)
주요 기능 (README 기준)
- 한 줄 설치:
pip를 통해 설치 가능. - 모듈식 API:
Perceiver,PerceiverIO,PerceiverLM클래스가 각각 분류, 유연한 출력 작업, 언어 모델링을 지원. - 푸리에 위치 인코딩 내장:
fourier_encode_data로 토글 가능. - 구성 가능한 매개변수: 깊이, 잠재 차원, 어텐션 헤드 수를 조정하여 원본 논문에 맞추거나 소규모 모델로 실험 가능.
- 실험적 상향식 어텐션:
perceiver_pytorch.experimental.Perceiver에서 사용 가능 (Set Transformers와 유사한 유도 집합 어텐션 블록 추가). - 인용 준비 완료: Perceiver, Perceiver IO 및 관련 연구에 대한 BibTeX 항목 포함.
사용 시기
- 메모리 부족 없이 매우 큰 텐서(고해상도 이미지, 비디오 프레임, 포인트 클라우드 등)를 처리할 수 있는 모달리티 독립적 백본이 필요한 경우.
- 동일한 인코더를 다른 데이터 유형에 재사용할 수 있는 교차 모달 또는 멀티모달 연구의 프로토타입을 만들고 싶은 경우.
- 유연한 출력 형태(세그멘테이션 맵, 언어 생성 등)를 탐색 중인 경우 – Perceiver IO의 쿼리 기반 디코더가 이를 간단하게 만들어 줍니다.
제한 사항 / 참고 사항
- 이 라이브러리는 모델 정의만 제공하며, 학습 루프, 데이터 파이프라인 및 성능 최적화는 사용자의 몫입니다.
- 사전 학습된 가중치는 제공되지 않으므로 처음부터 학습하거나 자체 체크포인트를 로드해야 합니다.
- 실험적 상향식 변형은 선택 사항이며
experimental하위 모듈에서 가져와야 합니다.
참고 문헌 (README 기준)
- Perceiver: General Perception with Iterative Attention – arXiv:2103.03206
- Perceiver IO: A General Architecture for Structured Inputs & Outputs – arXiv:2107.14795
- 관련 어텐션 메커니즘에 대한 추가 인용도 나열되어 있습니다.
결론 – perceiver-pytorch는 Perceiver 계열의 충실하고 가벼운 재구현체로, 원본 연구 코드베이스를 파고들지 않고도 PyTorch에서 해당 아키텍처를 실험하려는 모든 사용자에게 적합합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트