clip에서 사용하는 vit , Image encoder의 pooled output 을 상세하게 확인한다.
# ViT 구조
이미지 encoder
패치의 크기는 P이다.
ViT 14는 각 패치의 크기가 14란 뜻이다. 1개의 패치의 크기는 14x14 이고, 이건 1개의 토큰이 된다.
따라서 이미지 (224 * 224 * 3)를 패치화 한다면,
224 / 14 = 16 => 16*16 * 3 = 768 이 된다.
따라서 1장은 768개의 token을 갖는 문장처럼 다룬다.
텍스트 encoder
텍스트 프롬프트는 77개의 토큰으로 변환되고, 이걸 768 으로 임베딩 한다.
헷갈리지 말자 point1 ) clip 훈련시(contrastive learrning) 텍스트든 이미지든 토큰은 하나만 사용한다.!
즉 텍스트의 77개의 토큰중 대표 토큰 (아마 맨앞 490406) 을 사용한다.
헷갈리지 말자 point2 )
하지만 diffusion에서 t2i generation 의 경우엔 77개를 다쓴다.
상세 예시
CLIP은 최대 75토큰의 입력값을 받아서 가장 앞에 BOS(49406) 토큰을 넣고, 뒤에는 EOS(49407) 토큰으로 채운다
즉 '1girl'을 프롬프트로 넣으면 이것을 [49406, 272, 1611, 49407, 49407, 49407, ..., 49407] 토큰으로 변환된다.
또한 이미지 생성시 positive prompt 혹은 negative prompt가 75개 토큰을 초과할경우, 성능이 저하된다.
코드 실행 결과

ViT Image encoder에 관한 그림 설명



'VirtualTryon' 카테고리의 다른 글
CLIPVisionModel Projection, PBE image encoder to SDXL 이식기록 (0) | 2023.09.24 |
---|---|
Virtual Tryon(개발 아이디어) (0) | 2023.09.03 |
Stable diffusion with LoRA! (0) | 2023.03.31 |
[논문리뷰] There is More than Meets the Eye: Self-Supervised Multi-Object Detection and Tracking with Sound by Distilling Multimodal Knowledge 풀번역 (0) | 2023.02.05 |