【PyTorch实战·1】多模态图片生成(文心一言大模型)

🌈个人主页: 十二月的猫-CSDN博客

🔥 系列专栏:PyTorch实战_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

🏀 专栏持续更新中~~~✨

目录

[1. 前言](#1. 前言)

[2. 文心大模型(ERNIE-ViLG)](#2. 文心大模型(ERNIE-ViLG))

[2.1 ERNIE-ViLG模型代码](#2.1 ERNIE-ViLG模型代码)

[2.2 ERNIE-ViLG模型代码讲解](#2.2 ERNIE-ViLG模型代码讲解)

[2.2.1 模型加载](#2.2.1 模型加载)

[2.2.2 模型输入输出](#2.2.2 模型输入输出)

[2.2.3 Prompt 设计原则](#2.2.3 Prompt 设计原则)

[3. 基于文心大模型的AI作画](#3. 基于文心大模型的AI作画)

[3.1 进入百度开发者社区](#3.1 进入百度开发者社区)

[3.2 开通AI作画应用](#3.2 开通AI作画应用)

[3.3 选择相应API开通](#3.3 选择相应API开通)

[3.4 Api调用方法](#3.4 Api调用方法)

[4. data(payload)写法](#4. data(payload)写法)

4.1具体要求

[4.2 举例子](#4.2 举例子)


1. 前言

大家好,我是十二月的猫。

【PyTorch实战】系列包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

同时猫猫也将在讲解过程中,连同环境配置一起讲解,真正做到无门槛、无基础也能独立完成项目

项目环境:

  • 平台:Windows11
  • 语言环境:python3.8
  • 编译器:PyCharm
  • PyTorch版本:2.4.1(CUDA版本)
复制代码
pip安装方法如下:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

这里大家一定要对应上自己的CUDA版本、GPU版本等 (具体问题具体分析)

2. 文心大模型(ERNIE-ViLG)

2.1 ERNIE-ViLG模型代码

ERNIE-ViLG模型本质上是一种AIGC模型

AIGC(Artificial Intelligence Generated Content)登上舞台,以高效、精准、定制化等能力特征,重新定义了内容生产方式。

想要更详细了解AIGC模型,可以看我的另一篇文章【人工智能绪论】一次性搞懂什么是AIGC!_aigc的技术-CSDN博客

可惜:文心一言的ERNIE-ViLG 模型已经不开放API计量使用
因此在CSDN上看到的大部分利用ERNIE-ViLG 模型来进行文生图的方法已经不再适用

但是这里我仍然提供一下核心代码,如果有友友之前购买过ERNIE-ViLG 模型的API仍然可以使用

因为ERNIE-ViLG模型 本身已经不对外开放,所以这里我不提供完整可以运行的代码

后面的**AI作画-基础版(基于文心大模型)**我会提供完整代码

python 复制代码
"""
 * Created with PyCharm
 * 作者: 十二月的猫
 * 日期: 2024/9/23
 * 时间: 10:09
 * 描述:
"""

import paddlehub as hub

# from docarray import DocumentArray, Document

def run(text_prompts='汽车', style="油画"):
    erniv_vilg_module = hub.Module(name='ernie_vilg')

    # 古风|油画|水彩画|卡通画|二次元|浮世绘|蒸汽波艺术|low poly|像素风格|概念艺术|未来主义|赛博朋克|写实风格|洛丽塔风格|巴洛克风格|超现实主义

    result = erniv_vilg_module.generate_image(text_prompts=text_prompts, style=style, topk=6, output_dir='./output')

    # DocumentArray([Document().load_pil_image_to_datauri(image) for image in result[:6]]).plot_image_sprites()

2.2 ERNIE-ViLG模型代码讲解

代码核心包括两个部分:

  • 模型加载
  • 模型输入输出

2.2.1 模型加载

文心ERNIE-ViLG参数规模达到100亿,是目前为止全球最大规模中文跨模态生成模型,在文本生成图像、图像描述等跨模态生成任务上效果全球领先,在图文生成领域MS-COCO、COCO-CN、AIC-ICC等数据集上取得最好效果。你可以输入一段文本描述以及生成风格,模型就会根据输入的内容自动创作出符合要求的图像。

python 复制代码
import paddlehub as hub
from docarray import DocumentArray, Document

ernie_vilg_module = hub.Module(name='ernie_vilg')

2.2.2 模型输入输出

模型输入就是给模型提供的提示词(Prompt)

这个提示词需要有固定的格式以及固定的写法

模型输出就是模型输出图片的数量、图片的保存路径、图片的分辨率

代码如下:

python 复制代码
result = erniv_vilg_module.generate_image(text_prompts=text_prompts, style=style, topk=6, output_dir='./output')

参数

  • text_prompts(str): 输入的语句,描述想要生成的图像的内容
  • style(Optional[str]): 生成图像的风格,当前支持'油画','水彩','粉笔画','卡通','儿童画','蜡笔画'。
  • topk(Optional[int]): 保存前多少张图,最多保存10张。
  • output_dir(Optional[str]): 保存输出图像的目录,默认为"ernievilg_output"。

返回

  • images(List(PIL.Image)): 返回生成的所有图像列表,PIL的Image格式。

2.2.3 Prompt 设计原则

  • text_prompts:图像生成内容
  • style:图像风格

古风|油画|水彩画|卡通画|二次元|浮世绘|蒸汽波艺术|low poly|像素风格|概念艺术|未来主义|赛博朋克|写实风格|洛丽塔风格|巴洛克风格|超现实主义

例如text_prompts:"山水,亭子,动物"

style:"油画"

例如text_prompts:"戴着眼镜的猫"

style:" 迷幻艺术"

3. 基于文心大模型的AI作画

3.1 进入百度开发者社区

3.2 开通AI作画应用

3.3 选择相应API开通

至此,我们就获得了有作图权限的两个Key:

Secret Key

Api Key

后面通过这两个Key,我们要获取access_token用来访问模型所在页面(登录Token应用)

3.4 Api调用方法

使用Ai作画包括两个步骤:

  1. 请求发送
  2. 结果查询

请求发送后,获得task_id,利用task_id在结果查询中获得结果

请求发送:

python 复制代码
import requests
import json

API_KEY = "Your_key" # 要改的
SECRET_KEY = "Your_key" # 要改的

def main():

    url = "https://aip.baidubce.com/rpc/2.0/wenxin/v1/basic/textToImage?access_token=" + get_access_token()

    # 请求内容(作画的描述)
    # json.dumps():将字典结构转为json类型
    # json.loads():将json类型转为字典结构
    # 字典结构可以认为是python中的json结构,json结构是用于网络传输的结构
    payload = json.dumps(
        {
            "text": "汽车",
            "style": "油画",
            "resolution": "512*512",
            "num": 1
        }
    )

    # 确定:请求格式是json,接受格式是json
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    print(response.text)

    # 解析 response 并保存 taskId
    # json结构需要利用json.loads来读取
    # .text:获得服务器返回内容的内容体
    response_data = json.loads(response.text)
    # 字典结构可以通过[]输入关键字来获取
    task_id = response_data['data']['taskId']

    # 保存 taskId 到 JSON 文件
    with open('task_id.json', 'w') as f:
        json.dump({"taskId": task_id}, f)


def get_access_token():
    """
    使用 AK,SK 生成鉴权签名(Access Token)
    :return: access_token,或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

if __name__ == '__main__':
    main()
复制代码
查询结果:
python 复制代码
import requests
import json

API_KEY = "Your_key" #要改的
SECRET_KEY = "Your_key" #要改的


def main():
    # 从 JSON 文件读取 taskId
    with open('task_id.json', 'r') as f:
        data = json.load(f)
        task_id = data['taskId']
    url = "https://aip.baidubce.com/rpc/2.0/wenxin/v1/basic/getImg?access_token=" + get_access_token()

    payload = json.dumps(
        {
            "taskId":task_id
        }
    )
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)

    print(response.text)


def get_access_token():
    """
    使用 AK,SK 生成鉴权签名(Access Token)
    :return: access_token,或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))


if __name__ == '__main__':
    main()

4. data(payload)写法

4.1具体要求

参数 是否必选 类型 描述
text string 输入内容,长度不超过190个字(操作指南详见文档
resolution string 图片分辨率,可支持512*512、640*360、360*640、1024*1024、720*1280、1280*720
style string 目前支持风格有:二次元、写实风格、古风、赛博朋克、水彩画、油画、卡通画,更多风格可自行探索
num int 图片生成数量,支持1-6张
text_content string 1~50个字符,支持英文、数字及常用特殊字符。若不传该参数则默认为Text-to-Image-内容ID-AI,示例:Text-to-Image-131870381_0_finaI.png-Al;若传该参数,则相应水印内容自动添加至Text-to-Image后方,示例:Text-to-Image-ABCD-131870381_0_finaI.png-Al
text_check integer 模型侧的提示词检测开关,仅支持输入0和1。0:关闭,1:开启(默认值)。开启时,如果提示词未通过模型侧提示词检测则子任务的sub_task_error_code会返回501,无法生成图片。

4.2 举例子

写实风格,女生,半身照,都市背景,真实拍摄,8k:

写实风格,一只小老虎,细节精致,实景拍摄,色彩明亮:

摄影风格,阳光灿烂的春天,一只草编篮子放置在白色毯子上,里面装着水果和花。整个场景简洁,野餐氛围,公园绿色草坪,温暖阳光,自然光线,近景,整体温暖色调,逼真,专业拍摄,清晰细节:

卡通插画,可爱小熊,蘑菇,萤火虫,童话森林,精美细节,8K,CG,梦幻:

如果想要学习更多pyTorch实战的知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

相关推荐
沐雪架构师19 分钟前
AI大模型开发原理篇-2:语言模型雏形之词袋模型
人工智能·语言模型·自然语言处理
python算法(魔法师版)1 小时前
深度学习深度解析:从基础到前沿
人工智能·深度学习
小王子10241 小时前
设计模式Python版 组合模式
python·设计模式·组合模式
kakaZhui1 小时前
【llm对话系统】大模型源码分析之 LLaMA 位置编码 RoPE
人工智能·深度学习·chatgpt·aigc·llama
struggle20252 小时前
一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
人工智能·深度学习·目标检测·语言模型·自然语言处理·数据挖掘·集成学习
佛州小李哥2 小时前
通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技
Mason Lin3 小时前
2025年1月22日(网络编程 udp)
网络·python·udp
清弦墨客3 小时前
【蓝桥杯】43697.机器人塔
python·蓝桥杯·程序算法
云空4 小时前
《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
运维·人工智能·web安全·网络安全·开源·网络攻击模型·安全威胁分析
AIGC大时代4 小时前
对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
论文阅读·人工智能·chatgpt·数据分析·prompt