Press "Enter" to skip to content

使用Amazon SageMaker上的多模型模型构建一个图像到文本生成AI应用程序

随着我们深入数字时代,多模态模型的发展对于增强机器的理解能力至关重要。这些模型能够处理和生成不同形式的数据,如文本和图像。其中的一个关键特性是其图像到文本的能力,这在图像描述和视觉问题回答等任务中展示出了非凡的熟练度。

通过将图像转化为文本,我们可以解锁和利用包含在视觉数据中的丰富信息。例如,在电子商务领域,图像到文本可以基于图像自动分类产品,提高搜索效率和准确性。同样,它可以帮助生成自动的照片描述,提供可能未包含在产品标题或描述中的信息,从而改善用户体验。

在本文中,我们将概述流行的多模态模型。我们还将演示如何在Amazon SageMaker上部署这些预训练模型。此外,我们还将讨论这些模型的各种应用,特别关注几个真实场景,如电子商务中的零样本标签和归因生成以及从图像中生成自动提示。

多模态模型背景

机器学习(ML)模型在自然语言处理(NLP)和计算机视觉等领域取得了重大进展,模型可以展现出与人类类似的性能,分析和生成来自单一数据源的内容。近年来,对于多模态模型的开发越来越受到关注,这些模型能够处理和生成不同模态的内容。这些模型,如视觉和语言网络的融合,因其能够整合来自不同源和模态的信息,从而提高其理解和表达能力,受到了重视。

在本节中,我们将概述两个流行的多模态模型:CLIP(对比语言-图像预训练)和BLIP(引导式语言-图像预训练)。

CLIP模型

CLIP是一种多模态视觉和语言模型,可用于图像-文本相似度和零样本图像分类。CLIP在从互联网上的公开来源收集的4亿个图像-文本对的数据集上进行训练。模型结构包括图像编码器和文本编码器,如下图所示。

使用Amazon SageMaker上的多模型模型构建一个图像到文本生成AI应用程序 四海 第1张

在训练过程中,通过编码器传入图像和相应的文本片段,得到图像特征向量和文本特征向量。目标是使匹配对的图像和文本特征具有高余弦相似度,而不匹配对的特征相似度较低。这通过对比损失来实现。这种对比预训练使得编码器将图像和文本映射到一个共同的嵌入空间,语义得以对齐。

然后,可以将编码器用于下游任务的零样本迁移学习。在推断时,图像和文本预训练编码器将其各自的输入进行处理,并将其转化为高维向量表示或嵌入。然后比较图像和文本的嵌入,例如余弦相似性。与图像嵌入最相似(例如距离最小)的文本提示(图像类别、类别或标签)被认为是最相关的,并根据此分类图像。

BLIP模型

另一个流行的多模态模型是BLIP。它引入了一种新颖的模型架构,能够适应多样的视觉-语言任务,并采用一种独特的数据集引导技术从嘈杂的网络数据中进行学习。BLIP架构包括图像编码器和文本编码器:图像引导文本编码器将视觉信息注入到文本编码器的transformer块中,图像引导文本解码器将视觉信息融入到transformer解码器块中。借助这种架构,BLIP在涉及视觉和语言信息融合的一系列视觉-语言任务中展现出出色的性能,从基于图像的搜索和内容生成到交互式视觉对话系统。在之前的一篇文章中,我们提出了一种基于BLIP模型的内容审核解决方案,该解决方案通过计算机视觉单模态的ML方法解决了多个挑战。

使用案例1:电子商务平台的零-shot标签或属性生成

电子商务平台作为充满了创意、产品和服务的动态市场。随着数以百万计的产品上市,有效的分类和归类是一个重大挑战。这就是自动标记和属性生成的威力发挥作用的地方。通过利用机器学习(ML)和自然语言处理(NLP)等先进技术,这些自动化流程可以彻底改革电子商务平台的运营方式。

自动标记或属性生成的一个关键优势在于提高搜索性能。准确标记的产品可以被客户迅速高效地找到。例如,如果客户正在搜索“前面带有标志的棉质圆领T恤”,自动标记和属性生成使搜索引擎能够精确定位不仅仅与更广泛的“T恤”类别匹配,还与“棉质”和“圆领”等特定属性匹配的产品。这种精确匹配可以促进更个性化的购物体验,提高客户满意度。此外,自动生成的标签或属性可以显着改善产品推荐算法。通过深入了解产品属性,系统可以向客户推荐更相关的产品,从而增加购买可能性并提高客户满意度。

CLIP为自动标记或属性生成的过程提供了有希望的解决方案。它接受产品图像和一组描述或标签作为输入,为每个标签生成矢量表示或嵌入。这些嵌入存在于高维空间中,它们的相对距离和方向反映了输入之间的语义关系。CLIP经过大规模的图像文本对预训练,以封装这些有意义的嵌入。如果一个标签或属性准确描述了一个图像,它们的嵌入在这个空间中应该相对接近。为了生成对应的标签或属性,可以将潜在的标签列表输入到CLIP模型的文本部分,并存储生成的嵌入。理想情况下,这个列表应该是详尽的,涵盖电子商务平台上所有潜在的类别和属性。以下是一些示例:

使用Amazon SageMaker上的多模型模型构建一个图像到文本生成AI应用程序 四海 第2张

要在SageMaker上部署CLIP模型,可以按照GitHub代码库中的笔记本进行操作。我们使用SageMaker预构建的大模型推理(LMI)容器来部署模型。LMI容器使用DJL Serving来为推理提供模型服务。要了解更多关于在SageMaker上托管大模型的信息,请参阅使用DJLServing和DeepSpeed模型并行推理在Amazon SageMaker上部署大模型使用FasterTransformer在Amazon SageMaker上高性能部署大模型

在这个示例中,我们提供了文件serving.propertiesmodel.pyrequirements.txt来准备模型工件并将它们存储在一个tarball文件中。

  • serving.properties是配置文件,用于指示DJL Serving希望使用哪些模型并行化和推理优化库。根据您的需求,您可以设置适当的配置。有关配置选项和详尽列表的更多详细信息,请参阅配置和设置
  • model.py是处理服务请求的脚本。
  • requirements.txt是包含任何额外pip wheels的文本文件安装。

如果您想直接从Hugging Face下载模型,您可以将serving.properties文件中的option.model_id参数设置为预训练模型在huggingface.co上托管的模型存储库中的模型ID。容器在部署时使用此模型ID下载相应的模型工件。如果将model_id设置为Amazon Simple Storage Service(Amazon S3)URL,则DJL将从Amazon S3下载模型工件并将model_id替换为模型工件的实际位置。在您的脚本中,您可以指向此值来加载预训练模型。在我们的示例中,我们使用后者选项,因为LMI容器使用s5cmd从Amazon S3下载数据,在部署期间加载模型时能够显著减少时间。请参阅以下代码:

# 我们根据笔记本所在的地区向我们的`serving.properties`文件插入适当的模型位置模板 = jinja_env.from_string(Path("clip/serving.properties").open().read()) Path("clip/serving.properties").open("w").write(     template.render(s3url=pretrained_model_location) ) !pygmentize clip/serving.properties | cat -n

model.py脚本中,我们使用属性文件中提供的模型ID加载模型路径:

def load_clip_model(self, properties):    if self.config.caption_model is None:        model_path = properties["model_id"]        ... ...        print(f'模型路径:{model_path}')        model = CLIPModel.from_pretrained(model_path, cache_dir="/tmp",)        self.caption_processor = CLIPProcessor.from_pretrained(model_path)

在模型工件准备并上传到Amazon S3后,您可以使用几行代码将CLIP模型部署到SageMaker托管环境中:

from sagemaker.model import Modelmodel = Model(    image_uri=inference_image_uri,    model_data=s3_code_artifact,    role=role,    name=model_name,)model.deploy(    initial_instance_count=1,    instance_type="ml.g5.2xlarge",    endpoint_name=endpoint_name)

当端点处于服务状态时,您可以使用输入图像和标签列表作为输入提示来调用端点以生成标签概率:

def encode_image(img_file):    with open(img_file, "rb") as image_file:    img_str = base64.b64encode(image_file.read())    base64_string = img_str.decode("latin1")    return base64_stringdef run_inference(endpoint_name, inputs):    response = smr_client.invoke_endpoint(        EndpointName=endpoint_name, Body=json.dumps(inputs)    )    return response["Body"].read().decode('utf-8')base64_string = encode_image(test_image)inputs = {"image": base64_string, "prompt": ["a photo of cats", "a photo of dogs"]}output = run_inference(endpoint_name, inputs)print(json.loads(output)[0])

用例2:从图像自动生成提示

使用多模态模型的一个创新应用是从图像生成具有信息量的提示。在生成式人工智能中,提示是指提供给语言模型或其他生成模型的输入,用于指示所期望的内容或回应类型。提示本质上是模型生成过程的起点或一组指示,用于引导模型生成输出。它可以是一个句子、问题、部分文本或任何传达上下文或期望输出给模型的输入。精心制作提示的选择对于以高精度和相关性生成高质量图像至关重要。提示工程是优化或制作文本输入以从语言模型获取所需响应的过程,通常涉及措辞、格式或上下文调整。

为图像生成进行提示工程面临着以下若干挑战:

  • 准确定义视觉概念 – 通过文字描述视觉概念有时可能不准确或模棱两可,这使得传达准确期望的图像变得困难。通过文本提示捕捉复杂场景或细致细节可能并不直接。
  • 有效指定所需的样式 – 仅通过文本来传达特定的风格偏好,如心情、色彩调色板或艺术风格,可能具有挑战性。将抽象的美学概念转化为模型的具体指示可能会棘手。
  • 平衡复杂性以防止模型过载 – 复杂的提示可能会让模型困惑或过度加载信息,影响生成的输出。在提供足够的指导并避免过度复杂性之间找到正确的平衡是至关重要的。

因此,为图像生成精心制作有效的提示是一项耗时的工作,需要迭代实验和改进,以在精准性和创造力之间找到正确的平衡,这是一项严重依赖人类专业知识的资源密集型任务。

CLIP Interrogator是一种自动图像提示工程工具,它结合了CLIP和BLIP,以优化文本提示以与给定的图像匹配。您可以在像Stable Diffusion这样的文本到图像模型中使用由CLIP Interrogator创建的提示来创建酷炫的艺术品。CLIP Interrogator创建的提示全面描述了图像,不仅包括其基本要素,还包括艺术风格、图像背后的潜在灵感以及可在哪里使用或可能使用图像的VoAGI等。您可以在SageMaker上轻松部署CLIP Interrogator解决方案,以简化部署过程,并利用由完全托管服务提供的可伸缩性、成本效益和坚固安全性。下图显示了这个解决方案的流程逻辑。

使用Amazon SageMaker上的多模型模型构建一个图像到文本生成AI应用程序 四海 第3张

您可以使用以下笔记本在SageMaker上部署CLIP Interrogator解决方案。同样地,对于CLIP模型主机,我们使用SageMaker LMI容器通过DJL Serving在SageMaker上托管解决方案。在此示例中,我们提供了一个附加的输入文件,其中包含指定部署到SageMaker端点的模型的模型工件。您可以通过model_name.json文件传递标题模型名称和clip模型名称来选择不同的CLIP或BLIP模型,该文件是使用以下代码创建的:

model_names = {    "caption_model_name":'blip2-2.7b', #@param ["blip-base", "blip-large", "git-large-coco"]    "clip_model_name":'ViT-L-14/openai' #@param ["ViT-L-14/openai", "ViT-H-14/laion2b_s32b_b79k"]}with open("clipinterrogator/model_name.json",'w') as file:    json.dump(model_names, file)

推理脚本model.py包含一个处理函数,DJL Serving将通过调用此函数来运行您的请求。为了准备此入口脚本,我们采用了原始clip_interrogator.py文件中的代码,并对其进行了修改,以便在SageMaker主机上使用DJL Serving工作。一个更新是加载BLIP模型。在初始化Interrogator对象期间,使用load_caption_model()load_clip_model()函数加载BLIP和CLIP模型。为了加载BLIP模型,我们首先从Hugging Face下载了模型工件,并将其作为属性文件中model_id的目标值上传到Amazon S3。这是因为BLIP模型可能是一个很大的文件,比如尺寸超过15 GB的blip2-opt-2.7b模型。在模型部署期间从Hugging Face下载模型将需要更多时间来创建端点。因此,我们将model_id指向BLIP2模型的Amazon S3位置,并从属性文件中指定的模型路径加载模型。请注意,在部署期间,模型路径将被交换为本地容器路径,DJL Serving从Amazon S3位置下载模型工件时使用的路径。请参阅下面的代码:

if "model_id" in properties and any(os.listdir(properties["model_id"])):    model_path = properties["model_id"]... ...    caption_model = Blip2ForConditionalGeneration.from_pretrained(model_path, torch_dtype=self.dtype)

由于CLIP模型的体积不大,我们使用open_clip直接从Hugging Face加载模型,这与原始的clip_interrogator的实现相同:

self.clip_model, _, self.clip_preprocess = open_clip.create_model_and_transforms(    clip_model_name,    pretrained=clip_model_pretrained_name,    precision='fp16' if config.device == 'cuda' else 'fp32',    device=config.device,    jit=False,    cache_dir=config.clip_model_path)

我们使用类似的代码将CLIP Interrogator解决方案部署到SageMaker端点,并使用输入图像调用端点以获取可用于生成类似图像的提示信息。

让我们以以下图片为例。使用在SageMaker上部署的CLIP Interrogator端点,它生成了以下文本描述:croissant on a plate, pexels contest winner, aspect ratio 16:9, cgsocietywlop, 8 h, golden cracks, the artist has used bright, picture of a loft in the morning, object features, stylized border, pastry, french emperor.

使用Amazon SageMaker上的多模型模型构建一个图像到文本生成AI应用程序 四海 第4张

我们可以进一步将CLIP Interrogator解决方案与稳定扩散和快速工程技术相结合,创造性的可能性将出现一个全新的维度。此集成不仅允许我们用文本描述图像,还可以操纵和生成原始图像的各种变体。稳定扩散通过迭代地改进生成的输出来确保受控图像合成,战略提示工程则指导生成过程朝着期望的结果发展。

笔记本的第二部分,我们详细介绍了使用快速工程来改变稳定扩散模型(Stable Diffusion XL 1.0)的步骤。我们使用Stability AI SDK在订阅AWS市场上的该模型后,从SageMaker JumpStart部署此模型。因为这是由Stability AI提供的更新和更好的图像生成版本,所以我们可以根据原始输入图像获得高质量的图像。此外,如果我们在前面的描述前加上一位已知艺术家和他的作品的提示,我们可以得到惊人的重塑结果。以下图片使用了提示:这个场景是范·高夫的《星空》风格的画,盘子上有牛角面包,pexels比赛获胜者,宽高比16:9,cgsocietywlop,8小时,金色裂纹,艺术家使用明亮色,早上的阁楼图片,物件特征,风格化边框,糕点,法国皇帝。

使用Amazon SageMaker上的多模型模型构建一个图像到文本生成AI应用程序 四海 第5张

以下图片使用了提示:这个场景是北斋的《神奈川冲浪里大浪》风格的画,盘子上有牛角面包,pexels比赛获胜者,宽高比16:9,cgsocietywlop,8小时,金色裂纹,艺术家使用明亮色,早上的阁楼图片,物件特征,风格化边框,糕点,法国皇帝。

结论

多模态模型(如CLIP和BLIP)的出现及其应用正在迅速改变图像到文本转换的领域。它们弥合了视觉和语义信息之间的差距,为我们提供了解锁视觉数据潜力并以前所未有的方式加以利用的工具。

在本文中,我们介绍了多模态模型的不同应用。这些应用范围从提高电子商务平台中搜索的效率和准确性,通过自动标记和分类到为文本到图像模型(如稳定扩散)生成提示。这些应用为创造独特且引人入胜的内容开辟了新的视野。我们鼓励您通过探索SageMaker上的各种多模态模型并构建创新的业务解决方案来进一步了解。

Leave a Reply

Your email address will not be published. Required fields are marked *