亚马逊AWS官方博客

IPC GenAI 应用场景与方案概述

1. 智能视觉行业洞察

消费级智能视觉起源于安防监控系统,逐步在往不同的方向发展。特别是消费级 IPC 业务,经过多年的发展,形成了基于公有云的 SaaS 业务生态。我们观察到,消费级智能视觉从原先关注【强安防】的安全感知场景,逐步在向更【多元化、娱乐社交属性】的形态发展。

举例来说:

1)厂商逐渐将视觉能力从 IPC 逐渐移植到各类智能硬件中,赋予他们看得见的能力,比如宠物喂食机、家用机器人,智慧喂鸟器。多模态模型提供的开放检测能力,也使得更多自定义标签得以检测,准确性和理解性都有很大提升。

2)由于 AIGC 技术的兴起,C 端用户期望获得对设备采集内容的更多个性化能力,比如“视频和图像风格转换”,“社交圈文案自动生成”,或者“自动用户指定主体的抽取录像片段”,从而让用户获得内容创作的成就感。

3)将智能视觉的应用和社交属性关联,让 C 端用户可以在社区中相互分享和交流心得,提升了产品和服务的粘性。

我们会发现原来传统应用于安防视觉场景的 CV 小模型已经逐渐无法满足客户和用户的需求。参考上一波 AI 浪潮先从 NLP 自然语言蔓延到 CV 视觉,本次 GenAI 也从 LLM 大语言模型逐步渗透到多模态模型。因此,技术的逐渐成熟,让我们可以对智能视觉这个领域进行新的创新和革新。

2. 应用场景介绍

智能视觉行业应用非常广泛,在本文中,我们将主要聚焦以下三个典型的多模态应用场景:

场景 1:视频摘要与总结

对于一个宠物爱好者来说,用户关心的是自己宠物一天的活动轨迹,希望极少的时间看完一段爱宠的短视频,或者通过视频总结来了解宠物一天行动的概述。在 CV 小模型的时代,由于模型很难很好的理解视频内容并给出视频片段总结,限制了该应用场景的大范围推广。

场景 2:视频内容问答

在传统视频应用中,在海量录像片段中找到需要的信息,一直是一个费事费力且 C 端体验较差的功能。

例如,我们可能想知道,行李箱是否落在某个地方。这时我们通过和多模态构建的系统询问:“你是否见到过一个行李箱”“大概在昨天下午的时间”。通过这样的问答形式,让智能视觉系统成为你的工作生活助手。

场景 3:社交圈文案生成

短视频已成为社交应用的主要载体,为用户智能生成、自动剪辑、风格转换后的短视频,谁不想尝试进行分享呢?但是正如大家在用社交媒体来分享个人精彩瞬间时,经常为文案的构思、措辞的选择而花费时间思考。降低用户时间消耗,将大幅提升用户体验。如果有个智能助手自动提供一段适合用户风格的文案,可以打破用户使用的障碍,加速应用破圈。

3. 相关知识

在本文中,我们将使用两个不同的视觉-语言多模态预训练模型 “BLIP2” 和 “VisualGLM-6B”,结合大语言模型 Claude 来实现上述应用场景,并提供部署方式以及实现效果展示。

3.1 VisualGLM 模型介绍

VisualGLM-6B 是一个开源的,支持图像、中文和英文的多模态对话语言模型,语言模型基于 ChatGLM-6B,具有 62 亿参数;图像部分通过训练 BLIP2-Qformer 构建起视觉模型与语言模型的桥梁,整体模型共 78 亿参数。该模型依靠来自于 CogView 数据集的 30M 高质量中文图文对,与 300M 经过筛选的英文图文对进行预训练,中英文权重相同。在本文中,我们主要使用 VisualGLM-6B 做中文部分应用效果演示。

3.2 BLIP2 模型介绍

BLIP-2 是当前流行的多模态模型之一,它包含三个部分:第一个组件是来自 CLIP 的冻结的图像编码器 ViT-L/14,将图像数据作为输入。第二个组件是冻结的 LLM FlanT5,输出文本。第三个组件是一个名为 Q-Former 的可训练模块,它是一个轻量级转换器,将冻结图像编码器与冻结 LLM 连接起来。BLIP-2 在各种视觉语言任务上实现了最先进的性能,在本文中,我们主要使用 BLIP-2 做英文部分应用效果演示。

3.3 Bedrock Claude 介绍

Amazon Bedrock 是一项完全托管的服务,可以通过 API 使用来自 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon 等领先人工智能公司的高性能基础模型(FM),加速构建生成式人工智能应用程序。在 2023 年 9 月底,亚马逊云宣布将 Antrophic 公司的 Claude2 模型纳入 Amazon Bedrock 服务并正式上线。该模型作为 ChatGPT-4 最强有力的竞争对手,展现了不俗的实力。

4. 方案搭建

本文中展示的 Demo,其应用系统设计与方案架构如下:

您可以在 github 上找到完整代码。

4.1 准备工作

您可以开启一台 SageMaker notebook 来运行本文中的代码。

从该 github 上拷贝完整代码:

git clone https://github.com/isoyaoya/ipc_demo_code.git

这其中,BLIP2 文件夹中包含部署 BLIP2 模型以及应用测试的完整代码;VisualGLM 文件夹中包含部署 VisualGLM 模型以及应用测试的完整代码;video 文件夹下包含几段下载好的演示视频;video_frame 文件夹用于存储临时抽取的图像关键帧。

您需要为 Notebook 所用的角色添加对“S3” “SageMaker”等服务的完整权限。

4.2 部署 SageMaker 实时终端节点

我们使用大模型推理容器(LMI)来分别部署 “BLIP2” 和 “VisualGLM-6B”模型,该容器针对使用 DJLServing 托管大型模型进行了优化。借助 SageMaker LMI 容器,以及使用 Hugging Face 库,我们可以轻松实现模型在 SageMaker 上的部署。

主要步骤包括:

1)提供一些推理相关的文件和脚本,并打包上传至 S3 存储桶。

  • 提供 serving.properties ,这是一个配置文件,可用于向 DJL Serving 指示要使用的模型并行化和推理优化库。根据您的需要,您可以设置适当的配置。
  • 提供 model.py 脚本,您可以在这里面自定义推理的前后处理逻辑,包括模型加载,数据前后处理等。
  • 提供 requirements.txt,该文件包含需要安装的任何其他 pip wheel 的文本文件。

2)定义 SageMaker 模型,代码如下:

from sagemaker.model import Model
from sagemaker.utils import name_from_base

model_name = name_from_base(blip_model_version)
model = Model(
    image_uri=inference_image_uri,
    model_data=s3_code_artifact,
    role=role,
    name=model_name,
)

3)使用 deploy 函数进行模型部署,并指定机型和数量。代码如下:

%%time
endpoint_name = "endpoint-" + model_name
model.deploy(
    initial_instance_count=1,
    instance_type="ml.g5.2xlarge",
    endpoint_name=endpoint_name
)

4)等待终端节点部署完成,状态更改为“Inservice”状态后,我们即可使用该终端节点进行推理。

上述仅为关键步骤概述,您可以直接阅读完整代码获得更多详细信息。

4.3 生成关键帧的内容描述

我们主要使用来自 pexels 网站上的短视频来展示应用效果。

视频抽帧

在本文中,我们对视频采用间隔为 35 的间隔抽帧方式。在您实际应用过程中,我们建议您结合 Amazon Rekognition 或者基于 SageMaker 部署的目标检测模型,来检测动态的目标关键帧,这样有助于减少存储和推理的成本。

生成关键帧内容描述

在上文中,我们已经部署了“BLIP2” 和 “VisualGLM-6B”模型的 SageMaker 实时终端节点。接下来我们可以通过直接调用的方式来让模型分别产生对于图片帧的中英文描述,关键代码片段如下:

def run_inference(endpoint_name, inputs):
    response = smr_client.invoke_endpoint(
        EndpointName=endpoint_name, Body=json.dumps(inputs)
    )
    return response["Body"].read().decode('utf-8')
…………
for item in frame_list:
    image_path=frame_path+item
    raw_image = Image.open(image_path).convert('RGB')
    base64_string = encode_image(image_path)
    inputs = {"prompt": "please describe this image.", "image": base64_string,"parameters": gen_strategy_params}
    result=run_inference(endpoint_name, inputs)
    content_result_list.append(result)

在本次 Demo 中,我们是将关键帧及其描述分别存储至 S3 和内存中,用于后续调用 Bedrock Claude 的推理。在实际生产应用中,我们建议您将图片信息及其描述存储在 Amazon Dynamodb 中,这是一款快速、灵活的 NoSQL 数据库服务,可在任何规模下实现个位数毫秒级的性能。随后再基于 Dynamodb 中的内容进行查找和总结,更适合大规模生产应用。

4.4 使用 Bedrock Claude 进行不同任务

我们通过配置 Bedrock client,并指定模型 id 为”anthropic.claude-v2″来进行使用。

boto3_bedrock = bedrock.get_bedrock_client()

inference_modifier = {'max_tokens_to_sample':4096, 
                      "temperature":0.5,
                      "top_k":250,
                      "top_p":1,
                      "stop_sequences": ["\n\nHuman"]
                     }

textgen_llm = Bedrock(model_id = "anthropic.claude-v2",
                    client = boto3_bedrock, 
                    model_kwargs = inference_modifier 
                    )
                    

针对不同的任务类型,我们分别提供了中英文的提示词模板(Prompt Template),来让大模型理解我们的任务以及它要输出的结果。您可以在“utils” 文件夹下看到针对不同任务的中英文提示词模板。

举个例子,对于“中文应用-社交圈文案生成”任务的提示词模板为:

对于“英文应用-视频摘要与总结”任务的提示词模板为:

值得一提的是,以上只是我们针对不同应用场景提供的通用性提示词模板。

在实际生产应用过程中,我们建议您基于提示词工程的知识,根据业务需求针对性进行修改。提供更多的样本以及使用更定制化的 agent pipeline 有助于您获得更贴近业务需要的效果。

5. 应用效果展示

视频一:

视频来自 https://www.pexels.com/video/dogs-playing-854179/ ,这是一段狗狗在户外嬉戏玩耍的视频,我们来测试中文应用。

利用 “VisualGLM-6B”+ Claude 产生视频总结为:
此视频显示两只狗在户外环境中玩耍。它们在草坪上追逐、跳跃和玩球,狗狗们正在享受户外活动和游戏。它们看起来开心并且互相间存在友好的互动。整个场景给人一种轻松愉快的感觉。

产生的社交圈文案为:
这个视频展示了我的两只可爱的宠物狗 Milo 和 Bailey 在我们后院草坪上玩耍的画面。它们互相追逐、跳跃,看起来非常开心。
我们家的后院有一个很大的草坪,是狗狗们最喜欢的玩耍场所。每当我拿出飞盘或球,Milo 和 Bailey 就会非常兴奋地跑过来参与游戏。看着它们快乐地玩耍,我感到非常欣慰。我希望通过这段视频,也能让大家看到我的两只小宝贝有多可爱!希望这个视频也能给大家带来欢乐和笑容。
我会继续与 Milo 和 Bailey 在后院嬉戏,记录下更多它们快乐成长的点点滴滴,与大家分享。感谢大家的观看!

对于视频连续的视觉问答:
我的狗狗今天去了哪里?
狗狗今天去了有草坪的地方

它做了什么?
它在那里玩球、追逐、跳跃等游戏。

视频二:

视频来自 https://www.pexels.com/video/baby-boy-sucking-her-toes-7394167/,这是一段婴儿玩耍的视频,我们来测试英文应用。

利用 BLIP2+ Claude 产生视频总结为:
This video shows a baby laying on a bed. The baby is seen sleeping with his feet on the bed and pillow. The baby also has his hands on his knees at times. There are moments when a person is looking down at the baby’s feet in the bed.

产生的社交圈文案为:
This video shows my little angel growing up so fast! 100 days ago you came into this world and changed our lives forever. Watching you grow from a tiny newborn to an expressive baby has been an amazing journey. Your silly smiles brighten each day, even when mama is exhausted. Your arrival brought new meaning to our family. I hope we have many more days together as you continue to grow. Can’t wait to look back on these precious memories of your first days!

对于视觉问答问题 “Did my baby has dangerous behaviors today?”,产生的回答为:
No.

视频三:

视频来自 https://www.pexels.com/video/bird-going-inside-a-bird-house-854957/,这是一段镜头捕捉鸟类活动的视频,我们来测试英文应用。

利用 BLIP2 + Claude 产生视频总结为:
This video shows a birdhouse in a garden with trees and bushes in the background. A small bird is sitting inside the birdhouse or on its roof. The birdhouse is made of wood and has holes on the sides and top for the bird to enter and exit. The video focuses on capturing the birdhouse from different angles with the bird inside its nest.

产生的社交圈文案为:
This video shows some precious moments with my little feathered friend! Over the past year, I’ve had the joy of watching a sweet bird make its home in the wooden birdhouse in my backyard. Through changing seasons, my new neighbor stuck around, peeking its head out of the round hole in its cozy abode. I loved seeing its bright blue feathers and hearing its cheerful chirps on sunny mornings.
I feel so lucky to have made a new friend! This little bird brought me comfort and made me smile during difficult days. I hope it continues to stay in the neighborhood so we can enjoy more special moments together.

对于视觉问答问题 “What kind of bird appeared today? ”,产生的回答为:
Blue bird

6. 工程化应用方案

除了上述轻量级应用方案,亚马逊云科技原型团队(RP)还提供一个生产级别的解决方案,可通过 CDK(Cloud Development Kit)一键部署到客户的环境中。该方案参考了当前流行的 RAG(Retrieval-Augmented Generation)架构,并提供了两个 API 接口供客户使用。

  1. 提取关键帧的详细信息:通过第一个 API 接口,客户可以从视频中提取关键帧,并将详细信息保存在 Dynamodb 数据库中。这些详细信息包括图像特征、目标检测结果、时间戳等,以便后续的问答功能使用。
  2. 问答功能:通过第二个 API 接口,客户可以与系统进行问答交互。客户可以提出问题,系统将基于 RAG 架构进行信息检索和生成,并返回与视频内容相关的答案。这样,客户可以通过与系统的交互来获取关于视频的问答结果。

该方案视频内容问答架构包括五个模块:视频抽帧、目标检测、视频语言理解(VLM)、构建信息库和大语言模型(Bedrock)。

  1. 视频抽帧:从输入的视频中每秒提取一帧图像,并将这些图像传递到下一个模块进行处理。
  2. 目标检测:在抽取的图像中使用开放域目标检测模型,识别出其中的物体和目标。根据设定的兴趣项(如人、车、宠物),筛选出感兴趣的帧,将其他不相关的帧排除。该环节可基于 Amazon Rekognition 或 使用 SageMaker 部署的目标检测模型来检测关键目标帧,这样有助于减少存储和推理的成本,在生产应用中十分关键。
  3. 视频语言理解(VLM):将经过筛选的感兴趣帧送入 VLM 模块。VLM 有较多可选择模型,除了上文提到的 VisualGLM 以及 BLIP2,后续还有 LLaVa、MiniGPT,CogVLM、QWen-VL 等模型,模型效果都有较大效果提升。不过更大的模型也意味着更大的推理成本,建议您结合成本以及您应用场景下的效果综合选择。
  4. 构建信息库:该模型生成基于图像的描述,并提取出图像中检测到的目标物体和时间信息。这些信息将被存储到数据库(如 Dynamodb)中。Amazon Dynamodb 是一款快速、灵活的 NoSQL 数据库服务,可在任何规模下实现个位数毫秒级的性能。随后再基于 Dynamodb 中的内容进行查找和总结,更适合大规模生产应用。
  5. 大语言模型(Bedrock):从 Dynamodb 中提取与视频帧相关的描述,并将其输入到大语言模型中。该模型会生成关于视频内容的总结,将其存储到另一个 Dynamodb 数据表中。

通过以上五个模块的协作,我们能够实现视频内容的提取、筛选、描述生成和总结。这样的架构能够为客户提供强大的视频内容问答功能,使他们能够更好地理解和利用视频数据。基于构建的 Dynamodb信息库,可以支持 3 种不同类型的视觉问答,分别是:生成(generate)、存在(exist)、总结(summary)。

  • 生成通道(Generate Path):如果您希望从视频中提出一个开放性问题,您可以选择此路径。首先,问题将经过关键帧匹配模块,与帧中的关键词进行匹配,以提取可能回答问题的图像。然后,问题和图像将送入视频语言理解模块(VLM),生成基于问题的描述。最后,我们会整理一个 prompts,将其输入到大语言模型,以回答客户提出的问题。
  • 存在通道(Exist Path):如果您想查询视频中某个物体的情况,例如询问手机最后出现的时间,我们已经将目标检测的结果及相关时间存储在 Dynamodb 中。您可以直接访问 Dynamodb 数据库,提取相关信息,并将其组织为 prompts,然后将其输入到大语言模型中,以获得结果。
  • 总结通道(Summary Path):如果您希望获得关于视频内容的总结,您可以选择此路径。直接访问 Dynamodb 数据库,获取关于视频内容的总结信息。

7. 结语

本文聚焦在智能视觉特别是 IPC 行业和 GenAI 多模态技术的结合点,从场景应用、技术方案、工程化等方面进行了探讨。

对于泛娱乐场景下的音视频,由于其画面信息和配音信息同样重要,建议除了利用产生 BLIP2 等多模态模型产生画面描述外,再基于 Amazon Transcribe 服务将音频转化为文字字幕,综合结合画面和字幕来进行视频总结。提供另一篇博客方案供您参考:https://aws.amazon.com/blogs/media/video-summarization-with-aws-artificial-intelligence-ai-and-machine-learning-ml-services/

本篇作者

欧阳梅子

亚马逊云科技机器学习领域技术客户经理,专注于为企业级客户提供人工智能和机器学习技术域的架构设计,优化、和深度技术支持,具有丰富的解决客户实际问题、落地大型机器学习项目的经验。

富宸

AWS GenAI 解决方案技术专家,负责 GenAI 多模态方向解决方案的设计和推广。曾任职于腾讯进行 AI 应用技术研究工作,在计算机视觉以及多模态领域有丰富的落地经验。

邓冠群

邓冠群,AWS 快速原型解决方案架构师,在机器学习领域有多年工作经验,在目标检测,OCR,AIGC 等方向有丰富的算法开发以及落地实践经验。

杨凯歌

数据实验室应用科学家,在机器学习领域尤其强化学习领域有丰富的算法开发和落地实践经验。

唐晓

AWS AI/ML Specialist,GCR Busines Dev Platform,负责 AI Services 相关的 GTM 工作。