self attention cv
v2
einsum 및 einops를 사용하여 PyTorch에서 컴퓨터 비전을 위한 자기 주의 메커니즘을 구현합니다. 컴퓨터 비전 자체 주의 모듈에 중점을 둡니다.
$ pip install self-attention-cv
GPU가 없는 경우를 대비하여 귀하의 환경에 pytorch를 미리 설치해 두는 것이 좋을 것입니다. 터미널 $ pytest
에서 테스트를 실행하려면 먼저 export PYTHONPATH=$PATHONPATH:`pwd`
실행해야 할 수도 있습니다.
import torch
from self_attention_cv import MultiHeadSelfAttention
model = MultiHeadSelfAttention ( dim = 64 )
x = torch . rand ( 16 , 10 , 64 ) # [batch, tokens, dim]
mask = torch . zeros ( 10 , 10 ) # tokens X tokens
mask [ 5 : 8 , 5 : 8 ] = 1
y = model ( x , mask )
import torch
from self_attention_cv import AxialAttentionBlock
model = AxialAttentionBlock ( in_channels = 256 , dim = 64 , heads = 8 )
x = torch . rand ( 1 , 256 , 64 , 64 ) # [batch, tokens, dim, dim]
y = model ( x )
import torch
from self_attention_cv import TransformerEncoder
model = TransformerEncoder ( dim = 64 , blocks = 6 , heads = 8 )
x = torch . rand ( 16 , 10 , 64 ) # [batch, tokens, dim]
mask = torch . zeros ( 10 , 10 ) # tokens X tokens
mask [ 5 : 8 , 5 : 8 ] = 1
y = model ( x , mask )
import torch
from self_attention_cv import ViT , ResNet50ViT
model1 = ResNet50ViT ( img_dim = 128 , pretrained_resnet = False ,
blocks = 6 , num_classes = 10 ,
dim_linear_block = 256 , dim = 256 )
# or
model2 = ViT ( img_dim = 256 , in_channels = 3 , patch_dim = 16 , num_classes = 10 , dim = 512 )
x = torch . rand ( 2 , 3 , 256 , 256 )
y = model2 ( x ) # [2,10]
import torch
from self_attention_cv . transunet import TransUnet
a = torch . rand ( 2 , 3 , 128 , 128 )
model = TransUnet ( in_channels = 3 , img_dim = 128 , vit_blocks = 8 ,
vit_dim_linear_mhsa_block = 512 , classes = 5 )
y = model ( a ) # [2, 5, 128, 128]
import torch
from self_attention_cv . bottleneck_transformer import BottleneckBlock
inp = torch . rand ( 1 , 512 , 32 , 32 )
bottleneck_block = BottleneckBlock ( in_channels = 512 , fmap_size = ( 32 , 32 ), heads = 4 , out_channels = 1024 , pooling = True )
y = bottleneck_block ( inp )
import torch
from self_attention_cv . pos_embeddings import AbsPosEmb1D , RelPosEmb1D
model = AbsPosEmb1D ( tokens = 20 , dim_head = 64 )
# batch heads tokens dim_head
q = torch . rand ( 2 , 3 , 20 , 64 )
y1 = model ( q )
model = RelPosEmb1D ( tokens = 20 , dim_head = 64 , heads = 3 )
q = torch . rand ( 2 , 3 , 20 , 64 )
y2 = model ( q )
import torch
from self_attention_cv . pos_embeddings import RelPosEmb2D
dim = 32 # spatial dim of the feat map
model = RelPosEmb2D (
feat_map_size = ( dim , dim ),
dim_head = 128 )
q = torch . rand ( 2 , 4 , dim * dim , 128 )
y = model ( q )
멋진 einops 패키지를 제공해 주신 Alex Rogozhnikov @arogozhnikov에게 감사드립니다. 재구현을 위해 저는 Phil Wang @lucidrains의 여러 저장소에서 코드를 연구하고 빌려왔습니다. 그의 코드를 연구함으로써 나는 self-attention을 파악하고, 논문에 전혀 언급되지 않은 nlp 내용을 발견하고, 그의 깔끔한 코딩 스타일에서 배울 수 있었습니다.
@article{adaloglou2021transformer,
title = "Transformers in Computer Vision",
author = "Adaloglou, Nikolas",
journal = "https://theaisummer.com/",
year = "2021",
howpublished = {https://github.com/The-AI-Summer/self-attention-cv},
}
이 저장소가 정말 마음에 들고 유용하다고 생각되면 별표 표시(★)를 하여 같은 생각을 가진 더 많은 사람들에게 다가갈 수 있도록 하십시오. 매우 감사하겠습니다 :)!