位置: IT常识 - 正文

Stable Diffusion - API和微服务开发

编辑:rootadmin
Stable Diffusion - API和微服务开发

推荐整理分享Stable Diffusion - API和微服务开发,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Stable Diffusion 是一种尖端的开源工具,用于从文本生成图像。 Stable Diffusion Web UI 通过 API 和交互式 UI 打开了许多这些功能。 我们将首先介绍如何使用此 API,然后设置一个示例,将其用作隐私保护微服务以从图像中删除人物。

推荐:用 NSDT场景设计器 快速搭建3D场景。

1、生成式AI简介

基于机器学习的数据生成器在去年发生了如此多的创新,你可以将 2022 年称为“生成 AI 年”。

我们有 DALL-E 2,这是来自 OpenAI 的文本到图像生成模型,它生成了宇航员骑马和狗穿着人衣服的惊人逼真的图像。 GitHub Copilot 是一款功能强大的代码完成工具,可以自动完成语句、编写文档并通过一条评论为您实现全部功能,已作为订阅服务向公众发布。

我们拥有 Dream Fields、Dream Fusion 和 Magic3D,这是一系列能够仅从文本生成带纹理的 3D 模型的开创性模型。 最后但同样重要的是,我们有 ChatGPT,这是当今不需要介绍的尖端人工智能聊天机器人。

这份清单几乎没有触及表面。 在像 DALL-E 2 这样的生成图像模型的世界中,我们还有 Midjourney、Google Imagen、StarryAI、WOMBO Dream、NightCafe、InvokeAI、Lexica Aperture、Dream Studio、Deforum……我想你明白了。 😉 📷 可以毫不夸张地说,生成式AI已经俘获了全世界的想象力。

2、Stable Diffusion

虽然许多流行的生成式 AI 工具(如 ChatGPT、GitHub Copilot 和 DALL-E 2)都是专有的和付费的,但开源社区并没有错过任何机会。 去年,LMU Munich、Runway 和 Stability AI 合作公开分享了 Stable Diffusion,这是一种强大而高效的文本到图像模型,足以在消费类硬件上运行。 这意味着任何拥有良好 GPU 和互联网连接的人都可以下载 Stable Diffusion 代码和模型权重,从而为世界带来低成本的图像生成。

3、Stable Diffusion Web UI

Stable Diffusion Web UI 是最流行的利用 Stable Diffusion 的工具之一,它在基于浏览器的交互式用户界面中公开了 Stable Diffusion 的各种设置和功能。 该项目的一个鲜为人知的功能是你可以将其用作 HTTP API,从而允许你从自己的应用程序请求图像。

它具有大量功能,例如图像修复、图像扩展、调整大小、放大、变化等等。 项目 wiki 提供了所有功能的一个很好的概述。 此外,它还提供可扩展性脚本。

4、Stable Diffusion Web UI设置

在开始之前,请确保你的系统上有至少 8GB VRAM 的 GPU(最好是 NVIDIA,但也支持 AMD)。 这将确保你可以将模型加载到内存中。 接下来,需要将存储库克隆到你的系统(例如通过 HTTPS):

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

请按照系统的安装说明进行操作,因为它们可能与我的不同。 我安装了 Ubuntu 18.04 来设置它,但它也应该适用于 Windows 和 Apple Silicon。 这些说明将包括设置 Python 环境,因此请确保你设置的环境在稍后启动服务器时处于活动状态。

完成后,我们需要模型权重的副本。 我使用的是 Stable Diffusion 2.0,但现在也可以使用 Stable Diffusion 2.1。 无论选择哪个选项,请务必下载 stablediffusion 存储库的权重。 最后,将这些权重复制到 models/Stable-diffusion 文件夹,如下所示:

cp 768-v-ema.ckpt models/Stable-diffusion

现在应该准备好开始生成图像了! 要启动服务器,请从根目录执行以下命令(确保你设置的环境已激活):

python launch.py

服务器将需要一些时间来设置,因为它可能需要安装依赖、将模型权重加载到内存中以及检查嵌入等。 准备就绪后,应该会在终端中看到一条消息,如下所示:

Running on local URL: http://127.0.0.1:7860

用户界面是基于浏览器的,因此请在你喜欢的网络浏览器中导航到“127.0.0.1:7860”。如果它正常工作,它应该看起来像这样:

5、Stable Diffusion Web UI用法

现在应该准备好生成一些图像了! 继续并通过在“提示”字段中输入文本并单击“生成”来生成一些内容。 如果这是你第一次使用此 UI,请花点时间探索和了解它的一些功能和设置。 如果有任何问题,请参阅 wiki。 这些知识稍后在设计 API 时会派上用场。

我不会深入研究如何使用 Web UI,因为在我之前的许多人都这样做过。 但是,我将提供以下基本设置备忘单以供参考。

采样方法:采样算法。 这会极大地影响生成图像的内容和整体外观。 方法之间的执行时间和结果可能有很大差异。 最好先试验这个选项。采样步数:图像生成过程中的去噪步数。 一些结果会随着步数的增加而发生巨大变化,而另一些结果会很快导致收益递减。 20-50 的值对于大多数采样器来说是理想的。宽度、高度:输出图像尺寸。 对于 SD 2.0,768x768 是首选分辨率。 分辨率会影响生成的内容。CFG 量表:无分类器指导 (CFG) 量表。 增加它会增加提示对图像的影响程度。 较低的值会产生更具创意的结果。去噪强度:确定允许原始图像的变化量。 值为 0.0 时不会发生任何变化。 值为 1.0 时会完全忽略原始图像。 从 0.4–0.6 之间的值开始通常是一个安全的选择。种子:随机种子值。 当你想比较变化尽可能小的设置的效果时很有用。 如果喜欢特定的一代但想对其进行一些修改,请复制种子。6、使用 Stable Diffusion 作为 API

Web UI 专为单个用户设计,非常适合作为交互式艺术工具来制作你自己的作品。 但是,如果我们想使用它作为引擎构建应用程序,那么我们将需要一个 API。 stable-diffusion-webui 项目的一个鲜为人知(且记录较少)的特性是它还有一个内置 API。 Web UI 是使用 Gradio 构建的,但还有一个 FastAPI 应用程序可以通过以下方式启动:

python launch.py --nowebui

这为我们提供了一个 API,可以公开我们在 Web UI 中拥有的许多功能。 我们可以发送带有我们的提示和参数的 POST 请求,并接收包含输出图像的响应。

7、创建Stable Diffusion微服务

例如,我们现在将设置一个简单的微服务,用于从照片中删除人物。 这有很多应用,例如保护个人隐私。 我们可以使用Stable Diffusion作为基本的隐私保护过滤器,它可以从照片中去除人物,而不会出现任何难看的马赛克或像素块。

请注意,这是一个基本设置; 它不包括加密、负载平衡、多租户、RBAC 或任何其他功能。 此设置可能不适用于生产环境,但它可用于在家庭或私人服务器上设置应用程序。

8、以API方式启动Stable Diffusion

以下说明将在 API 模式下使用服务器,因此请继续并使用 CTRL+C 暂时停止 Web UI。 使用 --nowebui 选项以 API 模式再次启动它:

python launch.py --nowebuiStable Diffusion - API和微服务开发

服务器准备好后应该打印如下内容:

INFO: Uvicorn running on http://127.0.0.1:7861 (Press CTRL+C to quit)9、向 Stable Diffusion API 发送请求

我们要做的第一件事是演示如何向 API 发出请求。 我们希望向应用程序的 txt2img(即“文本到图像”)API 发送 POST 请求以简单地生成图像。

我们将使用 requests 包,所以如果你还没有安装它:

pip install requests

我们可以发送一个包含提示的请求作为一个简单的字符串。 服务器将返回一个图像作为 base64 编码的 PNG 文件,我们需要对其进行解码。 要解码 base64 图像,我们只需使用 base64.b64decode(b64_image)。 以下脚本应该是测试它所需的全部内容:

import jsonimport base64import requestsdef submit_post(url: str, data: dict): """ Submit a POST request to the given URL with the given data. """ return requests.post(url, data=json.dumps(data))def save_encoded_image(b64_image: str, output_path: str): """ Save the given image to the given output path. """ with open(output_path, "wb") as image_file: image_file.write(base64.b64decode(b64_image))if __name__ == '__main__': txt2img_url = 'http://127.0.0.1:7861/sdapi/v1/txt2img' data = {'prompt': 'a dog wearing a hat'} response = submit_post(txt2img_url, data) save_encoded_image(response.json()['images'][0], 'dog.png')

将内容复制到文件并将其命名为 sample-request.py。 现在执行这个:

python sample-request.py

如果有效,它应该将图像的副本保存到文件 dog.png 中。 我的看起来像这个衣冠楚楚的家伙:

请记住,你的结果会与我的不同。 如果遇到问题,请仔细检查运行Stable Diffusion应用程序的终端的输出。 可能是服务器尚未完成设置。 如果您遇到“404 Not Found”之类的问题,请仔细检查 URL 是否输入正确并指向正确的地址(例如 127.0.0.1)。

10、设置图像掩码

如果到目前为止一切正常,那就太好了! 但是我们如何使用它来修改我们已有的图像呢? 为此,我们需要使用 img2img(即“图像到图像”)API。 此 API 使用稳定扩散来修改你提交的图像。 我们将使用修复功能:给定图像和遮罩,修复技术将尝试用稳定扩散生成的内容替换图像的遮罩部分。 遮罩充当权重,在原始图像和生成图像之间平滑插值,以将两者混合在一起。

我们将尝试使用我们可用的许多预训练计算机视觉模型之一来生成一个面具,而不是手工制作面具。 我们将使用模型输出的“人”类来生成掩码。 虽然对象检测模型可以工作,但我选择使用分割模型,以便您可以尝试使用密集掩码或边界框。

我们将需要一个示例图像来进行测试。 我们可以从 Internet 下载一个,但本着保护隐私(和版权)的精神,为什么不制作一个稳定传播的呢? 下面是我用提示“美丽的山景,一个女人从镜头前走开”生成的。

你可以下载这个,但我鼓励你尝试自己生成一个。 当然,你也可以使用真实照片。 以下是将来自 torchvision 的分割模型作为蒙版应用于此图像的最小代码。

import torchfrom torchvision.models.segmentation import fcn_resnet50, FCN_ResNet50_Weightsfrom torchvision.io.image import read_imagefrom torchvision.utils import draw_segmentation_masksimport matplotlib.pyplot as pltif __name__ == '__main__': img_path = 'woman-on-trail.png' # Load model weights = FCN_ResNet50_Weights.DEFAULT model = fcn_resnet50(weights=weights, progress=False) model = model.eval() # Load image img = read_image(img_path) # Run model input_tform = weights.transforms(resize_size=None) batch = torch.stack([input_tform(img)]) output = model(batch)['out'] # Apply softmax to outputs sem_class_to_idx = {cls: idx for (idx, cls) in enumerate(weights.meta['categories'])} normalized_mask = torch.nn.functional.softmax(output, dim=1) # Show results class_idx = 1 binary_masks = (normalized_mask.argmax(class_idx) == sem_class_to_idx['person']) img_masked = draw_segmentation_masks(img, masks=binary_masks, alpha=0.7) plt.imshow(img_masked.permute(1, 2, 0).numpy()) plt.show()

像以前一样,将其复制到名为 segment-person.py 的文件中。 使用以下代码执行代码:

python segment-person.py

生成的预测应如下所示:

我们现在拥有向 API 发出请求并预测边界框的机制。 现在我们可以开始构建我们的微服务了。

11、人物清除微服务

现在让我们转向我们的实际示例:从图像中删除人物。 微服务应执行以下操作:

读取多个输入参数从文件加载图像将类别为“person”的分割模型应用于图像以创建掩码将图像和掩码转换为base64编码向本地服务器的 img2img API 发送包含 base64 编码图像、base64 编码掩码、提示和任何参数的请求解码并将输出图像保存为文件

由于我们已经分别介绍了所有这些步骤,因此已在此 GitHub Gist 中为您实施微服务。 现在下载脚本并使用以下命令在图像“woman-on-trail.png”(或您喜欢的任何图像)上执行它:

python inpaint-person.py woman-on-trail.png -W 1152 -H 768

-W 和 -H 分别表示所需的输出宽度和高度。 它将生成的图像保存为 inpaint-person.png,并将相应的蒙版保存为 mask_inpaint-person.png。 你的会有所不同,但这是我收到的输出:

嗯,不是我们想要的。 似乎人的大部分都还在,尤其是剪影。 我们可能需要遮盖更大的区域。 为此,让我们尝试将掩码转换为边界框。 我们可以使用 -B 标志来做到这一点。 `

python inpaint-person.py woman-on-trail.png -W 1152 -H 768 -B

我收到的输出是这样的:

这也不对! 混凝土柱不是我们期望在小径中间找到的东西。 也许引入提示将有助于将事情引向正确的方向。 我们使用 -p 标志在请求中添加提示“mountain scenery, landscape, trail”。 我们还使用 -D 32 扩大边界框以消除一些边缘效果,并使用 -b 16 模糊边界框以将掩码与背景混合一点。

python inpaint-person.py woman-on-trail.png \ -W 1152 -H 768 \ -b 16 -B -D 32 \ -p "mountain scenery, landscape, trail"

有了这个,我收到了以下输出:

现在看起来似乎不错! 继续尝试不同的图像、设置和提示,使其适合你的用例。 要查看此脚本可用的参数和提示的完整列表,请输入 python inpaint-person.py -h。

12、结束语

你的图像很可能与上面的图像看起来非常不同。 因为它是一个固有的随机过程,即使使用具有相同设置的稳定扩散也会产生截然不同的输出。 要了解所有功能和适当的提示设计,学习曲线相当陡峭,即使这样,结果也可能很挑剔。 使图像看起来完全符合您的喜好是非常困难的,需要反复试验。

为了帮助你完成任务,请记住以下提示:

在切换到 API 之前,使用 Web UI 找到适合你的用例的正确参数。根据你的喜好微调图像时,依靠提示矩阵和 X/Y 绘图功能。 这些将帮助你快速探索参数搜索空间。注意种子。 如果你喜欢特定的输出但想要对其进行迭代,请复制种子。尝试使用不同的生成器,例如 Midjourney! 每个工具都略有不同。使用 Lexica 等 Internet 资源作为灵感并找到好的提示。使用设置菜单中的“使用生成参数在每个图像旁边创建一个文本文件”选项来跟踪你用于制作每个图像的提示和设置。

最重要的是,玩得开心!

原文链接:Stable Diffusion API — BimAnt

本文链接地址:https://www.jiuchutong.com/zhishi/298948.html 转载请保留说明!

上一篇:JavaScript 快速入门(javascript速成)

下一篇:Vue3通透教程【一】Vue3现状—必然趋势?

  • 微信红色涂鸦文字怎么看到(微信 涂鸦)

    微信红色涂鸦文字怎么看到(微信 涂鸦)

  • 魅族17有红外功能线的吗(魅族17p有没有红外)

    魅族17有红外功能线的吗(魅族17p有没有红外)

  • 荣耀20pro是双卡双待的吗(华为荣耀30s有nfc功能吗)

    荣耀20pro是双卡双待的吗(华为荣耀30s有nfc功能吗)

  • dmov是什么指令(plc基础知识指令27个)

    dmov是什么指令(plc基础知识指令27个)

  • 微信页面模板设置后可更改吗(微信页面模板功能只包括什么)

    微信页面模板设置后可更改吗(微信页面模板功能只包括什么)

  • iphonexr信号不稳定怎么办(iponexr信号不稳定)

    iphonexr信号不稳定怎么办(iponexr信号不稳定)

  • 微信怎么能把表情横排放(微信怎么能把表情包删除)

    微信怎么能把表情横排放(微信怎么能把表情包删除)

  • 抖音拉黑的人解除后对方有提示吗(抖音拉黑的人解除后对方后还能刷着他的视频吗)

    抖音拉黑的人解除后对方有提示吗(抖音拉黑的人解除后对方后还能刷着他的视频吗)

  • 华为nova7pro来电闪光灯怎么设置(华为nova7pro来电闪光灯怎么开)

    华为nova7pro来电闪光灯怎么设置(华为nova7pro来电闪光灯怎么开)

  • 为什么家里wifi别人都能用,自己的用不了(为什么家里wifi突然显示不可使用)

    为什么家里wifi别人都能用,自己的用不了(为什么家里wifi突然显示不可使用)

  • 移动网络机顶盒设置密码是多少(移动网络机顶盒怎么刷机教程)

    移动网络机顶盒设置密码是多少(移动网络机顶盒怎么刷机教程)

  • 八核2ghz是骁龙多少(八核2.8hz是骁龙多少)

    八核2ghz是骁龙多少(八核2.8hz是骁龙多少)

  • 三星s20和s20+的区别(三星s20和s20+的区别参数)

    三星s20和s20+的区别(三星s20和s20+的区别参数)

  • mdb是什么数据库(mdb是什么数据库文件)

    mdb是什么数据库(mdb是什么数据库文件)

  • 快手购物车在哪里找到(快手购物车在哪里打开)

    快手购物车在哪里找到(快手购物车在哪里打开)

  • 安卓手机提示内存不足怎么办(安卓手机提示内存空间不足怎么办)

    安卓手机提示内存不足怎么办(安卓手机提示内存空间不足怎么办)

  • 如何开淘宝天猫店(如何在淘宝开天猫)

    如何开淘宝天猫店(如何在淘宝开天猫)

  • 手机截图怎么打马赛克(手机截图怎么打印出来)

    手机截图怎么打马赛克(手机截图怎么打印出来)

  • 荣耀20i能不能分屏(荣耀20i怎么分屏使用教程视频)

    荣耀20i能不能分屏(荣耀20i怎么分屏使用教程视频)

  • 结构化程序设计的主要内容(结构化程序设计方法简称)

    结构化程序设计的主要内容(结构化程序设计方法简称)

  • 抖音怎么按地区找人(抖音怎么按地区查找用户)

    抖音怎么按地区找人(抖音怎么按地区查找用户)

  • qq怎么把转发权限关掉(qq转发别人的动态怎么设置权限)

    qq怎么把转发权限关掉(qq转发别人的动态怎么设置权限)

  • 小爱音箱怎么控制电视(小爱音箱怎么控制窗帘)

    小爱音箱怎么控制电视(小爱音箱怎么控制窗帘)

  • 不属于对话框的组成元素是(不属于对话框的元素是)

    不属于对话框的组成元素是(不属于对话框的元素是)

  • 爱奇艺客户端黑屏怎么办(爱奇艺客户端黑屏有声音)

    爱奇艺客户端黑屏怎么办(爱奇艺客户端黑屏有声音)

  • 织梦DEDECMS调出指定文章所有图片的代码(织梦怎么调用当前栏目下的文章)

    织梦DEDECMS调出指定文章所有图片的代码(织梦怎么调用当前栏目下的文章)

  • 税收收入包括哪些形式
  • 劳务发票要交多少税费
  • 交易性金融资产公允价值变动计入
  • 公司有残疾人如何进行增值税减免备案
  • 税控维护费抵减增值税报表怎么填
  • 已认证未抵扣的进项怎么填写
  • 所得税申报时成本数据填错怎么办
  • 行政单位利息收入是非税收入吗
  • 法人转入公司的资金怎么做账
  • 工会经费为员工计税依据是什么
  • 饮料工业发展前景如何
  • 短期筹资方式有没有股票
  • 退休人员工资可以提福利费吗
  • 在建工程转固定资产凭证附件
  • 工程预付款有发票怎么做凭证
  • 支付专家劳务费什么意思
  • 一般纳税人的含税收入怎么算
  • 董事费如何计算个人所得税
  • 企业资产损失会计处理
  • 提供出口收汇核算方法
  • 小微企业需要到哪里报税
  • 上月计提租赁费下月扣怎么做账
  • 员工入职体检表格模板
  • 企业所得税季报人数怎么填
  • 银行中间业务能开具增值税专票吗
  • 公允价值与计税价值区别
  • 利息收入会计如何做账
  • 电脑开机弹出documents文件夹
  • win10指纹传感器在哪里
  • 收到安监处罚款怎么处理
  • win7显示更新失败怎么办啊
  • macbookair怎么设置屏幕
  • 企业收到政府出资款交增值税
  • 资金运动包括哪几个方面
  • php生成二维码源码
  • 利息费用扣除限额债资比
  • react keepalive
  • thinkphp6.0完全开发手册
  • thinkphp获取数据库数据
  • css如何实现文字循环滚动左到右,再从右到左衔接循环
  • nodejs写后端接口
  • 2023年网络安全专题教育
  • js 数组中的重数
  • 帝国cms导入模板后怎样调用
  • 通货膨胀率怎么求
  • 电费为什么计入其他应付款
  • 收到所得税退税现金流量选哪个
  • 会计处理方法是什么意思
  • 帮客户代付保证金合法吗
  • 应付账款一直挂在账上会有问题吗
  • 垃圾清运费的收费标准乱要钱怎么办
  • 以现金形式发工资违法吗
  • 进项税转出怎样做账务处理
  • 建筑企业业务招待费
  • 如何更换会计账号
  • mysql批量修改字段值
  • mysql中分组
  • SQL Server AlwaysOn读写分离配置图文教程
  • sql server 2000安装包
  • ubuntu mysql 5.6版本的删除/安装/编码配置文件配置
  • 苹果mac系统怎么截屏快捷键
  • centos7如何修改用户名
  • 电脑被攻击了怎么修复
  • linux ifconfig命令详解
  • win7电脑找不到无线网络连接图标
  • windows7开机磁盘检查怎么取消
  • win10 mobile 1709
  • cocos2dx 3.17
  • node.js可以写接口吗
  • node.js gui
  • cmd命令是干嘛的
  • unity3d总结
  • jquery操作元素的方法
  • jquery的认识和使用
  • js如何使用
  • android sdk使用教程
  • 两个fragment之间传值
  • 企业年金企业账户部分可以提取么
  • 加强宣传的名言警句
  • 深圳布吉下水径旧改
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设