- vừa được xem lúc

Ai nói SPHINX chỉ là bức tượng? Gặp gỡ nhạc trưởng AI thế hệ mới!

0 0 15

Người đăng: Đức Nguyễn Minh

Theo Viblo Asia

A. Tổng quan

1. Giới thiệu

Nếu bạn là người yêu thích thần thoại Hy Lạp, SPHINX là một sinh vật huyền thoại với thân sư tử và đầu người. Nếu bạn là người yêu thích khảo cổ học, SPHINX là những bức tượng linh thiêng canh gác các kim tự tháp cổ kính. Hay nếu ở lĩnh vực hàng không, SPHINX lại là tên của một loại radar tiên tiến. SPHINX thật sự là một cụm từ xuất hiện ở khá nhiều lĩnh vực. Tuy nhiên, chỉ khi đặt trong bối cảnh công nghệ AI hiện nay, thì mình mới thấy SPHINX "xinh phết"!

Trong rừng rậm của các Multimodal Large Language Model (MLLM), SPHINX không chỉ là một "siêu nhân" mà còn là "nhạc trưởng" điều khiển dàn nhạc gồm các "ông lớn" của AI. Tưởng tượng nếu bạn có thể cho các chuyên gia như Albert Einstein, Isaac Newton, và Thomas Edison Nikola Tesla làm việc cùng nhau trong một dự án! Đó chính là những gì SPHINX làm - kết hợp sức mạnh của các mô hình AI hàng đầu vào một "rọ" để xử lý đa tác vụ một cách mượt mà. Và lý do mà mình gọi là “siêu nhân” (hơi nói quá) chính là vì SPHINX có thể xử lý rất nhiều tác vụ, và có tiềm năng phát triển nhiều hơn nữa.

Không dài dòng hơn nữa, từ đây, mình xin phép “học thuật” hơn trong cách diễn giải nhé (và vừa tiếng anh vừa tiếng việt).

2. Pipeline

Dưới đây là những phương pháp, kỹ thuật mà tác giả đề xuất:

a. Liên quan đến dữ liệu:

  • Chuẩn bị nhiều bộ dữ liệu đa dạng về nhiệm vụ (E).
  • Chiến lược xử lý ảnh có độ phân giải cao (C).

b. Module Vision Encoder:

  • Kỹ thuật kết hợp thông tin của nhiều model Vision Encoder (B).

c. Module LLM Decoder:

  • Unfreeze và pretrain LLM (D.2).
  • Kết hợp weights của 2 LLMs (D.3).

image.png

Fig 1: Tổng quan kiến trúc của SPHINX

B. Vision Encoder: Kết hợp weights của nhiều model

1. Lý do

Mỗi một Vision Encoder đều mang trong mình những thông tin khác nhau về cả ngữ cảnh (semantic) lẫn độ chi tiết (fine-grained). Bạn có thể hiểu 5 người khác nhau cùng nhìn vào 1 bức ảnh thì chắc hẳn 5 góc nhìn ấy sẽ mang lại nhiều thông tin giá trị hơn 1 người đúng không nào?

2. Ý tưởng

Tác giả đã thiết kế một module với những sự kết hợp sau:

  • Những backbone khác nhau (CNN và ViT).
  • Cách mà model ấy được huấn luyện (supervised và self-supervised).
  • Độ chi tiết của thông tin (global và local).

3. CNN và ViT

2 kỹ thuật này sẽ bổ trợ thông tin cho nhau:

  • CNN với bộ kernel sẽ lấy thông tin chủ đạo về cách mà các vùng lân cận phụ thuộc lẫn nhau.
  • ViT với kiến trúc transformer sẽ cung cấp thông tin tương tác tầm xa nhiều hơn.

Và 2 kỹ thuật này sẽ làm backbone cho CLIP và DINOv2 model, Cụ thể là CLIP-ConvNeXt và CLIP-ViT và DINOv2-ViT.

image.png

Fig 2: Kết hợp các model dùng 2 backbone CNN và ViT

4. Supervised và self-supervised (DINOv2 + ViT)

Supervised model là model được huấn luyện để đưa ra dự đoán giống với label. Vậy thì còn self-supervised thì sao ?

Chắc hẳn các bạn cũng đã biết đến cách thiết kế mô hình này: Input -> Module 1 -> Module 2 -> Output. Mà ở đó, cả 2 module đều là Neural Network.

Chúng ta nói Module 2 là supervised model và module 1 là self-supervised model vì nó học “nhờ” từ kết quả của module 2. Mục tiêu duy nhất của kiểu model này là trích xuất đặc trưng có ích nhất từ input cho module 2.

Vậy nên việc kết hợp các phương thức training khác nhau thế này giúp cho thông tin trích xuất được đa chiều hơn.

image.png

Fig 3: Kết hợp các chiến lược training

5. Thông tin global và local (Q-Former)

Như chúng ta đã biết, kernel của CNN được áp dụng trên từng mảnh vá của bức ảnh, và input của ViT là các mảnh vá của bức ảnh. Vậy nên cả CNN và ViT đều cung cấp thông tin dạng local.

Đó chính là lý do mà tác giả dùng Q-Former ở đây, kỹ thuật này sẽ trích xuất thông tin của bức ảnh một cách toàn cục, các bạn có thể tham khảo kỹ hơn ở BLIP2.

Cuối cùng, chúng ta kết hợp tất cả những đặc trưng thông tin của các module vào tạo thành 1 visual embeddings duy nhất, chứa cả global và local.

image.png

Fig 4: Q-Former giúp trích xuất được thông tin global

C. Chiến lược xử lý với ảnh có độ phân giải cao - Chia để trị

1. Lý do:

Một số open-source MLLMs nổi tiếng như BLIP, LLava đóng băng module Vision Encoder trong suốt quá trình training để có thể dùng lại được những pretrained weights. Chính vì thế, kích thước của ảnh thường giảm xuống còn 224x224. Và tất nhiên điều này sẽ làm bức ảnh bị bóp méogiảm độ chi tiết.

2. Giải pháp:

Giải pháp đơn giản nhất chính là tăng kích cỡ, tuy nhiên việc này không tối ưu vì 2 lý do sau:

  • Kích cỡ ảnh tăng đồng nghĩa với việc positional encoding vectors trong ViT cũng phải tăng, điều này sẽ làm hại đến spatial cues (thứ tự không gian).
  • Độ phức tạp tính toán của ViT sẽ tăng bậc hai theo kích thước của ảnh đầu vào.

-> Tác giả đã đề xuất ra một chiến lược tối ưu hơn: Chia để trị

3. Ý tưởng:

Từ 1 ảnh phân giải cao, chúng ta chia thành 5 ảnh: 4 ảnh góc của bức ảnh và ảnh bị thu nhỏ xuống còn 224x224. Quá trình đi vào bộ Vision Encoder là độc lập. Sau đó chúng ta sẽ concatenate 5 visual embeddings thành 1 embedding cuối cùng để làm đầu vào của LLM decoder.

Điểm lợi của kĩ thuật này: Vừa có thông tin global, vừa tập trung hơn được vào những đặc trưng local, vừa giữ được những chi tiết vốn có.

image.png

Fig 5: Quy trình của SPHINX cho hình ảnh có độ phân giải cao

D. Training giai đoạn 1- Vision-language alignment

1. Mục đích:

Khác với LLM, chỉ xử lý với dữ liệu dạng chữ, bài toán MLLM Vision-Language phải xử lý thêm cả phần ảnh, có nghĩa là input của bộ LLM decoder không phải chỉ thông tin của mỗi chữ nữa, mà còn có cả ảnh. Tuy nhiên đây là một dạng thông tin mà LLM không hiểu.

Vậy thì để tận dụng được sức mạnh sinh văn bản của các mô hình ngôn ngữ lớn hiện nay, thuật ngữ Vision-language alignment được ra đời, đề cập đến quá trình huấn luyện sao cho Vision model và Language model hiểu nhau hơn. Kiến trúc chung như sau: Vision Encoder -> Projection layers -> LLM decoder.

  • Vision Encoder: Nhận input là ảnh, nhiệm vụ là trích xuất nhiều thông tin có ích nhất.
  • LLM Decoder: Nhận input là thông tin của cả ảnh và text, nhiệm vụ là sinh ra text.
  • Projection layers:
    • Nhận những thông tin mà Vision Encoder “nói” và “phiên dịch” cho LLM Decoder hiểu.
    • Điều chỉnh kích thước sao cho đúng với kích cỡ đầu vào của LLM Decoder.

2. Unfreeze và pretrain LLM

a. Lý do:

Những open-source MLLMs hiện có đều đóng băng weights của LLM trong suốt của trình pretrain cho bài toán vision-language alignment với dữ liệu dạng image-caption, và chỉ train lớp projection layers .

image.png

Fig 6: Kiến trúc của BLIP2, đóng băng module Image Encoder trong quá trình Vision-Language alignment

image.png

Fig 7: Kiến trúc của LLava, đóng băng module Vision Encoder trong quá trình Vision-Language alignment

Điều này vừa có lợi, vừa có hại:

  • Về mặt lợi: Giúp cho LLMs không bị overfit vào việc sinh ra những câu text ngắn, vì phần text trong bộ dữ liệu image-caption thường khá ngắn.
  • Về mặt hại: LLMs không thể học được thông tin của ảnh và thông tin tương quan giữa text và ảnh, đồng nghĩa với việc bỏ qua một lượng lớn thông tin từ ảnh khi sinh ra các đoạn văn.

Vậy thì có cách nào giải quyết phần hại mà vẫn giữ nguyên mặt lợi không?

b. Giải pháp

Câu trả lời nằm ở ý tưởng: Unfreeze và pretrain LLM và bắt model học thêm 1 bộ dữ liệu nữa trong quá trình này (Đây là một điểm khác biệt của SPHINX). Chi tiết các bước trong giai đoạn này như sau:

  • Chúng ta sẽ pretrain LLM (LLama2) trên bộ dữ liệu thực tế (LAION-400M). Input ở đây sẽ là visual embeddings (output của module Vision Encoder).

  • Sau khi pretrain xong LLM đầu tiên, chúng ta sẽ lấy weights làm điểm bắt đầu để train chính LLM đó nhưng trên một bộ dữ liệu nhân tạo (LAION-COCO). Lý do thì ngay phần sau mình sẽ giải thích.

  • Ngoài ra, chúng ta sẽ pretrain LLM với 1 bộ dữ liệu nữa, đó là RefinedWeb (một bộ dữ liệu toàn chữ).

  • Mỗi một lần huấn luyện, chúng ta sẽ lấy ra một điểm dữ liệu trong RefinedWeb và một vài điểm dữ liệu trong bộ image-caption. Sau đó huấn luyện lần lượt với 2 hàm loss, một hàm loss bắt model phải giữ được khả năng sinh ra được đoạn văn dài, hàm còn lại bắt model phải mô tả đúng nội dung của bức ảnh.

Điều này thực sự rất có hiệu quả, khi không được huấn luyện cùng với bộ RefinedWeb, model bị overfit rất nặng (màu cam). Trong trường hợp ngược lại, model không thể bị overfit trong việc sinh ra các đoạn văn ngắn (màu xanh lá cây).

image.png

Fig 8: Xu hướng của loss khi pretrain cùng / không cùng bộ dữ liệu RefinedWeb

3. Tổng hợp kiến thức bằng cách kết hợp LLM weights

a. Lý do

Một bộ dữ liệu nhân tạo có thể chứa những thông tin riêng biệt mà bộ dữ liệu thực tế không có. Vậy nên tác giả muốn LLM có khả năng xử lý cả 2 loại thông tin này.

b. Giải pháp

Chúng ta có thể huấn luyện model trên 2 bộ dữ liệu cùng một lúc, tuy nhiên tác giả bảo rằng điều này sẽ khiến model khó hội tụ và dường như là quá sức.

Vậy thì giải pháp chính là kết hợp weights của 2 LLMs image.png

Fig 9: Kết hợp weights của 2 LLM

Sau khi thu được 2 LLMs ở bước pretrain, chúng ta sẽ kết hợp weights của 2 LLMs theo như công thức: image.png

Trong đó, θ là weights, 𝛽 là một hằng số để quyết định xem weights của LLM nào có ảnh hưởng hơn.

Phương pháp này đem đến điểm lợi: Mô hình ngôn ngữ lớn của chúng ta sẽ không bị ảnh hưởng bởi 2 loại dữ liệu trái ngược nhau (một là dữ liệu thực, một là dữ liệu nhân tạo).

E. Training giai đoạn 2: Visual instruction-following learning

Với mục tiêu là cải thiện khả năng làm theo hướng dẫn cho đa tác vụ, thay vì là tập trung vào 1 khía cạnh cụ thể, tác giả đã thu thập dữ liệu với các tác vụ khác nhau và tiến hành training giai đoạn 2.

image.png

Fig 10: Quy trình training giai đoạn 2

Một phần động lực để tác giả làm điều này đó là những open-source MLLMs :

  • BLIP-series chỉ có thể thực hiện tác vụ VQA, Captioning, Reasoning.
  • LLava-series thì có thêm OCR.

Những tác vụ mà SPHINX có thể làm được là:

  • VQA
  • Region-level referring expression comprehension/generation (REC/REG)
  • Multi-object detection and relation reasoning
  • Text-oriented chart/document VQA
  • Human pose estimation

image.png image.png

Fig 11: Khả năng Vision-Language của SPHINX

image.png

Fig 12: Mỗi một tác vụ sẽ được huấn luyện với sự hướng dẫn khác nhau, nhưng sẽ đồng bộ về format

F. Kết quả

image.png

Fig 13: So sánh hiệu suất trên 10 bộ benchmark. SPHINX có input size là 224x224, SPHINX-1k là 448x448, SPHINX-2k là 672x672

image.png

Fig 14: So sánh độ chính xác (Top-1 Accuracy@0.5) trên tác vụ referring expression comprehension.

G. Ứng dụng

1. Kết hợp với SAM

image.png

Fig 15: Ví dụ cho sự kết hợp giữa SPHINX và SAM cho tác vụ segment dựa trên ngôn ngữ. SPHINX sẽ giúp dự đoán ra bounding box, SAM sẽ xử lý phần segmentation

2. Kết hợp với Stable Diffusion

Phát hiện vật thể bằng SPHINX và segment bằng SAM, LaMa sẽ chịu trách nhiệm xóa vật thể đó. Cuối cùng, người dùng có thể đưa ra câu lệnh cho Stable Diffusion để tạo nội dung mới cho phần bị xóa.

image.png

Fig 16: Ví dụ cho sự kết hợp giữa SPHINX và Stable Diffusion cho tác vụ vẽ, chỉnh sửa hình ảnh dựa trên ngôn ngữ.

3. Finetune SPHINX cho bài toán phân loại hình ảnh

Cụ thể ở đây là bộ dữ liệu ImageNet-1K. Tác giả sẽ chuyển câu lệnh hướng dẫn thành “Classify the image” và sửa đổi format phản hồi là “This is a [CLASS]”.

Chỉ với 1 epoch, SPHINX đạt 70.8% độ chính xác mà không dùng bất kì kĩ thuật data augmentation.

Kết quả hội tụ này nhanh hơn rất nhiều so với phương pháp truyền thống: ResNet, ViT, vì chúng tốn gần 300 epochs và yêu cầu nhiều phương pháp data augmentation.

image.png image.png image.png

Fig 17: Khả năng hiểu sâu của SPHINX.

H. Thử trên web demo (checkpoint: SPHINX-v2-1k)

image.png

Fig 18: ảnh đầu vào

Câu hỏi 1: What’s in the image ?

SPHINX: The image shows a group of three men standing on a golf course, engaged in conversation and laughing together. They are standing near their golf carts, which are parked on the grass.

Câu hỏi 2: Detect all people shown in image and provide correspondence bounding boxes coordinate

SPHINX: There are three people[0.45,0.20,0.63,0.74;0.56,0.21,0.73,0.72;0.74,0.20,0.90,0.72] in the image.

image.png

Fig 19: ảnh cùng với bounding box

Câu hỏi 3: Detect the keypoints of the person in the region [0.56,0.21,0.73,0.72]

SPHINX: The detected keypoints are nose[0.65,0.26], left eye[0.66,0.25], right eye[0.64,0.25], left ear[0.68,0.26], right ear[0.63,0.25], left shoulder[0.70,0.32], right shoulder[0.61,0.30], left elbow[0.72,0.39], right elbow[0.58,0.35], left wrist[0.69,0.37], right wrist[0.59,0.35], left hip[0.67,0.46], right hip[0.61,0.46], left knee[0.66,0.57], right knee[0.60,0.57], left ankle[0.65,0.68], and right ankle[0.59,0.68].

image.png

Fig 20: ảnh cùng với detected keypoints

J. Kết luận

Mình tin rằng trong tương lai gần, chúng ta sẽ chứng kiến sự ra đời của các mô hình AI có khả năng xử lý đa dạng các tác vụ hơn, nhằm tiến gần hơn tới mục tiêu là con người nhân tạo. Và các kỹ thuật mà mình đã giới thiệu ở trên chỉ là một phần trong số nhiều phương pháp giúp chúng ta thực hiện điều này.

Cuối cùng, mình xin cảm ơn các bạn đã quan tâm và đọc đến dòng này, mình hi vọng bài viết này đã mang lại điều gì đó cho các bạn. Chúc mọi người thành công ^^.

H. Tham khảo

Liên hệ: nduc90313@gmail.com

🔗 Tìm hiểu thêm về Pixta Vietnam: http://bit.ly/3kdkzvW

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hướng dẫn làm bot Facebook messenger cho tài khoản cá nhân

Giới thiệu. Trong bài viết trước thì mình có hướng dẫn các bạn làm chatbot facebook messenger cho fanpage. Hôm nay mình sẽ hướng dẫn các bạn tạo chatbot cho một tài khoản facebook cá nhân. Chuẩn bị.

0 0 208

- vừa được xem lúc

Tìm hiểu cơ bản về LUIS trong Microsoft Cognitive Services

Trong bài trước mình đã có giới thiệu sơ lược về QnA Maker - một dịch vụ lưu trữ ngôn ngữ tự nhiên trên nền tảng đám mây. Tuy nhiên để có thể sử dụng chatbot linh hoạt và với xu hướng càng thân thiện với người dùng, thì hôm nay mình giới thiệu thêm về LUIS.

0 0 40

- vừa được xem lúc

[ChatterBot] Thư viện chatbot hay ho dành cho Python| phần 4

Hôm nay mình sẽ chia sẽ thêm về một số kiến thức liên quan về ChatterBot. Chắc đây sẽ là bài lý thuyết cuối, để từ đó mỗi bạn có thể tự build cho mình một con chatbot vui vui.

0 0 120

- vừa được xem lúc

[ChatterBot] Thư viện chatbot hay ho dành cho Python| phần 3

Trong bài trước mình đã trình bày về Training data cho chatbot và tiền xử lý dữ liệu. Trong phần này sẽ trình bày với các bạn về logic adapter.

0 0 62

- vừa được xem lúc

Xác định ý định câu hỏi trong hệ thống hỏi đáp

Mục tiêu bài viết. Phân tích câu hỏi là pha đầu tiên trong kiến trúc chung của một hệ thống hỏi đáp, có nhiệm vụ tìm ra các thông tin cần thiết làm đầu vào cho quá trình xử lý của các pha sau (trích c

0 0 94

- vừa được xem lúc

[RASA 3.0] Tuỳ chỉnh pipeline với BERT và RoBERTa

Giới thiệu về Rasa. Rasa là framework mã nguồn mở được phát triển bởi RASA Inc vào năm 2017, Rasa giúp cho việc phát triển các chatbot máy học một cách thuận tiện hơn, có thể giúp cho những người chưa

0 0 52