Logo Zephyrnet

Xử lý ngôn ngữ hình ảnh hướng dẫn đối thoại với Amazon SageMaker JumpStart | Dịch vụ web của Amazon

Ngày:

Xử lý ngôn ngữ hình ảnh (VLP) luôn đi đầu trong AI sáng tạo, thúc đẩy những tiến bộ trong học tập đa phương thức bao gồm trí thông minh ngôn ngữ, hiểu thị giác và xử lý. Kết hợp với các mô hình ngôn ngữ lớn (LLM) và Đào tạo trước hình ảnh-ngôn ngữ tương phản (CLIP) được đào tạo với một lượng lớn dữ liệu đa phương thức, các mô hình ngôn ngữ hình ảnh (VLM) đặc biệt thành thạo trong các tác vụ như chú thích hình ảnh, phát hiện và phân đoạn đối tượng cũng như hình ảnh. trả lời câu hỏi. Các trường hợp sử dụng của chúng trải rộng trên nhiều lĩnh vực khác nhau, từ giải trí truyền thông đến chẩn đoán y tế và đảm bảo chất lượng trong sản xuất.

Các điểm mạnh chính của VLP bao gồm việc sử dụng hiệu quả các VLM và LLM được đào tạo trước, cho phép dự đoán không chụp hoặc ít ảnh mà không cần phải sửa đổi theo nhiệm vụ cụ thể và phân loại hình ảnh từ phổ rộng thông qua các cuộc đối thoại nhiều vòng thông thường. Tăng cường bởi Phân khúc có căn cứ, VLP thể hiện khả năng nhận dạng hình ảnh, với khả năng phát hiện và phân đoạn đối tượng đặc biệt đáng chú ý. Tiềm năng tồn tại để tinh chỉnh VLM và LLM hơn nữa bằng cách sử dụng dữ liệu theo miền cụ thể, nhằm tăng cường độ chính xác và giảm thiểu ảo giác. Tuy nhiên, giống như các công nghệ non trẻ khác, vẫn còn những trở ngại trong việc quản lý độ phức tạp của mô hình, hài hòa các phương thức đa dạng và xây dựng các thước đo đánh giá thống nhất.

Được phép của NOMIC cho OBELICS, HuggingFaceM4 cho IDEFICS, Charles Bensimon cho Gradio và Amazon Polly cho TTS

Trong bài đăng này, chúng tôi khám phá các sắc thái kỹ thuật của tạo mẫu VLP bằng cách sử dụng Khởi động Amazon SageMaker kết hợp với các mô hình AI sáng tạo đương đại. Thông qua các cuộc đối thoại nhiều vòng, chúng tôi nêu bật khả năng xử lý ngôn ngữ tầm nhìn không bắn và ít bắn theo định hướng hướng dẫn, nhấn mạnh tính linh hoạt của nó và nhằm thu hút sự quan tâm của cộng đồng đa phương thức rộng lớn hơn. Mã triển khai demo có sẵn sau đây Repo GitHub.

Tổng quan về giải pháp

Giải pháp VLP được đề xuất tích hợp một bộ mô-đun AI tổng hợp hiện đại để mang lại kết quả đầu ra đa phương thức chính xác. Trọng tâm của kiến ​​trúc là VLM và LLM được tinh chỉnh, cả hai đều là công cụ giải mã các luồng dữ liệu văn bản và hình ảnh. Khung TGI củng cố lớp suy luận mô hình, cung cấp API RESTful để tích hợp mạnh mẽ và khả năng truy cập dễ dàng. Để bổ sung cho quá trình xử lý dữ liệu thính giác của chúng tôi, Whisper ASR cũng được trang bị API RESTful, cho phép chuyển đổi giọng nói thành văn bản một cách hợp lý. Để giải quyết những thách thức phức tạp như phân đoạn hình ảnh thành văn bản, chúng tôi sử dụng công cụ chứa Phân khúc có căn cứ mô-đun, phối hợp với DINO nối đấtPhân khúc bất cứ mô hình nào (SAM) để phát hiện và phân đoạn đối tượng theo hướng văn bản. Hệ thống được cải tiến hơn nữa với Chưng cấtBERT, tối ưu hóa quy trình phân loại nhiều lớp theo hướng dẫn đối thoại của chúng tôi. Điều phối các thành phần này là quy trình xử lý LangChain, một cơ chế tinh vi thành thạo trong việc phân tích văn bản hoặc giọng nói đầu vào, phân biệt ý định của người dùng và phân công các nhiệm vụ phụ một cách có phương pháp cho các dịch vụ liên quan. Việc tổng hợp các hoạt động này tạo ra kết quả đầu ra tổng hợp, đưa ra các câu trả lời đa phương thức chính xác và nhận biết ngữ cảnh.

Sơ đồ sau đây minh họa kiến ​​trúc của giải pháp VLP hướng dẫn đối thoại của chúng tôi.

Suy luận tạo văn bản

Suy luận tạo văn bản (TGI) là bộ công cụ nguồn mở được Hugging Face phát triển để triển khai LLM cũng như VLM để suy luận. Nó cho phép tạo văn bản hiệu suất cao bằng cách sử dụng song song tensor, song song mô hình và phân khối động hỗ trợ một số LLM nguồn mở hàng đầu như Falcon và Llama V2, cũng như các VLM như IDEFICS. Sử dụng các mô-đun Ôm Mặt LLM mới nhất trên Amazon SageMaker, Giờ đây, khách hàng của AWS có thể khai thác sức mạnh của bộ chứa deep learning (DLC) của SageMaker. Điều này cho phép triển khai liền mạch các LLM từ các trung tâm Hugging Face thông qua SageMaker dựng sẵn DLC hỗ trợ TGI. Thiết lập suy luận này không chỉ mang lại hiệu suất vượt trội mà còn loại bỏ nhu cầu quản lý cơ sở hạ tầng GPU nặng nề. Ngoài ra, bạn còn được hưởng lợi từ các tính năng nâng cao như tự động mở rộng quy mô điểm cuối suy luận, bảo mật nâng cao và giám sát mô hình tích hợp.

TGI cung cấp tốc độ tạo văn bản nhanh hơn tới 100 lần so với các phương pháp suy luận truyền thống và mở rộng quy mô một cách hiệu quả để xử lý các yêu cầu gia tăng. Thiết kế của nó đảm bảo khả năng tương thích với nhiều LLM khác nhau và là nguồn mở, dân chủ hóa các tính năng nâng cao cho cộng đồng công nghệ. Tính linh hoạt của TGI mở rộng trên nhiều lĩnh vực, nâng cao chatbot, cải thiện bản dịch máy, tóm tắt văn bản và tạo ra nội dung đa dạng, từ thơ đến mã. Do đó, TGI nổi lên như một giải pháp toàn diện cho những thách thức về tạo văn bản. TGI được triển khai bằng Python và sử dụng khung PyTorch. Nó là mã nguồn mở và có sẵn trên GitHub. Nó cũng hỗ trợ PEFT với QLoRA để có hiệu suất nhanh hơn và ghi nhật ký cong vênh để kiểm soát các thuộc tính văn bản được tạo, chẳng hạn như xác định độ dài và tính đa dạng của nó mà không sửa đổi mô hình cơ bản.

Bạn có thể xây dựng vùng chứa TGI Docker tùy chỉnh trực tiếp từ sau Dockerfile rồi đẩy hình ảnh vùng chứa lên Amazon Cơ quan đăng ký vùng chứa đàn hồi (ECR) để triển khai suy luận. Xem đoạn mã sau:

%%sh
# Define docker image name and container's Amazon Reource Name on ECR
container_name="tgi1.03"
region=`aws configure get region`
account=`aws sts get-caller-identity --query "Account" --output text`
full_name="${account}.dkr.ecr.${region}.amazonaws.com/${container_name}:latest" # Get the login command from ECR and execute it directly
aws ecr get-login-password --region ${region}|docker login --username AWS --password-stdin ${account}.dkr.ecr.${region}.amazonaws.com # Build the TGI docker image locally
docker build . -f Dockerfile -t ${container_name}
docker tag ${container_name} ${full_name}
docker push ${full_name}

Suy luận LLM với TGI

Giải pháp VLP trong bài đăng này sử dụng LLM song song với LangChain, khai thác cách tiếp cận chuỗi suy nghĩ (CoT) để phân loại mục đích chính xác hơn. CoT xử lý các truy vấn để phân biệt ý định và các nhiệm vụ phụ liên quan đến kích hoạt nhằm đáp ứng các mục tiêu của truy vấn. Llama-2-7b-chat-hf (thỏa thuận cấp phép) là phiên bản đơn giản hóa của dòng Llama-2, được thiết kế cho bối cảnh đối thoại. Suy luận của Llama-2-7b-chat-hf được hỗ trợ bởi hình ảnh vùng chứa TGI, khiến nó có sẵn dưới dạng dịch vụ hỗ trợ API.

Đối với suy luận Llama-2-7b-chat-hf, nên sử dụng g5.2xlarge (24G VRAM) để đạt được hiệu suất cao nhất. Đối với các ứng dụng cần LLM mạnh mẽ hơn, các mẫu Llama-v2-13b rất phù hợp với phiên bản g5.12xlarge (96G VRAM). Đối với các mẫu Llama-2-70b, hãy xem xét GPU [2xlarge] – 2x Nvidia A100 sử dụng lượng tử hóa bitandbyte hoặc g5.48xlarge. Đáng chú ý, việc sử dụng lượng tử hóa bitandbyte có thể giảm 50% VRAM GPU suy luận cần thiết.

Bạn có thể sử dụng các DLC của SageMaker với hình ảnh bộ chứa TGI được nêu chi tiết trước đó để triển khai Llama-2-7b-chat-hf cho mục đích suy luận (xem mã sau). Ngoài ra, bạn có thể đưa ra suy luận cục bộ nhanh chóng để chứng minh khái niệm trên phiên bản g5.2xlarge bằng cách sử dụng vùng chứa Docker.

import json
from time import gmtime, strftime
from sagemaker.huggingface import get_huggingface_llm_image_uri
from sagemaker.huggingface import HuggingFaceModel
from sagemaker import get_execution_role # Prerequisite:create an unique model name
model_name = 'Llama-7b-chat-hf' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) # retrieve the llm image uri of SageMaker pre-built DLC TGI v1.03 tgi_image_ecr_uri = get_huggingface_llm_image_uri( "huggingface", version="1.0.3"
) # Define Model and Endpoint configuration parameter
hf_config = { 'HF_MODEL_ID': "meta-research/Llama-2-7b-chat-hf", # Matching model_id on Hugging Face Hub 'SM_NUM_GPUS': json.dumps(number_of_gpu), 'MAX_TOTAL_TOKENS': json.dumps(1024), 'HF_MODEL_QUANTIZE': "bitsandbytes", # Use quantization for less vram requirement, commet it if no needed.
} # create HuggingFaceModel with the SageMaker pre-built DLC TGI image uri
sm_llm_model = HuggingFaceModel( role=get_execution_role(), image_uri=tgi_image_ecr_uri, env=hf_config
) # Deploy the model
llm = sm_llm_model.deploy( initial_instance_count=1, instance_type="ml.g5.2xlarge", container_startup_health_check_timeout=300, # in sec. Allow 5 minutes to be able to load the model
) # define inference payload
prompt="""<|prompter|>How to select a right LLM for your generative AI project?<|endoftext|><|assistant|>""" # hyperparameters for llm
payload = { "inputs": prompt, "parameters": { "best_of": 1, "decoder_input_details": true, "details": true, "do_sample": true, "max_new_tokens": 20, "repetition_penalty": 1.03, "return_full_text": false, "seed": null, "stop": [ "photographer" ], "temperature": 0.5, "top_k": 10, "top_p": 0.95, "truncate": null, "typical_p": 0.95, "watermark": true }, "stream": false
} # send request to endpoint
response = llm.predict(payload)

Tinh chỉnh và tùy chỉnh LLM của bạn

SageMaker JumpStart cung cấp nhiều mẫu sổ tay minh họa cách sử dụng Tinh chỉnh hiệu quả tham số (PEFT), bao gồm QLoRA để đào tạo và tinh chỉnh LLM. QLoRA duy trì các trọng số mô hình được huấn luyện trước ở trạng thái tĩnh và đưa các ma trận phân rã thứ hạng có thể huấn luyện vào từng lớp của cấu trúc Máy biến áp. Phương pháp này làm giảm đáng kể số lượng tham số có thể huấn luyện cần thiết cho các tác vụ tiếp theo.

Ngoài ra, bạn có thể khám phá Tối ưu hóa tùy chọn trực tiếp (DPO), giúp loại bỏ sự cần thiết phải thiết lập mô hình phần thưởng, vẽ mẫu trong quá trình tinh chỉnh từ LLM hoặc điều chỉnh siêu tham số mở rộng. Nghiên cứu gần đây đã chỉ ra rằng khả năng tinh chỉnh của DPO vượt trội RLHF trong việc quản lý việc tạo ra cảm xúc và nâng cao chất lượng của các bản tóm tắt và câu trả lời cho một cuộc trò chuyện, đồng thời dễ dàng thiết lập và đào tạo hơn đáng kể. Có ba bước chính trong quy trình đào tạo DPO (tham khảo GitHub repo để biết chi tiết):

  1. Thực hiện tinh chỉnh có giám sát LLM cơ sở được đào tạo trước để tạo LLM tinh chỉnh.
  2. Chạy trình đào tạo DPO bằng mô hình đã tinh chỉnh để tạo mô hình học tăng cường.
  3. Hợp nhất các bộ điều hợp từ DPO vào mô hình LLM cơ sở để suy luận tạo văn bản.

Bạn có thể triển khai mô hình đã hợp nhất để suy luận bằng hình ảnh vùng chứa TGI.

Mô hình ngôn ngữ hình ảnh

Mô hình ngôn ngữ hình ảnh (VLM) kết hợp cả phương thức thị giác và ngôn ngữ đã cho thấy hiệu quả cải thiện của chúng trong việc khái quát hóa, dẫn đến nhiều trường hợp sử dụng thực tế khác nhau với lời nhắc không cần bắn hoặc lời nhắc ít lần có hướng dẫn. VLM thường bao gồm ba yếu tố chính: bộ mã hóa hình ảnh, bộ mã hóa văn bản và chiến lược hợp nhất thông tin từ hai bộ mã hóa. Các yếu tố chính này được kết hợp chặt chẽ với nhau vì các hàm mất mát được thiết kế xung quanh cả kiến ​​trúc mô hình và chiến lược học tập. Nhiều VLM tiên tiến sử dụng CLIP/ViT (chẳng hạn như OpenCLIP) và LLM (chẳng hạn như Llama-v1) và được đào tạo trên nhiều bộ dữ liệu có sẵn công khai như Wikipedia, LAION và Bộ dữ liệu đa phương thức công cộng.

Bản demo này sử dụng một bản demo được đào tạo trước IDEFICS-9b-hướng dẫn mô hình được phát triển bởi Ôm MặtM4, một phiên bản tinh chỉnh của IDEFICS-9b, tuân theo quy trình đào tạo được trình bày trong Flamingo bằng cách kết hợp hai mô hình được đào tạo trước (laion/CLIP-ViT-H-14-laion2B-s32B-b79K và Huggyllama/llama-7b) với các khối Transformer được sửa đổi. IDEFICS-9b đã được đào tạo trên các bộ dữ liệu đa phương thức OBELIC, Wikipedia, LAION và PMD với tổng số 150 tỷ mã thông báo và 1.582 tỷ hình ảnh với độ phân giải 224 × 224 mỗi bộ. IDEFICS-9b dựa trên Llama-7b với quy mô lô hiệu quả là 1.31 triệu chiếc. Sau đó, lệnh IDEFICS-9b đã được tinh chỉnh với 6.8 triệu bộ dữ liệu hướng dẫn đa phương thức được tạo từ việc tăng cường sử dụng AI tổng hợp bằng cách giải phóng tất cả các tham số (bộ mã hóa tầm nhìn, mô hình ngôn ngữ, sự chú ý chéo). Các bộ dữ liệu tinh chỉnh bao gồm dữ liệu đào tạo trước với tỷ lệ lấy mẫu sau: 5.1% cặp văn bản-hình ảnh và 30.7% tài liệu web đa phương thức OBELICS.

Phần mềm đào tạo được xây dựng dựa trên Ôm mặt Transformers và Tăng tốc, và Tốc độ sâu ZeRO-3 để đào tạo, cộng thêm WebBộ dữ liệuBộ dữ liệu Image2 để tải dữ liệu. Quá trình đào tạo trước IDEFICS-9b mất 350 giờ để hoàn thành trên 128 GPU Nvidia A100, trong khi việc tinh chỉnh IDEFICS-9b-instruct mất 70 giờ trên 128 GPU Nvidia A100, cả trên phiên bản AWS p4.24xlarge.

Với SageMaker, bạn có thể triển khai liền mạch IDEFICS-9b-instruct trên phiên bản g5.2xlarge cho các tác vụ suy luận. Đoạn mã sau minh họa cách khởi chạy vùng chứa cục bộ deep learning phù hợp được tích hợp với hình ảnh TGI Docker tùy chỉnh:

%%sh
llm_model='HuggingFaceM4/idefics-9b-instruct'
docker_rt_name='idefics-9b-instruct'
docker_image_name='tgi1.03'
docker run --gpus="1,2,3,4" --shm-size 20g -p 8080:80 --restart unless-stopped --name ${docker_rt_name} ${docker_image_name} --model-id ${llm_model} # Test the LLM API using curl
curl -X 'POST' 'http://<hostname_or_ip>:8080/' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{ "inputs": "User:![](http://<image_url>/image.png)Thiết bị nào tạo ra hình ảnh này? Vui lòng giải thích mục đích lâm sàng chính của hình ảnh đó? Bạn có thể viết báo cáo X quang dựa trên hình ảnh này không? ", 
 "parameters": { "best_of": 1, "decoder_input_details": true, "details": true, "do_sample": true, "max_new_tokens": 20, "repetition_penalty": 1.03, "return_full_text": false, "seed": null, "stop": [ "photographer" ], "temperature": 0.5, "top_k": 10, "top_p": 0.95, "truncate": null, "typical_p": 0.95, "watermark": true }, "stream": false }'

Bạn có thể tinh chỉnh IDEFICS hoặc các VLM khác bao gồm Mở Flamingo với dữ liệu dành riêng cho miền của bạn kèm theo hướng dẫn. Hãy tham khảo những điều sau đây README để chuẩn bị tập dữ liệu đa phương thức và kịch bản tinh chỉnh để biết thêm chi tiết.

Phân loại ý định theo chuỗi suy nghĩ

Một bức tranh đáng giá cả ngàn lời nói, do đó VLM yêu cầu hướng dẫn để tạo chú thích chính xác từ một hình ảnh và câu hỏi nhất định. Chúng tôi có thể sử dụng lời nhắc vài lần để cho phép học tập trong ngữ cảnh, trong đó chúng tôi cung cấp các minh họa trong lời nhắc để hướng mô hình đạt hiệu suất tốt hơn. Các cuộc biểu tình đóng vai trò điều kiện cho các ví dụ tiếp theo mà chúng tôi muốn mô hình tạo ra phản hồi.

Lời nhắc vài lần tiêu chuẩn hoạt động tốt cho nhiều nhiệm vụ nhưng vẫn không phải là một kỹ thuật hoàn hảo, đặc biệt là khi xử lý các nhiệm vụ lý luận phức tạp hơn. Mẫu nhắc nhở vài lần chụp không đủ để nhận được phản hồi đáng tin cậy. Sẽ có ích nếu chúng ta chia vấn đề thành các bước và chứng minh điều đó cho mô hình. Gần đây hơn, chuỗi suy nghĩ Tính năng nhắc nhở (CoT) đã được phổ biến để giải quyết các nhiệm vụ lý luận số học, thông thường và biểu tượng phức tạp hơn

CoT loại bỏ các nỗ lực thủ công bằng cách sử dụng LLM với lời nhắc “Hãy suy nghĩ từng bước” để tạo ra các chuỗi lý luận cho từng phần trình diễn một. Tuy nhiên, quy trình tự động này vẫn có thể mắc lỗi trong chuỗi được tạo. Để giảm thiểu tác động của những sai lầm, sự đa dạng của các cuộc biểu tình rất quan trọng. Bài đăng này đề xuất Auto-CoT, lấy mẫu các câu hỏi một cách đa dạng và tạo ra các chuỗi lý luận để xây dựng các minh chứng. CoT bao gồm hai giai đoạn chính:

  • Phân cụm câu hỏi - Phân chia các câu hỏi của một tập dữ liệu nhất định thành một vài cụm
  • Lấy mẫu trình diễn – Chọn một câu hỏi đại diện từ mỗi cụm và tạo chuỗi lý luận của nó bằng cách sử dụng CoT không bắn với phương pháp phỏng đoán đơn giản

Xem đoạn mã sau:

from langchain.llms import HuggingFaceTextGenInference
from langchain import PromptTemplate, LLMChain inference_server_url_local = <Your_local_url_for_llm_on_tgi:port> llm_local = HuggingFaceTextGenInference( inference_server_url=inference_server_url_local, max_new_tokens=512, top_k=10, top_p=0.95, typical_p=0.95, temperature=0.1, repetition_penalty=1.05, template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. Use ten five maximum and keep the answer as subtle as possible. List all actionable sub-tasks step by step in detail. Be cautious to avoid phrasing that might replicate previous inquiries. This will help in obtaining an accurate and detailed answer. Avoid repetition for clarity. Question: {question}
Answer: Understand the intent of the question then break down the {question} in to sub-tasks. """ prompt = PromptTemplate( template=template, input_variables= ["question"]
) llm_chain_local = LLMChain(prompt=prompt, llm=llm_local)
llm_chain_local("Can you describe the nature of this image? Do you think it's real??")

Nhận dạng giọng nói tự động

Giải pháp VLP kết hợp Whisper, mô hình Nhận dạng giọng nói tự động (ASR) của OpenAI, để xử lý các truy vấn âm thanh. Whisper có thể được triển khai dễ dàng thông qua SageMaker JumpStart bằng mẫu của nó. SageMaker JumpStart, được biết đến với thiết lập đơn giản, hiệu suất cao, khả năng mở rộng và độ tin cậy, lý tưởng cho các nhà phát triển muốn tạo ra các ứng dụng điều khiển bằng giọng nói đặc biệt. GitHub sau đây repo trình bày cách khai thác Điểm cuối suy luận thời gian thực của SageMaker để tinh chỉnh và lưu trữ Whisper để chuyển âm thanh thành văn bản ngay lập tức, thể hiện sức mạnh tổng hợp giữa lưu trữ SageMaker và các mô hình tổng hợp.

Ngoài ra, bạn có thể tải trực tiếp Dockerfile.gpu từ GitHub được phát triển bởi người làm việc, bao gồm API RESTful được định cấu hình trước. Sau đó, bạn có thể xây dựng hình ảnh Docker và chạy vùng chứa trên Amazon hỗ trợ GPU Đám mây điện toán đàn hồi (EC2) để chứng minh khái niệm nhanh chóng. Xem đoạn mã sau:

%%sh
docker_iamge_name = 'whisper-asr-webservice-gpu'
docker build -f Dockerfile.gpu -t ${docker_iamge_nam}
docker run -d --gpus all -p 8083:9000 --restart unless-stopped -e ASR_MODEL=base ${docker_iamge_nam} curl -X 'POST' 'http://<asr_api_hostname>:<port>/asr?task=transcribe&encode=true&output=txt' -H 'accept: application/json' -H 'Content-Type: multipart/form-data' -F 'audio_file=@dgvlp_3_5.mp3;type=audio/mpeg'

Trong ví dụ được cung cấp, cổng 8083 được chọn để lưu trữ API Whisper, với các quy tắc bảo mật mạng gửi đến được kích hoạt. Để kiểm tra, hãy hướng trình duyệt web tới http://<IP_or_hostname>:8083/docs và bắt đầu kiểm tra yêu cầu POST tới điểm cuối ASR. Thay vào đó, hãy chạy lệnh đã cho hoặc sử dụng mô-đun hoạt động thì thầm để xác minh kết nối API.

!pip install whisper-live
from whisper_live.client import TranscriptionClient
client = TranscriptionClient("<whisper_hostname_or_IP>", 8083, is_multilingual=True, lang="zh", translate=True)
client(audio_file_path) # Use sudio file
client() # Use microphone for transcribe

Phân loại văn bản nhiều lớp và trích xuất từ ​​khóa

Phân loại nhiều lớp đóng một vai trò quan trọng trong việc phát hiện và phân đoạn đối tượng theo hướng nhắc nhở của văn bản. Các distilbert-base-unsased-finetuned-sst-2-english mô hình là một điểm kiểm tra tinh tế của DistilBERT-base-unased, được tối ưu hóa trên Cây tình cảm Stanford (SST2) của Ôm mặt. Mô hình này đạt được độ chính xác 91.3% trên bộ phát triển, trong khi đối tác của nó là bert-base-uncased tự hào có độ chính xác là 92.7%. Hugging Face Hub cung cấp quyền truy cập vào hơn 1,000 mô hình phân loại văn bản được đào tạo trước. Đối với những người tìm kiếm độ chính xác nâng cao, SageMaker JumpStart cung cấp mẫu để tinh chỉnh DistilBERT bằng cách sử dụng bộ dữ liệu có chú thích tùy chỉnh để thực hiện các tác vụ phân loại phù hợp hơn.

import torch
from transformers import pipeline def mclass(text_prompt, top_k=3, topics = ['Mask creation', 'Object detection', 'Inpainting', 'Segmentation', 'Upscaling', 'Creating an image from another one', 'Generating:q an image from text'], model='distilbert-base-uncased-finetuned-sst-2-english'): device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # Define a german hypothesis template and the potential candidates for entailment/contradiction template_de = 'The topic is {}' # Pipeline abstraction from hugging face pipe = pipeline(task='zero-shot-classification', model=model, tokenizer=model, device=device) # Run pipeline with a test case prediction = pipe(text_prompt, topics, hypothesis_template=template_de) # Top 3 topics as predicted in zero-shot regime return zip(prediction['labels'][0:top_k], prediction['scores'][0:top_k]) top_3_intend = mclass(text_prompt=user_prompt_str, topics=['Others', 'Create image mask', 'Image segmentation'], top_k=3) 

Quá trình trích xuất từ ​​khóa sử dụng KeyBERT mô-đun, một phương pháp được sắp xếp hợp lý và thân thiện với người dùng, khai thác các phần nhúng BERT để tạo từ khóa và cụm từ khóa được liên kết chặt chẽ với tài liệu—trong trường hợp này là các đối tượng được chỉ định trong truy vấn:

# Keyword extraction
from keybert import KeyBERT
kw_model = KeyBERT()
words_list = kw_model.extract_keywords(docs=<user_prompt_str>, keyphrase_ngram_range=(1,3))

Phát hiện và phân loại đối tượng theo hướng nhắc nhở văn bản

Giải pháp VLP sử dụng tính năng phát hiện và phân đoạn đối tượng theo hướng hội thoại bằng cách phân tích ý nghĩa ngữ nghĩa của văn bản và xác định hành động cũng như đối tượng từ lời nhắc văn bản. SAM nối đất là gói nguồn mở do IDEA-Research tạo ra để phát hiện và phân đoạn mọi thứ từ một hình ảnh nhất định bằng đầu vào văn bản. Nó kết hợp những điểm mạnh của nối đất DINO và Phân đoạn mọi thứ để xây dựng một quy trình rất mạnh mẽ nhằm giải quyết các vấn đề phức tạp.

Hình dưới đây minh họa cách Grounded-SAM có thể phát hiện các đối tượng và tiến hành phân đoạn phiên bản bằng cách hiểu văn bản đầu vào.

SAM nổi bật như một mô hình phân đoạn mạnh mẽ, mặc dù nó yêu cầu các lời nhắc, chẳng hạn như các hộp hoặc điểm giới hạn, để tạo ra mặt nạ đối tượng chất lượng cao. DINO nối đất vượt trội như một máy dò không bắn, tạo ra các hộp và nhãn chất lượng cao một cách thành thạo bằng cách sử dụng lời nhắc văn bản dạng tự do. Khi hai mô hình này được kết hợp, chúng mang lại khả năng vượt trội để phát hiện và phân đoạn bất kỳ đối tượng nào hoàn toàn thông qua việc nhập văn bản. Tập lệnh tiện ích Python dino_sam_inpainting.py được phát triển để tích hợp các phương pháp Grounded-SAM:

!pip install git+https://github.com/facebookresearch/segment-anything.git
import dino_sam_inpainting as D def dino_sam(image_path, text_prompt, text_threshold=0.4, box_threshold=0.5, output_dir='/temp/gradio/outputs'): config_file = 'GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py' # change the path of the model config file grounded_checkpoint = './models/groundingdino_swint_ogc.pth' # change the path of the model sam_checkpoint = './models/sam_vit_h_4b8939.pth' sam_hq_checkpoint = '' #if to use high quality, like sam_hq_vit_h.pth use_sam_hq = '' output_dir = '/tmp/gradio/outputs' device = 'cuda' # make dir os.makedirs(output_dir, exist_ok=True) # load image image_pil, image = D.load_image(image_path) # load model model = D.load_model(config_file, grounded_checkpoint, device=device) output_file_name = f'{format(os.path.basename(image_path))}' # visualize raw image image_pil.save(os.path.join(output_dir, output_file_name)) # run grounding dino model boxes_filt, pred_phrases = D.get_grounding_output( model, image, text_prompt, box_threshold, text_threshold, device=device ) # initialize SAM if use_sam_hq: predictor = D.SamPredictor(D.build_sam_hq(checkpoint=sam_hq_checkpoint).to(device)) else: predictor = D.SamPredictor(D.build_sam(checkpoint=sam_checkpoint).to(device)) image = cv2.imread(image_path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) predictor.set_image(image) size = image_pil.size H, W = size[1], size[0] for i in range(boxes_filt.size(0)): boxes_filt[i] = boxes_filt[i] * torch.Tensor([W, H, W, H]) boxes_filt[i][:2] -= boxes_filt[i][2:] / 2 boxes_filt[i][2:] += boxes_filt[i][:2] boxes_filt = boxes_filt.cpu() transformed_boxes = predictor.transform.apply_boxes_torch(boxes_filt, image.shape[:2]).to(device) masks, _, _ = predictor.predict_torch( point_coords = None, point_labels = None, boxes = transformed_boxes.to(device), multimask_output = False, ) # draw output image plt.figure(figsize=(10, 10)) plt.imshow(image) for mask in masks: D.show_mask(mask.cpu().numpy(), plt.gca(), random_color=True) for box, label in zip(boxes_filt, pred_phrases): D.show_box(box.numpy(), plt.gca(), label) output_file_name = f'{format(os.path.basename(image_path))}' plt.axis('off') plt.savefig( os.path.join(output_dir, f'grounded_sam_{output_file_name}'), bbox_inches="tight", dpi=300, pad_inches=0.0 ) D.save_mask_data(output_dir, masks, boxes_filt, pred_phrases) return f'grounded_sam_{output_file_name}' filename = dino_sam(image_path=<image_path_str>, text_prompt=<object_name_str>, output_dir=<output_image_filename_path_str>, box_threshold=0.5, text_threshold=0.55)

Bạn có thể chọn HQ-SAM để nâng cấp SAM nhằm phân đoạn không bắn chất lượng cao. Hãy tham khảo những điều sau đây giấy mẫu trên GitHub để biết thêm chi tiết.

Đường ống xử lý VLP

Mục tiêu chính của quy trình xử lý VLP là kết hợp điểm mạnh của các mô hình khác nhau, tạo ra quy trình làm việc phức tạp dành riêng cho VLP. Điều quan trọng cần nhấn mạnh là thiết lập này ưu tiên tích hợp các mô hình hàng đầu trên các miền hình ảnh, văn bản và giọng nói. Mỗi đoạn của đường ống đều có dạng mô-đun, tạo điều kiện thuận lợi cho việc sử dụng độc lập hoặc vận hành kết hợp. Hơn nữa, thiết kế đảm bảo tính linh hoạt, cho phép thay thế các thành phần bằng các mẫu cao cấp hơn sắp ra mắt, đồng thời hỗ trợ xử lý đa luồng và xử lý lỗi bằng cách triển khai uy tín.

Hình dưới đây minh họa luồng dữ liệu đường ống VLP và các thành phần dịch vụ.

Trong quá trình khám phá quy trình VLP, chúng tôi thiết kế một quy trình có thể xử lý cả lời nhắc văn bản từ định dạng văn bản mở và đầu vào giọng nói thông thường từ micrô. Việc xử lý âm thanh được hỗ trợ bởi Whisper, có khả năng nhận dạng và dịch giọng nói đa ngôn ngữ. Sau đó, văn bản được phiên âm sẽ được chuyển đến một mô-đun phân loại mục đích, mô-đun này sẽ phân biệt bản chất ngữ nghĩa của lời nhắc. Điều này hoạt động song song với công cụ CoT do LangChain điều khiển, phân chia mục đích chính thành các nhiệm vụ phụ tốt hơn để truy xuất và tạo thông tin chi tiết hơn. Nếu quá trình xử lý hình ảnh được suy ra từ đầu vào, quy trình sẽ bắt đầu quá trình trích xuất từ ​​khóa, chọn N từ khóa hàng đầu bằng cách tham chiếu chéo các đối tượng được phát hiện trong ảnh gốc. Sau đó, những từ khóa này được chuyển đến công cụ Grounded-SAM, công cụ tạo ra các hộp giới hạn. Sau đó, các hộp giới hạn này được cung cấp cho mô hình SAM, mô hình này tạo ra các mặt nạ phân đoạn chính xác, xác định chính xác từng phiên bản đối tượng duy nhất trong ảnh nguồn. Bước cuối cùng liên quan đến việc phủ các mặt nạ và hộp giới hạn lên ảnh gốc, tạo ra một ảnh đã xử lý được trình bày dưới dạng đầu ra đa phương thức.

Khi truy vấn đầu vào tìm cách diễn giải một hình ảnh, quy trình sẽ tương tác với LLM để sắp xếp các nhiệm vụ phụ và tinh chỉnh truy vấn với các mục tiêu được nhắm mục tiêu. Sau đó, kết quả được chuyển đến API VLM, kèm theo hướng dẫn vài lần chụp, URL của hình ảnh đầu vào và lời nhắc văn bản được diễn đạt lại. Đáp lại, VLM cung cấp đầu ra văn bản. Đường dẫn VLP có thể được triển khai bằng cách sử dụng đường dẫn quy trình công việc dựa trên Python hoặc các tiện ích điều phối thay thế. Các quy trình như vậy hoạt động bằng cách xâu chuỗi một tập hợp tuần tự các mô hình phức tạp, đạt đến đỉnh cao là quy trình lập mô hình có cấu trúc một cách tuần tự. Đường ống tích hợp với công cụ Gradio nhằm mục đích trình diễn:

def vlp_text_pipeline(str input_text, str original_image_path, chat_history): intent_class = intent_classification(input_text) key_words = keyword_extraction(input_text) image_caption = vlm(input_text, original_image_path) chat_history.append(image_caption) if intent_class in {supported intents}: object_bounding_box = object_detection(intent_class, key_words, original_image_path) mask_image_path = image_segmentation(object_bounding_box, key_words, original_image_path) chat_history.append(mask_image_path) return chat_history def vlp_voice_pipeline(str audio_file_path, str original_image_path, chat_history): asr_text = whisper_transcrib(audio_file_path) chat_history.append(asr_text, original_image_path, chat_history) return chat_history chat_history = map(vlp_pipelines, input_text, original_image_path, chat_history) if (audio_file_path is None) else map(vlp_voice_pipelines, original_image_path, chat_history)

Hạn chế

Việc sử dụng các mô hình VLM được đào tạo trước cho VLP đã cho thấy tiềm năng đầy hứa hẹn về khả năng hiểu hình ảnh. Cùng với khả năng phát hiện và phân đoạn đối tượng dựa trên ngôn ngữ, VLP có thể tạo ra các kết quả đầu ra hữu ích với chất lượng hợp lý. Tuy nhiên, VLP vẫn có kết quả không nhất quán, thiếu chi tiết trong hình ảnh và thậm chí có thể gây ảo giác. Hơn nữa, các mô hình có thể tạo ra các văn bản không chính xác về mặt thực tế và không nên dựa vào đó để tạo ra thông tin chính xác về mặt thực tế. Do không có mô hình VLM, SAM hoặc LLM được đào tạo trước nào được tham chiếu đã được đào tạo hoặc tinh chỉnh cho các ứng dụng cấp sản xuất dành riêng cho miền nên giải pháp này không được thiết kế cho các ứng dụng quan trọng có thể ảnh hưởng đến sinh kế hoặc gây thiệt hại vật chất

Với kỹ thuật nhanh chóng, mô hình IDEFICS đôi khi có thể nhận ra các chi tiết bổ sung sau gợi ý văn bản; tuy nhiên, kết quả còn lâu mới nhất quán và đáng tin cậy. Nó có thể dai dẳng duy trì những điểm không chính xác và có thể không thể hoặc không muốn sửa chữa ngay cả khi người dùng đánh dấu những điều đó trong cuộc trò chuyện. Nâng cao mô hình xương sống bằng cách tích hợp Swin-ViT và kết hợp nó với các mô hình dựa trên CNN như DualToken-ViT, cùng với việc đào tạo bằng các mô hình nâng cao hơn như Llama-v2, có thể giải quyết một số hạn chế này.

Các bước tiếp theo

Giải pháp VLP đã sẵn sàng cho những tiến bộ đáng chú ý. Khi chúng ta nhìn về phía trước, có một số cơ hội chính để nâng cao các giải pháp VLP:

  • Ưu tiên tích hợp hướng dẫn nhắc nhở động và gợi ý học tập trong vài lần. Những cải tiến này sẽ cho phép phản hồi AI chính xác hơn.
  • Các nhóm phân loại ý định nên tập trung nỗ lực vào việc tinh chỉnh trình phân loại để tiếp thu các ý định có sắc thái, dành riêng cho miền từ các lời nhắc mở. Việc có thể hiểu chính xác ý định của người dùng sẽ rất quan trọng.
  • Triển khai mô hình cây tác nhân suy nghĩ vào quy trình lý luận. Cấu trúc này sẽ cho phép các bước suy luận rõ ràng để hoàn thành các nhiệm vụ phụ.
  • Thí điểm các sáng kiến ​​tinh chỉnh trên các mô hình hàng đầu. Việc điều chỉnh các mô hình VLM, LLM và SAM cho phù hợp với các ngành công nghiệp chính và các trường hợp sử dụng thông qua tinh chỉnh sẽ là yếu tố then chốt.

nhìn nhận

Các tác giả gửi lời cảm ơn tới Vivek Madan và Ashish Rawat vì những phản hồi và đánh giá sâu sắc của họ về bài đăng này.


Giới thiệu về tác giả

Alfred Shen là Chuyên gia cao cấp về AI/ML tại AWS. Ông đã và đang làm việc tại Thung lũng Silicon, giữ các vị trí quản lý và kỹ thuật trong nhiều lĩnh vực khác nhau bao gồm chăm sóc sức khỏe, tài chính và công nghệ cao. Anh ấy là một nhà nghiên cứu AI/ML ứng dụng chuyên dụng, tập trung vào CV, NLP và đa phương thức. Tác phẩm của ông đã được giới thiệu trong các ấn phẩm như EMNLP, ICLR và Public Health.

Tiến sĩ Li Zhang là Giám đốc sản phẩm-Kỹ thuật chính cho các thuật toán tích hợp của Amazon SageMaker JumpStart và Amazon SageMaker, một dịch vụ giúp các nhà khoa học dữ liệu và người thực hành máy học bắt đầu đào tạo và triển khai các mô hình của họ cũng như sử dụng phương pháp học tăng cường với Amazon SageMaker. Công việc trước đây của ông với tư cách là nhân viên nghiên cứu chính và nhà phát minh bậc thầy tại IBM Research đã giành được giải thưởng bài kiểm tra thời gian tại IEEE INFOCOM.

Tiến sĩ Trường Sa Mã là Chuyên gia AI/ML tại AWS. Cô là một nhà công nghệ với bằng Tiến sĩ Khoa học Máy tính, bằng thạc sĩ Tâm lý Giáo dục và nhiều năm kinh nghiệm về khoa học dữ liệu và tư vấn độc lập về AI/ML. Cô đam mê nghiên cứu các phương pháp tiếp cận phương pháp cho trí thông minh của máy móc và con người. Ngoài công việc, cô ấy thích đi bộ đường dài, nấu ăn, tìm kiếm thực phẩm, cố vấn cho sinh viên đại học về tinh thần kinh doanh và dành thời gian cho bạn bè và gia đình.

Tân HoàngTân Hoàng là Nhà khoa học ứng dụng cấp cao cho Amazon SageMaker JumpStart và các thuật toán tích hợp sẵn của Amazon SageMaker. Anh ấy tập trung vào việc phát triển các thuật toán học máy có thể mở rộng. Mối quan tâm nghiên cứu của ông là trong lĩnh vực xử lý ngôn ngữ tự nhiên, học sâu có thể giải thích được trên dữ liệu dạng bảng và phân tích mạnh mẽ về phân cụm không-thời gian phi tham số. Ông đã xuất bản nhiều bài báo tại các hội nghị ACL, ICDM, KDD và Hiệp hội Thống kê Hoàng gia: Series A.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img