paint-brush
Xây dựng Tìm kiếm video nâng cao: Tìm kiếm khung so với nhúng đa phương thứcby@datastax
278

Xây dựng Tìm kiếm video nâng cao: Tìm kiếm khung so với nhúng đa phương thức

DataStax10m2024/07/10
Read on Terminal Reader

Đi sâu vào tìm kiếm khung và nhúng đa phương thức, hai kỹ thuật tìm kiếm video nâng cao
featured image - Xây dựng Tìm kiếm video nâng cao: Tìm kiếm khung so với nhúng đa phương thức
DataStax HackerNoon profile picture

Hãy tưởng tượng một nhà khoa học dữ liệu nghiên cứu hành vi của động vật hoang dã, phân tích hàng trăm giờ video từ camera trong một khu rừng hẻo lánh. Hoặc một huấn luyện viên thể thao cần xác định các trận đấu quan trọng trong cả mùa giải để phát triển các chiến lược mới. Ngoài ra, hãy xem xét một nhà làm phim đang tìm kiếm những cảnh cụ thể trong thư viện video đồ sộ để ghép lại thành một bộ phim tài liệu.


Theo truyền thống, tất cả các chuyên gia này đều phải đối mặt với thách thức tốn thời gian, dễ mắc lỗi và khó khăn khi sắp xếp thủ công các cảnh quay kéo dài hàng giờ đồng hồ.


Tuy nhiên, những tiến bộ về trí tuệ nhân tạo và học máy đã làm thay đổi đáng kể các ứng dụng tìm kiếm video. Những công nghệ này hiện cho phép chúng tôi tìm kiếm các đối tượng và sự kiện cụ thể trong bộ dữ liệu video phong phú với độ tinh vi đáng kinh ngạc. Các nhà khoa học và nhà nghiên cứu dữ liệu có thể xác định chính xác các phân đoạn video có liên quan với độ chính xác và hiệu quả vượt trội.


OpenOrigin xây dựng công cụ cho nội dung phương tiện truyền thông xuất xứ và cho phép người dùng xác định tính xác thực của nó. Để tăng cường các dịch vụ của mình, công ty có trụ sở tại Vương quốc Anh đã đặt ra mục tiêu phát triển một nền tảng để các nhà lưu trữ tìm thấy các video có liên quan một cách nhanh chóng và hiệu quả trong các kho lưu trữ phương tiện kỹ thuật số.


Mục tiêu là đơn giản hóa quy trình nghiên cứu bằng cách cung cấp khả năng tìm kiếm nâng cao, cho phép người dùng dễ dàng xác định vị trí cảnh quay có nội dung hoặc thuộc tính cụ thể từ bộ dữ liệu video cực lớn.


Bằng cách sử dụng các thuật toán tìm kiếm phức tạp và giao diện thân thiện với người dùng, OpenOrigins nhằm mục đích biến nền tảng này trở thành một công cụ quan trọng cho cộng đồng này.


OpenOrigins đã xem xét hai cách tiếp cận công nghệ để xây dựng dịch vụ tìm kiếm video này: tìm kiếm khung bằng cách nhúng hình ảnh và nhúng đa phương thức. Chúng ta hãy xem xét từng lựa chọn.

Tìm kiếm ngữ nghĩa trên nội dung video

Cho phép tìm kiếm ngữ nghĩa qua video để trả lời các câu hỏi phức tạp như "Có bao nhiêu phút nội dung video cho thấy hươu trong môi trường sống tự nhiên của chúng?" yêu cầu khả năng tìm kiếm phức tạp có thể hiểu và diễn giải nội dung của video ngoài việc kết hợp siêu dữ liệu từ khóa cơ bản. Chìa khóa để đạt được điều này? nhúng đa phương thức.

Các mô hình nhúng đa phương thức và các mô hình ngôn ngữ lớn đa phương thức (LLM) có thể được xem là các giải pháp tương tự. Các mô hình như CLIP và nhúng đa phương thức của Google tạo ra các phần nhúng cho các loại dữ liệu như văn bản, hình ảnh và video, tạo ra các vectơ chiều cao nắm bắt được ý nghĩa ngữ nghĩa. Điều này cho phép các ứng dụng như tìm kiếm ngữ nghĩa, truy xuất nội dung và phát hiện sự tương đồng.


Mặt khác, LLM đa phương thức như GPT-4 (có khả năng đa phương thức), Flamingo và Gemini được thiết kế để hiểu và tạo nội dung trên các loại dữ liệu khác nhau.


Các mô hình này hoạt động tốt với các tác vụ phức tạp như AI đàm thoại và tạo nội dung bằng cách sử dụng đầu vào đa phương thức (ví dụ: văn bản và hình ảnh) và tạo ra đầu ra đa phương thức, dẫn đến phản hồi có ý nghĩa và phong phú theo ngữ cảnh.


Trong khi các mô hình nhúng tập trung vào tìm kiếm và truy xuất hiệu quả, LLM đa phương thức phù hợp để tạo và hiểu nội dung đa dạng, khiến chúng trở nên lý tưởng cho chatbot, trợ lý tương tác và tương tác đa phương thức.


Mô hình nhúng đa phương thức

Mô hình ngôn ngữ lớn đa phương thức (LLM)

Mục đích chính

Cho phép tìm kiếm và truy xuất trên các phương thức dữ liệu khác nhau như văn bản và hình ảnh

Tạo và hiểu nội dung trên nhiều phương thức

Trường hợp sử dụng cốt lõi

Tìm kiếm ngữ nghĩa, truy xuất nội dung và sự tương đồng

AI đàm thoại, tạo nội dung và hệ thống đối thoại

Mô hình ví dụ

CLIP, Mô hình nhúng đa phương thức của Google

GPT-4 (có khả năng đa phương thức), Llava, Gemini, Flamingo, LaMDA

Tìm kiếm và truy xuất

Tối ưu hóa để tìm kiếm nhanh, chính xác và tương tự

Được tối ưu hóa để hiểu và tạo toàn diện trên các loại dữ liệu khác nhau.

Các ứng dụng

Kiểm duyệt nội dung, hệ thống khuyến nghị, tìm kiếm ngữ nghĩa

Tác nhân đàm thoại, sáng tạo nội dung, tương tác đa phương thức

Cách tiếp cận 1: Tìm kiếm khung bằng cách nhúng hình ảnh

Phương pháp đầu tiên mà OpenOrigins xem xét liên quan đến phân tích từng khung hình của video bằng cách sử dụng tính năng nhúng hình ảnh. Cách tiếp cận này chia video thành các khung riêng lẻ, mỗi khung được chuyển đổi thành dạng nhúng vectơ bằng cách sử dụng KẸP nhúng các mô hình.



Hình 1: Tóm tắt sơ đồ tiếp cận (điều chỉnh từ “Học các mô hình trực quan có thể chuyển giao từ giám sát ngôn ngữ tự nhiên”). Trong khi các mô hình hình ảnh tiêu chuẩn cùng đào tạo bộ trích xuất đặc điểm hình ảnh và bộ phân loại tuyến tính để dự đoán một số nhãn, CLIP phối hợp đào tạo bộ mã hóa hình ảnh và bộ mã hóa văn bản để dự đoán các cặp chính xác của một loạt ví dụ đào tạo (hình ảnh, văn bản). Tại thời điểm thử nghiệm, bộ mã hóa văn bản đã học sẽ tổng hợp bộ phân loại tuyến tính không cần bắn bằng cách nhúng tên hoặc mô tả của các lớp của tập dữ liệu đích.


CLIP, được phát triển bởi OpenAI , là một mô hình AI học cách hiểu hình ảnh thông qua ngôn ngữ tự nhiên, không giống như các mô hình truyền thống dựa vào các hình ảnh được gắn nhãn cụ thể.


Bằng cách nghiên cứu hàng triệu hình ảnh trên web cùng với mô tả của chúng, CLIP hiểu các khái niệm trực quan theo cách tương tự như cách con người nhận thức và mô tả thế giới. Quá trình đào tạo của nó bao gồm "học tập tương phản", trong đó nó học cách ghép các hình ảnh với mô tả chính xác, mang lại cho nó khả năng độc đáo để xử lý các nhiệm vụ khác nhau bằng cách hiểu mối liên hệ giữa những gì chúng ta nhìn thấy và những từ chúng ta sử dụng.


Điều này làm cho CLIP có khả năng thích ứng cao và hữu ích cho các ứng dụng đòi hỏi sự hiểu biết sâu sắc về hình ảnh và ngôn ngữ cùng nhau.


Các phần nhúng này được lưu trữ trong cơ sở dữ liệu vectơ, cho phép tìm kiếm nhanh chóng và chính xác bằng cách khớp văn bản với văn bản, văn bản với hình ảnh hoặc hình ảnh với hình ảnh dựa trên sự tương đồng về ngữ nghĩa.


Trích xuất khung hình sẽ phân tách video thành các khung hình theo các khoảng thời gian được chỉ định. Mỗi khung hình được xử lý thông qua mô hình nhúng hình ảnh để tạo ra biểu diễn vectơ chiều cao. Các vectơ này được lưu trữ trong một kho vectơ như DataStax Astra DB, cho phép tìm kiếm sự tương đồng hiệu quả.


Phương pháp này mang lại độ chính xác cao trong tìm kiếm ngữ nghĩa đa phương thức và rất phù hợp để tìm kiếm các đối tượng hoặc cảnh cụ thể. Tuy nhiên, nó đòi hỏi nhiều tính toán, đặc biệt đối với các video dài và có thể bỏ sót bối cảnh thời gian hoặc những thay đổi giữa các khung hình.

Cách tiếp cận 2: Nhúng đa phương thức với nút nhúng đa phương thức của Google

Cách tiếp cận thứ hai tận dụng công nghệ AI thế hệ mới nhất với các phần nhúng đa phương thức, đặc biệt là sử dụng Google mô hình nhúng đa phương thức . Phương pháp cải tiến này cho phép người dùng tìm kiếm video bằng hình ảnh, văn bản hoặc video, chuyển đổi tất cả dữ liệu đầu vào thành một không gian nhúng chung . Mô hình tạo ra các phần nhúng cho các loại đầu vào khác nhau và ánh xạ chúng vào một không gian vectơ dùng chung. Người dùng có thể tìm kiếm bằng cách sử dụng các phương thức khác nhau được chuyển đổi thành các phần nhúng có cùng chiều.

Mô hình nhúng đa phương thức của Google: Kích thước 1048*

Phần nhúng đa phương thức AI của Google Cloud Vertex cho video

Vertex AI của Google Cloud cung cấp các phần nhúng đa phương thức mạnh mẽ, bao gồm các phần nhúng video phức tạp giúp chuyển đổi nội dung video thành các vectơ chiều cao. Các phần nhúng 1408 chiều này cho phép các ứng dụng đa dạng như kiểm duyệt nội dung, tìm kiếm ngữ nghĩa và phân loại video.


Bằng cách biểu diễn video bằng số, các phần nhúng này hỗ trợ các tác vụ học máy nâng cao, giúp việc tìm kiếm, phân tích và phân loại nội dung video trở nên dễ dàng hơn.


Tích hợp các phần nhúng này với DataStax Astra DB đảm bảo xử lý hiệu quả các tập dữ liệu lớn và cung cấp hỗ trợ phụ trợ mạnh mẽ để truy xuất hiệu quả. Cách tiếp cận này cải thiện mức độ liên quan và độ chính xác của tìm kiếm bằng cách hỗ trợ nhiều loại đầu vào cho truy vấn tìm kiếm và áp dụng các khả năng AI nâng cao. Phương pháp này quản lý hiệu quả các tập dữ liệu lớn với bối cảnh tạm thời, khiến nó trở thành lựa chọn tuyệt vời cho các tình huống tìm kiếm phức tạp.


Mỗi phần nhúng đa phương thức của Google và phương pháp CLIP đều nhúng dữ liệu đa phương thức vào một không gian nhúng chung. Sự khác biệt chính là tính năng nhúng đa phương thức của Google hỗ trợ video, trong khi CLIP thì không.

Tổng quan về kỹ thuật

Chúng tôi đã tập hợp các kho lưu trữ bên dưới để làm sáng tỏ và áp dụng các ví dụ cho cả phân tích video tìm kiếm khung và nhúng đa phương thức. Những ví dụ này cung cấp những minh họa thực tế và hướng dẫn chi tiết để giúp thực hiện và đánh giá từng phương pháp một cách hiệu quả.

Cách tiếp cận 1: Tìm kiếm khung bằng cách nhúng hình ảnh

Trong cách tiếp cận này, chúng tôi giới thiệu một Sổ tay Colab được thiết kế để thể hiện phân tích video tìm kiếm khung bằng cách sử dụng nhúng hình ảnh. Sổ tay này cung cấp hướng dẫn từng bước để chia nhỏ nội dung video thành từng khung hình riêng lẻ và phân tích từng khung hình bằng mô hình nhúng CLIP. Cách tiếp cận này cho phép tìm kiếm có độ chính xác cao đối với các đối tượng hoặc cảnh cụ thể trong dữ liệu video.


Hàm get_single_frame_from_scene tính toán ID khung và đặt chế độ quay video thành khung này và đọc nó:


 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))


Hàm get_frames_from_video xử lý video, phát hiện cảnh bằng AdaptiveDetector và trích xuất một khung hình từ mỗi cảnh bằng cách gọi get_single_frame_from_scene, lưu trữ các khung hình này vào danh sách:


 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


Hàm get_image_embedding sử dụng một mô hình CLIP để tạo phần nhúng cho một hình ảnh nhất định, chuyển nó qua mô hình và trả về vectơ đặc trưng kết quả dưới dạng danh sách các số float:


 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))


Mã này kết nối với cơ sở dữ liệu Astra DB, tạo một tập hợp các đối tượng JSON có nhúng vectơ và chèn các đối tượng này vào bộ sưu tập "video" trong cơ sở dữ liệu:


 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)


Tìm kiếm một văn bản nhất định bằng cách sử dụng phần nhúng OpenAI Clip:


 query_text = "men with white hair" query_embedding = get_text_embedding(query_text) result = collectiondb.find_one({}, vector=query_embedding)


Cách tiếp cận 2: Nhúng đa phương thức với mô hình nhúng đa phương thức của Google

Tại đây, bạn có thể xem cách tạo các phần nhúng video bằng mô hình nhúng đa phương thức của Google và lưu trữ chúng trong Astra DB, bao gồm thông tin siêu dữ liệu như start_offset_sec và end_offset_sec (xem phần Kho lưu trữ GitHub ).


 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)


Ở đây, chúng tôi thiết lập Giao diện người dùng hợp lý , một công cụ mạnh mẽ để tạo các ứng dụng web tương tác, dựa trên dữ liệu mà không tốn nhiều công sức, sử dụng tính đơn giản và sức mạnh của Python. Ngoài ra, chúng tôi kích hoạt chức năng tìm kiếm cho văn bản hoặc hình ảnh cụ thể trong mã bên dưới:


 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)


Đây là kết quả trông như thế nào:

Phần kết luận

Khám phá hai phương pháp này làm nổi bật tiềm năng đáng kể của kỹ thuật AI hiện đại trong các ứng dụng tìm kiếm video. Mặc dù tìm kiếm khung bằng nhúng hình ảnh mang lại độ chính xác cao cho các tìm kiếm trực quan cụ thể, nhưng tính linh hoạt và sức mạnh của nhúng đa phương thức khiến chúng trở thành lựa chọn ưu việt cho các yêu cầu tìm kiếm đa phương thức, phức tạp.


Bằng cách sử dụng Astra DB, nền tảng tìm kiếm video có thể cung cấp cho người dùng khả năng tìm kiếm nâng cao, cho phép truy xuất chính xác và hiệu quả nội dung video cụ thể từ các tập dữ liệu lớn. Điều này cải thiện đáng kể khả năng phân tích và diễn giải dữ liệu video, mang lại thông tin chi tiết nhanh hơn và chính xác hơn.


Nhìn về phía trước, tương lai của tìm kiếm video rất tươi sáng với những nghiên cứu và phát triển không ngừng. Những tiến bộ trong AI và học máy sẽ tiếp tục cải thiện những kỹ thuật này, khiến chúng trở nên dễ tiếp cận và hiệu quả hơn. Việc tích hợp với các công nghệ mới nổi khác, chẳng hạn như thực tế tăng cường và phân tích video thời gian thực, sẽ mở rộng hơn nữa khả năng của chúng.


Bởi Matthew Pendlebury , Trưởng bộ phận Kỹ thuật, OpenOrigins và Betul O'Reilly , Kiến trúc sư giải pháp, DataStax