glom pytorch
0.0.14
Glom을 구현한 Geoffrey Hinton의 새로운 아이디어는 데이터에서 창발적인 부분-전체 계층을 학습하기 위한 신경 필드, 하향식-상향식 처리 및 주의(열 간의 합의)의 개념을 통합합니다.
Yannic Kilcher의 비디오는 제가 이 논문을 이해하는 데 도움이 되었습니다.
$ pip install glom-pytorch
import torch
from glom_pytorch import Glom
model = Glom (
dim = 512 , # dimension
levels = 6 , # number of levels
image_size = 224 , # image size
patch_size = 14 # patch size
)
img = torch . randn ( 1 , 3 , 224 , 224 )
levels = model ( img , iters = 12 ) # (1, 256, 6, 512) - (batch - patches - levels - dimension)
return_all = True
키워드 인수를 전달하면 반복당 모든 열 및 레벨 상태가 반환됩니다(초기 상태, 반복 횟수 + 1 포함). 그런 다음 이를 사용하여 언제든지 모든 레벨 출력에 손실을 연결할 수 있습니다.
또한 클러스터링을 위해 반복 전반에 걸쳐 모든 레벨 데이터에 액세스할 수 있으며, 이를 통해 논문에서 이론화된 섬을 검사할 수 있습니다.
import torch
from glom_pytorch import Glom
model = Glom (
dim = 512 , # dimension
levels = 6 , # number of levels
image_size = 224 , # image size
patch_size = 14 # patch size
)
img = torch . randn ( 1 , 3 , 224 , 224 )
all_levels = model ( img , iters = 12 , return_all = True ) # (13, 1, 256, 6, 512) - (time, batch, patches, levels, dimension)
# get the top level outputs after iteration 6
top_level_output = all_levels [ 7 , :, :, - 1 ] # (1, 256, 512) - (batch, patches, dimension)
Hinton이 설명한 대로 출현을 장려하기 위한 자기 지도 학습의 노이즈 제거
import torch
import torch . nn . functional as F
from torch import nn
from einops . layers . torch import Rearrange
from glom_pytorch import Glom
model = Glom (
dim = 512 , # dimension
levels = 6 , # number of levels
image_size = 224 , # image size
patch_size = 14 # patch size
)
img = torch . randn ( 1 , 3 , 224 , 224 )
noised_img = img + torch . randn_like ( img )
all_levels = model ( noised_img , return_all = True )
patches_to_images = nn . Sequential (
nn . Linear ( 512 , 14 * 14 * 3 ),
Rearrange ( 'b (h w) (p1 p2 c) -> b c (h p1) (w p2)' , p1 = 14 , p2 = 14 , h = ( 224 // 14 ))
)
top_level = all_levels [ 7 , :, :, - 1 ] # get the top level embeddings after iteration 6
recon_img = patches_to_images ( top_level )
# do self-supervised learning by denoising
loss = F . mse_loss ( img , recon_img )
loss . backward ()
중단한 부분부터 계속하기 위해 열과 레벨의 상태를 모델로 다시 전달할 수 있습니다(아마도 논문에서 언급한 것처럼 느린 비디오의 연속 프레임을 처리하는 경우).
import torch
from glom_pytorch import Glom
model = Glom (
dim = 512 ,
levels = 6 ,
image_size = 224 ,
patch_size = 14
)
img1 = torch . randn ( 1 , 3 , 224 , 224 )
img2 = torch . randn ( 1 , 3 , 224 , 224 )
img3 = torch . randn ( 1 , 3 , 224 , 224 )
levels1 = model ( img1 , iters = 12 ) # image 1 for 12 iterations
levels2 = model ( img2 , levels = levels1 , iters = 10 ) # image 2 for 10 iteratoins
levels3 = model ( img3 , levels = levels2 , iters = 6 ) # image 3 for 6 iterations
코드를 검토해준 Cfoster0에게 감사드립니다.
@misc { hinton2021represent ,
title = { How to represent part-whole hierarchies in a neural network } ,
author = { Geoffrey Hinton } ,
year = { 2021 } ,
eprint = { 2102.12627 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV }
}