在不同场景中保持角色的一致性和风格的连贯性方面,通过精心设计提示词虽然能取得不错效果,但要实现专业级的视觉一致性,往往还是需要调整底层模型。

基于上篇文章介绍的提示词工程与角色构建方法,本文将继续介绍如何通过微调Amazon Nova Canvas基础模型(FM),进一步提升特定角色的一致性水平。借助微调技术,创作者可指导模型精准控制角色在多个场景中的外貌、表情与风格等元素。

图片

本文以亚马逊云科技旗下FuzzyPixel公司制作的动画短片《Picchu》为例,提取其中关键角色画面作为训练数据,并为主角Mayu及其母亲微调一款角色一致性模型,以便能够为最新续集快速生成创意分镜脚本,如下图所示。

图片

图片

图片

解决方案概览

为实现自动化工作流,本文构建了一套综合性解决方案架构,该方案利用亚马逊云科技服务进行端到端部署,如下图所示。

图片

该架构工作流包含以下步骤:

1.用户将视频素材上传至Amazon S3存储桶。

2.触发Amazon ECS处理视频素材。

3.Amazon ECS对视频帧进行降采样处理,筛选出包含目标角色的画面帧,再将其居中裁剪,生成最终的角色图像。

4.Amazon ECS通过Amazon Bedrock调用Amazon Nova模型(Amazon Nova Pro),根据角色图像生成描述文本。

5.Amazon ECS将图像描述文本及元数据写入Amazon S3存储桶。

6.用户在Amazon SageMaker AI中的笔记本环境中,调用模型训练任务。

7.用户调用Amazon Bedrock的create_model_customization_job与create_model_provisioned_throughput API接口,微调定制化的Amazon Nova Canvas模型,最终生成可用于推理的定制模型。

该工作流分为两大阶段:

  • 第一阶段:包括上述步骤1至步骤5,核心在于准备训练数据。本文将详细介绍一个自动化流程:从输入视频中提取图像,然后生成带标签的训练数据。

  • 第二阶段:包括步骤6至步骤7,重点在于微调Amazon Nova Canvas模型,并使用自定义训练的模型进行测试推理。

您可参阅GitHub代码库中提供的预处理后的图像数据及完整示例代码,了解第二阶段的详细步骤说明,以便顺利完成整个流程。

GitHub代码库:

https://github.com/aws-samples/sample-character-consistent-storyboard/tree/main/02-character-consistent-fine-tuning-with-amazon-nova-canvas

准备训练数据

首先介绍工作流的第一阶段。本示例将搭建一个自动化提取视频对象或角色流程,通过以下步骤提取带有精准描述标签的高分辨率图像。

提取创意角色

首先,建议您按固定时间间隔采样视频帧,例如每秒1帧。

然后,应用Amazon Rekognition的标签检测与人脸集合搜索功能,识别目标帧与目标角色。其中,标签检测功能可识别2000多种不同标签,并定位标签在视频帧内的位置,非常适合初步检测一般角色类别或非人类角色。

为区分不同角色,继续使用Amazon Rekognition的人脸集合搜索功能,该功能通过将角色面部与预先构建的人脸集合进行匹配,实现角色识别与追踪。

如果这两种功能仍不够精确,您还可借助Amazon Rekognition Custom Labels,训练一款用于检测特定角色的定制化模型,具体工作流程如下图所示。

图片

检测完成后,居中裁剪每个角色图像,并添加适当的像素边距。

然后利用Amazon Titan Multimodal Embeddings模型运行去重算法,移除语义相似度超过阈值的图像——由于冗余或近乎相同的视频帧可能导致模型过拟合,即模型对训练数据的学习过于精准,甚至学习到其中的噪声与波动,从而遇到未见过的新数据就可能表现不佳,因此这一做法有助于构建多样化的数据集。

您可自行校准相似度阈值,微调判定为“相同图像”的标准,从而平衡数据集多样性与冗余消除之间的关系。

数据标注

利用Amazon Bedrock中的Amazon Nova Pro,为每张图像生成描述文本,随后将图像与标签清单文件上传至Amazon S3指定存储位置。该过程聚焦于提示词工程的两大关键方面:

  • 角色描述:帮助FM依据角色独特属性识别并命名角色。

  • 多样化描述生成:避免描述文本中出现重复表述,例如“一个动画角色”。

本示例在数据标注过程中使用的提示词模板如下。

system_prompt = """     You are an expert image description specialist who creates concise, natural alt    text that makes visual content accessible while maintaining clarity and focus.    Your task is to analyze the provided image and provide a creative description    (20-30 words) that emphasizes the Three main characters, capturing the essential    elements of their interaction while avoiding unnecessary details."""
prompt = """        1. Identify the main characters in the image: Character 1, Character 2, and        Character 3 at least one will be in the picture so provide at a minimum a        description with at least one character name.      - "Character 1" describe the first character, key traits, background, attributes.      - "Character 2" describe the second character, key traits, background, attributes.      - "Character 3" describe the third character, key traits, background, attributes.     2. Just state their name WITHOUT adding any standard characteristics.    3. Only capture visual element outside the standard characteristics    4. Capture the core interaction between them    5. Include only contextual details that are crucial for understanding the scene    6. Create a natural, flowing description using everyday language        Here are some examples           ...                [Identify the main characters][Assessment of their primary interaction][Selection of crucial contextual elements][Crafting of concise, natural description]            {        "alt_text": "[Concise, natural description focusing on the main characters]"    }            Note: Provide only the JSON object as the final response.

左右滑动查看完整示意

数据标注的输出格式为JSONL文件,其中每行均将图像对应的Amazon S3引用路径,与Amazon Nova Pro生成的描述文本配对。

随后上传该JSONL文件至Amazon S3,用于后续的模型训练。

JSONL文件示例如下。

{"image_ref": "s3://media-ip-dataset/characters/blue_character_01.jpg", "alt_text": "This    animated character features a round face with large expressive eyes. The character    has a distinctive blue color scheme with a small tuft of hair on top. The design is    stylized with clean lines and a minimalist approach typical of modern animation."}{"image_ref": "s3://media-ip-dataset/props/iconic_prop_series1.jpg", "alt_text": "This    object appears to be an iconic prop from the franchise. It has a metallic appearance    with distinctive engravings and a unique shape that fans would immediately recognize.    The lighting highlights its dimensional qualities and fine details that make it    instantly identifiable."}

左右滑动查看完整示意

人工校验

针对企业级应用场景,推荐引入人机协同流程,可在训练模型前由人工校验标注数据。该校验流程可通过Amazon Augmented AI(Amazon A2I)实现,能够协助标注人员核查图像与描述文本的质量。

图片

有关Amazon A2I的详细信息,请参阅《Amazon A2I入门指南》。

《Amazon A2I入门指南》

https://docs.aws.amazon.com/sagemaker/latest/dg/a2i-getting-started.html

微调Amazon Nova Canvas模型

训练数据准备就绪后,即可在Amazon Bedrock中微调Amazon Nova Canvas模型。

Amazon Bedrock需通过Amazon IAM服务角色,来访问存储模型定制训练数据的Amazon S3存储桶。更多详细信息,请参阅《自定义模型的访问与安全》。

您可直接在Amazon Bedrock控制台执行微调任务,也可使用Boto3 API完成操作。下文即将介绍这两种方式,您可在picchu-finetuning.ipynb中获取完整的端到端代码示例。

《自定义模型的访问与安全》

https://aws.amazon.com/iam/

picchu-finetuning.ipynb:

https://github.com/aws-samples/sample-character-consistent-storyboard/blob/main/02-character-consistent-fine-tuning-with-amazon-nova-canvas/picchu-finetuning.ipynb

在Amazon Bedrock控制台

创建微调任务

在Amazon Bedrock控制台中,创建Amazon Nova Canvas微调任务的步骤如下:

1.进入Amazon Bedrock控制台,在导航面板的“基础模型”下,选择“自定义模型”。

2.点击“定制模型”,随后选择“创建微调任务”。

图片

3.在“创建微调任务”详情页,选择您想要定制的模型,并为微调后的模型输入名称。

4.在“任务配置”部分,为该任务输入名称,您还可根据需要添加与之关联的标签。

5.在“输入数据”部分,输入训练数据集文件所在的Amazon S3存储位置。

6.在“超参数”部分,输入超参数数值,如下图所示。

图片

7.在“输出数据”部分,输入Amazon Bedrock应保存任务输出结果的Amazon S3存储位置。

8.点击“微调模型任务”,启动微调流程。

在本示例实验中,这套超参数组合取得了良好效果。一般而言,提高学习率会让模型训练节奏更快,但往往也会产生一个问题:虽然可以更快实现角色一致性,但也可能会影响整体图像质量。

对此,建议采用系统性方法调整超参数:首先采用推荐的批量大小和学习率,然后优先尝试增加或减少训练步数。如果模型即便训练了20000步(Amazon Bedrock允许的最大步数),仍难以充分学习数据集中的特征,则建议增大批量大小,或者适当提高学习率。这些调整看似细微,却可能显著影响模型性能。

有关超参数的更多详细信息,可参阅《创意内容生成模型的超参数说明》。

《创意内容生成模型的超参数说明》

https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-hyperparameters-content-generation-models.html

使用Python SDK创建微调任务

以下Python代码片段,通过create_model_customization_job API,创建了与上述相同的微调任务。

bedrock = boto3.client('bedrock')jobName = "picchu-canvas-v0"# Set parametershyperParameters = {        "stepCount": "14000",        "batchSize": "64",        "learningRate": "0.000001",    }
# Create jobresponse_ft = bedrock.create_model_customization_job(    jobName=jobName,    customModelName=jobName,    roleArn=roleArn,    baseModelIdentifier="amazon.nova-canvas-v1:0",    hyperParameters=hyperParameters,    trainingDataConfig={"s3Uri": training_path},    outputDataConfig={"s3Uri": f"s3://{bucket}/{prefix}"})
jobArn = response_ft.get('jobArn')print(jobArn)

左右滑动查看完整示意

任务完成后,您可使用以下代码获取新的customModelARN。

custom_model_arn = bedrock.list_model_customization_jobs(    nameContains=jobName)["modelCustomizationJobSummaries"][0]["customModelArn"]

左右滑动查看完整示意

部署微调后的模型

采用上述超参数配置时,可能需要12小时才能完成模型微调任务。任务完成后,您会在自定义模型列表中看到新模型,之后您可以创建预置吞吐量来托管该模型。

有关预置吞吐量及不同承诺计划的更多详细信息,请参阅《通过Amazon Bedrock中的预置吞吐量提高模型调用容量》。

《通过Amazon Bedrock中的预置吞吐量提高模型调用容量》

https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html

在Amazon Bedrock控制台部署模型

按照以下步骤,即可在Amazon Bedrock控制台部署模型:

1.进入Amazon Bedrock控制台,在导航面板中选择“基础模型”下的“自定义模型”。

2.选中新创建的自定义模型,然后选择“购买预置吞吐量”。

图片

3.在“预置吞吐量详情”部分,为预置吞吐量输入名称。

4.点击“选择模型”,选择您刚刚创建的自定义模型。

5.指定承诺期限和模型单元。

图片

购买预置吞吐量后,系统会生成一个新的模型ARN(Amazon Resource Name)。预置吞吐量处于服务状态时,即可调用该ARN。

图片

使用Python SDK部署模型

以下Python代码片段使用create_provisioned_model_throughput API来创建预置吞吐量。

custom_model_name = "picchu-canvas-v0"
# Create the provision throughput job and retrieve the provisioned model idprovisioned_model_id = bedrock.create_provisioned_model_throughput(    modelUnits=1,    # create a name for your provisioned throughput model    provisionedModelName=custom_model_name,     modelId=custom_model_arn)['provisionedModelArn']

左右滑动查看完整示意

测试微调后的模型

预置吞吐量可用后,便可用以下代码片段测试该自定义模型,并尝试为《Picchu》续集生成一些新图像。

import jsonimport iofrom PIL import Imageimport base64
def decode_base64_image(img_b64):    return Image.open(io.BytesIO(base64.b64decode(img_b64)))    def generate_image(prompt,                   negative_prompt="text, ugly, blurry, distorted, low                       quality, pixelated, watermark, text, deformed",                    num_of_images=3,                   seed=1):    """    Generate an image using Amazon Nova Canvas.    """
    image_gen_config = {            "numberOfImages": num_of_images,            "quality": "premium",            "width": 1024,  # Maximum resolution 2048 x 2048            "height": 1024,  # 1:1 ratio            "cfgScale": 8.0,            "seed": seed,        }
    # Prepare the request body    request_body = {        "taskType": "TEXT_IMAGE",        "textToImageParams": {            "text": prompt,            "negativeText": negative_prompt,  # List things to avoid        },        "imageGenerationConfig": image_gen_config    } 
    response = bedrock_runtime.invoke_model(        modelId=provisioned_model_id,        body=json.dumps(request_body)    )
    # Parse the response    response_body = json.loads(response['body'].read())
    if"images" in response_body:        # Extract the image        return [decode_base64_image(img) for img in response_body['images']]    else:        returnseed = random.randint(1, 858993459)print(f"seed: {seed}")
images = generate_image(prompt=prompt, seed=seed)

左右滑动查看完整示意

图片

Mayu脸上交织着紧张与坚定两种神情。妈妈蹲在她身旁,温柔地抱着她。画面背景是一片漂亮的草地。

图片

一面陡峭的岩壁上悬着一架长长的木梯,Mayu脸带坚定神情,站在木梯中间位置,纤细的小手紧紧抓着梯子内侧,小心翼翼踩在每一级木梯上。画面背景是一片崎岖的山地风貌。

图片

Mayu自豪地站在一所简朴的学校门口,脸上洋溢着灿烂的笑容,满是自豪与成就感。

清理

为避免测试完成后持续产生费用,请完成picchu-finetuning.ipynb中的清理步骤,删除以下资源:

  • Amazon SageMaker Studio域。

  • 微调后的Amazon Nova模型及预置吞吐量端点。

总结

本文介绍了如何在Amazon Bedrock中微调Amazon Nova Canvas,来进一步提升分镜脚本中角色与风格的连贯性与一致性。

本解决方案构建了一套全面高效的工作流程,整合了多个关键环节:自动化视频处理、利用Amazon Rekognition智能提取角色画面,以及借助Amazon Bedrock精准定制模型,从而在保持视觉一致性的同时,大幅加快分镜脚本创作速度。

通过针对特定角色与风格微调Amazon Nova Canvas模型,本方案实现的一致性水平已然超越标准提示词工程所能达成的效果,让创意团队能够在短短数小时内即可创作出高质量的分镜脚本,而无需再花费数周时间。

诚邀您立即体验微调Amazon Nova Canvas模型,实现更出色的角色与风格一致性,为您的故事创作加速提质。

我们正处在Agentic AI爆发前夜。企业要从"成本优化"转向"创新驱动",通过完善的数据战略和AI云服务,把握全球化机遇。亚马逊将投入1000亿美元在AI算力、云基础设施等领域,通过领先的技术实力和帮助“中国企业出海“和”服务中国客户创新“的丰富经验,助力企业在AI时代突破。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐