13 poin oleh ninebow 2024-04-22 | 1 komentar | Bagikan ke WhatsApp
  • ℹ️ Setelah membaca tulisan panduan visual untuk Visual Transformers yang diperkenalkan oleh xguru, saya menerjemahkan tulisan penjelasan visual tentang Vision Transformer (ViT) (A Visual Guide to Vision Transformers) yang ditulis oleh Dennis Turp, seorang Data Scientist sekaligus Software Engineer, dengan izin darinya.

  • Vision Transformer (ViT) adalah model yang menerapkan Transformer pada bidang CV (Computer Vision) dan menunjukkan performa sangat baik pada area seperti deteksi objek dan klasifikasi gambar. Model ini terutama banyak digunakan sebagai Visual Encoder yang mengekstrak feature dari gambar.

  • Karena penjelasan pada naskah asli cukup ringkas sehingga bisa sulit dipahami, saya menambahkan beberapa catatan untuk membantu pemahaman.


Penjelasan Visual tentang Vision Transformer (ViT)

Tulisan ini adalah penjelasan visual tentang Vision Transformers (ViTs), yaitu model deep learning yang menunjukkan performa mutakhir (SotA, State-of-the-Art) pada tugas klasifikasi gambar. Vision Transformer menerapkan arsitektur Transformer, yang awalnya dirancang untuk pemrosesan bahasa alami (NLP), pada data gambar. Dalam tulisan ini, Anda dapat memahami cara kerja Vision Transformer melalui penjelasan singkat dan visualisasi yang membantu memahami aliran data saat Anda menggulir halaman. (:pytorch::kr:: Di sini penjelasan dengan scroll sulit dilakukan, jadi diganti dengan tangkapan gambar. Sebaiknya lihat juga naskah asli.)
> This is a visual guide to Vision Transformers (ViTs), a class of deep learning models that have achieved state-of-the-art performance on image classification tasks. Vision Transformers apply the transformer architecture, originally designed for natural language processing (NLP), to image data. This guide will walk you through the key components of Vision Transformers in a scroll story format, using visualizations and simple explanations to help you understand how these models work and how the flow of the data through the model looks like.

0. Melihat data / Lets start with the data

Sama seperti convolutional neural network (CNN) pada umumnya, Vision Transformer juga dilatih dengan metode supervised learning. Artinya, model dilatih menggunakan dataset yang terdiri dari gambar dan label yang sesuai.
> Like normal convolutional neural networks, vision transformers are trained in a supervised manner. This means that the model is trained on a dataset of images and their corresponding labels.

1. Fokus pada satu data / Focus on one data point

Untuk memahami lebih jelas bagaimana Vision Transformer bekerja di dalam, mari kita fokus dulu hanya pada satu data (ukuran batch 1). Lalu mari pikirkan pertanyaan ini: bagaimana data ini harus disiapkan (dipraproses) agar bisa dimasukkan ke dalam Transformer?
> To get a better understanding of what happens inside a vision transformer lets focus on a single data point (batch size of 1). And lets ask the question: How is this data point prepared in order to be consumed by a transformer?

2. Lupakan label untuk sementara / Forget the label for the moment

Label akan menjadi lebih relevan untuk dibahas nanti. Untuk sekarang, yang tersisa hanyalah satu gambar.
> The label will become more relevant later. For now the only thing that we are left with is a single image.

3. Membagi gambar menjadi patch / Create patches of the image

Untuk menyiapkan gambar agar bisa digunakan di dalam Transformer, seluruh gambar dibagi menjadi patch gambar berukuran sama (p x p).
> To prepare the image for the use inside the transformer we divide the image into equally sized patches of size p x p.

4. Meratakan patch gambar / Flatting of the image patches

Patch kemudian diratakan (flatten) menjadi vektor berukuran p' = p² x c. Di sini, p adalah ukuran satu sisi patch, dan c adalah jumlah channel. (:pytorch::kr:: Misalnya, untuk gambar RGB jumlah channel adalah 3.)
> The patches are now flattened into vectors of dimension p'= p²*c where p is the size of the patch and c is the number of channels.

5. Membuat embedding dari patch / Creating patch embeddings

Vektor yang dibuat dari patch gambar sebelumnya kemudian dienkode melalui transformasi linear. Patch Embedding Vector yang dihasilkan memiliki ukuran tetap d.
> These image patch vectors are now encoded using a linear transformation. The resulting Patch Embedding Vector has a fixed size d.

6. Meng-embedding semua patch / Embedding all patches

Setelah semua patch gambar di-embedding menjadi vektor berukuran tetap, kita mendapatkan sebuah array berukuran n x d. Di sini n adalah jumlah patch gambar, dan d adalah ukuran dari satu patch embedding.
> Now that we have embedded our image patches into vectors of fixed size, we are left with an array of size n x d where n is the the number of image patches and d is the size of the patch embedding

7. Menambahkan token klasifikasi (CLS) / Appending a classification token

Untuk melatih model secara efektif, kita menambahkan sebuah vektor yang disebut token klasifikasi (token CLS) ke embedding patch. Vektor ini adalah parameter yang dapat dipelajari oleh jaringan saraf dan diinisialisasi secara acak. Sebagai catatan, hanya ada satu token CLS, dan vektor yang sama ditambahkan ke semua data. (:pytorch::kr:: Jika sampai di sini, dengan menambahkan token CLS ke n embedding patch, kita memperoleh (n+1) x d, yaitu (n+1) buah embedding masing-masing berukuran d.)

In order for us to effectively train our model we extend the array of patch embeddings by an additional vector called classification token (cls token). This vector is a learnable parameter of the network and is randomly initialized. Note: We only have one cls token and we append the same vector for all data points.

8. Menambahkan vektor embedding posisi / Add positional embedding Vectors

Sejauh ini, embedding patch belum memiliki informasi posisi. Masalah ini diatasi dengan menambahkan vektor embedding posisi (Positional Embedding Vector) yang dapat dipelajari dan diinisialisasi secara acak ke semua embedding patch. Selain itu, vektor posisi seperti ini juga ditambahkan ke token klasifikasi (token CLS) yang telah ditambahkan sebelumnya. (:pytorch::kr:: Dalam Transformer, nilai Positional Encoding "ditambahkan". Karena itu, ukuran vektor tidak berubah.)

Currently our patch embeddings have no positional information associated with them. We remedy that by adding a learnable randomly initialized positional embedding vector to all our patch embeddings. We also add a such a positional embedding vector to our classification token.

9. Memberikannya sebagai input ke Transformer / Transformer Input

Setelah vektor embedding posisi ditambahkan, tersisa sebuah array berukuran (n+1) x d. Array ini akan menjadi input untuk Transformer, yang akan dijelaskan lebih rinci pada langkah berikutnya.

After the positional embedding vectors have been added we are left with an array of size (n+1) x d. This will be our input for the transformer which will be explained in greater detail in the next steps.

10.1. Transformer: Membuat QKV / QKV Creation

Vektor embedding patch yang menjadi input Transformer dipetakan secara linear menjadi beberapa vektor besar. Vektor-vektor baru ini kemudian dibagi menjadi tiga bagian berukuran sama. Masing-masing adalah Q sebagai vektor kueri (Query), K sebagai vektor kunci (Key), dan V sebagai vektor nilai (Value). Kita akan memperoleh masing-masing sebanyak (n+1) vektor.

Our transformer input patch embedding vectors are linearly embedded into multiple large vectors. These new vectors are than separated into three equal sized parts. The Q - Query Vector, the K - Key Vector and the V - Value Vector . We will have (n+1) of a all of those vectors.

10.2. Transformer: Menghitung skor attention / Attention Score Calculation

Pertama, untuk menghitung skor attention A, kita mengalikan semua vektor kueri Q dengan semua vektor kunci K.

To calculate our attention scores A we will now multiply all of our query vectors Q with all of our key vectors K.

10.3. Transformer: Matriks skor attention / Attention Score Matrix

Setelah memperoleh matriks skor attention A, kita menerapkan fungsi softmax pada setiap baris agar jumlah setiap baris menjadi 1.

Now that we have the attention score matrix A we apply a softmax function to every row such that every row sums up to 1.

10.4. Transformer: Menghitung informasi kontekstual teragregasi / Aggregated Contextual Information Calculation

Untuk menghitung informasi kontekstual teragregasi (aggregated contextual information) bagi vektor embedding patch pertama, kita berfokus pada baris pertama dari matriks attention. Lalu entri-entri di dalamnya digunakan sebagai bobot untuk vektor nilai V, sehingga dihasilkan vektor informasi kontekstual teragregasi (aggregated vector) untuk embedding patch gambar pertama.

To calculate the aggregated contextual information for the first patch embedding vector. We focus on the first row of the attention matrix. And use the entires as weights for our Value Vectors V. The result is our aggregated contextual information vector for the first image patch embedding.

10.5. Transformer: Mendapatkan informasi kontekstual teragregasi untuk semua patch / Aggregated Contextual Information for every patch

Proses di atas diulangi untuk baris-baris lain pada matriks skor attention sehingga diperoleh N+1 vektor informasi kontekstual teragregasi. Artinya, satu untuk setiap patch (=N buah) + satu untuk token klasifikasi (CLS Token) (=1). Sampai di sini, kita telah menyelesaikan head attention pertama.

Now we repeat this process for every row of our attention score matrix and the result will be N+1 aggregated contextual information vectors. One for every patch + one for the classification token. This steps concludes our first Attention Head.

10.6. Transformer: Multi-head attention / Multi-Head Attention

Karena kita sedang menangani multi-head attention (pada Transformer), seluruh proses dari 10.1 hingga 10.5 diulangi lagi untuk QKV yang berbeda. Pada ilustrasi di atas diasumsikan hanya ada 2 head, tetapi biasanya ViT memiliki jauh lebih banyak head. Hasil akhirnya adalah beberapa vektor informasi kontekstual teragregasi (Multiple Aggregated Contextual Information Vectors).

Now because we are dealing multi head attention we repeat the entire process from step 10.1 - 10-5 again with a different QKV mapping. For our explanatory setup we assume 2 Heads but typically a VIT has many more. In the end this results in multiple Aggregated contextual information vectors.

10.7. Transformer: Langkah terakhir pada layer attention / Last Attention Layer Step

Setelah beberapa head yang dihasilkan ini ditumpuk, semuanya dipetakan ke vektor berukuran d, yang sama dengan ukuran patch embedding.
> These heads are stacked together and are mapped to vectors of size d which was the same size as our patch embeddings had.

10.8. Transformer: Mendapatkan hasil layer attention / Attention Layer Result

Dengan demikian, layer attention dari langkah sebelumnya telah selesai, dan kita memperoleh embedding dengan ukuran yang persis sama seperti yang digunakan saat input.
> The previous step concluded the attention layer and we are left with the same amount of embeddings of exactly the same size as we used as input.

10.9. Transformer: Menambahkan koneksi residual / Residual connections

Dalam Transformer, koneksi residual (Residual Connection) sangat sering digunakan, yang pada dasarnya berarti menambahkan input dari layer sebelumnya ke output layer saat ini. Di sini kita juga akan menerapkan koneksi residual.
> Transformers make heavy use of residual connections which simply means adding the input of the previous layer to the output the current layer. This is also something that we will do now.

10.10. Transformer: Mendapatkan hasil koneksi residual / Residual connection Result

Melalui koneksi residual ini, vektor dengan ukuran yang sama tetap dihasilkan (dengan menjumlahkan vektor-vektor berukuran d yang sama).
> The addition results in vectors of the same size.

10.11. Transformer: Melewatkannya ke feed-forward network / Feed Forward Network

Output yang telah diperoleh sejauh ini kemudian dilewatkan ke jaringan saraf feed-forward dengan fungsi aktivasi non-linear.
> Now these outputs are feed through a feed forward neural network with non linear activation functions

10.12. Transformer: Mendapatkan hasil akhir / Final Result

Dalam Transformer, setelah rangkaian operasi sejauh ini sebenarnya masih ada satu koneksi residual lagi, tetapi di sini kita akan melewatinya demi penyederhanaan penjelasan dan mengakhiri operasi layer Transformer. Pada akhirnya, Transformer menghasilkan output dengan ukuran yang sama seperti input.
> After the transformer step there is another residual connections which we will skip here for brevity. And so the last step concluded the transformer layer. In the end the transformer produced outputs of the same size as input.

11. Mengulangi operasi Transformer / Repeat Transformers

Seluruh operasi Transformer dari 10.1 hingga 10.12 yang telah dijelaskan sejauh ini diulangi beberapa kali. Di sini ditunjukkan contoh sebanyak 6 kali.
> Repeat the entire transformer calculation Steps 10.1 - Steps 10.12 for the Transformer several times e.g. 6 times.

12. Memeriksa output token klasifikasi / Identify Classification token output

Langkah terakhir adalah memeriksa output token klasifikasi (CLS token). Vektor ini akan digunakan pada tahap terakhir dalam alur Vision Transformer.
> Last step is to identify the classification token output. This vector will be used in the final step of our Vision Transformer journey.

13. Langkah akhir: Memprediksi probabilitas klasifikasi / Final Step: Predicting classification probabilities

Pada tahap yang benar-benar terakhir, token output klasifikasi ini dilewatkan ke jaringan saraf lain yang fully-connected untuk memprediksi probabilitas klasifikasi dari gambar input.
> In the final and last step we use this classification output token and another fully connected neural network to predict the classification probabilities of our input image.

14. Melatih Vision Transformer / Training of the Vision Transformer

Vision Transformer dilatih menggunakan fungsi loss cross-entropy standar yang membandingkan probabilitas klasifikasi yang diprediksi dengan label kelas yang benar. Model dilatih menggunakan backpropagation dan gradient descent, dengan memperbarui parameter model agar meminimalkan fungsi loss.
> We train the Vision Transformer using a standard cross-entropy loss function, which compares the predicted class probabilities with the true class labels. The model is trained using backpropagation and gradient descent, updating the model parameters to minimize the loss function.

Kesimpulan / Conclusion

Melalui penjelasan visual ini, kita telah menelusuri komponen-komponen utama Vision Transformer, mulai dari persiapan data hingga pelatihan model. Kami berharap panduan ini membantu Anda memahami cara kerja Vision Transformer dan bagaimana model ini dapat digunakan untuk mengklasifikasikan gambar.
> In this visual guide, we have walked through the key components of Vision Transformers, from the data preparation to the training of the model. We hope this guide has helped you understand how Vision Transformers work and how they can be used to classify images.

Untuk membantu Anda memahami Vision Transformer dengan lebih baik, kami juga menyiapkan Colab Notebook kecil ini. Silakan lihat juga komentar pada 'Blogpost'. Kode ini diambil dari implementasi ViT PyTorch yang luar biasa milik @lucidrains, jadi pastikan juga untuk melihat karyanya.
> I prepared this little Colab Notebook to help you understand the Vision Transformer even better. Please have look for the 'Blogpost' comment. The code was taken from @lucidrains great VIT Pytorch implementation be sure to checkout his work.

Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk menghubungi saya kapan saja. Terima kasih sudah membaca! (Penulis: GitHub, X(Twitter), Threads, LinkedIn)
> If you have any questions or feedback, please feel free to reach out to me. Thank you for reading!

Ucapan Terima Kasih / Acknowledgements


Bacaan Lanjutan

Artikel asli

https://blog.mdturp.ch/posts/…

Artikel ringkasan

https://id.news.hada.io/topic?id=14370

Makalah Vision Transformer

https://arxiv.org/abs/2010.11929v2

Video ulasan makalah Vision Transformer oleh PR12

https://www.youtube.com/watch?v=D72_Cn-XV1g

Repositori Vision Transformer dari Google Research

https://github.com/google-research/vision_transformer

Makalah, kode, dan lainnya terkait Vision Transformer yang dirangkum di PapersWithCode

https://paperswithcode.com/method/vision-transformer


⚠️Iklan⚠️: Apakah artikel yang dirangkum oleh :pytorch:Komunitas Pengguna PyTorch Korea ini bermanfaat? Jika Anda mendaftar sebagai anggota, kami akan mengirimkan artikel-artikel utama lewat email! (Default-nya mingguan, tetapi bisa diubah ke harian.)

1 komentar

 
gcback 2024-04-22

Terima kasih telah bersusah payah menyediakan materi yang bermanfaat.^