Tìm kiếm hình ảnh ngữ nghĩa với OpenAI CLIP và Meta FAISS
Giới thiệu
Hướng dẫn này hướng dẫn bạn cách xây dựng công cụ tìm kiếm hình ảnh ngữ nghĩa bằng cách sử dụng OpenAI CLIP , Meta FAISS và Flask . Bằng cách kết hợp các nhúng ngôn ngữ trực quan mạnh mẽ của CLIP với tìm kiếm lân cận gần nhất hiệu quả của FAISS, bạn có thể tạo giao diện web đầy đủ chức năng, nơi bạn có thể truy xuất hình ảnh có liên quan bằng các truy vấn ngôn ngữ tự nhiên.
Đồng hồ: Tìm kiếm tương tự hoạt động như thế nào | Tìm kiếm trực quan sử dụng OpenAI CLIP, META FAISS và Ultralytics Gói 🎉
Tìm kiếm hình ảnh ngữ nghĩa Xem trước trực quan
Nó hoạt động như thế nào
- CLIP sử dụng bộ mã hóa thị giác (ví dụ: ResNet hoặc ViT) cho hình ảnh và bộ mã hóa văn bản (dựa trên Transformer) cho ngôn ngữ để chiếu cả hai vào cùng một không gian nhúng đa phương thức. Điều này cho phép so sánh trực tiếp giữa văn bản và hình ảnh bằng cách sử dụng độ tương đồng cosin .
- FAISS (Tìm kiếm sự tương đồng bằng AI của Facebook) xây dựng chỉ mục nhúng hình ảnh và cho phép truy xuất nhanh chóng, có khả năng mở rộng các vectơ gần nhất với truy vấn nhất định.
- Flask cung cấp giao diện web đơn giản để gửi truy vấn ngôn ngữ tự nhiên và hiển thị hình ảnh phù hợp về mặt ngữ nghĩa từ chỉ mục.
Kiến trúc này hỗ trợ tìm kiếm không cần dữ liệu, nghĩa là bạn không cần nhãn hoặc danh mục, chỉ cần dữ liệu hình ảnh và lời nhắc tốt.
Tìm kiếm hình ảnh ngữ nghĩa bằng cách sử dụng Ultralytics Python bưu kiện
Cảnh báo đường dẫn hình ảnh
Nếu bạn sử dụng hình ảnh của riêng mình, hãy đảm bảo cung cấp đường dẫn tuyệt đối đến thư mục hình ảnh. Nếu không, hình ảnh có thể không xuất hiện trên trang web do giới hạn phục vụ tệp của Flask.
from ultralytics import solutions
app = solutions.SearchApp(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cpu" # configure the device for processing i.e "cpu" or "cuda"
)
app.run(debug=False) # You can also use `debug=True` argument for testing
VisualAISearch
lớp học
Lớp này thực hiện tất cả các hoạt động ở phía sau:
- Tải hoặc xây dựng chỉ mục FAISS từ hình ảnh cục bộ.
- Trích xuất hình ảnh và văn bản nhúng bằng CLIP.
- Thực hiện tìm kiếm điểm tương đồng bằng cách sử dụng độ tương đồng cosin.
Tìm kiếm hình ảnh tương tự
Cảnh báo đường dẫn hình ảnh
Nếu bạn sử dụng hình ảnh của riêng mình, hãy đảm bảo cung cấp đường dẫn tuyệt đối đến thư mục hình ảnh. Nếu không, hình ảnh có thể không xuất hiện trên trang web do giới hạn phục vụ tệp của Flask.
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cuda" # configure the device for processing i.e "cpu" or "cuda"
)
results = searcher("a dog sitting on a bench")
# Ranked Results:
# - 000000546829.jpg | Similarity: 0.3269
# - 000000549220.jpg | Similarity: 0.2899
# - 000000517069.jpg | Similarity: 0.2761
# - 000000029393.jpg | Similarity: 0.2742
# - 000000534270.jpg | Similarity: 0.2680
VisualAISearch
Các tham số
Bảng dưới đây phác thảo các thông số có sẵn cho VisualAISearch
:
Lý lẽ | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
data |
str |
images |
Đường dẫn đến thư mục hình ảnh được sử dụng để tìm kiếm sự tương đồng. |
Lý lẽ | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
device |
str |
None |
Chỉ định thiết bị để suy luận (ví dụ: cpu , cuda:0 hoặc 0 ). Cho phép người dùng lựa chọn giữa CPU , một cụ thể GPU hoặc các thiết bị tính toán khác để thực hiện mô hình. |
Ưu điểm của Tìm kiếm hình ảnh ngữ nghĩa với CLIP và FAISS
Việc xây dựng hệ thống tìm kiếm hình ảnh ngữ nghĩa của riêng bạn bằng CLIP và FAISS mang lại một số lợi thế hấp dẫn:
-
Khả năng Zero-Shot : Bạn không cần phải đào tạo mô hình trên tập dữ liệu cụ thể của mình. Khả năng học zero-shot của CLIP cho phép bạn thực hiện truy vấn tìm kiếm trên bất kỳ tập dữ liệu hình ảnh nào bằng ngôn ngữ tự nhiên dạng tự do, giúp tiết kiệm cả thời gian và tài nguyên.
-
Hiểu biết giống con người : Không giống như các công cụ tìm kiếm dựa trên từ khóa, CLIP hiểu ngữ cảnh ngữ nghĩa. Nó có thể lấy hình ảnh dựa trên các truy vấn trừu tượng, cảm xúc hoặc quan hệ như "một đứa trẻ hạnh phúc trong thiên nhiên" hoặc "đường chân trời thành phố tương lai vào ban đêm".
-
Không cần nhãn hoặc siêu dữ liệu : Hệ thống tìm kiếm hình ảnh truyền thống yêu cầu dữ liệu được gắn nhãn cẩn thận. Phương pháp này chỉ cần hình ảnh thô. CLIP tạo nhúng mà không cần bất kỳ chú thích thủ công nào.
-
Tìm kiếm linh hoạt và có thể mở rộng: FAISS cho phép tìm kiếm lân cận gần nhất nhanh chóng ngay cả với các tập dữ liệu quy mô lớn. Nó được tối ưu hóa về tốc độ và bộ nhớ, cho phép phản hồi theo thời gian thực ngay cả với hàng nghìn (hoặc hàng triệu) nhúng.
-
Ứng dụng liên miền : Cho dù bạn đang xây dựng kho lưu trữ ảnh cá nhân, công cụ truyền cảm hứng sáng tạo, công cụ tìm kiếm sản phẩm hay thậm chí là hệ thống đề xuất nghệ thuật, thì bộ công cụ này đều có thể thích ứng với nhiều miền khác nhau với ít điều chỉnh.
CÂU HỎI THƯỜNG GẶP
CLIP hiểu cả hình ảnh và văn bản như thế nào?
CLIP (Contrastive Language Image Pretraining) là một mô hình do OpenAI phát triển, mô hình này học cách kết nối thông tin trực quan và ngôn ngữ. Nó được đào tạo trên một tập dữ liệu hình ảnh khổng lồ được ghép nối với chú thích ngôn ngữ tự nhiên. Quá trình đào tạo này cho phép nó ánh xạ cả hình ảnh và văn bản vào một không gian nhúng chung, do đó bạn có thể so sánh chúng trực tiếp bằng cách sử dụng độ tương đồng của vectơ.
Tại sao CLIP được coi là mạnh mẽ đối với các tác vụ AI?
Điều làm cho CLIP nổi bật là khả năng khái quát hóa. Thay vì chỉ được đào tạo cho các nhãn hoặc nhiệm vụ cụ thể, nó học từ chính ngôn ngữ tự nhiên. Điều này cho phép nó xử lý các truy vấn linh hoạt như "một người đàn ông đang lái mô tô nước" hoặc "một cảnh trong mơ siêu thực", khiến nó hữu ích cho mọi thứ từ phân loại đến tìm kiếm ngữ nghĩa sáng tạo, mà không cần đào tạo lại.
FAISS thực sự làm gì trong dự án này (Tìm kiếm ngữ nghĩa)?
FAISS (Facebook AI Similarity Search) là một bộ công cụ giúp bạn tìm kiếm qua các vectơ có chiều cao rất hiệu quả. Sau khi CLIP biến hình ảnh của bạn thành nhúng, FAISS giúp bạn nhanh chóng và dễ dàng tìm thấy các kết quả khớp nhất với truy vấn văn bản, hoàn hảo cho việc truy xuất hình ảnh theo thời gian thực.
Tại sao nên sử dụng gói Ultralytics Python nếu CLIP và FAISS đến từ OpenAI và Meta?
Trong khi CLIP và FAISS được phát triển lần lượt bởi OpenAI và Meta, gói Python Ultralytics đơn giản hóa việc tích hợp chúng vào một quy trình tìm kiếm hình ảnh ngữ nghĩa hoàn chỉnh trong quy trình làm việc 2 dòng chỉ hoạt động:
Tìm kiếm hình ảnh tương tự
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cuda" # configure the device for processing i.e "cpu" or "cuda"
)
results = searcher("a dog sitting on a bench")
# Ranked Results:
# - 000000546829.jpg | Similarity: 0.3269
# - 000000549220.jpg | Similarity: 0.2899
# - 000000517069.jpg | Similarity: 0.2761
# - 000000029393.jpg | Similarity: 0.2742
# - 000000534270.jpg | Similarity: 0.2680
Việc triển khai cấp cao này xử lý:
- Tạo hình ảnh và nhúng văn bản dựa trên CLIP.
- Tạo và quản lý chỉ số FAISS.
- Tìm kiếm ngữ nghĩa hiệu quả với độ tương đồng cosin.
- Tải và hiển thị hình ảnh dựa trên thư mục.
Tôi có thể tùy chỉnh giao diện của ứng dụng này không?
Có, bạn hoàn toàn có thể. Thiết lập hiện tại sử dụng Flask với giao diện HTML cơ bản, nhưng bạn có thể tự do hoán đổi HTML của riêng mình hoặc thậm chí xây dựng thứ gì đó năng động hơn với React, Vue hoặc một khuôn khổ giao diện khác. Flask có thể dễ dàng đóng vai trò là API phụ trợ cho giao diện tùy chỉnh của bạn.
Có thể tìm kiếm qua video thay vì hình ảnh tĩnh không?
Không trực tiếp—nhưng có một giải pháp đơn giản. Bạn có thể trích xuất từng khung hình từ video của mình (ví dụ: một khung hình mỗi giây), xử lý chúng như hình ảnh độc lập và đưa chúng vào hệ thống. Theo cách này, công cụ tìm kiếm có thể lập chỉ mục ngữ nghĩa các khoảnh khắc trực quan từ video của bạn.