跳至主要内容

Llama 3.2 90B 教程:使用 Groq 与 Streamlit 构建图像字幕应用

学习如何使用 Streamlit 构建前端、用 Llama 3.2 90B 生成字幕,并以 Groq 作为 API,打造一款图像字幕应用。
· 12分钟 阅读

使用 AI 探索

Meta 终于通过发布 Llama 3.2 11B 与 90B 视觉模型,为 Llama 生态正式引入多模态能力。这两个模型在处理文本与图像方面表现出色,因此我决定用 90B 版本来做一个项目。

在本文中,我将分享我的实践,并带您一步步构建一个交互式图像字幕应用:前端使用 Streamlit,字幕生成引擎采用 Llama 3.2 90B。

为何在图像字幕应用中使用 Llama 3.2 90B

Llama 3.2-Vision 90B 是一款最前沿的多模态大语言模型(LLM),专为同时涉及图像与文本输入的任务而构建。

它在处理视觉推理、图像识别和图像字幕等复杂任务方面表现突出。模型在包含 60 亿对图文数据的海量数据集上完成训练。

Llama 3.2-Vision 非常适合我们的应用,因为它在文本任务上支持多种语言;不过在与图像相关的应用中,英语仍是其主要侧重。其关键特性使其非常适用于视觉问答(VQA)、文档 VQA 和图文检索等任务,而图像字幕则是其标志性应用之一。

接下来我们看看,这些能力如何落地到图像字幕这样的真实场景中。

图像字幕流程

图像字幕是自动生成描述性文本以概括图像内容的过程。它结合了计算机视觉与自然语言处理,用语言来理解并表达视觉细节。

传统上,图像字幕需要复杂的流水线,通常包括图像处理与语言生成的独立阶段。标准方法包含三个主要步骤:图像预处理、特征提取和字幕生成。

  1. 图像预处理:通常需要对图像进行尺寸调整、归一化,必要时裁剪,以满足模型输入规范。
  2. 特征提取:提取图像中的视觉特征,用于识别物体、场景或相关细节。在大多数方法中,这需要单独的视觉模型来解析图像,生成语言模型可理解的结构化数据。
  3. 字幕生成:语言模型基于提取到的特征,整合物体、上下文与关系,生成连贯的描述。

借助 Llama 3.2 90B,这一传统上复杂的流程被显著简化。模型的视觉适配器将视觉特征融入核心语言模型,使其能够直接理解图像,并通过简单提示生成字幕。

通过在架构中嵌入交叉注意力层,Llama 3.2 90B 让用户仅通过提示即可描述一张图像——无需分离的处理阶段。这种简化让图像字幕更易用、更高效,只需一个提示,就能产出自然、贴切的描述,准确捕捉图像要义。

图像字幕应用概览

为了将 Llama 3.2 90B 的能力落地,我们将使用 Streamlit 构建一个简单而高效的图像字幕应用,并用 Groq 来生成字幕。

该应用允许用户上传一张图像,并在两次点击内获得模型生成的描述性字幕。这个方案对用户友好,且上手所需编码知识很少。

我们的应用将包含以下功能:

  1. 标题: 页面顶部醒目显示标题 Llama Captioner,明确应用用途。
  2. 上传按钮: 提供界面从用户设备上传图像。
  3. 生成按钮: 触发字幕生成流程的按钮。
  4. 字幕输出: 应用会在界面上直接显示生成的字幕。

Llama 3.2 90B 应用的代码实现

Groq API 将作为用户上传图像与 Llama 3.2-Vision 模型之间的桥梁。若您希望跟随我一同编码,请先完成:

  1. 前往 Groq Console 注册并获取 Groq API 密钥。
  2. 将您的 API 密钥保存在一个 credentials.json 文件中,以便简化访问。
  3. 按照 Groq 的 快速入门指南进行安装与配置。

下面的 Python 代码片段用于搭建一个与 Groq API 交互的 Streamlit 应用。其中包括:

  1. 导入用于 Web 应用开发(Streamlit)、AI 交互(Groq)、图像处理(base64)和文件操作(os、json)的库。
  2. 从独立的 JSON 文件读取 Groq API 密钥,以增强安全性。
  3. 定义一个函数将图像编码为 base64 格式,便于传输与处理。
import streamlit as stfrom groq import Groqimport base64import osimport json# Set up Groq API Keyos.environ['GROQ_API_KEY'] = json.load(open('credentials.json', 'r'))['groq_token']# Function to encode the imagedef encode_image(image_path):   with open(image_path, "rb") as image_file:       return base64.b64encode(image_file.read()).decode('utf-8')

接下来我们编写如下函数,利用 Groq API 为上传的图像生成文本描述。其功能分解如下:

  1. 图像编码:将上传的图像转换为 base64 编码字符串。该格式便于在 API 请求中传输图像数据。
  2. Groq API 交互:实例化 Groq 客户端以与 Groq 服务通信。构造一次对话补全请求,包含:
  • 用户提示语:“What's in this image?”
  • 以 data URI 形式嵌入的 base64 编码图像数据。指定 llama-3.2-90b-vision-preview 模型来处理图像并生成文本描述。
  1. 字幕提取:从 Groq API 响应中提取生成的字幕。返回第一条候选的消息内容,其中包含字幕。
# Function to generate captiondef generate_caption(uploaded_image):   base64_image = base64.b64encode(uploaded_image.read()).decode('utf-8')   client = Groq()   chat_completion = client.chat.completions.create(       messages=[           {               "role": "user",               "content": [                   {"type": "text", "text": "What's in this image?"},                   {                       "type": "image_url",                       "image_url": {                           "url": f"data:image/jpeg;base64,{base64_image}",                       },                   },               ],           }       ],       model="llama-3.2-90b-vision-preview",   )   return chat_completion.choices[0].message.content

最后,我们通过 Streamlit 生成交互式 Web 应用:

# Streamlit Appst.title("Llama Captioner")uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])if uploaded_file is not None:   # Show the uploaded image   st.image(uploaded_file, caption="Uploaded Image", use_container_width=True)   if st.button("Generate Caption"):       with st.spinner("Generating caption..."):           caption = generate_caption(uploaded_file)       st.success("Caption Generated!")       st.write("**Caption:**", caption)

最终的 Streamlit 应用:Llama Captioner

这个 Streamlit 应用为图像字幕任务提供了友好的交互界面。其功能包括:

  1. 标题与文件上传器:
  • 应用显示标题:“Llama Captioner”。
  • 文件上传组件可让用户选择图像文件(JPG、JPEG 或 PNG)。
  1. 图像展示:
  • 上传图像后,应用使用 st.image 函数显示图像。
  1. 字幕生成:
  • “Generate Caption” 按钮用于触发字幕生成过程。
  • 点击后会显示加载动画,表示正在生成字幕。
  • 调用 generate_caption 函数处理上传图像并获取字幕。
  • 生成成功后会显示成功提示,随后展示生成的字幕。

下面的片段展示了代码运行中的效果:上传了 Eddie Hall 的图像来生成字幕。令人惊讶的是,它甚至提取了诸如“Strongest Man”等并不清晰可见的信息。

结语

使用 Llama 3.2 90B 与 Streamlit 构建图像字幕应用,展示了先进的 AI 如何让棘手任务变得更简单。这个项目将强大的模型与简洁的界面结合,打造出直观易用的工具。

作为一名 AI 工程师,我认为这类工具潜力巨大。它们能让技术更易触达,帮助人们更好地与内容互动,并以更智能的方式自动化流程。

若您想继续学习 Llama,推荐以下资源:

Bhavishya Pandit

作者

Bhavishya Pandit

高级生成式 AI 工程师兼内容创作者,专注分享关于生成式 AI 与数据科学的知识,累计获得 2000 万次观看。

主题