OpenAI CLIP ve Meta FAISS ile Anlamsal Görsel Arama
Giriş
OpenAI CLIP, Meta FAISS ve Flask kullanarak bir anlamsal görsel arama motoru oluşturma sürecinde sana rehberlik edeceğiz. CLIP'in güçlü görsel-dil gömmelerini FAISS'in verimli en yakın komşu aramasıyla birleştirerek, doğal dil sorguları kullanarak ilgili görselleri alabileceğin tam işlevsel bir web arayüzü oluşturabilirsin.
Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP, META FAISS and Ultralytics Package 🎉
Anlamsal Görsel Arama Görsel Önizlemesi

Nasıl Çalışır
- CLIP, görseller için bir görsel kodlayıcı (örneğin ResNet veya ViT) ve dil için bir metin kodlayıcı (Transformer tabanlı) kullanarak her ikisini de aynı çok modlu gömme uzayına yansıtır. Bu, metin ve görseller arasında kosinüs benzerliği kullanarak doğrudan karşılaştırma yapılmasına olanak tanır.
- FAISS (Facebook AI Similarity Search), görsel gömmelerinin bir dizinini oluşturur ve belirli bir sorguya en yakın vektörlerin hızlı ve ölçeklenebilir şekilde alınmasını sağlar.
- Flask, doğal dil sorguları göndermek ve dizinden anlamsal olarak eşleşen görselleri görüntülemek için basit bir web arayüzü sağlar.
Bu mimari, etiketlere veya kategorilere ihtiyaç duymadan, yalnızca görsel verisi ve iyi bir istem ile arama yapabileceğin sıfır-atış (zero-shot) aramasını destekler.
Görsel Yolu Uyarısı
Kendi görsellerini kullanıyorsan, görsel dizinine mutlak yol sağladığından emin ol. Aksi takdirde, Flask'ın dosya sunma sınırlamaları nedeniyle görseller web sayfasında görünmeyebilir.
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, e.g., "cpu" or "cuda"
)
app.run(debug=False) # You can also use `debug=True` argument for testingVisualAISearch sınıfı
Bu sınıf tüm arka uç işlemlerini gerçekleştirir:
- Yerel görsellerden bir FAISS dizini yükler veya oluşturur.
- CLIP kullanarak görsel ve metin gömmelerini çıkarır.
- Kosinüs benzerliğini kullanarak benzerlik araması yapar.
Görsel Yolu Uyarısı
Kendi görsellerini kullanıyorsan, görsel dizinine mutlak yol sağladığından emin ol. Aksi takdirde, Flask'ın dosya sunma sınırlamaları nedeniyle görseller web sayfasında görünmeyebilir.
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, e.g., "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.2680VisualAISearch Parametreleri
Aşağıdaki tablo VisualAISearch için mevcut parametreleri özetler:
| Argüman | Tür | Varsayılan | Açıklama |
|---|---|---|---|
data | str | 'images' | Benzerlik araması için kullanılan görüntü dizinine giden yol. |
| Argüman | Tür | Varsayılan | Açıklama |
|---|---|---|---|
device | str | None | Çıkarım için cihazı belirtir (örneğin cpu, cuda:0 veya 0). Kullanıcıların model yürütme için CPU, belirli bir GPU veya diğer bilgi işlem cihazları arasında seçim yapmasına olanak tanır. |
CLIP ve FAISS ile Anlamsal Görsel Aramanın Avantajları
CLIP ve FAISS ile kendi anlamsal görsel arama sistemini oluşturmak çeşitli etkileyici avantajlar sağlar:
-
Sıfır-Atış (Zero-Shot) Yetenekleri: Modeli belirli veri setin üzerinde eğitmen gerekmez. CLIP'in sıfır-atış öğrenme yeteneği, serbest biçimli doğal dil kullanarak herhangi bir görsel veri setinde arama sorguları yapmanı sağlar ve hem zamandan hem de kaynaklardan tasarruf ettirir.
-
İnsan Benzeri Anlama: Anahtar kelime tabanlı arama motorlarının aksine, CLIP anlamsal bağlamı anlar. "Doğada mutlu bir çocuk" veya "gece fütüristik bir şehir silüeti" gibi soyut, duygusal veya ilişkisel sorgulara dayalı görseller getirebilir.

-
Etiket veya Meta Veriye İhtiyaç Yoktur: Geleneksel görsel arama sistemleri dikkatlice etiketlenmiş veriler gerektirir. Bu yaklaşım sadece ham görsellere ihtiyaç duyar. CLIP, manuel açıklamaya ihtiyaç duymadan gömmeler oluşturur.
-
Esnek ve Ölçeklenebilir Arama: FAISS, büyük ölçekli veri setlerinde bile hızlı en yakın komşu araması sağlar. Hız ve bellek için optimize edilmiştir; binlerce (veya milyonlarca) gömme ile bile gerçek zamanlı yanıt alınmasına olanak tanır.

-
Alanlar Arası Uygulamalar: Kişisel bir fotoğraf arşivi, yaratıcı bir ilham aracı, bir ürün arama motoru veya hatta bir sanat öneri sistemi oluşturuyor olsan da, bu yığın minimum değişiklikle farklı alanlara uyum sağlar.
SSS
CLIP görselleri ve metni nasıl anlar?
CLIP (Contrastive Language Image Pretraining), OpenAI tarafından geliştirilen, görsel ve dilsel bilgiyi birbirine bağlamayı öğrenen bir modeldir. Doğal dil açıklamalarıyla eşleştirilmiş devasa bir görsel veri seti üzerinde eğitilmiştir. Bu eğitim, hem görselleri hem de metni ortak bir gömme uzayına eşlemesini sağlar, böylece bunları vektör benzerliği kullanarak doğrudan karşılaştırabilirsin.
CLIP neden AI görevleri için bu kadar güçlü kabul edilir?
CLIP'i öne çıkaran şey, genelleme yapabilme yeteneğidir. Sadece belirli etiketler veya görevler için eğitilmek yerine, doğrudan doğal dilin kendisinden öğrenir. Bu, "jet ski süren bir adam" veya "sürreal bir düş manzarası" gibi esnek sorguları işlemesine olanak tanır ve yeniden eğitilmesine gerek kalmadan sınıflandırmadan yaratıcı anlamsal aramaya kadar her şey için kullanışlı hale getirir.
FAISS bu projede (Anlamsal Arama) tam olarak ne yapar?
FAISS (Facebook AI Similarity Search), yüksek boyutlu vektörler arasında çok verimli bir şekilde arama yapmana yardımcı olan bir araç setidir. CLIP görsellerini gömmelere dönüştürdüğünde, FAISS bir metin sorgusuna en yakın eşleşmeleri bulmayı hızlı ve kolay hale getirir, bu da gerçek zamanlı görsel getirme için mükemmeldir.
CLIP ve FAISS, OpenAI ve Meta'dan geliyorsa neden Ultralytics Python paketi kullanmalıyım?
CLIP ve FAISS sırasıyla OpenAI ve Meta tarafından geliştirilmiş olsa da, Ultralytics Python paketi, bunların eksiksiz bir anlamsal görsel arama hattına entegrasyonunu, doğrudan çalışan 2 satırlık bir iş akışıyla basitleştirir:
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, e.g., "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.2680Bu üst düzey uygulama şunları yönetir:
- CLIP tabanlı görsel ve metin gömme üretimi.
- FAISS dizini oluşturma ve yönetimi.
- Kosinüs benzerliği ile verimli anlamsal arama.
- Dizin tabanlı görsel yükleme ve görselleştirme.
Bu uygulamanın ön yüzünü özelleştirebilir miyim?
Evet. Mevcut kurulum, temel bir HTML ön yüzü ile Flask kullanır, ancak bunu kendi HTML'in ile değiştirebilir veya React, Vue ya da başka bir ön yüz çerçevesiyle daha dinamik bir arayüz oluşturabilirsin. Flask, özel arayüzün için arka uç API'si olarak hizmet verebilir.
Sabit görseller yerine videolar üzerinde arama yapmak mümkün mü?
Doğrudan değil. Basit bir geçici çözüm, videolarından tek tek kareleri çıkarmak (örneğin her saniyede bir kare), bunları bağımsız görseller olarak ele almak ve sisteme beslemektir. Bu şekilde, arama motoru videolarındaki görsel anları anlamsal olarak dizinleyebilir.