Pada penjelasan Gemma di postingan sebelumnya, Anda telah mengulas arsitektur RecurrentGemma. Dalam postingan blog ini, Anda akan menjelajahi arsitektur PaliGemma. Mari pelajari lebih lanjut!
PaliGemma adalah vision-language model (VLM) terbuka dan ringan yang terinspirasi oleh PaLI-3, serta berbasiskan komponen terbuka, seperti model visi SigLIP dan model bahasa Gemma. Pali adalah singkatan dari Pathway Language and Image Model. Seperti namanya, model ini bisa menerima input gambar dan teks serta menghasilkan respons teks, seperti yang dapat Anda lihat dalam panduan penyempurnaan ini.
PaliGemma menambahkan vision model tambahan ke model BaseGemma, yang terdiri dari encoder gambar. Encoder ini bersama dengan token teks diteruskan ke model Gemma 2B khusus. Vision Model dan model Gemma dilatih dalam berbagai tahap baik secara independen maupun bersama-sama untuk menghasilkan arsitektur gabungan akhir. Untuk detail selengkapnya, lihat Bagian 3.2 dari makalah Pali-3
PaliGemmaForConditionalGeneration(
(vision_tower): SiglipVisionModel(
(vision_model): SiglipVisionTransformer(
(embeddings): SiglipVisionEmbeddings(
(patch_embedding): Conv2d(3, 1152, kernel_size=(14, 14), stride=(14, 14), padding=valid)
(position_embedding): Embedding(256, 1152)
)
(encoder): SiglipEncoder(
(layers): ModuleList(
(0-26): 27 x SiglipEncoderLayer(
(self_attn): SiglipAttention(
(k_proj): Linear(in_features=1152, out_features=1152, bias=True)
(v_proj): Linear(in_features=1152, out_features=1152, bias=True)
(q_proj): Linear(in_features=1152, out_features=1152, bias=True)
(out_proj): Linear(in_features=1152, out_features=1152, bias=True)
)
(layer_norm1): LayerNorm((1152,), eps=1e-06, elementwise_affine=True)
(mlp): SiglipMLP(
(activation_fn): PytorchGELUTanh()
(fc1): Linear(in_features=1152, out_features=4304, bias=True)
(fc2): Linear(in_features=4304, out_features=1152, bias=True)
)
(layer_norm2): LayerNorm((1152,), eps=1e-06, elementwise_affine=True)
)
)
)
(post_layernorm): LayerNorm((1152,), eps=1e-06, elementwise_affine=True)
)
)
(multi_modal_projector): PaliGemmaMultiModalProjector(
(linear): Linear(in_features=1152, out_features=2048, bias=True)
)
(language_model): GemmaForCausalLM(
(model): GemmaModel(
(embed_tokens): Embedding(257216, 2048, padding_idx=0)
(layers): ModuleList(
(0-17): 18 x GemmaDecoderLayer(
(self_attn): GemmaSdpaAttention(
(q_proj): Linear(in_features=2048, out_features=2048, bias=False)
(k_proj): Linear(in_features=2048, out_features=256, bias=False)
(v_proj): Linear(in_features=2048, out_features=256, bias=False)
(o_proj): Linear(in_features=2048, out_features=2048, bias=False)
(rotary_emb): GemmaRotaryEmbedding()
)
(mlp): GemmaMLP(
(gate_proj): Linear(in_features=2048, out_features=16384, bias=False)
(up_proj): Linear(in_features=2048, out_features=16384, bias=False)
(down_proj): Linear(in_features=16384, out_features=2048, bias=False)
(act_fn): PytorchGELUTanh()
)
(input_layernorm): GemmaRMSNorm()
(post_attention_layernorm): GemmaRMSNorm()
)
)
(norm): GemmaRMSNorm()
)
(lm_head): Linear(in_features=2048, out_features=257216, bias=False)
)
)
Komponen ini bertanggung jawab untuk memproses gambar input.
Ini menggunakan SiglipVisionTransformer yang merupakan jenis arsitektur transformer yang dirancang untuk tugas-tugas visi.
PaliGemma mengambil satu atau beberapa gambar sebagai input, yang diubah menjadi “soft token” oleh encoder SigLIP.
PaliGemma memecah gambar menjadi beberapa patch yang lebih kecil, mirip dengan cara model teks memproses kata-kata dalam sebuah kalimat. Model ini kemudian belajar menangkap hubungan di antara patch-patch ini, yang secara efektif memahami isi visual gambar.
Ini menggunakan lapisan convolutional (Conv2d) dengan parameter berikut.
Sematan posisi ditambahkan ke setiap sematan patch untuk mengenkode informasi spasial (yaitu, lokasi setiap patch pada gambar asli).
Ini dilakukan dengan menggunakan lapisan sematan (Embedding) yang telah dipelajari yang mengambil input posisi setiap patch (hingga 256 posisi) dan menghasilkan output vektor dengan ukuran 1152 (sama dengan dimensi sematan patch).
Sematan melewati serangkaian SiglipEncoderLayer, masing-masing layer terdiri atas self-attention dan feed-forward neural network. Ini membantu model menangkap hubungan di antara berbagai bagian gambar.
Komponen ini memproyeksikan output dari vision tower ke dalam ruang multi-modal. Hal ini dicapai dengan menggunakan lapisan linear sederhana sehingga representasi visi dan bahasa dapat digabungkan secara efektif.
Komponen ini adalah model bahasa berdasarkan model Gemma 2B.
Ini mengambil input representasi multi-modal dari proyektor dan menghasilkan output teks.
Untuk input teks, setiap checkpoint dilatih dengan berbagai panjang urutan. Sebagai contoh, paligemma-3b-mix-224 dilatih dengan panjang urutan 256 (teks input + teks output yang diberi token oleh tokenizer Gemma).
PaliGemma menggunakan tokenizer Gemma dengan 256000 token, tetapi memperluas kosakatanya dengan 1024 entri yang merepresentasikan koordinat dalam ruang gambar yang dinormalisasi (<loc0000>...<loc1023>), dan kosakata lainnya dengan 128 entri (<seg000>...<seg127>) yang merupakan kata kode yang digunakan oleh segmentasi acuan-ekspresi yang ringan vector-quantized variational auto-encoder (VQ-VAE). (256000 + 1024 + 128 = 257216)
Soft token tambahan mengenkode deteksi objek dan segmentasi gambar. Di bawah ini adalah contoh output dari paligemma-3b-mix-224. Anda bisa mencobanya sendiri dari demo langsung HuggingFace.
Output dari PaliGemma dengan prompt “segment floor;cat;person;
”
Output dari model ini tidak intuitif untuk didekode jika Anda tidak terbiasa dengan tugas-tugas ML dan computer vision.
Empat token lokasi awal merepresentasikan koordinat kotak pembatas, mulai dari 0 hingga 1023. Koordinat ini tidak bergantung pada rasio aspek karena gambar diasumsikan diubah ukurannya menjadi 1024 x 1024.
Sebagai contoh, output menampilkan lokasi kucing dalam koordinat (382, 637) dan (696, 784). Dalam sistem koordinat ini, sudut kiri atas dinotasikan sebagai (0,0) dan koordinat vertikal dicantumkan sebelum koordinat horizontal.
Mask dienkode dengan 16 token segmentasi berikut ini. Model neural network (VQ-VAE) bisa merekonstruksi mask dari representasi yang dikuantisasi (indeks buku kode) dengan mendekode nilai-nilai tersebut. Anda dapat menjelajahi kode yang sebenarnya dari sini.
Terakhir, Anda bisa memperoleh hasil yang bagus ini dari output PaliGemma.
Pada artikel ini, Anda telah mempelajari tentang PaliGemma.
Keluarga Gemma menghadirkan kesempatan unik untuk memahami sistem model bahasa besar modern dengan menawarkan koleksi model ketebalan terbuka dengan arsitektur inti yang serupa tetapi dirancang untuk kasus penggunaan yang berbeda. Model-model ini, yang dirilis oleh Google untuk peneliti, developer, dan pengguna akhir, mencakup berbagai fungsionalitas dan kompleksitas.
Kami harap ringkasan ini memberikan pemahaman singkat mengenai keluarga model Gemma, menyoroti versatilitas dan kesesuaiannya untuk beraneka ragam tugas.
Server Discord Komunitas Developer Google merupakan platform yang sempurna untuk menunjukkan project Anda, menjalin hubungan dengan sesama developer, dan terlibat dalam diskusi interaktif. Mari bergabung dengan server ini untuk menjelajahi berbagai peluang menarik.
Terima kasih sudah membaca!