❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. 功能:支持多种图像描述生成模式,包括描述性字幕、稳定扩散提示、MidJourney 提示等。
  2. 技术:基于视觉语言模型(VLM),提供与 GPT4o 相当的图像描述生成性能。
  3. 应用:适用于社交媒体、图像标注、内容创作、视觉障碍辅助等多个场景。

正文(附运行示例)

JoyCaption 是什么

JoyCaption-website.png

JoyCaption 是一款开源的图像提示词生成工具,专为训练扩散模型而设计。它能够为输入的图像生成详细的描述性字幕,涵盖广泛的图像风格、内容、种族、性别和取向,最小化过滤理解世界的各个方面,但不支持非法内容。

JoyCaption 的开发旨在填补社区在图像描述生成方面的空白,提供与 GPT4o 相当的性能,且保持免费和开放。用户可以通过多种模式和提示生成描述性字幕,适用于不同的应用场景,如社交媒体帖子、产品列表等。

JoyCaption 的主要功能

  • 图像描述生成:为输入的图像自动生成详细的描述性字幕,帮助用户理解图像内容。
  • 多种生成模式:提供描述性字幕、稳定扩散提示、MidJourney 提示、Booru 标签列表等多种生成模式,满足不同场景的需求。
  • 灵活的提示选项:用户可以通过附加指令指导字幕生成,例如指定在字幕中使用特定的名字或触发词,获得更符合需求的字幕。
  • 支持 SFW 和 NSFW 内容:对 SFW 和 NSFW 内容都有平等的覆盖,不会用模糊的描述规避审查。

如何运行 JoyCaption

1. 登录

访问 JoyCaption 的在线 Demo 体验地址:https://huggingface.co/spaces/fancyfeast/joy-caption

2. 上传图片

在 JoyCaption 的界面中,上传想要分析的图片。可以通过拖放图片到指定区域或点击上传按钮完成。

3. 生成提示词

点击“caption”按钮,JoyCaption 将开始分析图片,并在界面的右侧显示 AI 反推出的提示词。

4. 使用提示词

将生成的提示词用于 AI 绘画模型(如 Flux)中,生成新的图像或进行进一步的创作。

5. 本地运行示例

以下是一个使用 JoyCaption 的 Python 代码示例:

import torch
from PIL import Image
from transformers import AutoProcessor, LlavaForConditionalGeneration

IMAGE_PATH = "image.jpg"
PROMPT = "Write a long descriptive caption for this image in a formal tone."
MODEL_NAME = "fancyfeast/llama-joycaption-alpha-two-hf-llava"

# Load JoyCaption
processor = AutoProcessor.from_pretrained(MODEL_NAME)
llava_model = LlavaForConditionalGeneration.from_pretrained(MODEL_NAME, torch_dtype="bfloat16", device_map=0)
llava_model.eval()

with torch.no_grad():
    # Load image
    image = Image.open(IMAGE_PATH)

    # Build the conversation
    convo = [
        {"role": "system", "content": "You are a helpful image captioner."},
        {"role": "user", "content": PROMPT},
    ]

    # Format the conversation
    convo_string = processor.apply_chat_template(convo, tokenize=False, add_generation_prompt=True)
    assert isinstance(convo_string, str)

    # Process the inputs
    inputs = processor(text=[convo_string], images=[image], return_tensors="pt").to('cuda')
    inputs['pixel_values'] = inputs['pixel_values'].to(torch.bfloat16)

    # Generate the captions
    generate_ids = llava_model.generate(
        **inputs,
        max_new_tokens=300,
        do_sample=True,
        suppress_tokens=None,
        use_cache=True,
        temperature=0.6,
        top_k=None,
        top_p=0.9,
    )[0]

    # Trim off the prompt
    generate_ids = generate_ids[inputs['input_ids'].shape[1]:]

    # Decode the caption
    caption = processor.tokenizer.decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)
    caption = caption.strip()
    print(caption)

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦