Vahşi yaşamın davranışlarını inceleyen, uzak bir ormandaki kameralardan alınan yüzlerce saatlik video görüntüsünü analiz eden bir veri bilimcisini hayal edin. Veya yeni stratejiler geliştirmek için tüm sezonun maçlarından önemli oyunları belirlemesi gereken bir spor koçu. Alternatif olarak, bir belgeselin parçalarını bir araya getirmek için devasa bir video galerisinde belirli sahneleri arayan bir film yapımcısını düşünün.
Geleneksel olarak bu uzmanların tümü, saatlerce süren çekimleri manuel olarak sıralamanın zaman alıcı, hataya açık ve ezici zorluğuyla karşı karşıyadır.
Ancak yapay zeka ve makine öğrenimindeki ilerlemeler, video arama uygulamalarını önemli ölçüde dönüştürdü. Bu teknolojiler artık geniş video veri kümeleri içindeki belirli nesneleri ve olayları inanılmaz bir gelişmişlikle aramamıza olanak sağlıyor. Veri bilimcileri ve araştırmacılar, ilgili video bölümlerinin yerini olağanüstü bir hassasiyet ve verimlilikle belirleyebilir.
Amaç, gelişmiş arama yetenekleri sunarak araştırma sürecini basitleştirmek, kullanıcıların son derece büyük video veri kümelerinden belirli içerik veya özelliklere sahip görüntüleri kolayca bulmasını sağlamaktı.
OpenOrigins, gelişmiş arama algoritmaları ve kullanıcı dostu bir arayüz kullanarak platformu bu topluluk için önemli bir araç haline getirmeyi amaçladı.
OpenOrigins, bu video arama teklifini oluştururken iki teknolojik yaklaşımı değerlendirdi: görüntü yerleştirmeleri ve çok modlu yerleştirmeleri kullanarak çerçeve arama. Her seçeneğe bir göz atalım.
"Geyikleri doğal ortamlarında gösteren kaç dakikalık video içeriği var?" gibi karmaşık soruları yanıtlamak için video üzerinde anlamsal aramayı etkinleştirme. temel anahtar kelime meta veri eşleşmesinin ötesinde videoların içeriğini anlayabilen ve yorumlayabilen gelişmiş arama yetenekleri gerektirir. Bunu başarmanın anahtarı? Çok modlu gömmeler.
Çok modlu yerleştirme modelleri ve çok modlu büyük dil modelleri (LLM'ler) benzer çözümler olarak görülebilir. CLIP ve Google'ın çok modlu yerleştirmeleri gibi modeller metin, resim ve video gibi veri türleri için yerleştirmeler oluşturarak anlamsal anlamı yakalayan yüksek boyutlu vektörler oluşturur. Bu, anlamsal arama, içerik alma ve benzerlik tespiti gibi uygulamalara olanak tanır.
Öte yandan, GPT-4 (çok modlu yeteneklere sahip), Flamingo ve Gemini gibi çok modlu LLM'ler, farklı veri türlerindeki içeriği anlamak ve oluşturmak için tasarlanmıştır.
Bu modeller, çok modlu girdileri (örneğin metin ve resimler) kullanarak ve çok modlu çıktılar üreterek konuşmaya dayalı yapay zeka ve içerik oluşturma gibi karmaşık görevlerde iyi performans göstererek anlamlı ve bağlamsal açıdan zengin yanıtlar sağlar.
Yerleştirme modelleri verimli arama ve erişime odaklanırken, çok modlu LLM'ler çeşitli içeriklerin oluşturulması ve anlaşılması için uygundur ve bu da onları sohbet robotları, etkileşimli asistanlar ve çok modlu etkileşimler için ideal kılar.
| MultiModal Gömme Modelleri | Çok Modlu Büyük Dil Modelleri (LLM'ler) |
---|---|---|
Ana amaç | Metin ve resim gibi farklı veri yöntemlerinde arama ve almayı etkinleştirin | Birden fazla yöntemle içerik oluşturun ve anlayın |
Temel Kullanım Durumu | Anlamsal arama, içerik alma ve benzerlik | Konuşmaya dayalı yapay zeka, içerik oluşturma ve diyalog sistemleri |
Örnek Modeller | CLIP, Google Çok Modlu Yerleştirme Modeli | GPT-4 (multimodal özelliklere sahip), Llava, Gemini, Flamingo, LaMDA |
Arama ve Alma | Hızlı, doğru arama ve benzerlik için optimize edildi | Farklı veri türlerinde kapsamlı anlayış ve üretim için optimize edilmiştir. |
Uygulamalar | İçerik denetimi, öneri sistemleri, anlamsal arama | Konuşma aracıları, içerik oluşturma, çok modlu etkileşimler |
OpenOrigins'in incelediği ilk yöntem, görüntü yerleştirmeleri kullanarak videoların kare kare analizini içeriyordu. Bu yaklaşım, videoyu ayrı karelere böler ve bunların her biri, kullanılarak bir vektör yerleştirmeye dönüştürülür.
CLIP, milyonlarca web görüntüsünü açıklamalarıyla birlikte inceleyerek görsel kavramları, insanların dünyayı algılama ve tanımlama biçimine benzer bir şekilde kavrar. Eğitimi, görüntüleri doğru tanımlarıyla eşleştirmeyi öğrendiği "karşılaştırmalı öğrenmeyi" içerir; bu, ona gördüklerimiz ile kullandığımız kelimeler arasındaki bağlantıyı anlayarak çeşitli görevleri yerine getirme konusunda benzersiz bir yetenek kazandırır.
Bu, CLIP'i son derece uyarlanabilir hale getirir ve görüntülerin ve dilin birlikte derinlemesine anlaşılmasını gerektiren uygulamalar için kullanışlı kılar.
Bu yerleştirmeler, semantik benzerliğe dayalı olarak metni metinle, metni görüntüyle veya görüntüyü görüntüyle eşleştirerek hızlı ve doğru aramalara olanak tanıyan bir vektör veritabanında depolanır.
Kare çıkarma, videoları belirli aralıklarla karelere ayırır. Her kare, yüksek boyutlu bir vektör temsili oluşturmak için bir görüntü yerleştirme modeli aracılığıyla işlenir. Bu vektörler, verimli benzerlik aramalarına olanak tanıyan DataStax Astra DB gibi bir vektör deposunda saklanır.
Bu yöntem, çok modlu anlamsal aramada yüksek doğruluk sunar ve belirli nesnelerin veya sahnelerin aranması için çok uygundur. Ancak özellikle uzun videolar için hesaplama açısından yoğundur ve zamansal bağlamı veya kareler arasındaki değişiklikleri kaçırabilir.
İkinci yaklaşım, özellikle Google'ın kullandığı çok modlu yerleştirmelerle en yeni üretken yapay zeka teknolojisinden yararlanıyor.
Videoları sayısal olarak temsil eden bu yerleştirmeler, gelişmiş makine öğrenimi görevlerini mümkün kılarak video içeriğini aramayı, analiz etmeyi ve kategorilere ayırmayı kolaylaştırır.
Bu yerleştirmeleri entegre etmek
Google'ın çok modlu yerleştirmeleri ve CLIP yönteminin her biri, çok modlu verileri ortak bir yerleştirme alanına yerleştirir. Temel fark, Google'ın çok modlu yerleştirmelerinin videoyu desteklemesi, CLIP'in ise desteklememesidir.
Hem çerçeve aramalı video analizi hem de çok modlu yerleştirmelere yönelik örnekleri aydınlatmak ve uygulamak için aşağıdaki depoları bir araya getirdik. Bu örnekler, her yaklaşımın etkili bir şekilde uygulanmasına ve değerlendirilmesine yardımcı olacak pratik gösterimler ve ayrıntılı talimatlar sağlar.
Bu yaklaşımda, bir tanıtıyoruz
get_single_frame_from_scene
işlevi, çerçeve kimliğini hesaplar ve video yakalamayı bu çerçeveye ayarlar ve onu okur:
def get_single_frame_from_scene(scene, video_capture): frame_id = (scene[1] - scene[0]).frame_num // 2 + scene[0].frame_num video_capture.set(cv2.CAP_PROP_POS_FRAMES, frame_id) _, frame = video_capture.read() return Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
get_frames_from_video
işlevi bir videoyu işler, AdaptiveDetector'ı kullanarak sahneleri algılar ve get_single_frame_from_scene'i çağırarak her sahneden tek bir kare çıkarır ve bu kareleri bir listede saklar:
def get_frames_from_video(video_path): res = [] video_capture = cv2.VideoCapture(video_path) content_list = detect(video_path, AdaptiveDetector()) for scene in content_list: res.append(get_single_frame_from_scene(scene, video_capture)) return res
get_image_embedding işlevi şunu kullanır:
def get_image_embedding(image): inputs = clip_processor(images=image, return_tensors="pt") image_embeddings = model.get_image_features(**inputs) return list(image_embeddings[0].detach().numpy().astype(float))
Bu kod, bir Astra DB veritabanına bağlanır, vektör yerleştirmeleri olan JSON nesnelerinden oluşan bir koleksiyon oluşturur ve bu nesneleri veritabanındaki "video" koleksiyonuna ekler:
import json from astrapy import DataAPIClient client = DataAPIClient(ASTRA_DB_TOKEN) database = client.get_database(ASTRA_DB_API_ENDPOINT) collectiondb = database.video json_embedding = [ {"id": f"{i+1}", "$vector": values} for i, values in enumerate(image_embeddings) ] response = collectiondb.insert_many(json_embedding)
OpenAI Klip yerleştirmelerini kullanarak belirli bir metni arayın:
query_text = "men with white hair" query_embedding = get_text_embedding(query_text) result = collectiondb.find_one({}, vector=query_embedding)
Burada, Google'ın çok modlu yerleştirme modelini kullanarak video yerleştirmelerin nasıl oluşturulacağını ve start_offset_sec ve end_offset_sec gibi meta veri bilgileri de dahil olmak üzere bunları Astra DB'de nasıl depolayacağınızı görebilirsiniz (bkz.
import vertexai from vertexai.vision_models import MultiModalEmbeddingModel, Video from astrapy import DataAPIClient import streamlit as st # Initialize Vertex AI vertexai.init(project=st.secrets['PROJECT'], location=st.secrets['REGION']) # Initialize the client client = DataAPIClient(st.secrets['ASTRA_TOKEN']) database = client.get_database(st.secrets['ASTRA_API_ENDPOINT']) my_collection = database.create_collection( "videosearch", dimension=1408, metric=astrapy.constants.VectorMetric.COSINE, ) collectiondb = database.videosearch # Load the pre-trained model and video model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding") video = Video.load_from_file(st.secrets['PATH']) # Get embeddings with the specified contextual text embeddings = model.get_embeddings( video=video, contextual_text="Mixed Content", dimension=1408, ) # Video Embeddings are segmented based on the video_segment_config. for video_embedding in embeddings.video_embeddings: # Check if embedding is a numpy array or a tensor and convert accordingly if isinstance(video_embedding.embedding, (list, tuple)): embedding_list = video_embedding.embedding else: embedding_list = video_embedding.embedding.tolist() embedding_data = { "metadata": { "start_offset_sec": video_embedding.start_offset_sec, "end_offset_sec": video_embedding.end_offset_sec }, "$vector": embedding_list # Ensure embedding is in list format } response = collectiondb.insert_one(embedding_data)
Burada kurulumu yapıyoruz
import vertexai from vertexai.vision_models import MultiModalEmbeddingModel, Video from vertexai.vision_models import Image as img from astrapy import DataAPIClient import streamlit as st from PIL import Image st.title("Video Search App") user_input_placeholder = st.empty() user_input = user_input_placeholder.text_input( "Describe the content you're looking for:", key="user_input" ) uploaded_file = st.file_uploader("Choose an image file that is similar you're looking for", type="png") if uploaded_file is not None: image = Image.open(uploaded_file) image_path = st.secrets['IMAGE_PATH'] image.save(image_path) saved_image = Image.open(image_path) st.image(saved_image, caption='', use_column_width=True) # Initialize Vertex AI vertexai.init(project=st.secrets['PROJECT'], location=st.secrets['REGION']) # Initialize the client client = DataAPIClient(st.secrets['ASTRA_TOKEN']) database = client.get_database(st.secrets['ASTRA_API_ENDPOINT']) collectiondb = database.videosearch # Load the pre-trained model and video model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding") video = Video.load_from_file(st.secrets['PATH']) # Search action trigger if st.button("Search"): if user_input: embeddings = model.get_embeddings( contextual_text=user_input ) result = collectiondb.find_one({}, vector=embeddings.text_embedding) start_offset_value = result['metadata']['start_offset_sec'] end_offset_value = result['metadata']['end_offset_sec'] st.write("Text input result found between: " + str(start_offset_value) + "-" + str(end_offset_value)) video_file = open(st.secrets['PATH'], 'rb') video_bytes = video_file.read() st.video(video_bytes, start_time=start_offset_value) if uploaded_file is not None: embimage = img.load_from_file(image_path) embeddingsimg = model.get_embeddings( image=embimage ) imgresult = collectiondb.find_one({}, vector=embeddingsimg.image_embedding) start_offset_value = imgresult['metadata']['start_offset_sec'] end_offset_value = imgresult['metadata']['end_offset_sec'] st.write("Image input result found between: " + str(start_offset_value) + "-" + str(end_offset_value)) video_file = open(st.secrets['PATH'], 'rb') video_bytes = video_file.read() st.video(video_bytes, start_time=start_offset_value)
Sonuçlar şöyle görünüyor:
Bu iki yaklaşımın incelenmesi, modern yapay zeka tekniklerinin video arama uygulamalarındaki önemli potansiyelini vurgulamaktadır. Görüntü gömmelerle çerçeve arama, belirli görsel aramalar için yüksek doğruluk sağlarken, çok modlu yerleştirmelerin esnekliği ve gücü, onları karmaşık, çok modlu arama gereksinimleri için üstün bir seçim haline getirir.
Bir video arama platformu, Astra DB'yi kullanarak kullanıcılara gelişmiş arama yetenekleri sunarak, büyük veri kümelerinden belirli video içeriğinin hassas ve etkili bir şekilde alınmasını sağlayabilir. Bu, video verilerini analiz etme ve yorumlama yeteneğini önemli ölçüde geliştirerek daha hızlı ve daha doğru içgörülere yol açar.
İleriye baktığımızda, devam eden araştırma ve geliştirme sayesinde video aramanın geleceği parlaktır. Yapay zeka ve makine öğrenimindeki ilerlemeler bu teknikleri geliştirmeye devam ederek onları daha erişilebilir ve verimli hale getirecek. Artırılmış gerçeklik ve gerçek zamanlı video analizi gibi diğer gelişen teknolojilerle entegrasyon, yeteneklerini daha da genişletecek.
Yazan: Matthew Pendlebury , Mühendislik Başkanı, OpenOrigins ve Betul O'Reilly , Çözüm Mimarı, DataStax