数据缓存系列分享(三):通过 StableDiffusion 扩展插件实现网红爆款文字光影图

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 在文章《23秒完成从零开始搭建StableDiffusion》中我们详细讲解了通过ECI的数据缓存快速搭建StableDiffusion应用,用户通过模型网站选择好自己需要的模型,然后创建ECI数据缓存,即可快速部署自己的StableDiffusion应用。本文将基于StableDiffusion + 扩展插件 ControlNet 来完成实现网红爆款文字光影图

背景

最近网上流行各种文字光影图,即在图片中非常巧妙的融入一些自定义的文字,非常炫酷,本来将分享如何通过StableDiffusion + 扩展插件的方式量产这种类型的图片。

StableDiffusion 扩展插件

在文章 23秒完成从零开始搭建StableDiffusion 中我们详细讲解了通过ECI的数据缓存快速搭建StableDiffusion应用,用户通过模型网站选择好自己需要的模型,然后创建ECI数据缓存,即可快速部署自己的StableDiffusion应用。

其实StableDiffusion的应用还支持扩展插件的方式来丰富绘图功能:

cdcbf3e1-4add-499e-82f4-b19cfe1a8584.png

前面提到的这些网络上流传的炫酷的文字图都是基于StableDiffusion + 扩展插件 ControlNet来完成的。

ECI提供的StableDiffusion标准镜像已经集成了ControlNet插件,用户无需再手动通过webui安装、下载新模型、重启应用等复杂流程,直接可以开箱即用。

StableDiffusion 模型选择

StableDiffusion模型与StableDiffusion应用是解耦的,可以自由选择任何标准的绘图模型。本文继续使用前文中使用的模型,即 hanafuusen2001/BeautyProMix,其他绘图模型也可以,比如比较常用的模型有:

casque/beautifulRealistic_v60

XpucT/Deliberate

Lykon/DreamShaper

cyberdelia/CyberRealistic

hanafuusen2001/ReVAnimated

digiplay/MeinaMix_v11

等,更多模型可以在 https://huggingface.co/https://civitai.com/ 上了解。

ControlNet 模型选择

同样,ControlNet模型与ControlNet 也是解耦的,本样例的光影文字效果会选择用模型 ioclab/ioc-controlnet



准备模型

分别创建前面提到的两个模型缓存,移步控制台

hanafuusen2001/BeautyProMix:(前文已经创建过,可以无需创建)

bucket: huggingFace-model

bucket path: /models/huggingface-model/hanafuusen2001/BeautyProMix

repoId: hanafuusen2001/BeautyProMix

repoSource: HuggingFace/Model

a0edffe3-e3dd-430e-9975-a1c1e08d5f20.png

ioclab/ioc-controlnet:

bucket: huggingFace-model

bucket path: /models/huggingface-model/ioclab/ioc-controlnet

repoId: ioclab/ioc-controlnet

repoSource: HuggingFace/Model

06326c28-ba61-4e5c-aaa3-5d66f23a860b.png



更多关于数据缓存的介绍可以参考:

openAPI:https://help.aliyun.com/document_detail/2391452.html

k8s AP:https://help.aliyun.com/document_detail/2412299.html

部署ECI

1、使用ECI已经制作好的镜像:registry.cn-hangzhou.aliyuncs.com/eci_open/stable-diffusion:1.0.1

2、hanafuusen2001/BeautyProMix 模型挂载到/stable-diffusion-webui/models/Stable-diffusion/目录,ioclab/ioc-controlnet 模型挂载到/stable-diffusion-webui/extensions/sd-webui-controlnet/models/目录,如果想替换成其他模型也只需挂载进对应的目录即可。

k8s api 参考:

{
"metadata": {
"annotations": {
"k8s.aliyun.com/eci-image-cache": "true",
"k8s.aliyun.com/eci-with-eip": "true",
"k8s.aliyun.com/eci-use-specs": "ecs.gn7i-c8g1.2xlarge",
"k8s.aliyun.com/eci-data-cache-bucket": "huggingFace-model",
        },
"name": "sd-webui",
"namespace": "default"    },
"spec": {
"containers": [
            {
"args": [
"-c",
"python3 launch.py --listen --skip-torch-cuda-test --port 8888 --no-half"                ],
"command": [
"/bin/sh"                ],
"image": "registry.cn-hangzhou.aliyuncs.com/eci_open/stable-diffusion:1.0.1",
"imagePullPolicy": "IfNotPresent",
"name": "sd-webui",
"resources": {
"requests": {
"nvidia.com/gpu": "1"                    }
                },
"volumeMounts": [
                    {
"mountPath": "/stable-diffusion-webui/models/Stable-diffusion/",
"name": "model"                    },
                    {
"mountPath": "/stable-diffusion-webui/extensions/sd-webui-controlnet/models/",
"name": "model2"                    }
                ]
            }
        ],
"restartPolicy": "Never",
"volumes": [
            {
"hostPath": {
"path": "/models/huggingFace-model/hanafuusen2001/BeautyProMix"                },
"name": "model"            },
            {
"hostPath": {
"path": "/models/huggingFace-model/ioclab/ioc-controlnet"                },
"name": "model2"            }
        ]
    }

阿里云openAPI 参考:

publicclassEciApi {
privateCreateContainerGroupResponsecreateEci() throwsClientException {
CreateContainerGroupRequestrequest=newCreateContainerGroupRequest();
request.setRegionId(RG);
request.setSecurityGroupId(getSg());
request.setVSwitchId(getVsw());
request.setContainerGroupName("sd-webui");
request.setInstanceType("ecs.gn7i-c8g1.2xlarge");
request.setAutoCreateEip(true);
request.setDataCacheBucket("huggingFace-model");
CreateContainerGroupRequest.Containercontainer=newCreateContainerGroupRequest.Container();
container.setName("sd-webui");
container.setImage("registry.cn-hangzhou.aliyuncs.com/eci_open/stable-diffusion:1.0.1");
container.setGpu(1);
container.setCommands(Arrays.asList("/bin/sh"));
container.setArgs(Arrays.asList("-c", "python3 launch.py --listen --skip-torch-cuda-test --port 8888 --no-half"));
CreateContainerGroupRequest.Container.VolumeMountvolumeMount=newCreateContainerGroupRequest.Container.VolumeMount();
volumeMount.setName("model");
volumeMount.setMountPath("/stable-diffusion-webui/models/Stable-diffusion/");
CreateContainerGroupRequest.Container.VolumeMountvolumeMount2=newCreateContainerGroupRequest.Container.VolumeMount();
volumeMount2.setName("model2");
volumeMount2.setMountPath("/stable-diffusion-webui/extensions/sd-webui-controlnet/models/");
container.setVolumeMounts(Arrays.asList(volumeMount, volumeMount2));
request.setContainers(Arrays.asList(container));
CreateContainerGroupRequest.Volumevolume=newCreateContainerGroupRequest.Volume();
volume.setName("model");
volume.setType("HostPathVolume");
volume.setHostPathVolumePath("/models/huggingFace-model/hanafuusen2001/BeautyProMix");
CreateContainerGroupRequest.Volumevolume2=newCreateContainerGroupRequest.Volume();
volume2.setName("model2");
volume2.setType("HostPathVolume");
volume2.setHostPathVolumePath("/models/huggingFace-model/ioclab/ioc-controlnet");
request.setVolumes(Arrays.asList(volume, volume2));
returnPopHelper.getAcsResponse(client, request);
    }
}

SDK版本

<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-eci --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-eci</artifactId><version>1.4.4</version></dependency>


控制台参考:

进入ECI售卖页

1、选择gpu规格

ecs.gn7i-c8g1.2xlarge

1f4d738a-5346-4413-8109-11e16ee51c77.png



2、选择stable-diffusion容器镜像

容器配置 -> 选择容器镜像 -> 常用镜像->stable-diffusion

如果是非杭州地域,直接填入镜像,效果是一样的。

registry.cn-hangzhou.aliyuncs.com/eci_open/stable-diffusion

版本:1.0.1

371ac612-8bb6-4d70-a7c3-38017f85022c.png

3、分别挂载两个模型缓存进容器

fb6ca570-fd08-48b7-99c0-9ebd28a966cd.png


4、打开公网(如果通过公网地址访问webui)

ce7ee247-92af-4509-adfb-06637c6bb73f.png


通过ip:8888就可以访问webui了

668c9290-5257-4fbc-bce5-e708cd07ce22.png

可以看到扩展插件已经自动安装好了,可以直接使用。


测试

1、选择img2img

2、正向咒语、反向咒语用法基本不变,根据自己的需求描述

3、上传文字照片(黑底白字)

da697b07-6f2f-44c0-a394-1a0d6fd52a60.png

点击展开下面的ControlNet

fb2d3b94-bba5-4d8a-8464-1922a0f28bf2.png

然后就可以生成图了:

01ac3d26-e986-4082-9d67-81ecbef3f6b8.png



基本参数说明:

Control Weight:ControlNet影响的比重。

Starting Control Step:ControlNet介入的时间,越早介入绘画自由发挥的空间就越小,文字就越明显。

Ending Control Step:ControlNet介入结束时间,结束越早融合的就越好,但也可能文字不明显。

CFG Scale:值越大创作空间越大,搭配Denoising strength使用。

Denoising strength:值越小CFG Scale的影响就越小,越接近原图。

基本没有经验值,不同的图和不同的光影搭配效果差异很大,根据实际出图结果可以自行根据需求进行微调。

其他样例

d571a7df-2b21-4305-954d-a35813e7a19d.pngd571a7df-2b21-4305-954d-a35813e7a19d.png

0092e7e2-2579-4d61-af63-03eea8dc4818.png0092e7e2-2579-4d61-af63-03eea8dc4818.png
3f5e40ed-271f-42dc-b6e8-21d21d585275.png
3f5e40ed-271f-42dc-b6e8-21d21d585275.png

9d3b4c8d-f883-4c45-ad66-7b13b615effc.png9d3b4c8d-f883-4c45-ad66-7b13b615effc.png

a2564904-0181-42bf-b187-3bb2028ad8ff.pnga2564904-0181-42bf-b187-3bb2028ad8ff.png

8d96336a-0909-4c15-aca1-711ff919c056.png


附录

数据缓存系列分享(一):打开大模型应用的另一种方式

数据缓存系列分享(二):23秒完成从零开始搭建StableDiffusion

数据缓存系列分享(三):通过 StableDiffusion 扩展插件实现网红爆款文字光影图

数据缓存系列分享(四):开源大语言模型通义千问快速体验

数据缓存系列分享(五):零代码搭建妙鸭相机

数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
5月前
|
存储 缓存 分布式计算
亿级数据如何分钟级别写入缓存?
亿级数据如何分钟级别写入缓存?
30 0
|
8月前
|
缓存 达摩院 Kubernetes
数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验
阿里达摩院近期对通义千问大模型 Qwen-14B 进行了开源(之前开源的是Qwen-7B模型),目前在ModelScope和HuggingFace上均可直接下载。关于Qwen-7B的搭建可以参考我们之前的文章:数据缓存系列分享(五):开源大语言模型通义千问快速体验版,本文将使用一样的方式打开Qwen-14B,快速体验一下。
1227 0
数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验
|
5天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战
14 0
|
2月前
|
缓存 监控 负载均衡
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
30 2
|
2月前
|
缓存 NoSQL Java
【九】springboot整合redis实现启动服务时热点数据保存在全局和缓存
【九】springboot整合redis实现启动服务时热点数据保存在全局和缓存
45 0
|
3月前
|
存储 缓存 算法
使用Java实现高效的数据缓存系统
【2月更文挑战第3天】在大规模的应用程序中,数据缓存是提高应用程序性能的一种重要方法。本文介绍了如何使用Java实现高效的数据缓存系统。我们将讨论缓存的设计原则和缓存算法的选择,同时详细说明如何使用Java内置的缓存库和其他开源工具来构建一个可靠、高效的数据缓存系统。
|
7月前
|
消息中间件 缓存 Java
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?
|
4月前
|
canal 缓存 关系型数据库
Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性
canal [kə'næl] ,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。其诞生的背景是早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
|
5月前
|
SQL 缓存 分布式计算
Apache Zeppelin系列教程第九篇——Zeppelin NoteBook数据缓存
Apache Zeppelin系列教程第九篇——Zeppelin NoteBook数据缓存
104 0
|
5月前
|
缓存 Java 关系型数据库
Spring Boot与Spring中的数据缓存Cache支持与实战(附源码)
Spring Boot与Spring中的数据缓存Cache支持与实战(附源码)
49 0
Spring Boot与Spring中的数据缓存Cache支持与实战(附源码)