Visual Question Answering (VQA)
Hỏi đáp thị giác (VQA) là tác vụ trả lời các câu hỏi bằng ngôn ngữ tự nhiên về một hình ảnh. Bài viết trình bày cách model VQA hoạt động, các benchmark chính và cách chấm điểm.
Hỏi đáp trực quan (VQA) là tác vụ trả lời câu hỏi bằng ngôn ngữ tự nhiên về một hình ảnh, chẳng hạn như "Chiếc xe buýt màu gì?", "Có bao nhiêu người đang chờ?" hoặc "Bếp có đang bật không?" Hệ thống nhận đồng thời hình ảnh và câu hỏi rồi trả về câu trả lời ngắn, nên phải đọc câu hỏi, tìm các phần liên quan trong ảnh và kết hợp thông tin; vì vậy VQA là bài kiểm tra tiêu chuẩn cho AI đa phương thức. Stanislaw Antol cùng các đồng nghiệp tại Virginia Tech và Microsoft Research giới thiệu tác vụ này cùng benchmark quy mô lớn đầu tiên là dataset VQA tại ICCV 2015: khoảng 250.000 hình ảnh, phần lớn từ COCO, với 760.000 câu hỏi mở và 10 câu trả lời do con người đưa ra cho mỗi câu hỏi, tổng cộng khoảng 10 triệu câu trả lời.
Cách hoạt động của model VQA#
Model VQA mã hóa ảnh bằng mạng nơ-ron tích chập (CNN) hoặc vision transformer (ViT), mã hóa câu hỏi bằng model ngôn ngữ rồi hợp nhất hai phần. Các model đời đầu hợp nhất đặc trưng ảnh toàn cục với vector câu hỏi từ LSTM, rồi xem việc trả lời là bài toán phân loại trên vài nghìn câu trả lời phổ biến nhất. Sau đó, cơ chế attention cho phép câu hỏi chọn vị trí cần tập trung: model bottom-up và top-down của Peter Anderson cùng cộng sự, đoạt giải VQA Challenge năm 2017, áp dụng attention trên các vùng do model phát hiện đối tượng đề xuất, nhờ đó câu hỏi “Xe buýt có màu gì?” có thể tập trung vào box xe buýt. Các model vision-language (VLM) hiện nay tạo câu trả lời tự do bằng model ngôn ngữ sau khi tinh chỉnh theo chỉ dẫn thị giác trên dữ liệu gồm ảnh, câu hỏi và câu trả lời.
Benchmark và vấn đề thiên lệch ngôn ngữ#
Các model VQA đời đầu đạt điểm cao một phần nhờ bỏ qua hình ảnh. Có thể đoán câu trả lời cho nhiều câu hỏi chỉ từ cách diễn đạt; chẳng hạn, câu hỏi bắt đầu bằng "Có... không?" thường được trả lời là "có", còn câu hỏi "Môn thể thao nào là..." thường có đáp án "tennis". VQA v2 do Yash Goyal cùng các đồng nghiệp phát hành tại CVPR 2017 đã khắc phục thiên lệch ngôn ngữ này bằng cách ghép mỗi câu hỏi với hai hình ảnh tương tự nhưng có câu trả lời khác nhau, buộc model phải quan sát hình ảnh để đạt điểm cao. Các dataset ra đời sau nhắm đến từng kỹ năng:
- VizWiz: Hơn 31.000 câu hỏi do người mù đặt ra về ảnh họ chụp bằng điện thoại; nhiều ảnh bị mờ hoặc bố cục kém.
- TextVQA: Các câu hỏi cần đọc văn bản trong cảnh, chẳng hạn số trên áo thi đấu hoặc tên trên mặt tiền cửa hàng.
- GQA: Các câu hỏi mang tính tổ hợp được tạo từ đồ thị cảnh, chẳng hạn "Chiếc cốc bên trái chiếc đĩa có làm bằng thủy tinh không?"
- OK-VQA: Các câu hỏi cần kiến thức bên ngoài, chẳng hạn món ăn có nguồn gốc từ quốc gia nào.
- VQA-RAD: 3,515 câu hỏi do bác sĩ lâm sàng viết về 315 ảnh X-quang, được xây dựng tại Thư viện Y khoa Quốc gia Hoa Kỳ.
Vì mọi người có thể diễn đạt cùng một câu trả lời đúng theo nhiều cách khác nhau, benchmark VQA chấm điểm câu trả lời dựa trên số người trong 10 người gán nhãn đưa ra câu trả lời đó; từ ba câu trả lời trùng khớp trở lên được tính là hoàn toàn chính xác, rồi lấy trung bình trên mọi tập con gồm chín người gán nhãn:
# Ten crowd answers to "What color is the bus?", as collected for every VQA question
human_answers = ["red"] * 7 + ["red and white"] * 2 + ["orange"]
def vqa_accuracy(prediction, answers):
"""Average min(matches / 3, 1) over the ten leave-one-out subsets of nine answers."""
scores = []
for i in range(len(answers)):
others = answers[:i] + answers[i + 1 :]
scores.append(min(others.count(prediction) / 3, 1))
return sum(scores) / len(scores)
for prediction in ["red", "red and white", "orange", "blue"]:
print(f"{prediction}: {vqa_accuracy(prediction, human_answers):.2f}")Cách này in ra 1.00 cho "red", 0.60 cho "red and white", 0.30 cho "orange" và 0.00 cho "blue": câu trả lời chỉ có một người gán nhãn đưa ra vẫn nhận được điểm một phần, còn câu trả lời không ai đưa ra thì không được điểm. Kết quả được báo cáo riêng cho các loại câu trả lời yes/no, số lượng và loại khác; câu hỏi về số lượng luôn đạt điểm thấp nhất vì tác vụ đếm đòi hỏi phải tìm chính xác một lần mọi đối tượng. Bộ phát hiện trả lời trực tiếp các câu hỏi đếm: YOLO26 trả về một bounding box cho mỗi đối tượng, nên số lượng bounding box "person" trong kết quả dự đoán trả lời câu hỏi "How many people are in the picture?" với bất kỳ class nào trong 80 class của COCO. Với các class nằm ngoài danh sách đó, mô hình thị giác-ngôn ngữ cũng có thể trả về bounding box; Bảng xếp hạng VLM đo lường độ chính xác khi chúng phát hiện đối tượng trong dataset thực tế.
VQA và các tác vụ liên quan#
Mô tả ảnh mô tả toàn bộ hình ảnh mà không cần câu hỏi, còn VQA trả lời một câu hỏi cụ thể. Định vị trực quan trả về vị trí của đối tượng được cụm từ nhắc đến, thường dưới dạng bounding box, còn VQA trả lời câu hỏi về đối tượng đó. Nhận dạng ký tự quang học (OCR) cung cấp văn bản cần thiết cho các câu hỏi kiểu TextVQA, còn suy luận trực quan là quá trình suy luận nhiều bước mà các câu hỏi mang tính tổ hợp như trong GQA đòi hỏi. Hỏi đáp chỉ dùng văn bản dựa trên một đoạn văn thay vì pixel.
Ứng dụng#
Công nghệ hỗ trợ là ứng dụng rõ ràng nhất. Năm 2023, Be My Eyes bổ sung Be My AI, xây dựng trên GPT-4 của OpenAI, để người dùng khiếm thị và thị lực kém có thể chụp nhãn, màn hình hoặc đường phố rồi đặt câu hỏi. Các nhóm bán lẻ và sản xuất hỏi VLM về ảnh kệ hàng hoặc ảnh kiểm tra thay vì huấn luyện một bộ phân loại cho từng câu hỏi. Trong y tế, nghiên cứu VQA y tế hướng đến các câu hỏi như “Có bị gãy xương không?” về ảnh X-quang và CT, một dạng phân tích ảnh y tế được VQA-RAD đánh giá bằng các câu hỏi bác sĩ lâm sàng viết khi xem ảnh.










