Vision Transformer (ViT) áp dụng kiến trúc Transformer cho ảnh như thế nào?

Tác giả: AI VIET NAM (AI VIET NAM)

Keywords: Vision Transformer, ViT hoạt động, patch embedding, transformer cho ảnh, position embedding

Mở đầu – Vì sao khi nghe “Transformer cho ảnh” nhiều bạn cảm thấy khó hình dung?

Khi học về Transformer trong NLP, đa số mọi người quen với khái niệm chuỗi token văn bản.
Nhưng khi chuyển sang xử lý ảnh, câu hỏi thường gặp là:

  • Ảnh đâu phải chuỗi?
  • Làm sao để Transformer hiểu được cấu trúc không gian trong hình?
  • Patch là gì và vì sao phải cắt ảnh ra?

ViT xuất hiện với một ý tưởng đơn giản nhưng hiệu quả: biến ảnh thành chuỗi token, sau đó áp dụng gần như nguyên bản kiến trúc Transformer Encoder.

Vision Transformer (ViT) làm gì để đưa ảnh vào thế giới của Transformer?

Chia ảnh thành các “patch” – coi mỗi patch như một token

Ảnh đầu vào (ví dụ 224×224) được chia thành các mảnh nhỏ, thường là:

  • 16×16 pixel
  • Hoặc kích thước tùy chọn

Nếu ảnh 224×224 và patch 16×16 → tổng cộng 196 patch.
ViT xem mỗi patch như một từ (token) trong NLP.
Đây là bước quan trọng nhất giúp Transformer có thể xử lý ảnh như một chuỗi.

Biến mỗi patch thành vector embedding

Sau khi có các patch, ViT:

  • Flatten từng patch thành một vector
  • Đưa qua một linear projection để biến patch thành một embedding có kích thước cố định

Giống như cách NLP biến từ thành embedding, ViT biến “patch ảnh” thành “patch embedding”.

Điểm thú vị: ViT không dùng convolution để trích xuất feature ban đầu.
Mọi đặc trưng đều được học trực tiếp từ patch – đây là sự khác biệt lớn so với CNN truyền thống.

Thêm Position Embedding để mô hình hiểu vị trí không gian

Transformer trong NLP cần biết vị trí của token → ViT cũng vậy.

Patch embedding + position embedding → trở thành chuỗi có thể đưa vào Transformer Encoder.

Điều này giúp mô hình không bị mất thông tin về:

  • Vị trí của từng patch
  • Cấu trúc tổng thể của ảnh
  • Mối quan hệ không gian giữa các vùng

Kiến thức positional embedding này thuộc nhóm NLP – module 10, nhưng được áp dụng sáng tạo trong Computer Vision.

Thêm một token đặc biệt: CLS token

Giống mô hình BERT, ViT thêm một token đặc biệt ở đầu chuỗi.
Token này đóng vai trò “tóm tắt thông tin toàn ảnh”.

Sau khi Transformer Encoder xử lý toàn bộ chuỗi, output tương ứng CLS token được dùng cho nhiệm vụ:

  • Phân loại ảnh
  • Regression
  • Hoặc nhiệm vụ down-stream khác

Dùng Transformer Encoder để xử lý chuỗi patch

ViT sử dụng gần như nguyên bản kiến trúc Transformer Encoder:

  • Multi-Head Self-Attention
  • MLP block
  • Residual connection
  • LayerNorm

Không dùng bất kỳ convolution nào ở backbone.

Self-attention giúp mô hình:

  • Học quan hệ giữa mọi patch trong ảnh
  • Nhận diện vùng quan trọng dù chúng cách xa nhau
  • Tổng hợp thông tin toàn ảnh tốt hơn trong các bối cảnh phức tạp

Dùng MLP Head để sinh output cuối

Sau khi qua nhiều lớp Transformer Encoder, CLS token sẽ:

  • Được đưa vào một MLP
  • Chuyển thành dự đoán cuối cùng (ví dụ nhãn phân loại)

Ví dụ minh họa ViT xử lý ảnh

Giả sử có ảnh mèo 224×224:

  • Cắt ảnh thành 196 patch 16×16
  • Nhúng từng patch thành vector embedding
  • Gắn thêm position embedding
  • Ghép chuỗi patch + CLS token → Transformer Encoder
  • Transformer học quan hệ giữa các vùng: mắt mèo, tai, nền, biên
  • CLS token sau Encoder chứa thông tin trừu tượng toàn ảnh
  • MLP head đưa ra dự đoán:
    cat

Toàn bộ quá trình không dùng convolution – một điểm rất đặc trưng của ViT.

Góc nhìn khi làm dự án AI/ML

Khi áp dụng ViT trong thực tế:

  • ViT hoạt động tốt khi có nhiều dữ liệu (do ít inductive bias hơn CNN).
  • Các phiên bản nhỏ của ViT thường được kết hợp thêm mô-đun CNN (Hybrid ViT) để cải thiện hiệu quả dữ liệu.
  • Trong các dự án Computer Vision (module 9), ViT phổ biến trong phân loại, nhận dạng, phân đoạn và embedding hình ảnh để dùng trong RAG đa phương thức.
  • ViT cũng mở đường cho các kiến trúc hiện đại như DeiT, Swin Transformer, MambaVision…

Lời khuyên cho người mới bắt đầu

  • Hãy bắt đầu từ ViT nhỏ để hiểu pipeline.
  • Thử so sánh ViT với CNN để thấy khác biệt trong cách “nhìn” ảnh.
  • Nếu dữ liệu ít, nên bắt đầu bằng ViT pretrained.

Bạn có thể thử nghiệm thêm để hiểu rõ hơn.

Hỏi đáp nhanh về chủ đề

Q1: ViT có dùng convolution không?
A: Không, backbone ViT hoạt động hoàn toàn dựa trên Transformer Encoder.

Q2: Vì sao phải chia ảnh thành patch?
A: Để biến ảnh thành chuỗi token – định dạng Transformer có thể xử lý.

Q3: Có cần position embedding không?
A: Có, giúp mô hình hiểu vị trí các patch.

Q4: CLS token dùng để làm gì?
A: Là token tổng hợp thông tin toàn ảnh để phục vụ dự đoán cuối.

FAQ về chương trình AIO

Q: Mình con số 0 thì học nổi không?
A: Chỉ cần có thời gian học mỗi ngày. Kiến thức và tài liệu team admin lo.

Q: Ai dạy AIO?
A: Toàn bộ admin AIO trực tiếp dạy và hỗ trợ trong suốt hành trình.

Q: Admin có “xịn” không?
A: Admin đều là người làm nghề thật. Không dám nói xịn, chỉ dạy bằng hết sức mình.

Q: AIO khác gì trung tâm khác?
A: AIO không phải trung tâm. Đây là dự án học tập cộng đồng với tinh thần “Cùng nhau học – cùng nhau khổ – cùng nhau lớn”.

Tài nguyên học AI: