柏拉图数据智能。
垂直搜索和人工智能。

使用 Amazon SageMaker JumpStart 进行对话引导的视觉语言处理 | 亚马逊网络服务

日期:

视觉语言处理 (VLP) 处于生成人工智能的最前沿,推动了包括语言智能、视觉理解和处理在内的多模式学习的进步。 结合使用大量多模态数据训练的大型语言模型 (LLM) 和对比语言图像预训练 (CLIP),视觉语言模型 (VLM) 特别擅长图像字幕、对象检测和分割以及视觉等任务。问题回答。 它们的用例涵盖各个领域,从媒体娱乐到医疗诊断和制造质量保证。

VLP 的主要优势包括有效利用预先训练的 VLM 和 LLM,无需进行特定于任务的修改即可实现零样本或少样本预测,以及通过随意的多轮对话对广泛的图像进行分类。 增强了 接地段任何东西,VLP 在视觉识别方面表现出强大的能力,其中对象检测和分割尤其引人注目。 存在使用特定领域数据进一步微调 VLM 和 LLM 的潜力,旨在提高精度并减轻幻觉。 然而,与其他新兴技术一样,在管理模型的复杂性、协调不同的模式以及制定统一的评估指标方面仍然存在障碍。

由 OBELICS 的 NOMIC、IDEFICS 的 HuggingFaceM4、Gradio 的 Charles Bensimon 和 TTS 的 Amazon Polly 提供

在这篇文章中,我们使用以下方法探讨了 VLP 原型设计的技术细微差别 亚马逊SageMaker JumpStart 与当代生成人工智能模型相结合。 通过多轮对话,我们突出了面向指令的零镜头和少镜头视觉语言处理的能力,强调其多功能性,旨在吸引更广泛的多模态社区的兴趣。 demo实现代码如下 GitHub回购.

解决方案概述

所提出的 VLP 解决方案集成了一套最先进的生成式 AI 模块,以产生准确的多模态输出。 该架构的核心是经过微调的 VLM 和 LLM,它们都有助于解码视觉和文本数据流。 TGI 框架支撑模型推理层,提供 RESTful API 以实现稳健的集成和轻松的可访问性。 作为对听觉数据处理的补充,Whisper ASR 还配备了 RESTful API,可实现简化的语音到文本转换。 为了解决图像到文本分割等复杂的挑战,我们使用容器化 接地段任何东西 模块,与 接地恐龙细分任何模型 (SAM)文本驱动的对象检测和分割机制。 该系统进一步完善 蒸馏器,优化我们的对话引导的多类分类过程。 协调这些组件的是 LangChain 处理管道,这是一种复杂的机制,擅长剖析文本或语音输入、识别用户意图以及有条不紊地将子任务委派给相关服务。 这些操作的综合产生聚合输出,提供精确且上下文感知的多模式答案。

下图说明了我们的对话引导 VLP 解决方案的架构。

文本生成推理

文本生成推理 (TGI) 是 Hugging Face 开发的开源工具包,用于部署 LLM 和 VLM 进行推理。 它使用张量并行性、模型并行性和动态批处理实现高性能文本生成,支持一些领先的开源 LLM(例如 Falcon 和 Llama V2)以及 VLM(例如 IDEFICS)。 利用最新的 Hugging Face LLM 模块 亚马逊 SageMaker, AWS 客户现在可以利用 SageMaker 深度学习容器 (DLC) 的强大功能。 这允许通过预构建的 SageMaker 从 Hugging Face 中心无缝部署 LLM 的DLC 支持TGI。 这种推理设置不仅提供卓越的性能,而且无需管理繁重的 GPU 基础设施。 此外,您还可以受益于推理端点自动扩展、增强的安全性和内置模型监控等高级功能。

TGI 提供的文本生成速度比传统推理方法快 100 倍,并可有效扩展以处理增加的请求。 其设计确保与各种法学硕士的兼容性,并且开源,使技术社区的高级功能民主化。 TGI 的多功能性延伸到各个领域,增强聊天机器人、改进机器翻译、总结文本以及生成从诗歌到代码的各种内容。 因此,TGI 作为文本生成挑战的综合解决方案应运而生。 TGI是用Python实现的,并使用PyTorch框架。 它是开源的,可在 GitHub 上获取。 它还支持带有 QLoRA 的 PEFT,以实现更快的性能,并支持 logits 扭曲来控制生成的文本属性,例如确定其长度和多样性,而无需修改底层模型。

您可以直接从以下内容构建定制的TGI Docker容器 Dockerfile 然后将容器镜像推送到Amazon 弹性容器注册表 (ECR) 用于推理部署。 请看下面的代码:

%%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 进行 LLM 推理

本文中的 VLP 解决方案将 LLM 与 LangChain 结合使用,利用思想链 (CoT) 方法进行更准确的意图分类。 CoT 处理查询以识别意图并触发相关子任务来满足查询的目标。 Llama-2-7b-聊天-hf (许可协议)是 Llama-2 系列的精简版本,专为对话环境而设计。 Llama-2-7b-chat-hf 的推理由 TGI 容器映像提供支持,使其可作为支持 API 的服务使用。

对于 Llama-2-7b-chat-hf 推理,建议使用 g5.2xlarge (24G VRAM) 以实现峰值性能。 对于需要更强大的 LLM 的应用程序,Llama-v2-13b 模型非常适合 g5.12xlarge (96G VRAM) 实例。 对于 Llama-2-70b 型号,请考虑 GPU [2xlarge] – 2x Nvidia A100 利用位和字节量化或 g5.48xlarge。 值得注意的是,采用位和字节量化可以将所需的推理 GPU VRAM 减少 50%。

您可以将 SageMaker DLC 与前面详细介绍的 TGI 容器映像结合使用来部署 Llama-2-7b-chat-hf 以进行推理(请参阅以下代码)。 或者,您可以使用 Docker 容器在 g5.2xlarge 实例上进行快速本地推理以进行概念验证。

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

SageMaker JumpStart 提供了大量笔记本示例,演示参数高效微调 (PEFT) 的使用,包括用于训练和微调 LLM 的 QLoRA。 QLoRA 将预训练的模型权重保持在静态状态,并将可训练的秩分解矩阵引入到 Transformer 结构的每一层中。 该方法大大减少了下游任务所需的可训练参数的数量。

或者,您可以探索 直接偏好优化 (DPO),这消除了建立奖励模型、在 LLM 微调期间抽取样本或进行大量超参数调整的必要性。 最近的研究表明,DPO 的微调超越了 左高频 管理情绪生成并提高摘要和单一对话响应的质量,同时更容易设置和教育。 DPO 培训过程主要分为三个步骤(参考 GitHub 回购 有关详细信息):

  1. 对预先训练的基础 LLM 进行监督微调,以创建微调的 LLM。
  2. 使用微调模型运行 DPO 训练器来创建强化学习模型。
  3. 将 DPO 中的适配器合并到基本 LLM 模型中以进行文本生成推理。

您可以使用 TGI 容器映像部署合并模型以进行推理。

视觉语言模型

结合了视觉和语言模态的视觉语言模型(VLM)已经显示出其在泛化方面的有效性不断提高,从而产生了具有零样本提示或带指令的少样本提示的各种实际用例。 VLM 通常由三个关键元素组成:图像编码器、文本编码器以及融合两个编码器信息的策略。 这些关键要素紧密耦合在一起,因为损失函数是围绕模型架构和学习策略设计的。 许多最先进的 VLM 使用 CLIP/ViT(例如 OpenCLIP)和 LLM(例如 Llama-v1),并在多个公开可用的数据集(例如 Wikipedia、LAION 和公共多模态数据集)上进行训练。

该演示使用了预先训练的 IDEFICS-9b-指令 开发的模型 拥抱脸M4是 IDEFICS-9b 的微调版本,遵循 Flamingo 中规定的训练程序,结合两个预训练模型(laion/CLIP-ViT-H-14-laion2B-s32B-b79K 和 humgyllama/llama-7b)带有修改后的变压器块。 IDEFICS-9b 在 OBELIC、Wikipedia、LAION 和 PMD 多模态数据集上进行训练,总共有 150 亿个标记和 1.582 亿张图像,每张图像的分辨率为 224×224。 IDEFICS-9b 基于 Llama-7b,有效批量大小为 1.31 万。 然后,通过解冻所有参数(视觉编码器、语言模型、交叉注意力),使用生成式 AI 增强创建的 9 万个多模态指令数据集对 IDEFICS-6.8b-instruct 进行微调。 微调数据集包括具有以下采样率的预训练数据:图像文本对的 5.1% 和 OBELICS 多模态 Web 文档的 30.7%。

该培训软件构建在 Hugging Face Transformers 和 Accelerate 之上,并且 DeepSpeed ZeRO-3 用于培训,加上 Web数据集图像2数据集 用于数据加载。 IDEFICS-9b 的预训练在 350 个 Nvidia A128 GPU 上花费了 100 个小时才能完成,而 IDEFICS-9b-instruct 的微调在 70 个 Nvidia A128 GPU 上花费了 100 个小时,两者都在 AWS p4.24xlarge 实例上。

借助 SageMaker,您可以在 g9xlarge 实例上无缝部署 IDEFICS-5.2b-instruct 以执行推理任务。 以下代码片段说明了如何启动与定制的 TGI Docker 镜像集成的定制深度学习本地容器:

%%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)这张图片是由哪个设备生成的? 请解释一下这张图片的主要临床用途?你能根据这张图片写一份放射学报告吗? “, 
 "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 或其他 VLM,包括 打开火烈鸟 使用您自己的域特定数据和说明。 参考以下内容 读我 用于多模态数据集准备和 微调脚本 进一步的细节。

通过思路进行意图分类

一张图片胜过一千个单词,因此 VLM 需要指导从给定的图像和问题生成准确的标题。 我们可以使用少量提示来实现上下文学习,在提示中提供演示以引导模型获得更好的性能。 这些演示可以作为后续示例的条件,我们希望模型生成响应。

标准的几次提示对于许多任务都很有效,但仍然不是一种完美的技术,特别是在处理更复杂的推理任务时。 几次提示模板不足以获得可靠的响应。 如果我们将问题分解为步骤并向模型演示,可能会有所帮助。 最近, 思路链 (CoT) 提示已普遍用于解决更复杂的算术、常识和符号推理任务

CoT 通过使用法学硕士和“让我们一步一步思考”提示来生成用于演示的推理链,从而消除手动工作。 然而,这个自动过程仍然可能会在生成的链中出现错误。 为了减轻错误的影响,示威的多样性很重要。 这篇文章提出了 Auto-CoT,它对多样性的问题进行采样并生成推理链来构建演示。 CoT 由两个主要阶段组成:

  • 问题聚类——将给定数据集的问题划分为几个簇
  • 演示采样——从每个集群中选择一个代表性问题,并使用零样本 CoT 和简单的启发式方法生成其推理链

请参阅以下代码片段:

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

自动语音识别

VLP 解决方案采用了 OpenAI 的自动语音识别 (ASR) 模型 Whisper 来处理音频查询。 可以使用其模板通过 SageMaker JumpStart 轻松部署 Whisper。 SageMaker JumpStart 以其简单的设置、高性能、可扩展性和可靠性而闻名,是旨在制作卓越的语音驱动应用程序的开发人员的理想选择。 以下GitHub 回购 演示如何利用 SageMaker 实时推理端点 微调和托管 Whisper 以实现即时音频到文本转录,展示 SageMaker 托管和生成模型之间的协同作用。

或者,您也可以直接下载 Dockerfile.gpu 来自 GitHub 开发者 艾哈迈托纳,其中包括预配置的 RESTful API。 然后,您可以构建 Docker 映像并在 GPU 支持的 Amazon 上运行该容器 弹性计算云 (EC2) 实例用于快速证明概念。 请看下面的代码:

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

在提供的示例中,选择端口 8083 来托管 Whisper API,并激活入站网络安全规则。 要进行测试,请将网络浏览器定向到 http://<IP_or_hostname>:8083/docs 并向 ASR 端点发起 POST 请求测试。 作为替代方案,运行给定的命令或使用 Whisper-live 模块来验证 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

多类文本分类和关键词提取

多类分类在文本提示驱动的对象检测和分割中起着关键作用。 这 distilbert-base-uncased-finetuned-sst-2-英语 模型是一个细化的检查点 DistilBERT-base-uncased,优化于 斯坦福情绪树库 (SST2) Hugging Face 数据集。 该模型在开发集上的准确率达到了 91.3%,而其对应的 bert-base-uncased 的准确率达到了 92.7%。 Hugging Face Hub 提供对 1,000 多个预先训练的文本分类模型的访问。 对于那些寻求更高精确度的人来说,SageMaker JumpStart 提供了 模板 使用自定义注释数据集微调 DistilBERT,以实现更定制的分类任务。

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) 

关键词提取过程采用 密钥伯特 模块,一种简化且用户友好的方法,利用 BERT 嵌入来生成与文档密切相关的关键字和关键短语(在本例中为查询中指定的对象):

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

文本提示驱动的对象检测和分类

VLP 解决方案通过分析文本的语义并从文本提示中识别动作和对象,采用对话引导的对象检测和分割。 接地-SAM 是由 IDEA-Research 创建的开源包,用于通过文本输入检测和分割给定图像中的任何内容。 它结合了以下优点 恐龙接地 和分段任何东西,以便构建一个非常强大的管道来解决复杂的问题。

下图说明了 Grounded-SAM 如何通过理解文本输入来检测对象并进行实例分割。

SAM 尽管它需要提示(例如边界框或点)来生成高质量的对象掩模,但它作为一个强大的分割模型脱颖而出。 Grounding DINO 是一款出色的零样本探测器,能够使用自由格式的文本提示熟练地创建高质量的盒子和标签。 当这两个模型结合起来时,它们提供了纯粹通过文本输入检测和分割任何对象的卓越能力。 Python 实用程序脚本 dino_sam_inpainting.py 开发用于集成接地 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)

您可以选择 HQ-SAM 来升级 SAM,以实现高质量的零样本分割。 参考以下内容 GitHub 上的示例了解更多详细信息。

VLP处理流程

VLP 处理流程的主要目标是结合不同模型的优势,创建专门针对 VLP 的复杂工作流程。 需要强调的是,此设置优先考虑跨视觉、文本和语音领域的顶级模型的集成。 管道的每个部分都是模块化的,便于独立使用或组合操作。 此外,该设计确保了灵活性,能够用未来更先进的模型替换组件,同时通过信誉良好的实现支持多线程和错误处理。

下图说明了VLP管道数据流和服务组件。

在我们对 VLP 管道的探索中,我们设计了一种既可以处理开放文本格式的文本提示,又可以处理来自麦克风的随意语音输入的管道。 Whisper 促进了音频处理,能够进行多语言语音识别和翻译。 然后,转录的文本被传送到意图分类模块,该模块辨别提示的语义本质。 它与 LangChain 驱动的 CoT 引擎协同工作,将主要意图分解为更精细的子任务,以实现更详细的信息检索和生成。 如果从输入推断出图像处理,则管道开始关键字提取过程,通过交叉引用在原始图像中检测到的对象来选择前 N 个关键字。 随后,这些关键字被路由到 Grounded-SAM 引擎,该引擎生成边界框。 然后将这些边界框提供给 SAM 模型,该模型会制作精确的分割掩模,精确定位源图像中的每个独特的对象实例。 最后一步涉及将掩模和边界框覆盖到原始图像上,生成以多模态输出形式呈现的处理图像。

当输入查询试图解释图像时,管道会利用法学硕士来组织子任务并根据目标细化查询。 随后,结果被定向到 VLM API,并附有少量指令、输入图像的 URL 以及重新表述的文本提示。 作为响应,VLM 提供文本输出。 VLP 管道可以使用基于 Python 的工作流管道或替代编排实用程序来实现。 此类管道通过链接一组连续的复杂模型来运行,最终形成连续的结构化建模过程。 该管道与 Gradio 引擎集成用于演示目的:

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)

限制

使用预先训练的 VLM 模型进行 VLP 已显示出图像理解的巨大潜力。 与基于语言的对象检测和分割一起,VLP 可以产生具有合理质量的有用输出。 然而,VLP 仍然存在结果不一致、缺少图片细节、甚至可能产生幻觉的问题。 此外,模型可能会产生事实上不正确的文本,不应依赖模型来产生事实上准确的信息。 由于所引用的预训练 VLM、SAM 或 LLM 模型均未针对特定领域的生产级应用进行训练或微调,因此该解决方案不适用于可能影响生计或造成物质损失的关键任务应用

通过即时工程,IDEFICS 模型有时可以在文本提示后识别额外的细节; 然而,结果远非一致和可靠。 它可能会持续存在错误,并且即使用户在对话期间突出显示这些错误,也可能无法或不愿意进行更正。 通过集成 Swin-ViT 并将其与基于 CNN 的模型(如 DualToken-ViT)融合来增强骨干模型,并使用 Llama-v2 等更高级的模型进行训练,可能会解决其中的一些限制。

接下来的步骤

VLP 解决方案有望取得显着进展。 展望未来,推进 VLP 解决方案有几个关键机会:

  • 优先考虑整合动态提示指令和小样本学习提示。 这些改进将使人工智能反馈更加准确。
  • 意图分类团队应集中精力改进分类器,以便从开放提示中获取细致入微的、特定领域的意图。 能够理解准确的用户意图至关重要。
  • 将代理思想树模型实施到推理管道中。 这种结构将允许明确的推理步骤来完成子任务。
  • 对领先车型进行试点微调。 通过微调来针对关键行业和用例定制 VLM、LLM 和 SAM 模型将至关重要。

承认

作者对 Vivek Madan 和 Ashish Rawat 的富有洞察力的反馈和对本文的评论表示感谢。


关于作者

阿尔弗雷德沉 是 AWS 的高级 AI/ML 专家。 他一直在硅谷工作,在医疗保健、金融和高科技等多个领域担任技术和管理职位。 他是一位专注的应用 AI/ML 研究员,专注于 CV、NLP 和多模态。 他的工作已在 EMNLP、ICLR 和 Public Health 等出版物中发表。

张丽博士 是 Amazon SageMaker JumpStart 和 Amazon SageMaker 内置算法的首席产品经理,该服务可帮助数据科学家和机器学习从业者开始训练和部署模型,并通过 Amazon SageMaker 使用强化学习。 他过去作为 IBM 研究中心的主要研究人员和发明大师,曾获得 IEEE INFOCOM 的“时间考验论文奖”。

马长沙博士 是 AWS 的 AI/ML 专家。 她是一名技术专家,拥有计算机科学博士学位、教育心理学硕士学位,以及多年的数据科学和 AI/ML 独立咨询经验。 她热衷于研究机器和人类智能的方法论方法。 工作之余,她喜欢徒步旅行、烹饪、狩猎食物、指导大学生创业,以及与朋友和家人共度时光。

黄鑫黄鑫 是 Amazon SageMaker JumpStart 和 Amazon SageMaker 内置算法的高级应用科学家。 他专注于开发可扩展的机器学习算法。 他的研究兴趣是自然语言处理、表格数据的可解释深度学习以及非参数时空聚类的稳健分析。 他在 ACL、ICDM、KDD 会议和 Royal Statistical Society: Series A 上发表了多篇论文。

现货图片

最新情报

现货图片

在线答疑

你好呀! 我怎么帮你?