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”*의 PerceiverPerceiver 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에서 해당 아키텍처를 실험하려는 모든 사용자에게 적합합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트