Penjelasan Gemma: Arsitektur PaliGemma

SEP 05, 2024
Ju-yeong Ji Gemma DevRel
Ravin Kumar Google Data Scientist Language Applications

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 3B

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.


Arsitektur PaliGemma

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

Joint architecture of the Vision Model and Gemma 2B model
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)
  )
)

vision_tower (SiglipVisionModel)

Komponen ini bertanggung jawab untuk memproses gambar input.

Ini menggunakan SiglipVisionTransformer yang merupakan jenis arsitektur transformer yang dirancang untuk tugas-tugas visi.


embeddings (SiglipVisionEmbeddings)

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.


patch_embedding

Ini menggunakan lapisan convolutional (Conv2d) dengan parameter berikut.

  • 3: Input memiliki 3 saluran (untuk gambar RGB)

  • 1152: Output memiliki 1152 saluran, yang merupakan dimensi sematan dari setiap patch

  • kernel_size=(14, 14): Setiap patch adalah persegi 14x14 piksel

  • stride=(14, 14): Patch diambil tanpa tumpang tindih (filter convolutional memindahkan 14 piksel sekaligus)

  • padding=’valid’: Padding tidak diterapkan sehingga ukuran output akan lebih kecil daripada ukuran input.


position_embedding

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).


encoder (SiglipEncoder)

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.


multi_modal_projector (PaliGemmaMultiModalProjector)

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.


language_model (GemmaForCausalLM)

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)


Contoh Segmentasi Objek

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.

Image of a child and cat on a snowy roof top

Output dari PaliGemma dengan prompt “segment floor;cat;person;

image of output from the PaliGemma with the 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.

image showing the output displaying the cat's location within coordinates (382, 637) and (696, 784)

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.

image showing object segmentation result, where the floor is shaded blue, the child is shaded red, and the cat is shaded yellow

Ringkasan

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!


Referensi


Makalah


Contoh Kode


📋 Seri arsitektur Gemma lengkap