einops 이용 이미지 패치 자르기

~.~·2022년 11월 25일
0

einops 모듈을 이용하면 쉽게 grid로 자르고, 배치할 수 있다.
파이토치, 텐서플로우 레이어와도 쉽게 적용가능해서 VIT 구현에 사용해보려고 한다.

https://github.com/arogozhnikov/einops/tree/master/docs

공식 문서에 튜토리얼이 나와있다.

이를

이렇게 일정 간격으로 자르고자 한다.

from einops import rearrange

print(image.shape) # (1, 96, 96, 3)
patchs = rearrange(image, 'b (h s1) (w s2) c -> b (h w) s1 s2 c',  s1 = 16, s2 = 16)

print(patchs.shape) # (1, 36, 16, 16, 3)

rearrange를 통해 가로세로 96인 이미지를 16의 크기를 갖도록 자르면 가로 6개, 세로 6개씩 잘려지며,
이를 (h, w)을 통해 나열하면 36개의 이미지 패치를 얻을 수 있다.

확인해 보면

plt.figure(figsize = (6,6))

for index in range(patchs.shape[1]):

    plt.subplot(6, 6, index+1)
    plt.imshow(patchs[0][index])   # patch size = (B=1, 36, 16, 16,3 ) 
    plt.axis('off')

plt.show()

위와같이 6X6 gird 으로 잘림을 확인할 수 있다.

(1, D, H, W, C)의 shape인 3차원에서도 확인해보기

0개의 댓글