【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实战的知识,大家可以点个关注并订阅,持续学习、天天进步

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

相关推荐
Hello.Reader几秒前
BERT 系列模型核心原理
人工智能·深度学习·bert
一雨方知深秋6 分钟前
建立分支提交代码
git·python·gitee
java—大象9 分钟前
基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现
java·数据库·spring boot·python·课程设计
audyxiao00118 分钟前
实验室ICPR 2024论文分享┆FPMT: 基于增强型半监督模型的交通事件检测(含详细视频解读)
大数据·人工智能·深度学习·机器学习·icpr
南 阳19 分钟前
3D生成技术再创新高:VAST发布Tripo 2.0,提升AI 3D生成新高度
人工智能·深度学习·transformer
洛阳泰山36 分钟前
关于LlamaIndex 的几种索引方式介绍
python·llm·rag·index·llamindex
你再说一遍?3641 小时前
李沐深度学习-多层感知机、模型选择、过拟合、欠拟合
人工智能·深度学习
Mopes__1 小时前
Python | Leetcode Python题解之第432题全O(1)的数据结构
python·leetcode·题解
云天徽上2 小时前
【机器学习案列】基于随机森林和xgboost的二手车价格回归预测
人工智能·随机森林·机器学习·回归
神州问学2 小时前
商汤SenseNova 5.5大模型的应用实践
人工智能