Le traitement visuel du langage (VLP) est à l'avant-garde de l'IA générative, favorisant les progrès de l'apprentissage multimodal qui englobe l'intelligence du langage, la compréhension de la vision et le traitement. Combinés avec de grands modèles de langage (LLM) et un pré-entraînement contrastif en langage-image (CLIP) formés avec une grande quantité de données multimodales, les modèles de langage visuel (VLM) sont particulièrement aptes à des tâches telles que le sous-titrage d'images, la détection et la segmentation d'objets, et la visualisation. réponse aux questions. Leurs cas d'utilisation couvrent divers domaines, du divertissement médiatique aux diagnostics médicaux et à l'assurance qualité dans la fabrication.
Les principaux atouts du VLP incluent l'utilisation efficace de VLM et LLM pré-entraînés, permettant des prédictions de tir nul ou de quelques tirs sans nécessiter de modifications spécifiques à la tâche, et de catégoriser les images d'un large spectre via des dialogues occasionnels à plusieurs tours. Augmenté par Segment mis à la terre, VLP fait preuve de prouesses en matière de reconnaissance visuelle, la détection et la segmentation d'objets étant particulièrement remarquables. Il existe un potentiel pour affiner davantage les VLM et les LLM à l’aide de données spécifiques à un domaine, dans le but d’améliorer la précision et d’atténuer les hallucinations. Cependant, comme pour d’autres technologies naissantes, des obstacles subsistent dans la gestion de la complexité des modèles, l’harmonisation des diverses modalités et la formulation de mesures d’évaluation uniformes.
Avec l'aimable autorisation de NOMIC pour OBELICS, HuggingFaceM4 pour IDEFICS, Charles Bensimon pour Gradio et Amazon Polly pour TTS
Dans cet article, nous explorons les nuances techniques du prototypage VLP en utilisant Amazon SageMaker JumpStart en conjonction avec les modèles d’IA générative contemporains. Grâce à des dialogues en plusieurs tours, nous mettons en évidence les capacités du traitement du langage de vision orienté vers l'instruction et en quelques plans, en soulignant sa polyvalence et en visant à capter l'intérêt de la communauté multimodale au sens large. Le code d’implémentation de la démonstration est disponible dans ce qui suit GitHub repo.
Vue d'ensemble de la solution
La solution VLP proposée intègre une suite de modules d'IA générative de pointe pour produire des sorties multimodales précises. Au cœur de l'architecture se trouvent les VLM et LLM affinés, tous deux essentiels au décodage des flux de données visuelles et textuelles. Le framework TGI sous-tend la couche d'inférence de modèle, fournissant des API RESTful pour une intégration robuste et une accessibilité sans effort. En complément de notre traitement des données auditives, le Whisper ASR est également équipé d'une API RESTful, permettant des conversions voix-texte rationalisées. Pour relever des défis complexes tels que la segmentation image-texte, nous utilisons l'outil conteneurisé Segment mis à la terre module, en synergie avec le DINO mis à la terre ainsi que Segmenter n'importe quel modèle (SAM) pour la détection et la segmentation d'objets basés sur le texte. Le système est encore affiné avec DistilBERT, optimisant notre processus de classification multi-classes guidé par le dialogue. Le pipeline de traitement LangChain orchestre ces composants, un mécanisme sophistiqué capable de disséquer les entrées textuelles ou vocales, de discerner les intentions des utilisateurs et de déléguer méthodiquement des sous-tâches aux services concernés. La synthèse de ces opérations produit des résultats agrégés, fournissant des réponses multimodales précises et contextuelles.
Le schéma suivant illustre l'architecture de notre solution VLP guidée par le dialogue.
Inférence de génération de texte
Text Generation Inference (TGI) est une boîte à outils open source développée par Hugging Face pour déployer des LLM ainsi que des VLM pour l'inférence. Il permet une génération de texte hautes performances à l'aide du parallélisme tenseur, du parallélisme de modèles et du traitement par lots dynamique prenant en charge certains LLM open source de premier plan tels que Falcon et Llama V2, ainsi que des VLM comme IDEFICS. Utilisation des derniers modules Hugging Face LLM sur Amazon SageMaker, Les clients AWS peuvent désormais exploiter la puissance des conteneurs d'apprentissage profond (DLC) SageMaker. Cela permet le déploiement transparent des LLM à partir des hubs Hugging Face via SageMaker pré-construit. DLCs prenant en charge TGI. Cette configuration d'inférence offre non seulement des performances exceptionnelles, mais élimine également le besoin de gérer l'infrastructure GPU lourde. De plus, vous bénéficiez de fonctionnalités avancées telles que la mise à l'échelle automatique des points de terminaison d'inférence, une sécurité améliorée et une surveillance intégrée des modèles.
TGI offre des vitesses de génération de texte jusqu'à 100 fois plus rapides que les méthodes d'inférence traditionnelles et s'adapte efficacement pour gérer l'augmentation des demandes. Sa conception garantit la compatibilité avec différents LLM et, étant open source, démocratise les fonctionnalités avancées pour la communauté technologique. La polyvalence de TGI s'étend à tous les domaines, améliorant les chatbots, améliorant les traductions automatiques, résumant des textes et générant des contenus diversifiés, de la poésie au code. Par conséquent, TGI apparaît comme une solution complète aux défis de génération de texte. TGI est implémenté en Python et utilise le framework PyTorch. Il est open source et disponible sur GitHub. Il prend également en charge PEFT avec QLoRA pour des performances plus rapides et la déformation des logits pour contrôler les attributs du texte généré, tels que la détermination de sa longueur et de sa diversité, sans modifier le modèle sous-jacent.
Vous pouvez créer un conteneur TGI Docker personnalisé directement à partir des éléments suivants Dockerfile puis transférez l'image du conteneur vers Amazon Registre de conteneurs élastique (ECR) pour le déploiement d’inférence. Voir le code suivant :
%%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}
Inférence LLM avec TGI
La solution VLP présentée dans cet article utilise le LLM en tandem avec LangChain, exploitant l'approche de chaîne de pensée (CoT) pour une classification d'intention plus précise. CoT traite les requêtes pour discerner l'intention et déclencher les sous-tâches associées pour atteindre les objectifs de la requête. Lama-2-7b-chat-hf (accord de licence) est la version simplifiée de la ligne Llama-2, conçue pour les contextes de dialogue. L'inférence de Llama-2-7b-chat-hf est alimentée par l'image du conteneur TGI, la rendant disponible en tant que service compatible API.
Pour l'inférence Llama-2-7b-chat-hf, un g5.2xlarge (24 Go de VRAM) est recommandé pour obtenir des performances optimales. Pour les applications nécessitant un LLM plus robuste, les modèles Llama-v2-13b s'adaptent bien à une instance g5.12xlarge (96 Go de VRAM). Pour les modèles Llama-2-70b, envisagez soit le GPU [2xlarge] – 2x Nvidia A100 utilisant la quantification bitsandbytes, soit le g5.48xlarge. Notamment, l’utilisation de la quantification bits et octets peut réduire de 50 % la VRAM GPU d’inférence requise.
Vous pouvez utiliser les DLC SageMaker avec l'image du conteneur TGI détaillée précédemment pour déployer Llama-2-7b-chat-hf à des fins d'inférence (voir le code suivant). Alternativement, vous pouvez effectuer une inférence locale rapide pour une preuve de concept sur une instance g5.2xlarge à l'aide d'un conteneur 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)
Affinez et personnalisez votre LLM
SageMaker JumpStart propose de nombreux exemples de notebooks qui démontrent l'utilisation du Parameter Efficient Fine Tuning (PEFT), y compris QLoRA pour la formation et le réglage fin des LLM. QLoRA maintient les pondérations du modèle pré-entraîné dans un état statique et introduit des matrices de décomposition de rang pouvant être entraînées dans chaque couche de la structure Transformer. Cette méthode réduit considérablement le nombre de paramètres pouvant être entraînés nécessaires pour les tâches en aval.
Alternativement, vous pouvez explorer Optimisation des préférences directes (DPO), ce qui évite la nécessité de mettre en place un modèle de récompense, de prélever des échantillons lors du réglage fin du LLM ou d'ajuster de manière approfondie les hyperparamètres. Des recherches récentes ont montré que le réglage fin du DPO dépasse RLHF dans la gestion de la génération de sentiments et améliore la qualité des résumés et des réponses à une conversation unique, tout en étant considérablement plus facile à mettre en place et à éduquer. Le processus de formation des DPO comporte trois étapes principales (voir le site GitHub repo pour plus de détails):
- Effectuer le réglage fin supervisé d'un LLM de base pré-entraîné pour créer un LLM affiné.
- Exécutez le formateur DPO à l’aide du modèle affiné pour créer un modèle d’apprentissage par renforcement.
- Fusionnez les adaptateurs de DPO dans le modèle LLM de base pour l'inférence de génération de texte.
Vous pouvez déployer le modèle fusionné pour l'inférence à l'aide de l'image du conteneur TGI.
Modèle de langage visuel
Les modèles de langage visuel (VLM) qui combinent à la fois les modalités de vision et de langage ont montré leur efficacité améliorée en matière de généralisation, conduisant à divers cas d'utilisation pratiques avec des invites à tir nul ou des invites à quelques tirs avec des instructions. Un VLM se compose généralement de trois éléments clés : un encodeur d'image, un encodeur de texte et une stratégie pour fusionner les informations des deux encodeurs. Ces éléments clés sont étroitement couplés car les fonctions de perte sont conçues à la fois autour de l’architecture du modèle et de la stratégie d’apprentissage. De nombreux VLM de pointe utilisent CLIP/ViT (tels qu'OpenCLIP) et LLM (tels que Llama-v1) et sont formés sur plusieurs ensembles de données accessibles au public tels que Wikipédia, LAION et l'ensemble de données multimodal public.
Cette démo a utilisé un pré-entraîné IDEFICS-9b-instruct modèle développé par CâlinsVisageM4, une version affinée d'IDEFICS-9b, suivant la procédure de formation présentée dans Flamingo en combinant les deux modèles pré-entraînés (laion/CLIP-ViT-H-14-laion2B-s32B-b79K et huggyllama/llama-7b) avec des blocs Transformer modifiés. L'IDEFICS-9b a été formé sur les ensembles de données multimodaux OBELIC, Wikipedia, LAION et PMD avec un total de 150 milliards de jetons et 1.582 milliard d'images avec une résolution de 224 × 224 chacune. L'IDEFICS-9b était basé sur Llama-7b avec une taille de lot effective de 1.31 million. L'instruction IDEFICS-9b a ensuite été affinée avec 6.8 millions d'ensembles de données d'instructions multimodales créés à partir d'une augmentation utilisant l'IA générative en dégelant tous les paramètres (encodeur de vision, modèle de langage, attentions croisées). Les ensembles de données de réglage fin incluent les données de pré-formation avec les taux d'échantillonnage suivants : 5.1 % de paires image-texte et 30.7 % de documents Web multimodaux OBELICS.
Le logiciel de formation est construit sur Hugging Face Transformers et Accelerate, et DeepSpeed ZeRO-3 pour la formation, plus Ensemble de données Web ainsi que Image2DataSets pour le chargement des données. La pré-formation d'IDEFICS-9b a duré 350 heures sur 128 GPU Nvidia A100, tandis que le réglage fin de l'instruction IDEFICS-9b a pris 70 heures sur 128 GPU Nvidia A100, tous deux sur des instances AWS p4.24xlarge.
Avec SageMaker, vous pouvez déployer en toute transparence IDEFICS-9b-instruct sur une instance g5.2xlarge pour les tâches d'inférence. L'extrait de code suivant illustre comment lancer un conteneur local d'apprentissage profond sur mesure intégré à l'image Docker TGI personnalisée :
%%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://<im
age_url>/image.png)Quel appareil a produit cette image ? Veuillez expliquer le principal objectif clinique d'une telle image ? Pouvez-vous rédiger un rapport de radiologie basé sur cette image ? ",
"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 }'
Vous pouvez affiner IDEFICS ou d'autres VLM, notamment Flamant ouvert avec vos propres données spécifiques au domaine avec des instructions. Reportez-vous à ce qui suit README pour la préparation d'ensembles de données multimodales et la script de réglage fin pour plus de détails
Classification des intentions avec chaîne de pensée
Une image vaut mille mots, c'est pourquoi VLM a besoin de conseils pour générer une légende précise à partir d'une image et d'une question données. Nous pouvons utiliser des invites en quelques étapes pour permettre l'apprentissage en contexte, où nous fournissons des démonstrations dans l'invite pour orienter le modèle vers de meilleures performances. Les démonstrations servent de conditionnement pour des exemples ultérieurs où l'on souhaite que le modèle génère une réponse.
Les invites standard en quelques étapes fonctionnent bien pour de nombreuses tâches, mais ne constituent toujours pas une technique parfaite, en particulier lorsqu'il s'agit de tâches de raisonnement plus complexes. Le modèle d'invite en quelques tirs n'est pas suffisant pour obtenir des réponses fiables. Il pourrait être utile de décomposer le problème en étapes et de le démontrer au modèle. Plus récemment, chaîne de pensée (CoT) a été popularisé pour répondre à des tâches plus complexes d'arithmétique, de bon sens et de raisonnement symbolique.
CoT élimine les efforts manuels en utilisant des LLM avec une invite « Pensons étape par étape » pour générer des chaînes de raisonnement pour les démonstrations une par une. Cependant, ce processus automatique peut encore aboutir à des erreurs dans les chaînes générées. Pour atténuer les effets des erreurs, la diversité des manifestations compte. Cet article propose Auto-CoT, qui échantillonne des questions avec diversité et génère des chaînes de raisonnement pour construire les démonstrations. CoT se compose de deux étapes principales :
- Regroupement de questions – Partitionner les questions d'un ensemble de données donné en quelques clusters
- Échantillonnage de démonstration – Sélectionnez une question représentative de chaque cluster et générez sa chaîne de raisonnement à l'aide de CoT zéro-shot avec des heuristiques simples
Consultez l’extrait de code suivant :
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??")
Reconnaissance vocale automatique
La solution VLP intègre Whisper, un modèle de reconnaissance automatique de la parole (ASR) d'OpenAI, pour gérer les requêtes audio. Whisper peut être déployé sans effort via SageMaker JumpStart à l'aide de son modèle. SageMaker JumpStart, connu pour sa configuration simple, ses hautes performances, son évolutivité et sa fiabilité, est idéal pour les développeurs souhaitant créer des applications vocales exceptionnelles. Le GitHub suivant repo montre comment exploiter Points de terminaison d'inférence en temps réel SageMaker pour affiner et héberger Whisper pour une transcription audio-texte instantanée, mettant en valeur la synergie entre l'hébergement SageMaker et les modèles génératifs.
Alternativement, vous pouvez télécharger directement le Dockerfile.gpu à partir de GitHub développé par Ahmetoner, qui comprend une API RESTful préconfigurée. Vous pouvez ensuite créer une image Docker et exécuter le conteneur sur un Amazon alimenté par GPU. Cloud de calcul élastique (EC2) pour une preuve de concept rapide. Voir le code suivant :
%%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'
Dans l'exemple fourni, le port 8083 est sélectionné pour héberger l'API Whisper, avec les règles de sécurité du réseau entrant activées. Pour tester, dirigez un navigateur Web vers http://<IP_or_hostname>:8083/docs
et lancez un test de requête POST vers le point de terminaison ASR. Comme alternative, exécutez la commande donnée ou utilisez le module Whisper-Live pour vérifier la connectivité 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
Classification de texte multiclasse et extraction de mots-clés
La classification multiclasse joue un rôle central dans la détection et la segmentation d'objets basées sur des invites de texte. Le distilbert-base-uncased-finetuned-sst-2-anglais Le modèle est un point de contrôle raffiné de DistilBERT-base-sans boîtier, optimisé sur le Banc d'arbres de Stanford Sentiment (SST2) ensemble de données par Hugging Face. Ce modèle atteint une précision de 91.3 % sur l'ensemble de développement, tandis que son homologue bert-base-uncased affiche une précision de 92.7 %. Le Hugging Face Hub donne accès à plus de 1,000 XNUMX modèles de classification de texte pré-entraînés. Pour ceux qui recherchent une précision accrue, SageMaker JumpStart fournit modèles pour affiner DistilBERT à l'aide d'ensembles de données annotés personnalisés pour des tâches de classification plus personnalisées.
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)
Le processus d'extraction de mots-clés utilise le CléBERT module, une méthode rationalisée et conviviale qui exploite les intégrations BERT pour générer des mots-clés et des expressions clés étroitement alignés sur un document - dans ce cas, les objets spécifiés dans la requête :
# Keyword extraction
from keybert import KeyBERT
kw_model = KeyBERT()
words_list = kw_model.extract_keywords(docs=<user_prompt_str>, keyphrase_ngram_range=(1,3))
Détection et classification d'objets à l'aide d'invites de texte
La solution VLP utilise la détection et la segmentation d'objets guidées par le dialogue en analysant la signification sémantique du texte et en identifiant l'action et les objets à partir d'une invite de texte. SAM mis à la terre est un package open source créé par IDEA-Research pour détecter et segmenter n'importe quoi à partir d'une image donnée avec des entrées de texte. Il combine les atouts de Mise à la terre de DINO et Segment Anything afin de créer un pipeline très puissant pour résoudre des problèmes complexes.
La figure suivante illustre comment Grounded-SAM peut détecter des objets et effectuer une segmentation d'instance en comprenant la saisie textuelle.
SAM se démarque comme un modèle de segmentation robuste, bien qu'il nécessite des invites, telles que des cadres de délimitation ou des points, pour produire des masques d'objets de haute qualité. Grounding DINO excelle en tant que détecteur zéro tir, créant habilement des boîtes et des étiquettes de haute qualité à l'aide d'invites de texte de forme libre. Lorsque ces deux modèles sont combinés, ils offrent la capacité remarquable de détecter et de segmenter n'importe quel objet uniquement via la saisie de texte. Le script de l'utilitaire Python dino_sam_inpainting.py a été développé pour intégrer les méthodes 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)
Vous pouvez choisir HQ-SAM pour mettre à niveau SAM afin d'obtenir une segmentation sans tir de haute qualité. Reportez-vous à ce qui suit papier ainsi que code exemple sur GitHub pour plus de détails.
Pipeline de traitement VLP
L'objectif principal du pipeline de traitement VLP est de combiner les atouts de différents modèles, créant ainsi un flux de travail sophistiqué spécialisé pour VLP. Il est important de souligner que cette configuration donne la priorité à l'intégration de modèles de premier plan dans les domaines visuels, textuels et vocaux. Chaque segment du pipeline est modulaire, facilitant soit une utilisation autonome, soit une opération combinée. De plus, la conception garantit la flexibilité, permettant le remplacement de composants par des modèles plus avancés à venir, tout en prenant en charge le multithreading et la gestion des erreurs avec une implémentation réputée.
La figure suivante illustre un flux de données de pipeline VLP et des composants de service.
Dans notre exploration du pipeline VLP, nous en avons conçu un qui peut traiter à la fois les invites textuelles au format texte ouvert et les entrées vocales occasionnelles provenant de microphones. Le traitement audio est facilité par Whisper, capable de reconnaissance vocale et de traduction multilingues. Le texte transcrit est ensuite acheminé vers un module de classification d'intentions, qui discerne l'essence sémantique des invites. Cela fonctionne en tandem avec un moteur CoT piloté par LangChain, disséquant l'intention principale en sous-tâches plus fines pour une récupération et une génération d'informations plus détaillées. Si le traitement de l'image est déduit de l'entrée, le pipeline commence un processus d'extraction de mots-clés, en sélectionnant les N premiers mots-clés en croisant les objets détectés dans l'image d'origine. Par la suite, ces mots-clés sont acheminés vers le moteur Grounded-SAM, qui génère des cadres de délimitation. Ces cadres de délimitation sont ensuite fournis au modèle SAM, qui crée des masques de segmentation précis, identifiant chaque instance d'objet unique dans l'image source. La dernière étape consiste à superposer les masques et les cadres de délimitation sur l'image originale, produisant ainsi une image traitée présentée comme une sortie multimodale.
Lorsque la requête d'entrée cherche à interpréter une image, le pipeline engage le LLM pour organiser les sous-tâches et affiner la requête avec des objectifs ciblés. Par la suite, le résultat est dirigé vers l'API VLM, accompagné d'instructions succinctes, de l'URL de l'image d'entrée et de l'invite de texte reformulée. En réponse, le VLM fournit la sortie textuelle. Le pipeline VLP peut être implémenté à l'aide d'un pipeline de workflow basé sur Python ou d'utilitaires d'orchestration alternatifs. De tels pipelines fonctionnent en enchaînant un ensemble séquentiel de modèles sophistiqués, aboutissant à une procédure de modélisation structurée de manière séquentielle. Le pipeline s'intègre au moteur Gradio à des fins de démonstration :
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)
Limites
L'utilisation de modèles VLM pré-entraînés pour VLP a démontré un potentiel prometteur pour la compréhension des images. Parallèlement à la détection et à la segmentation d'objets basées sur le langage, VLP peut produire des sorties utiles avec une qualité raisonnable. Cependant, VLP souffre toujours de résultats incohérents, de détails manquants dans les images et peut même avoir des hallucinations. De plus, les modèles peuvent produire des textes factuellement incorrects et il ne faut pas s’y fier pour produire des informations factuellement exactes. Étant donné qu'aucun des modèles VLM, SAM ou LLM pré-entraînés référencés n'a été formé ou affiné pour des applications de production spécifiques à un domaine, cette solution n'est pas conçue pour les applications critiques qui pourraient avoir un impact sur les moyens de subsistance ou entraîner des pertes matérielles.
Avec une ingénierie rapide, le modèle IDEFICS peut parfois reconnaître des détails supplémentaires après une indication textuelle ; cependant, le résultat est loin d’être cohérent et fiable. Il peut persister à maintenir des inexactitudes et peut être incapable ou peu disposé à apporter des corrections même lorsque les utilisateurs les soulignent au cours d'une conversation. L'amélioration du modèle de base en intégrant Swin-ViT et en le fusionnant avec des modèles basés sur CNN comme DualToken-ViT, ainsi qu'une formation utilisant des modèles plus avancés comme Llama-v2, pourraient potentiellement résoudre certaines de ces limitations.
Prochaines étapes
La solution VLP est en passe de connaître des progrès notables. À l’avenir, il existe plusieurs opportunités clés pour faire progresser les solutions VLP :
- Donnez la priorité à l’intégration d’instructions rapides dynamiques et de conseils d’apprentissage en quelques étapes. Ces améliorations permettront un retour d’information plus précis sur l’IA.
- Les équipes de classification des intentions doivent concentrer leurs efforts sur l'affinement du classificateur afin de détecter les intentions nuancées et spécifiques au domaine à partir des invites ouvertes. Être capable de comprendre les intentions précises des utilisateurs sera essentiel.
- Implémentez un modèle d'arbre de pensées d'agent dans le pipeline de raisonnement. Cette structure permettra des étapes de raisonnement explicites pour accomplir des sous-tâches.
- Piloter des initiatives de mise au point sur des modèles phares. Il sera essentiel d’adapter les modèles VLM, LLM et SAM aux secteurs et cas d’utilisation clés grâce à un réglage précis.
Accusé de réception
Les auteurs expriment leur gratitude à Vivek Madan et Ashish Rawat pour leurs commentaires perspicaces et leur révision de cet article.
À propos des auteurs
Alfred Shen est spécialiste senior IA/ML chez AWS. Il a travaillé dans la Silicon Valley, occupant des postes techniques et de direction dans divers secteurs, notamment la santé, la finance et la haute technologie. Il est un chercheur appliqué dédié à l'IA/ML, se concentrant sur le CV, la PNL et la multimodalité. Son travail a été présenté dans des publications telles que EMNLP, ICLR et Public Health.
Dr Li Zhang est un chef de produit principal technique pour les algorithmes intégrés d'Amazon SageMaker JumpStart et d'Amazon SageMaker, un service qui aide les scientifiques des données et les praticiens de l'apprentissage automatique à démarrer la formation et le déploiement de leurs modèles, et utilise l'apprentissage par renforcement avec Amazon SageMaker. Son travail passé en tant que membre principal du personnel de recherche et maître inventeur chez IBM Research a remporté le prix du papier test de l'IEEE INFOCOM.
Dr Changsha Ma est spécialiste IA/ML chez AWS. Elle est une technologue avec un doctorat en informatique, une maîtrise en psychologie de l'éducation et des années d'expérience en science des données et en consultation indépendante en IA/ML. Elle est passionnée par la recherche d'approches méthodologiques pour l'intelligence artificielle et humaine. En dehors du travail, elle aime faire de la randonnée, cuisiner, chasser de la nourriture, encadrer des étudiants pour l'entrepreneuriat et passer du temps avec des amis et des familles.
Xin Huang est un scientifique appliqué senior pour Amazon SageMaker JumpStart et les algorithmes intégrés d'Amazon SageMaker. Il se concentre sur le développement d'algorithmes d'apprentissage automatique évolutifs. Ses intérêts de recherche portent sur le traitement du langage naturel, l'apprentissage en profondeur explicable sur des données tabulaires et l'analyse robuste du clustering spatio-temporel non paramétrique. Il a publié de nombreux articles dans les conférences ACL, ICDM, KDD et Royal Statistical Society: Series A.
- Contenu propulsé par le référencement et distribution de relations publiques. Soyez amplifié aujourd'hui.
- PlatoData.Network Ai générative verticale. Autonomisez-vous. Accéder ici.
- PlatoAiStream. Intelligence Web3. Connaissance Amplifiée. Accéder ici.
- PlatonESG. Carbone, Technologie propre, Énergie, Environnement, Solaire, La gestion des déchets. Accéder ici.
- PlatoHealth. Veille biotechnologique et essais cliniques. Accéder ici.
- La source: https://aws.amazon.com/blogs/machine-learning/dialogue-guided-visual-language-processing-with-amazon-sagemaker-jumpstart/
- :possède
- :est
- :ne pas
- :où
- $UP
- 000
- 1
- 10
- 100
- 150
- 160
- 20
- 30
- 31
- 7
- 70
- 8
- 80
- 91
- a
- Capable
- A Propos
- abstraction
- accélérer
- Accepter
- accès
- accessibilité
- accompagné
- Compte
- précision
- Avec cette connaissance vient le pouvoir de prendre
- atteindre
- Atteint
- à travers
- Action
- En outre
- propos
- adresser
- adepte
- ajustements
- avancer
- Avancée
- progrès
- Après
- Agent
- devant
- AI
- Modèles AI
- AI / ML
- Visée
- algorithmes
- aligné
- Tous
- permettre
- permet
- le long de
- aussi
- alternative
- Amazon
- Amazon Polly
- Amazon Sage Maker
- Amazon SageMaker JumpStart
- Amazon Web Services
- an
- selon une analyse de l’Université de Princeton
- l'analyse
- ainsi que
- Une autre
- répondre
- réponses
- tous
- quoi que ce soit d'artificiel
- api
- Apis
- applications
- appliqué
- une approche
- approches
- architecture
- SONT
- Réservé
- autour
- AS
- assurance
- At
- attributs
- acoustique
- augmentée
- auteurs
- auto
- Automatique
- disponibles
- éviter
- AWS
- Colonne vertébrale
- base
- basé
- BE
- car
- était
- va
- profiter
- Améliorée
- jusqu'à XNUMX fois
- Milliards
- Milliards de jetons
- Blocs
- bénéficie d'
- renforcer
- tous les deux
- Box
- boîtes
- Pause
- vaste
- plus large
- navigateur
- construire
- construit
- intégré
- mais
- by
- CAN
- candidats
- capacités
- aptitude
- capable
- capturer
- maisons
- cas
- occasionnel
- catégoriser
- Causes
- prudent
- central
- chaîne
- Chaînes
- globaux
- Change
- Charles
- Chatbots
- Selectionnez
- clarté
- classification
- client
- Infos sur les
- étroitement
- Grappe
- regroupement
- code
- Université
- COM
- combiner
- combiné
- moissonneuses-batteuses
- combinant
- comment
- commence
- Commun
- Bon sens
- Communautés
- compatibilité
- complet
- complexe
- composants électriques
- complet
- calcul
- ordinateur
- Informatique
- concept
- Conduire
- conférences
- configuration
- conjonction
- Connectivité
- Considérer
- cohérent
- consiste
- construire
- consulting
- Contenant
- Conteneurs
- contemporain
- contenu
- contexte
- contextes
- des bactéries
- Conversation
- conversions
- Corrections
- pourriez
- Homologue
- accouplé
- élaborer
- engendrent
- créée
- La création
- création
- critique
- références croisées
- culminant
- Customiser
- Clients
- personnaliser
- sont adaptées
- données
- informatique
- science des données
- ensembles de données
- traitement
- Le décryptage
- diminue
- dévoué
- profond
- l'apprentissage en profondeur
- Vous permet de définir
- Degré
- livrer
- demo
- démocratise
- démontrer
- démontré
- démontre
- déployer
- déployé
- déployer
- déploiement
- décrire
- Conception
- un
- détail
- détaillé
- détails
- détecter
- détecté
- Détection
- détermination
- développé
- mobiles
- développement
- Développement
- dispositif
- diagnostic
- Dialogue
- différent
- dino
- dirigé
- directement
- discerner
- plusieurs
- Diversité
- do
- Docker
- INSTITUTIONNELS
- domaines
- Don
- down
- download
- dessiner
- dessin
- entraîné
- conduite
- pendant
- Dynamic
- chacun
- Plus tôt
- plus facilement
- éduquer
- Éducation
- Efficace
- efficacité
- les effets
- efficace
- efficacement
- sans effort
- d'effort
- efforts
- non plus
- éléments
- éliminé
- élimine
- d'autre
- émerge
- mettant l'accent
- employant
- emploie
- permettre
- permet
- permettant
- englobe
- fin
- Endpoint
- engage
- Moteur
- ENGINEERING
- améliorée
- Améliore
- améliorer
- assez
- Assure
- Divertissement
- esprit d'entreprise
- erreur
- notamment
- essence
- évaluation
- Pourtant, la
- exemple
- exemples
- exceptionnel
- exécuter
- expositions
- existe
- d'experience
- Expliquer
- exploration
- explorez
- étendre
- S'étend
- les
- supplémentaire
- extraction
- Visage
- facilité
- faciliter
- non
- familles
- loin
- plus rapide
- Fonctionnalités:
- Réactions
- few
- Figure
- Déposez votre dernière attestation
- finale
- finance
- fin
- s'adapter
- cinq
- Flexibilité
- flux
- Focus
- se concentre
- Abonnement
- nourriture
- Pour
- Premier plan
- le format
- formuler
- Framework
- amis
- De
- fonctions
- plus
- En outre
- se fondre
- générer
- généré
- génère
- générateur
- génération
- génératif
- IA générative
- Allemand
- obtenez
- Git
- GitHub
- donné
- Objectifs
- GPU
- GPU
- reconnaissance
- l'orientation
- manipuler
- Maniabilité
- harnais
- Exploiter
- Vous avez
- he
- Santé
- la médecine
- lourd
- levage de charges lourdes
- vous aider
- aide
- Haute
- haute performance
- de haute qualité
- Souligner
- indices
- sa
- tenue
- hôte
- hébergement
- HEURES
- Comment
- How To
- Cependant
- HTML
- http
- HTTPS
- huang
- Moyeu
- hubs
- Étreindre
- humain
- intelligence humaine
- Chasse
- i
- IBM
- idéal
- identifier
- IEEE
- if
- illustre
- image
- satellite
- Impact
- la mise en oeuvre
- mis en œuvre
- importer
- important
- améliorations
- l'amélioration de
- in
- comprendre
- inclut
- Y compris
- incorpore
- increased
- indépendant
- secteurs
- d'information
- Infrastructure
- initier
- les initiatives
- contribution
- entrées
- Messages
- perspicace
- installer
- instance
- Segmentation d'instance
- instantané
- Des instructions
- instrumental
- intégrer
- des services
- Intègre
- Intégration
- l'intégration
- Intelligence
- intention
- intentions
- intérêt
- intérêts
- développement
- Introduit
- IT
- SES
- jpg
- json
- juste
- XNUMX éléments à
- ACTIVITES
- mots clés
- Savoir
- connu
- Libellé
- Etiquettes
- langue
- gros
- Nouveautés
- lancer
- couche
- conduisant
- apprentissage
- Longueur
- moins
- Li
- lifting
- comme
- limites
- Gamme
- Liste
- Flamme
- LLM
- charge
- chargement
- locales
- localement
- vous connecter
- Style
- perte
- aime
- click
- machine learning
- Entrée
- Maintenir
- maintient
- a prendre une
- Fabrication
- en gestion
- les gérer
- Manuel
- fabrication
- de nombreuses
- masque
- Masques
- maître
- maîtrise
- assorti
- Matériel
- Matière
- maximales
- Mai..
- sens
- mécanisme
- Médias
- médical
- Découvrez
- membre
- mentorat
- Meta
- méthode
- méthodes
- Métrique
- microphone
- pourrait
- million
- Minutes
- manquant
- erreurs
- Réduire les
- ML
- modèle
- modélisation statistique
- numériques jumeaux (digital twin models)
- Modifications
- modifié
- application
- Module
- Modules
- Stack monitoring
- PLUS
- Par ailleurs
- plusieurs
- prénom
- naissant
- Nature
- Traitement du langage naturel
- Nature
- nécessaire
- une nécessité
- Besoin
- nécessaire
- réseau et
- Network Security
- nlp
- aucune
- Aucun
- notable
- notamment
- cahier
- maintenant
- nuances
- nombre
- nombreux
- Nvidia
- objet
- Détection d'objet
- objectif
- objets
- obstacles
- obtention
- of
- de rabais
- code
- Offres Speciales
- on
- ONE
- uniquement
- sur
- ouvert
- open source
- OpenAI
- fonctionner
- opération
- Opérations
- Opportunités
- optimisé
- l'optimisation
- or
- orchestration
- de commander
- original
- OS
- Autre
- Autres
- nos
- ande
- Résultat
- sortie
- sorties
- au contrôle
- plus de
- propre
- paquet
- paires
- Papier
- papiers
- paramètre
- paramètres
- particulièrement
- passionné
- passé
- chemin
- Courant
- parfaite
- performant
- phd
- photographe
- les expressions clés
- en particulier pendant la préparation
- image
- PHOTOS
- pièces
- pipe
- pipeline
- pivot
- Platon
- Intelligence des données Platon
- PlatonDonnées
- joue
- veuillez cliquer
- plus
- Poésie
- des notes bonus
- en équilibre
- positions
- possible
- Post
- défaillances
- l'éventualité
- power
- alimenté
- solide
- Méthode
- précis
- La précision
- prédit
- prédiction
- Prédictions
- Predictor
- préparation
- présenté
- précédent
- Directeur
- priorise
- Problème
- d'ouvrabilité
- procédure
- processus
- Traité
- les process
- traitement
- produire
- Produit
- produit
- Produit
- Progrès
- Projet
- prometteur
- preuve
- preuve de concept
- proposé
- propose
- prototypage
- fournir
- à condition de
- fournit
- aportando
- prouesse
- Psychologie
- public
- santé publique
- publications
- publiquement
- publié
- purement
- but
- des fins
- Push
- Python
- pytorch
- qualité
- Quantité
- requêtes
- question
- fréquemment posées
- Rapide
- classer
- raw
- réal
- en temps réel
- raisonnable
- récent
- récemment
- reconnaissance
- reconnaître
- recommandé
- réduire
- reportez-vous
- affiner
- raffiné
- raffinage
- régime
- pertinent
- fiable
- rester
- remarquables
- remplacement
- rapport
- représentant
- honorable
- nécessaire
- demandes
- conditions
- exigence
- a besoin
- un article
- chercheur
- Résolution
- réponse
- réponses
- résultat
- Résultats
- retourner
- Avis
- Récompenser
- bon
- robuste
- Rôle
- Royal
- Courir
- s
- sagemaker
- Sam
- dire
- Évolutivité
- évolutive
- Balance
- mise à l'échelle
- Sciences
- Scientifique
- scientifiques
- scénario
- fluide
- de façon transparente
- SEC
- Secteurs
- sécurité
- sur le lien
- seed
- recherche
- Cherche
- clignotant
- segmentation
- choisi
- la sélection
- envoyer
- supérieur
- sens
- sentiment
- Série
- de série A
- besoin
- service
- Services
- set
- mise
- installation
- plusieurs
- elle
- devrait
- présenté
- mettre en valeur
- montré
- Silicium
- Silicon Valley
- étapes
- depuis
- Taille
- Fragment
- Société
- Logiciels
- sur mesure
- Solutions
- Résoudre
- quelques
- parfois
- sophistiqué
- Identifier
- envergure
- spécialiste
- spécialisé
- spécifié
- Spectre
- discours
- Reconnaissance vocale
- vitesses
- Dépenses
- L'équipe
- étapes
- Utilisation d'un
- autonome
- peuplements
- j'ai commencé
- Région
- state-of-the-art
- statistique
- diriger
- étapes
- Étapes
- Encore
- Arrêter
- simple
- de Marketing
- courant
- rationalisé
- flux
- forces
- structure
- structuré
- Étudiante
- ultérieur
- Par la suite
- substantiellement
- tel
- Souffre
- suite
- fourni
- Appuyer
- Les soutiens
- symbolique
- synergie
- synthèse
- combustion propre
- TAG
- adaptation
- tandem
- Exploiter
- des campagnes marketing ciblées,
- tâches
- équipes
- technologie
- Technique
- technique
- Les technologies
- technologue
- modèle
- Dix
- tester
- texte
- Classification du texte
- textuel
- que
- qui
- La
- La Région
- La Source
- leur
- puis
- Là.
- donc
- Ces
- l'ont
- penser
- this
- ceux
- bien que?
- mille
- trois
- Avec
- fermement
- fiable
- fois
- à
- ensemble
- Tokens
- a
- Boîte à outils
- top
- sujet
- Les sujets
- torche
- Total
- traditionnel
- qualifié
- Formation
- Transformer
- transformateur
- transformateurs
- Traduction
- arbre
- oui
- Essai
- deux
- typiquement
- incapable
- sous-jacent
- comprendre
- compréhension
- expérience unique et authentique
- améliorer
- URL
- utilisé
- d'utiliser
- Utilisateur
- convivial
- utilisateurs
- Usages
- en utilisant
- les services publics
- utilitaire
- Utilisant
- v1
- Vallée
- divers
- vérifier
- la versatilité
- version
- très
- via
- vision
- visualiser
- Voix
- W
- était
- filigrane
- we
- web
- navigateur web
- services Web
- WELL
- quand
- Les
- qui
- tout en
- Chuchotement
- Wikipédia
- sera
- comprenant
- sans
- A gagné
- des mots
- activités principales
- workflow
- de travail
- vos contrats
- vaut
- pourra
- écrire
- années
- encore
- Rendement
- élastique
- Vous n'avez
- Votre
- zéphyrnet