Zephyrnet Logosu

Amazon SageMaker JumpStart ile diyalog destekli görsel dil işleme | Amazon Web Hizmetleri

Tarih:

Görsel dil işleme (VLP), üretken yapay zekanın ön saflarında yer alır ve dil zekasını, görüntü anlayışını ve işlemeyi kapsayan çok modlu öğrenmedeki ilerlemelere yön verir. Büyük miktarda çok modlu verilerle eğitilmiş büyük dil modelleri (LLM) ve Karşılaştırmalı Dil-Görüntü Ön Eğitimi (CLIP) ile birleştirildiğinde, görsel dil modelleri (VLM'ler) özellikle görüntü altyazısı, nesne algılama ve segmentasyon ve görsel gibi görevlerde ustadır. soru cevaplama. Kullanım durumları medya eğlencesinden tıbbi teşhise ve üretimde kalite güvencesine kadar çeşitli alanları kapsamaktadır.

VLP'nin temel güçlü yönleri arasında, önceden eğitilmiş VLM'lerin ve LLM'lerin etkin kullanımı, göreve özel değişiklikler gerektirmeden sıfır atış veya birkaç atış tahminlerinin mümkün kılınması ve gündelik çok yönlü diyaloglar aracılığıyla geniş bir spektrumdaki görüntülerin sınıflandırılması yer alır. Tarafından artırıldı Topraklanmış Segment Her ŞeyVLP, nesne algılama ve segmentasyonun özellikle dikkate değer olduğu görsel tanıma konusunda ustalık sergiliyor. Hassasiyeti artırmayı ve halüsinasyonu azaltmayı amaçlayan, alana özgü verileri kullanarak VLM'lere ve LLM'lere daha fazla ince ayar yapma potansiyeli mevcuttur. Bununla birlikte, diğer yeni ortaya çıkan teknolojiler gibi, model karmaşıklığının yönetilmesi, çeşitli yöntemlerin uyumlaştırılması ve tek tip değerlendirme ölçütlerinin formüle edilmesinde engeller devam etmektedir.

OBELICS için NOMIC, IDEFICS için HuggingFaceM4, Gradio için Charles Bensimon ve TTS için Amazon Polly'nin izniyle

Bu yazıda, VLP prototiplemesinin teknik nüanslarını aşağıdakileri kullanarak inceliyoruz: Amazon SageMaker Hızlı Başlangıç çağdaş üretken yapay zeka modelleriyle birlikte. Çok yönlü diyaloglar aracılığıyla, talimat odaklı sıfır atış ve birkaç atış görüş dili işlemenin yeteneklerini vurguluyor, çok yönlülüğünü vurguluyor ve daha geniş çok modlu topluluğun ilgisini çekmeyi hedefliyoruz. Demo uygulama kodu aşağıda mevcuttur GitHub repo.

Çözüme genel bakış

Önerilen VLP çözümü, doğru çok modlu çıktılar elde etmek için son teknoloji ürünü üretken yapay zeka modüllerinden oluşan bir paketi entegre ediyor. Mimarinin merkezinde, her ikisi de görsel ve metinsel veri akışlarının kodunun çözülmesinde etkili olan, ince ayarlı VLM ve LLM bulunmaktadır. TGI çerçevesi, güçlü entegrasyon ve zahmetsiz erişilebilirlik için RESTful API'ler sağlayarak model çıkarım katmanını destekler. İşitsel veri işlememizi destekleyen Whisper ASR aynı zamanda sesten metne dönüşümlerin kolaylaştırılmasını sağlayan bir RESTful API ile donatılmıştır. Görüntüden metne segmentasyon gibi karmaşık zorlukların üstesinden gelmek için konteynerleştirilmiş Topraklanmış Segment Her Şey ile sinerji oluşturan modül Topraklanmış DINO ve Her Şeyi Segment Modeli (SAM) metin odaklı nesne algılama ve segmentasyon mekanizması. Sistem daha da geliştirildi DistilBERT, diyalog rehberli çok sınıflı sınıflandırma sürecimizi optimize ediyoruz. Bu bileşenlerin düzenlenmesi, metin veya ses girişlerini parçalara ayırma, kullanıcı niyetlerini ayırt etme ve alt görevleri düzenli olarak ilgili hizmetlere devretme konusunda yetkin, karmaşık bir mekanizma olan LangChain işleme hattıdır. Bu operasyonların sentezi, toplu çıktılar üreterek kesin ve bağlama duyarlı çok modlu yanıtlar sunar.

Aşağıdaki şema diyalog rehberli VLP çözümümüzün mimarisini göstermektedir.

Metin Oluşturma Çıkarımı

Metin Oluşturma Çıkarımı (TGI), Hugging Face tarafından LLM'lerin yanı sıra çıkarım için VLM'lerin dağıtımı için geliştirilen açık kaynaklı bir araç setidir. Falcon ve Llama V2 gibi bazı önde gelen açık kaynaklı LLM'lerin yanı sıra IDEFICS gibi VLM'leri destekleyen tensör paralelliği, model paralelliği ve dinamik gruplama kullanarak yüksek performanslı metin oluşturmaya olanak tanır. En yeni Hugging Face LLM modüllerini kullanma Amazon SageMaker, AWS müşterileri artık SageMaker derin öğrenme konteynerlerinin (DLC'ler) gücünden yararlanabilir. Bu, önceden oluşturulmuş SageMaker aracılığıyla LLM'lerin Hugging Face merkezlerinden sorunsuz bir şekilde konuşlandırılmasına olanak tanır DLCs TGI'yi destekliyoruz. Bu çıkarım kurulumu yalnızca olağanüstü performans sunmakla kalmaz, aynı zamanda ağır GPU altyapısını yönetme ihtiyacını da ortadan kaldırır. Ek olarak, çıkarım uç noktalarının otomatik olarak ölçeklendirilmesi, gelişmiş güvenlik ve yerleşik model izleme gibi gelişmiş özelliklerden de yararlanırsınız.

TGI, geleneksel çıkarım yöntemlerine göre 100 kata kadar daha hızlı metin oluşturma hızı sunar ve artan istekleri karşılamak için verimli bir şekilde ölçeklenir. Tasarımı, çeşitli LLM'lerle uyumluluğu sağlar ve açık kaynak olması nedeniyle ileri özellikleri teknoloji topluluğu için demokratikleştirir. TGI'nın çok yönlülüğü, sohbet robotlarını geliştirerek, makine çevirilerini geliştirerek, metinleri özetleyerek ve şiirden koda kadar çeşitli içerikler üreterek etki alanlarına yayılmaktadır. Bu nedenle TGI, metin oluşturma zorluklarına yönelik kapsamlı bir çözüm olarak ortaya çıkıyor. TGI Python'da uygulanır ve PyTorch çerçevesini kullanır. Açık kaynaklıdır ve GitHub'da mevcuttur. Ayrıca, daha hızlı performans için QLoRA'lı PEFT'yi ve temel modeli değiştirmeden, uzunluğu ve çeşitliliğinin belirlenmesi gibi oluşturulan metin niteliklerini kontrol etmek için logit çarpıtmayı da destekler.

Doğrudan aşağıdaki adresten özelleştirilmiş bir TGI Docker konteyneri oluşturabilirsiniz Dockerfile ve ardından konteyner görüntüsünü Amazon'a aktarın Elastik Konteyner Kaydı (ECR) çıkarım dağıtımı için. Aşağıdaki koda bakın:

%%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}

TGI ile LLM çıkarımı

Bu yazıdaki VLP çözümü, LLM'yi LangChain ile birlikte kullanıyor ve daha doğru amaç sınıflandırması için düşünce zinciri (CoT) yaklaşımını kullanıyor. CoT, sorgu hedeflerini karşılamak amacıyla amacı ve tetikleyiciyle ilişkili alt görevleri ayırt etmek için sorguları işler. Llama-2-7b-sohbet-hf (lisans anlaşması), diyalog bağlamları için tasarlanmış Llama-2 serisinin geliştirilmiş versiyonudur. Llama-2-7b-chat-hf'nin çıkarımı TGI konteyner görüntüsü tarafından desteklenmektedir ve bu da onu API özellikli bir hizmet olarak kullanılabilir hale getirmektedir.

Llama-2-7b-chat-hf çıkarımı için en yüksek performansı elde etmek amacıyla g5.2xlarge (24G VRAM) önerilir. Daha sağlam bir Yüksek Lisans gerektiren uygulamalar için Llama-v2-13b modelleri, g5.12xlarge (96G VRAM) örneğine iyi uyum sağlar. Llama-2-70b modelleri için, bit ve bayt nicelemesi kullanan GPU [2xlarge] – 2x Nvidia A100'ü veya g5.48xlarge'ı düşünün. Özellikle, bit ve bayt nicelemesinin kullanılması, gerekli çıkarım GPU VRAM'ını %50 oranında azaltabilir.

Çıkarım amacıyla Llama-2-7b-chat-hf'yi dağıtmak için SageMaker DLC'lerini daha önce ayrıntılı olarak açıklanan TGI kapsayıcı görüntüsüyle birlikte kullanabilirsiniz (aşağıdaki koda bakın). Alternatif olarak, bir Docker konteyneri kullanarak g5.2xlarge örneğinde kavram kanıtı için hızlı bir yerel çıkarım yapabilirsiniz.

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)

LLM'nize ince ayar yapın ve özelleştirin

SageMaker JumpStart, LLM'lerin eğitimi ve ince ayarı için QLoRA dahil, Parametre Verimli İnce Ayarın (PEFT) kullanımını gösteren çok sayıda dizüstü bilgisayar örneği sunar. QLoRA, önceden eğitilmiş model ağırlıklarını statik bir durumda tutar ve Transformer yapısının her katmanına eğitilebilir sıralama ayrıştırma matrisleri sunar. Bu yöntem, aşağı yönlü görevler için gerekli olan eğitilebilir parametrelerin sayısını önemli ölçüde azaltır.

Alternatif olarak keşfedebilirsiniz Doğrudan Tercih Optimizasyonu (DPO), bir ödül modeli kurma, LLM'den ince ayar sırasında numune alma veya kapsamlı hiperparametre ayarlamaları gerekliliğini ortadan kaldırır. Son araştırmalar DPO'nun ince ayarının üstün olduğunu gösterdi RLHF duygu oluşumunu yönetmede yardımcı olur ve özetlerin ve tek görüşme yanıtlarının kalitesini artırır, aynı zamanda kurulumu ve eğitimi oldukça kolaydır. DPO eğitim sürecinin üç ana adımı vardır (bkz. GitHub repo detaylar için):

  1. İnce ayarlı bir LLM oluşturmak için önceden eğitilmiş bir temel LLM'de denetimli ince ayar yapın.
  2. Takviyeli öğrenme modeli oluşturmak için ince ayarlı modeli kullanarak DPO eğiticisini çalıştırın.
  3. Metin oluşturma çıkarımı için bağdaştırıcıları DPO'dan temel LLM modeline birleştirin.

TGI kapsayıcı görüntüsünü kullanarak birleştirilmiş modeli çıkarım için dağıtabilirsiniz.

Görsel dil modeli

Hem görme hem de dil yöntemlerini birleştiren Görsel Dil Modelleri (VLM), genellemede artan etkililiğini göstererek, sıfır adımlı yönlendirmeler veya talimatlarla birlikte birkaç adımlı yönlendirmeler içeren çeşitli pratik kullanım durumlarına yol açmaktadır. Bir VLM tipik olarak üç temel öğeden oluşur: bir görüntü kodlayıcı, bir metin kodlayıcı ve iki kodlayıcıdan gelen bilgileri birleştirme stratejisi. Bu temel unsurlar birbirine sıkı sıkıya bağlıdır çünkü kayıp fonksiyonları hem model mimarisi hem de öğrenme stratejisi etrafında tasarlanmıştır. Son teknolojiye sahip birçok VLM, CLIP/ViT (OpenCLIP gibi) ve LLM'leri (Llama-v1 gibi) kullanır ve Wikipedia, LAION ve Public Multimodal Dataset gibi herkese açık çok sayıda veri kümesi üzerinde eğitilir.

Bu demoda önceden eğitilmiş bir IDEFICS-9b-talimat tarafından geliştirilen model SarılmaYüzM4, iki önceden eğitilmiş modeli (laion/CLIP-ViT-H-9-laion14B-s2B-b32K ve huggyllama/llama-79b) birleştirerek Flamingo'da ortaya konan eğitim prosedürünü takip eden, IDEFICS-7b'nin ince ayarlı bir versiyonudur. değiştirilmiş Transformatör blokları ile. IDEFICS-9b, her biri 150x1.582 çözünürlüklü toplam 224 milyar token ve 224 milyar görüntü içeren OBELIC, Wikipedia, LAION ve PMD multimodal veri kümeleri üzerinde eğitildi. IDEFICS-9b, 7 milyon etkin parti büyüklüğüne sahip Llama-1.31b'yi temel alıyordu. IDEFICS-9b talimatı daha sonra tüm parametrelerin (görüş kodlayıcı, dil modeli, çapraz dikkatler) çözülmesiyle üretken yapay zeka kullanılarak büyütmeden oluşturulan 6.8 milyon çok modlu talimat veri kümesiyle ince ayar yapıldı. İnce ayar veri kümeleri, aşağıdaki örnekleme oranlarına sahip eğitim öncesi verileri içerir: görüntü-metin çiftlerinin %5.1'i ve OBELICS çok modlu web belgelerinin %30.7'si.

Eğitim yazılımı, Hugging Face Transformers ve Accelerate'in üzerine kurulmuştur ve DeepSpeed ​​Zero-3 eğitim için artı WebVeri Kümesi ve Image2DataSets veri yükleme için. IDEFICS-9b'nin ön eğitiminin 350 Nvidia A128 GPU'da tamamlanması 100 saat sürerken, IDEFICS-9b-instruct'un ince ayarının her ikisi de AWS p70xlarge örneklerinde olmak üzere 128 Nvidia A100 GPU'da 4.24 saat sürdü.

SageMaker ile, çıkarım görevleri için IDEFICS-9b-instruct'ı g5.2xlarge örneğinde sorunsuz bir şekilde dağıtabilirsiniz. Aşağıdaki kod parçacığı, özelleştirilmiş TGI Docker görüntüsüyle entegre edilmiş özel bir derin öğrenme yerel kapsayıcısının nasıl başlatılacağını göstermektedir:

%%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)Bu görseli hangi cihaz oluşturdu? Lütfen bu görüntünün temel klinik amacını açıklayınız. Bu görüntüye dayanarak bir radyoloji raporu yazabilir misiniz? ", 
 "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 }'

IDEFICS'e veya diğer VLM'lere ince ayar yapabilirsiniz. Flamingo'yu aç talimatlarla birlikte kendi etki alanına özel verilerinizle. Aşağıdakilere bakın README çok modlu veri kümesi hazırlığı ve ince ayar komut dosyası daha fazla detay için.

Düşünce zinciriyle niyet sınıflandırması

Bir resim bin kelimeye bedeldir, bu nedenle VLM, belirli bir resim ve sorudan doğru bir başlık oluşturmak için rehberliğe ihtiyaç duyar. Modeli daha iyi performansa yönlendirmek için bilgi isteminde gösteriler sağladığımız bağlam içi öğrenmeyi etkinleştirmek için birkaç adımlık ipucu kullanabiliriz. Gösterimler, modelin bir yanıt üretmesini istediğimiz sonraki örnekler için koşullandırma görevi görür.

Standart birkaç adımlık ipucu pek çok görev için işe yarar ancak özellikle daha karmaşık akıl yürütme görevleriyle uğraşırken hala mükemmel bir teknik değildir. Birkaç adımlık yönlendirme şablonu güvenilir yanıtlar almak için yeterli değildir. Sorunu adımlara ayırıp bunu modele göstermemiz yardımcı olabilir. Son zamanlarda, düşünce zinciri (CoT) yönlendirme, daha karmaşık aritmetik, sağduyu ve sembolik akıl yürütme görevlerini ele almak için popüler hale getirildi

CoT, gösteriler için tek tek muhakeme zincirleri oluşturmak amacıyla Yüksek Lisans'ları "Adım adım düşünelim" istemiyle kullanarak manuel çabaları ortadan kaldırır. Ancak bu otomatik süreç yine de oluşturulan zincirlerde hatalara yol açabilir. Hataların etkilerini azaltmak için gösterilerin çeşitliliği önemlidir. Bu yazı, soruları çeşitlilikle örnekleyen ve gösterileri oluşturmak için akıl yürütme zincirleri üreten Auto-CoT'yi önermektedir. CoT iki ana aşamadan oluşur:

  • Soru kümeleme - Belirli bir veri kümesindeki soruları birkaç kümeye ayırın
  • Gösterim örneklemesi – Her kümeden temsili bir soru seçin ve sıfır atışlı CoT'yi basit buluşsal yöntemlerle kullanarak akıl yürütme zincirini oluşturun

Aşağıdaki kod parçacığına bakın:

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

Otomatik Konuşma Tanıma

VLP çözümü, sesli sorguları işlemek için OpenAI'nin Otomatik Konuşma Tanıma (ASR) modeli olan Whisper'ı içerir. Whisper, şablonu kullanılarak SageMaker JumpStart aracılığıyla zahmetsizce dağıtılabilir. Basit kurulumu, yüksek performansı, ölçeklenebilirliği ve güvenilirliği ile bilinen SageMaker JumpStart, olağanüstü ses odaklı uygulamalar oluşturmayı amaçlayan geliştiriciler için idealdir. Aşağıdaki GitHub repo nasıl kullanılacağını gösterir SageMaker gerçek zamanlı çıkarım uç noktaları anında sesten metne transkripsiyon için Whisper'a ince ayar yapmak ve barındırmak, SageMaker barındırma ve üretken modeller arasındaki sinerjiyi sergilemek.

Alternatif olarak doğrudan indirebilirsiniz. Dockerfile.gpu tarafından geliştirilen GitHub'dan ahmetonerönceden yapılandırılmış bir RESTful API içerir. Daha sonra bir Docker görüntüsü oluşturabilir ve kapsayıcıyı GPU destekli bir Amazon'da çalıştırabilirsiniz. Elastik Bilgi İşlem Bulutu Hızlı bir kavram kanıtı için (EC2) örneği. Aşağıdaki koda bakın:

%%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'

Verilen örnekte, Whisper API'yi barındırmak için 8083 numaralı bağlantı noktası, gelen ağ güvenlik kuralları etkinleştirilerek seçilmiştir. Test etmek için bir web tarayıcısını şu adrese yönlendirin: http://<IP_or_hostname>:8083/docs ve ASR uç noktasına bir POST istek testi başlatın. Alternatif olarak, API bağlantısını doğrulamak için verilen komutu çalıştırın veya fısıltı canlı modülünü kullanın.

!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

Çok sınıflı metin sınıflandırması ve anahtar kelime çıkarma

Çok sınıflı sınıflandırma, metin istemine dayalı nesne algılama ve segmentasyonda çok önemli bir rol oynar. distilbert-base-kasasız-ince ayarlı-sst-2-ingilizce model rafine bir kontrol noktasıdır DistilBERT-baz-kasasız, optimize edilmiş Stanford Duyarlılık Ağaç Bankası (SST2) Hugging Face'in veri kümesi. Bu model, geliştirme setinde %91.3'lük bir doğruluk elde ederken, bert-base-uncaseed muadili %92.7'lik bir doğruluğa sahiptir. Hugging Face Hub, 1,000'den fazla önceden eğitilmiş metin sınıflandırma modeline erişim sağlar. Gelişmiş hassasiyet arayanlar için SageMaker JumpStart şunları sağlar: şablonları Daha özel sınıflandırma görevleri için özel açıklamalı veri kümelerini kullanarak DistilBERT'e ince ayar yapmak.

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) 

Anahtar kelime çıkarma işlemi şunları kullanır: KeyBERT Bir belgeyle (bu durumda sorguda belirtilen nesnelerle) yakından uyumlu anahtar sözcükler ve anahtar sözcük öbekleri oluşturmak için BERT yerleştirmelerinden yararlanan basitleştirilmiş ve kullanıcı dostu bir yöntem olan modül:

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

Metin istemi odaklı nesne algılama ve sınıflandırma

VLP çözümü, metnin anlamsal anlamını analiz ederek ve metin isteminden eylem ve nesneleri tanımlayarak diyalog kılavuzlu nesne algılama ve bölümlendirmeyi kullanır. Topraklanmış-SAM IDEA-Research tarafından belirli bir görüntüdeki herhangi bir şeyi metin girişleriyle algılamak ve bölümlere ayırmak için oluşturulan açık kaynaklı bir pakettir. Güçlü yönlerini birleştirir DINO'yu topraklama ve karmaşık sorunları çözmek için çok güçlü bir işlem hattı oluşturmak amacıyla Her Şeyi Segmentlere Ayırın.

Aşağıdaki şekil, Grounded-SAM'in metin girişini kavrayarak nesneleri nasıl algılayabildiğini ve örnek bölümlendirmeyi nasıl gerçekleştirebildiğini göstermektedir.

SAM Yüksek kaliteli nesne maskeleri üretmek için sınırlayıcı kutular veya noktalar gibi istemler gerektirmesine rağmen sağlam bir segmentasyon modeli olarak öne çıkıyor. Topraklama DINO, serbest biçimli metin istemlerini kullanarak ustaca yüksek kaliteli kutular ve etiketler oluşturarak sıfır atış dedektörü olarak öne çıkıyor. Bu iki model birleştirildiğinde, herhangi bir nesneyi yalnızca metin girişleri yoluyla algılama ve segmentlere ayırma konusunda olağanüstü bir yetenek sunarlar. Python yardımcı programı komut dosyası dino_sam_inpainting.py Grounded-SAM yöntemlerini entegre etmek için geliştirildi:

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

Yüksek kaliteli sıfır atış segmentasyonu için SAM'i yükseltmek amacıyla HQ-SAM'i seçebilirsiniz. Aşağıdakilere bakın kâğıt ve kod Daha fazla ayrıntı için GitHub'daki örnek.

VLP işleme hattı

VLP işleme hattının temel amacı, farklı modellerin güçlü yönlerini birleştirerek VLP'ye özel gelişmiş bir iş akışı oluşturmaktır. Bu kurulumun üst düzey modellerin görsel, metin ve ses alanlarında entegrasyonuna öncelik verdiğini vurgulamak önemlidir. Boru hattının her bir bölümü modüler olup, bağımsız kullanıma veya birleşik çalışmaya olanak sağlar. Ayrıca tasarım, bileşenlerin henüz gelecek olan daha gelişmiş modellerle değiştirilmesine olanak tanıyarak esneklik sağlarken, aynı zamanda saygın uygulamayla çoklu iş parçacığını ve hata işlemeyi destekler.

Aşağıdaki şekilde bir VLP işlem hattı veri akışı ve hizmet bileşenleri gösterilmektedir.

VLP boru hattını incelerken, hem açık metin formatındaki metin istemlerini hem de mikrofonlardan gelen gündelik ses girişlerini işleyebilen bir sistem tasarladık. Ses işleme, çok dilli konuşma tanıma ve çeviri yeteneğine sahip Whisper tarafından kolaylaştırılmıştır. Yazıya aktarılan metin daha sonra istemlerin anlamsal özünü ayırt eden bir amaç sınıflandırma modülüne yönlendirilir. Bu, LangChain tahrikli CoT motoruyla birlikte çalışarak ana amacı daha ayrıntılı bilgi alımı ve üretimi için daha ince alt görevlere böler. Görüntü işlemenin girdiden çıkarımı yapılıyorsa, işlem hattı, orijinal görüntüde tespit edilen nesnelere çapraz referans vererek en üstteki N anahtar kelimeyi seçerek bir anahtar kelime çıkarma işlemini başlatır. Daha sonra bu anahtar kelimeler, sınırlayıcı kutular oluşturan Grounded-SAM motoruna yönlendirilir. Bu sınırlayıcı kutular daha sonra, kaynak görüntüdeki her benzersiz nesne örneğinin yerini saptayarak hassas segmentasyon maskeleri oluşturan SAM modeline sağlanır. Son adım, maskelerin ve sınırlayıcı kutuların orijinal görüntünün üzerine yerleştirilmesini içerir ve böylece çok modlu bir çıktı olarak sunulan işlenmiş bir görüntü elde edilir.

Giriş sorgusu bir görüntüyü yorumlamaya çalıştığında, işlem hattı alt görevleri düzenlemek ve sorguyu hedeflenen hedeflere göre hassaslaştırmak için LLM'yi devreye sokar. Daha sonra sonuç, birkaç adımlık talimatlar, giriş görüntüsünün URL'si ve yeniden ifade edilen metin istemiyle birlikte VLM API'sine yönlendirilir. Yanıt olarak VLM metinsel çıktı sağlar. VLP işlem hattı, Python tabanlı bir iş akışı işlem hattı veya alternatif düzenleme yardımcı programları kullanılarak uygulanabilir. Bu tür boru hatları, sıralı bir dizi karmaşık modeli zincirleyerek çalışır ve sırayla yapılandırılmış bir modelleme prosedürüyle sonuçlanır. Boru hattı, tanıtım amaçlı olarak Gradio motoruyla entegre olur:

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)

Sınırlamalar

VLP için önceden eğitilmiş VLM modellerinin kullanılması, görüntü anlama konusunda umut verici bir potansiyel ortaya koymuştur. Dile dayalı nesne algılama ve bölümlemenin yanı sıra VLP, makul kalitede, kullanışlı çıktılar üretebilir. Ancak VLP hala tutarsız sonuçlardan, resimlerdeki ayrıntıların eksik olmasından dolayı sıkıntı çekiyor ve hatta halüsinasyon bile görebiliyor. Dahası, modeller gerçeklere dayalı olarak yanlış metinler üretebilir ve gerçeklere dayalı olarak doğru bilgiler üretme konusunda bunlara güvenilmemelidir. Başvurulan önceden eğitilmiş VLM, SAM veya LLM modellerinden hiçbiri alana özgü üretim düzeyindeki uygulamalar için eğitilmediğinden veya ince ayar yapılmadığından, bu çözüm geçim kaynaklarını etkileyebilecek veya maddi kayıplara neden olabilecek kritik görev uygulamaları için tasarlanmamıştır.

Hızlı mühendislik sayesinde IDEFICS modeli bazen bir metin ipucundan sonra ekstra ayrıntıları tanıyabilir; ancak sonuç tutarlı ve güvenilir olmaktan uzaktır. Yanlışlıkları sürdürmekte ısrarcı olabilir ve kullanıcılar konuşma sırasında bunları vurgulasa bile düzeltme yapamayabilir veya yapma konusunda isteksiz olabilir. Swin-ViT'i entegre ederek ve onu DualToken-ViT gibi CNN tabanlı modellerle birleştirerek omurga modelini geliştirmek ve Llama-v2 gibi daha gelişmiş modelleri kullanarak eğitim vermek, potansiyel olarak bu sınırlamalardan bazılarını giderebilir.

Sonraki adımlar

VLP çözümü kayda değer bir ilerleme kaydetmeye hazırlanıyor. İleriye baktığımızda VLP çözümlerini geliştirmek için birkaç önemli fırsat var:

  • Dinamik istem talimatlarını ve birkaç adımlık öğrenme ipuçlarını entegre etmeye öncelik verin. Bu iyileştirmeler daha doğru yapay zeka geri bildirimi sağlayacak.
  • Niyet sınıflandırma ekipleri, açık istemlerden incelikli, alana özgü amaçları anlayacak şekilde sınıflandırıcıyı iyileştirme çabalarına odaklanmalıdır. Kesin kullanıcı amaçlarını anlayabilmek kritik öneme sahip olacaktır.
  • Akıl yürütme hattına bir etmen düşünce ağacı modeli uygulayın. Bu yapı, alt görevleri tamamlamak için açık akıl yürütme adımlarına izin verecektir.
  • Önde gelen modellerde ince ayar girişimlerini pilot olarak gerçekleştirin. VLM, LLM ve SAM modellerinin temel sektörlere göre uyarlanması ve ince ayar yoluyla kullanım örnekleri çok önemli olacaktır.

onay

Yazarlar, bu yazıya ilişkin anlayışlı geri bildirimleri ve incelemeleri için Vivek Madan ve Ashish Rawat'a şükranlarını sunarlar.


yazarlar hakkında

alfred shen AWS'de Kıdemli Yapay Zeka/ML Uzmanıdır. Silikon Vadisi'nde sağlık, finans ve yüksek teknoloji dahil olmak üzere çeşitli sektörlerde teknik ve yönetimsel pozisyonlarda çalışmaktadır. Özgeçmiş, NLP ve multimodalite üzerine yoğunlaşan özel bir uygulamalı AI/ML araştırmacısıdır. Çalışmaları EMNLP, ICLR ve Halk Sağlığı gibi yayınlarda sergilendi.

Doktor Li Zhang Amazon SageMaker JumpStart ve Amazon SageMaker yerleşik algoritmaları için Baş Ürün Yöneticisi-Tekniktir; veri bilimcilerin ve makine öğrenimi uygulayıcılarının modellerini eğitmeye ve dağıtmaya başlamalarına yardımcı olan ve Amazon SageMaker ile takviyeli öğrenmeyi kullanan bir hizmettir. IBM Research'te baş araştırma personeli ve usta mucit olarak yaptığı geçmiş çalışmalar, IEEE INFOCOM'da zaman testi makalesi ödülünü kazandı.

Doktor Changsha Ma AWS'de bir AI/ML Uzmanıdır. Bilgisayar Bilimi alanında doktora derecesi, Eğitim Psikolojisi alanında yüksek lisans derecesi ve AI/ML alanında veri bilimi ve bağımsız danışmanlık alanında yılların deneyimine sahip bir teknoloji uzmanıdır. Makine ve insan zekası için metodolojik yaklaşımları araştırma konusunda tutkulu. İş dışında yürüyüş yapmayı, yemek yapmayı, yemek avlamayı, üniversite öğrencilerine girişimcilik konusunda rehberlik etmeyi ve arkadaşları ve aileleriyle vakit geçirmeyi seviyor.

Xin HuangXin Huang Amazon SageMaker JumpStart ve Amazon SageMaker yerleşik algoritmaları için Kıdemli Uygulamalı Bilim İnsanıdır. Ölçeklenebilir makine öğrenimi algoritmaları geliştirmeye odaklanıyor. Araştırma ilgi alanları, doğal dil işleme, tablo verileri üzerinde açıklanabilir derin öğrenme ve parametrik olmayan uzay-zaman kümelemenin sağlam analizi alanındadır. ACL, ICDM, KDD konferanslarında ve Royal Statistical Society: Series A'da birçok makale yayınladı.

spot_img

En Son İstihbarat

spot_img