首页运营教程Amazon SageMaker+LLaVA实现图片自动化分类

Amazon SageMaker+LLaVA实现图片自动化分类

2025-04-22 64

无论是网站运营还是平台运营都会面临图片处理的难题,例如如何高效、准确的对海量酒店图片进行分类,有效提供平台的运营效率和和用户体验。接下来站长百科将主要介绍如何利用Amazon SageMaker部署LLaVA模型,从而实现酒店图片的自动化、高精度分类,以应对千万级别图片的处理需求,并降低运营成本。

当下问题:随着平台数据量的急剧增加,人工分类方法已经难以应对每天可能新增的数十万张图片,还容易出现分类不一致,因此需要一个自动化、高精度的图片分类解决方案。

具体目标:准确分类酒店图片,如房间、大堂、泳池、餐厅等几十余种;高效处理千万级别的存量图片,同时控制推理成本。

一、解决方案介绍

近些年多模态AI模型(能同时处理文本和图像的模型)已经发展的相当强大了,例如Claude3.5的多模态能力,能够直接用于图片分类任务。但是在大规模场景中使用这些模型仍存在一些局限性,例如:

  • 模型在自定义标签分类场景精度有上限,需要大量提示词工程的工作;
  • 模型升级可能导致已积累的提示词失效;
  • 推理成本较高。

结合以上考虑因素,本文选择开源的LLaVA作为基础模型,并使用私域数据进行微调。同时采用vllm推理加速框架,进一步提升模型的吞吐量。

微调是一种将预训练模型适应特定任务的技术,能够在保持模型通用能力的同时,显著提升其在特定领域的表现。这种方法能够实现自主可控、性能达标且具有成本效益的图片处理模型;而vllm是一个高效的大语言模型推理引擎,能够显著提高模型的处理速度,这对于处理大规模图片数据集尤为重要。

二、LLaVA模型是什么

LLaVA全称为“Large Language and Vision Assistant”——强大的多模态AI模型,不仅结合了预训练的大语言模型(LLM),还采用了预训练的视觉编码器,同时理解和处理文本和图像信息,适用于诸如图像分类、图像描述等多模态任务。

Amazon SageMaker+LLaVA实现图片自动化分类

本文演示方案使用了LLaVa-NeXT(也称为LLaVa-1.6)——LLaVA的最新版本。相较于前代模型LLaVa-1.5,LLaVa-1.6通过以下改进显著提升了性能。

  • 提高了输入图像分辨率,使模型能够捕捉更多图像细节;
  • 在改进的视觉指令调优数据集上进行训练,增强了模型的理解能力;
  • 显著提升了OCR(光学字符识别)能力,使模型更擅长识别图像中的文字;
  • 增强了常识推理能力,使模型能够更好地理解图像内容的上下文。

本实例使用的具体版本是基于Mistral 7B的LLM:llava-hf/llava-v1.6-mistral-7b-hf。

注意:LLava系列适配多种LLM的语言头,这些模型在不同下游任务的表现各有优劣,具体可以参考各大榜单,进行最新的模型选择,在本方案的基础上快速切换。

三、数据准备

模型的性能离不开高质量的训练数据,因此需要精心准备训练数据集,具体步骤如下:

1、收集各类酒店场景的图片数据集:图片种类和数量尽可能丰富、尽量覆盖各种可能的场景,如不同类型的房间、各种风格的大堂、室内外泳池、各式餐厅等。

2、为每张图片标注相应类别:需要专业知识,确保标注的准确性和一致性。

3、构建图像——文本对:训练数据的核心。每个训练样本应包含一张图片和与之相关的问题——答案对。例如,问题可以是“这张图片展示的是什么类型的酒店设施?”,答案则是相应的类别。

4、为了高效管理这些训练数据,推荐使用Hugging Face的datasets包。该强大工具不仅可以帮助下载和使用开源数据集,还能高效地进行数据预处理。使用datasets可以将数据构造成如下格式。

from datasets import Dataset, DatasetDict, Image, load_dataset, load_from_disk
dataset = load_from_disk('data.hf')
dataset['train'][0]
{
'id': 133,
'images': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=550x412>,
'messages': [
{
'content': [
{
'index': None,
'text': 'Fill in the blank: this is a photo of a {}, you should select the appropriate categories from the provided labels: [Pool,Exterior,Bar...]',
'type': 'text'
},
{
'index': 0, 
'text': None, 
'type': 'image'
}
],
'role': 'user'
},
{
'content': [
{
'index': None,
'text': 'this is a photo of Room.',
'type': 'text'
}
],
'role': 'assistant'
}
]
}

注意:在构造训练数据集的content.text时,提示词的格式对下游任务具有很大影响。经过测试发现,使用接近于预训练clip的格式模版:this is a photo of {},能够提升下游任务的准确率~5%。

四、模型训练

数据准备完成后需要进行模型微调。本例使用TRL(Transformer Reinforcement Learning)训练框架进行模型微调,基于deepspeed进行分布式训练。

以下是关键的训练命令及其重要参数:

accelerate launch --config_file=examples/accelerate_configs/deepspeed_zero3.yaml \
examples/scripts/sft_vlm.py \
--dataset_name customer \
--model_name_or_path llava-hf/llava-v1.6-mistral-7b-hf \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 1 \
--output_dir sft-llava-1.6-7b-hf-customer2batch \
--bf16 \
--torch_dtype bfloat16 \
--gradient_checkpointing \
--num_train_epochs 20 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 100 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--per_device_eval_batch_size 8

关键参数说明:

  • –dataset_name:指定使用的数据集;
  • –model_name_or_path:基础模型路径;
  • –save_steps:每100步存储一次模型checkpoint;
  • –num_train_epochs:训练轮数,本例设置为20轮;
  • –learning_rate:学习率,本例设置为2e-5;
  • –per_device_train_batch_size:每个设备的训练批次大小,这里设为1,注意由于本例微调数据量较小,建议使用较小的batch size提升精度表现。

测试结果显示,在一台配备Nvidia H100 GPU的P5实例上,训练1000张图片大约需要10分钟完成训练。训练时间可能会根据具体的硬件配置和数据集大小有所变化。训练结束后请将checkpoint上传至AWS S3,为后续推理部署做准备。

五、部署推理

模型训练完成后需要将其部署为可用的推理端点,接下来由Amazon SageMaker托管。

Amazon SageMaker是亚马逊云科技(AWS)推出的完全托管服务,汇集了广泛采用的AWS机器学习 (ML) 和分析功能,能够统一访问你的所有数据,为分析和人工智能提供一体式体验。优势如下:

  • 使用单一数据和人工智能开发环境,以加快协作和构建;
  • 使用多种工具开发和扩展人工智能使用案例;
  • 使用开放湖仓以统一所有数据,从而减少数据孤岛;
  • 使用端到端数据和人工智能治理,以满足企业安全需求。

目前AWS为新用户推出了100+免费体验产品,其中包括Amazon SageMaker,免费资源如下:

Amazon SageMaker+LLaVA实现图片自动化分类

点击立即注册为AWS新用户享免费资源

推荐阅读:《亚马逊云科技账号注册流程

本例采用了基于DJL(Deep Java Library)的推理框架,将微调后的LLaVA 1.6模型部署在g5.xlarge实例上。

1、准备serving.properties文件,该文件用于指定推理框架和微调模型的位置。

engine = Python
option.rolling_batch=vllm
option.tensor_parallel_degree = max
option.max_rolling_batch_size=64
option.model_loading_timeout = 600
option.max_model_len = 7200
option.model_id = {{s3url}}

为了提升推理速度,这里将vllm作为推理引擎。

2、将配置目录打包上传到Amazon S3,然后使用以下代码完成部署推理端点。

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

以上代码Amazon SageMaker的Model类来创建和部署模型。指定模型镜像、模型数据位置、Amazon IAM角色等信息,然后调用deploy方法来创建推理端点。

3、部署完成后,可以测试推理端点。例如请求包含一个文本问题和一张base64编码的图片,模型将分析图片并回答问题。以下为测试示例,构造包含文本和图片的请求:

inputs = {
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Fill in the blank: this is a photo of a {}"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
"max_tokens": 256
}
output = predictor.predict(inputs)
{
'id': 'chatcmpl-140501937231984',
'object': 'chat.completion',
'created': 1732716397,
'choices': [{
'index': 0,
'message': {
'role': 'assistant',
'content': ' this is a photo of Terrace/Patio.'
},
'logprobs': None,
'finish_reason': 'eos_token'
}],
'usage': {
'prompt_tokens': 2168,
'completion_tokens': 12,
'total_tokens': 2180
}
}

在该示例中,模型识别出预定义的类别:Terrace/Patio。

六、成本估算

由于vllm批量推理的特性,每千张图片的推理时间约674秒,结合g5.xlarge的实例价格,千张图片的推理成本约为0.26美元。

相关推荐:

在Amazon EC2上训练深度学习模型教程

利用AWS打造AI聊天助手

亚马逊云科技Amazon EC2部署DeepSeek-R1蒸馏模型教程

  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

相关文章