Ultralytics YOLO27:

OpenAI CLIP ile Semantik Görüntü Arama Nasıl Oluşturulur#

Bu kılavuz, OpenAI CLIP ve Flask kullanarak bir semantik görüntü arama motoru oluşturma sürecinde sana yol gösterir. CLIP'in görsel-dil gömme vektörlerini, NumPy tarafından desteklenen hızlı kosinüs benzerliği aramasıyla birleştirerek, etiket veya kategori gerektirmeden doğal dil sorgularından ilgili görüntüleri getiren bir web arayüzü oluşturabilirsin.



Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP and the Ultralytics Package 🎉

Semantik arama sonuçlarına genel bakışı gösteren Flask web sayfası

Ultralytics Python paketi, bu işlem hattının tamamını iki sınıfın arkasında sunar; böylece çalışan bir arama uygulamasını başlatabilir veya sorguları birkaç satır kodla programatik olarak çalıştırabilirsin. Bu kılavuzda semantik aramanın neden yararlı olduğu, nasıl çalıştığı, web uygulamasının çalıştırılması, programatik arama ve parametrelerin yapılandırılması ele alınır.

Neden Semantik Görüntü Araması Kullanılmalı?#

CLIP ile kendi semantik görüntü arama sistemini oluşturmak birçok önemli avantaj sağlar:

  • Sıfır atış yetenekleri: Veri kümen üzerinde eğitim yapman gerekmez. CLIP'in sıfır atışlı öğrenme özelliği, serbest biçimli doğal dille herhangi bir görüntü koleksiyonunda sorgulama yapmanı sağlayarak zamandan ve kaynaklardan tasarruf ettirir.
  • İnsan benzeri anlayış: Anahtar kelime aramasının aksine CLIP, semantik bağlamı anlar ve "doğada mutlu bir çocuk" veya "gece geleceğin şehrinin silüeti" gibi soyut, duygusal ya da ilişkisel sorgulardan görüntüler getirir.
  • Etiket veya meta veri yok: Bu yaklaşım yalnızca ham görüntülere ihtiyaç duyar. CLIP, manuel açıklama eklemeden gömme vektörleri oluşturur.
  • Hafif ve kesin arama: NumPy'de gerçekleştirilen tek bir normalize matris çarpımı, her görüntüyü kosinüs benzerliğine göre sıralar; böylece binlerce gömme vektörü arasında gerçek zamanlı yanıtla kesin sonuçlar elde edilir ve kurulup yönetilecek ek bir arama bağımlılığı gerekmez.
  • Alanlar arası uygulamalar: İster kişisel bir fotoğraf arşivi, ister yaratıcı ilham aracı, ürün arama motoru veya sanat öneri sistemi oluşturuyor ol, aynı teknoloji yığını minimum ayarlamayla uyarlanabilir.

Semantik Görüntü Araması Nasıl Çalışır?#

İşlem hattı, görüntüleri ve metni sıralanmış sonuçlara dönüştürmenin bir aşamasını her biri üstlenen üç bileşeni birleştirir:

  • CLIP, görüntüler için bir görsel kodlayıcıyı (ör. ResNet veya ViT), dil içinse metin kodlayıcıyı (Transformer tabanlı) kullanarak her ikisini aynı çok modlu gömme uzayına yansıtır. Bu, kosinüs benzerliği kullanarak metin ve görüntülerin doğrudan karşılaştırılmasını sağlar.
  • NumPy, görüntü gömme vektörlerini tek bir dizi olarak saklar ve bunları tek bir matris çarpımıyla sorgu gömme vektörüne göre sıralar; ek bir indeksleme bağımlılığı olmadan kosinüs benzerliğine göre en yakın vektörleri döndürür.
  • Flask, doğal dil sorguları göndermek ve dizindeki semantik olarak eşleşen görüntüleri görüntülemek için basit bir web arayüzü sağlar.

OpenAI Clip görüntü getirme iş akışı

Görüntüler ve metin aynı vektör uzayına yerleştiği için getirme işlemi sıfır atışlıdır: etikete veya kategoriye değil, yalnızca görüntü verilerine ve iyi bir isteme ihtiyacın vardır.

Semantik Arama Web Uygulamasını Çalıştırma#

SearchApp sınıfı, Flask arayüzünün tamamını başlatır. İlk çalıştırmada örnek bir görüntü kümesi indirir, gömme indeksi oluşturur ve sorgu yazıp sıralanmış sonuçları görüntüleyebileceğin bir sayfa sunar.

Görüntü Yolu Uyarısı

Kendi görüntülerini kullanıyorsan görüntü dizininin mutlak yolunu belirttiğinden emin ol. Aksi takdirde Flask'ın dosya sunma sınırlamaları nedeniyle görüntüler web sayfasında görünmeyebilir.

from ultralytics import solutions

app = solutions.SearchApp(
    data="images",  # replace with a path to build the 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 testing

Görüntülerde Programatik Arama#

VisualAISearch sınıfı, web katmanı olmadan tüm arka uç işlemlerini gerçekleştirir:

  • Yerel görüntülerden bir gömme indeksi yükler veya oluşturur.
  • CLIP kullanarak görüntü ve metin gömme vektörlerini çıkarır.
  • Kosinüs benzerliğini kullanarak benzerlik araması gerçekleştirir.

Benzerliğe göre sıralanmış eşleşen görüntü dosya adlarının listesini almak için arama sınıfını doğal dil sorgusuyla çağır:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    data="images",  # replace with a path to build the search engine with your own images
    device="cpu",  # 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.2680

VisualAISearch Parametrelerini Yapılandırma#

Aşağıdaki tabloda VisualAISearch için kullanılabilir parametreler açıklanır:

Bağımsız değişkenTürVarsayılanAçıklama
datastr'images'İndekslenecek ve aranacak görüntü dizininin yolu.
devicestr'cpu'CLIP çıkarımı için kullanılan cihaz (ör. cpu, cuda, 0).
Verilerini bulutta yönet

Yerel dosyaları yönetmeden üretim ölçeğinde görüntü koleksiyonlarında arama yapmak için, görüntülerini CLIP ile indekslemeden önce Ultralytics Platform üzerinde düzenleyebilir ve sürümlendirebilirsin.

Sonuç#

CLIP ve Ultralytics Python paketiyle, ister Flask web uygulaması ister programatik arama arka ucu olarak yalnızca birkaç satırda sıfır atışlı bir semantik görüntü arama motoru kurabilirsin. Buradan sonra, indekslemek üzere data öğesini kendi görüntü dizinine yönlendir ve bilgisayarlı görü iş akışlarının üzerine inşa etmek için diğer Ultralytics Çözümlerini keşfet.

SSS#

  • CLIP (Karşılaştırmalı Dil-Görüntü Ön Eğitimi), görsel ve dilsel bilgileri ilişkilendirmeyi öğrenen ve OpenAI tarafından geliştirilen bir modeldir. Doğal dil açıklamalarıyla eşleştirilmiş görüntülerden oluşan büyük bir veri kümesiyle eğitilmiştir. Bu eğitim, hem görüntüleri hem de metni ortak bir gömme uzayına eşlemesini sağlar; böylece bunları vektör benzerliğini kullanarak doğrudan karşılaştırabilirsin.

  • CLIP'i öne çıkaran özellik genelleme yeteneğidir. Yalnızca belirli etiketler veya görevler için eğitilmek yerine, doğrudan doğal dilden öğrenir. Bu sayede "jet ski kullanan bir adam" veya "sürreal bir düş manzarası" gibi esnek sorguları yeniden eğitim gerektirmeden işleyebilir; sınıflandırmadan yaratıcı semantik aramaya kadar birçok alanda kullanılabilir.

  • CLIP görüntülerini gömme vektörlerine dönüştürdükten sonra Ultralytics paketi bunları L2 ile normalize eder ve tek bir NumPy dizisinde saklar. Bir sorgu, sorgu gömme vektörü ile her görüntü gömme vektörü arasındaki kosinüs benzerliğini hesaplayan tek bir matris çarpımıyla sıralanır ve ardından puanlar sıralanır. Bu kaba kuvvet araması tipik görüntü koleksiyonlarında kesin ve hızlıdır; kurulup yönetilecek ek bir vektör veritabanı bağımlılığı yoktur.

  • CLIP, OpenAI tarafından geliştirilmiş olsa da Ultralytics Python paketi, gömme vektörü oluşturma, indeksleme ve kosinüs benzerliği aramasını birkaç satırda çalışan eksiksiz bir semantik görüntü arama işlem hattında bir araya getirir:

    from ultralytics import solutions
    
    searcher = solutions.VisualAISearch(
        data="images",  # replace with a path to build the search engine with your own images
        device="cpu",  # configure the device for processing, e.g., "cpu" or "cuda"
    )
    
    results = searcher("a dog sitting on a bench")

    Bu üst düzey uygulama şunları yönetir:

    • CLIP tabanlı görüntü ve metin gömme vektörü oluşturma.
    • Gömme indeksi oluşturma ve yönetimi.
    • Kosinüs benzerliğiyle verimli semantik arama.
    • Dizin tabanlı görüntü yükleme ve görselleştirme.
  • Evet. Mevcut kurulum, temel bir HTML ön yüzüyle Flask kullanır; ancak bunu kendi HTML'inle değiştirebilir veya React, Vue ya da başka bir ön yüz çatısıyla daha dinamik bir kullanıcı arayüzü oluşturabilirsin. Flask, özel arayüzün için arka uç API'si olarak hizmet verebilir.

  • Doğrudan mümkün değil. Basit bir çözüm olarak videolarından tek tek kareleri (ör. her saniyede bir kare) çıkarabilir, bunları bağımsız görüntüler olarak ele alabilir ve sisteme aktarabilirsin. Böylece arama motoru videolarındaki görsel anları semantik olarak indeksleyebilir.

Yorumlar