文心大模型文档

数据准备

用户设置

  • 在代码最开始处设置您在官网获取到的ak和sk
import wenxin_api
wenxin_api.ak = "your ak"
wenxin_api.sk = "your sk"

准备训练数据

请确保您用于训练的图片数据已获得充分的授权,且不存在任何使用风险!更多详情请仔细阅读《服务条款》的相关内容。

  • 准备匹配的图片和文本

    1. 用尽可能详细、多样的语言描述每张图片。
      a. 在描述需要学习的主体时,可以使用“主体的类别”+“主体的名字”的形式。如下图需要学习的狗、木质壶的名字分别表示为“[d]"、“[p]”,则图片对应的描述为“一只狗[d]的照片”、“一个木质壶[p]的照片”。Tips:名字用越特殊、少见的字符组合表示,效果越好,如小狗名字为“[d]”的效果,比表示为“旺财”的效果好。
      b. 在描述需要学习的风格时,可以使用“风格的名字”+“风格”的形式。如下图需要学习的风格表示为“spst”,则图片对应的描述为“spst风格画的沙滩和大海"。
      c. 微调模型后生成图片时,文本中使用主体或风格的名字,加上其他描述,可以生成指定主体或风格在各种场景中的图片,例如“狗[d]抱着一个木质壶[p]哭,照片”、“spst风格画的一只狗”。
      截屏2023-02-09 下午9.51.18.png
      上述生成效果图片对应的prompt分别为:(狗[d]抱着一个木质壶[p]哭,照片、一只狗[d]戴墨镜的照片、spst风格画的一只狗).

      注:所有用于训练的目标主体和风格的图片来源:https://www.cs.cmu.edu/~custom-diffusion/;生成效果为ERNIE-ViLG模型精调后的实际生成图片。

    2. 建议将图片裁剪成方形。如果上传的图片不是方形,预处理时会自动裁剪成方形。
    3. 为保证生成图片的清晰度,建议训练图片的分辨率在512*512及以上。
    4. 上传的照片总数在8-10000张之间。
  • 提高微调成功率和效果的方法(强烈建议使用)

    1. 用ERNIE-ViLG生成辅助图片
      a. 当训练数据小于10张时,建议用线上的ERNIE-ViLG接口生成辅助图片,可以提高精调的效果。
      b. 对于训练数据中的描述文本,去掉目标主体或风格的名字后,用ERNIE-ViLG页面进行生成。如训练数据包含“一只狗[d]的照片”,则用ERNIE-ViLG(https://wenxin.baidu.com/ernie-vilg)解锁更多风格功能(申请即可,大约四个小时后生效,解锁后没有风格选项,即可生成原始输入文本的结果)后生成同等数量的“一只狗的照片”,效果如下:
      截屏2023-02-09 下午9.38.26.png
    2. 需要学习的同一主体的不同图片中的背景越丰富越好,需要学习的同一风格的不同图片中的内容越丰富越好,更容易让模型理解需要学到的东西。
      a. 上传同一只小狗的8张照片,背景分别为家里、草地、大山,微调后的模型可以生成各种背景下的小狗。 (建议)
      b. 上传同一只小狗的8张照片,背景都是草地,微调后的模型可能只会生成草地上的小狗。(不建议)
    3. 同一主体或风格的训练图片越多越好,角度越多越好
      a. 上传同一只小狗的正面、侧面、背面、半身、全身照片(建议)
      b. 只上传一张小狗的正面半身照片(不建议)
    4. 需要学习多个主体或风格
      a.不同的主体精调使用不同的模型,如小猫的照片精调一个模型,小狗的照片精调另一个模型,缺点是小猫和小狗无法出现在同一张照片中.(建议) b.当每个主体对应的图片数量较少时,尽量用完全不同类别的主体微调同一个模型,如用小狗的4张照片和水壶的4张照片微调同一个模型(这里小狗和水壶类别差距大),并生成小狗和水壶同时出现的照片.(建议) c.一共5个主体,都是动物,每个只有一张图片,用于精调同个模型(这里五个物体,由于都是动物,类间差别小,可能导致模型学习不够好),并试图生成5个主体同时出现的图片(不建议)
  • 上传格式

    1. 将所有图片描述的文本置于prompt.txt中,置于local_file_path根目录下。
    2. 在根目录下创建image文件夹,将每个prompt对应的图片置于以prompt.txt中的序号(从0开始)命名的文件夹下,可接受的图片格式包括jpg,png,jpeg,JPEG,JPG。
    3. 严格遵循如下的数据结构,整个结构在data命名的文件夹下面,data下面是train_data命名的文件夹,train_data下面包含image命名的文件夹和prompt命名的文件夹,image文件夹下面按照0、1、2索引构建(和prompt.txt里面的问本一一对应),每个索引文件夹下面的图片命名不做要求(不要以"."开头即可),例如不要以:".rose.jpg"这种命名即可,其他不做要求.
data
└── train_data
    ├── image
    │   ├── 0
    │   │   ├── 00000_0.jpg
    │   │   └── 00000_1.jpg
    │   ├── 1
    │   │   ├── 00000_0.jpg
    │   │   └── 00000_1.jpg
    │   └── 2
    │       ├── 00000_0.jpg
    │       └── 00000_1.jpg
    └── prompt
        └── prompt.txt
        
  1. 将整个data目录打包成tar包,然后local_file_path改为tar包的么路径即可.
tar cvf xx.tar data        
  • 参数设置参考:

注: epoch = (step * batch_size) / total_data

参数 类型 取值范围
batch_size int 1<=bs<=8
learning_rate float learning_rate>0
step int step>0

取值建议:

  1. 训练集共8张图片:lr=1e-5,step=200,batch_size=4
  2. 训练集共1000张图片:lr=1e-5,step=1000,batch_size=8

创建数据集

from wenxin_api import Dataset
from wenxin_api.const import TYPE_TEXT_TO_IMAGE
local_file_path = "your file"
dataset = Dataset.create(local_file_path = local_file_path,need_check=False,api_type=TYPE_TEXT_TO_IMAGE)

查看数据集

from wenxin_api import Dataset
from wenxin_api.const import TYPE_TEXT_TO_IMAGE

#查看所有数据集
datasets = Dataset.list(api_type=TYPE_TEXT_TO_IMAGE)
print(datasets)

# 查看指定数据集
data_id = "your dataset id"
dataset = Dataset.retrieve(data_id=data_id, api_type=TYPE_TEXT_TO_IMAGE)
print(dataset)
  • 数据集返回格式
{
    "id":88,
    "name":"test5",
    "url":"http://bj.bcebos.com/api-platform-wenxin/tuning/2EEE631CDBFE7FB2DA78720680055CAC",
    "md5":"2eee631cdbfe7fb2da78720680055cac",
    "type":"data"
}

删除数据集

from wenxin_api import Dataset

dataset_id="your dataset id" 
Dataset.delete(data_id=dataset_id, api_type=TYPE_TEXT_TO_IMAGE)
上一篇
快速开始
下一篇
模型训练