模型:

FredZhang7/paint-journey-v2

英文

Paint Journey V2综合了Midjourney V4、Open Journey V2、Disco Diffusion和经过授权的艺术家的768x768油画进行了微调

以 ((油画)) 开始提示以添加油画效果。对于数字和其他绘画风格,可以使用与Midjourney V4类似的提示(稍作调整),也可以使用更稳定的扩散 v1.5(添加更多风格),Open Journey V2或Disco Diffusion的提示。

示例

所有示例都是使用Camenduru的WebUI生成的(请参阅Colab文件)

⬆️ 768x1136人物肖像,使用描述性提示生成,无需面部修复, generation parameters

⬆️ 1280x768(大多数为)自然风景,使用较短的提示, generation parameters

⬆️ 1152x768外太空景观,使用描述性提示, generation parameters

⬆️ 1280x768兰博基尼汽车, generation parameters

⬆️ 960x768伊布宝可梦, generation parameters

对比

与Open Journey V2相比,Paint Journey V2的绘画更接近于手绘艺术。与诸如Dreamlike Diffusion 1.0之类的模型相比,PJ V2倾向于生成降噪级别较低的768x768或更高分辨率的图像。该模型还能够以768x1136的分辨率生成惊人的肖像,并且没有重复人脸(使用 Camenduru's WebUI ),这对于DreamShaper 3.3之类的模型来说是一个困难的任务。

在较低的分辨率下,与PJ V2相同(简短的正面和负面提示)的情况下,DreamShaper 3.3倾向于生成噪音级别更高的更高质量肖像。然而,只要给予更多描述性的正面和负面提示,PJ V2就可以创建更多令人惊叹的杰作,并且仍然可以使用更短的提示生成美丽的风景。

训练

Paint Journey V2不仅仅对其Unet进行微调,还专注于通过各种提示对其文本编码器进行微调。这样可以将数字和油画风格与其他类型的提示无缝融合,从而产生更自然和动态的输出。

该模型在筛选过的约300张图像数据集上进行了训练,这些图像数据集来自Midjourney、 Prompt Hero PixaBay 、Open Journey V2和Reddit。在训练之前,我使用R-ESRGAN 4x对许多图像进行了处理,以增加其分辨率并减少噪音。

提示用尽了吗?

有用的资源链接: Lexica.art Fast GPT PromptGen Prompt Hero

输出尺寸

人像尺寸包括但不限于512x768、768x768和768x1136。风景尺寸包括但不限于768x512、768x768、1152x768和1280x768。

Camenduru的WebUI

git clone -b v1.6 https://github.com/camenduru/stable-diffusion-webui
单击以使用Automatic1111的Webui,但可能无法输出艺术化的图像
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

将checkpoint和vae下载到./stable-diffusion-webui/models/Stable-diffusion文件夹中。运行webui-user.bat。

? 扩散器

提示:在某些单词WORD周围使用双引号、三引号或四引号(例如“((WORD))”)将对WORD进行'强调'

pip install --upgrade diffusers transformers
# see more sampling algorithms at https://huggingface.co/docs/diffusers/using-diffusers/schedulers#changing-the-scheduler

from diffusers import StableDiffusionPipeline, EulerAncestralDiscreteScheduler
import torch, random, datetime

pipe = StableDiffusionPipeline.from_pretrained("FredZhang7/paint-journey-v2")
pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
pipe = pipe.to("cuda")

def random_seed():
  return random.randint(0, 2**32 - 1)


prompt = "((oil painting)), gentle waves, bright blue sky, white sails billowing, sun glistening on the surface, salty sea air, distant horizon, calm breeze, birds soaring overhead, vibrant colors, artstation digital painting, high resolution, uhd, 4 k, 8k wallpaper"   # what you want to see
negative_prompt = "low-res, blurry, haze, dark clouds looming, choppy waves, engine failing, sails tattered, stormy winds".split(", ")   # what you don't want to see
seed = random_seed()               # replace with the desired seed if needed
width, height = 1280, 768          # width and height of the generated image
cfg_scale = 7.5                    # classifer free guidance scale, smaller means more creative, 7 to 11 is usually a good range
num_inference_steps = 40           # sampling steps, 30 to 40 is usually good for Euler Ancestral


generator = torch.Generator("cuda").manual_seed(seed)
with torch.autocast("cuda"):
    image = pipe(prompt=prompt,
                  num_inference_steps=num_inference_steps,
                  width=width, height=height,
                  generator=generator,
                  guidance_scale=cfg_scale).images[0]

def generate_filename(string, seed):
    invalid_chars = ["<", ">", ":", '"', "/", "\\", "|", "?", "*"]
    for char in invalid_chars:
        string = string.replace(char, "")
    return f"{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}_{seed}_{string}"

image.save(f"./{generate_filename(prompt, seed)}.png")

安全检查器 V2

官方版本 stable diffusion safety checker 需要消耗1.22GB的显存,我建议使用 Google Safesearch Mini V2 (220MB)以节省1.0GB的显存。