实践教程|StableDiffusion图像生成能力一探!附Int8量化教程与ONNX导出推理

作者丨林大佬@知乎  编辑丨极市平台

来源丨https://zhuanlan.zhihu.com/p/561181890

最近stablediffusion大火,但很多人都只是吃瓜,最多也就是在huggingface网站上试一下,这其实并不够,作为一个富有商业嗅觉的AI从业者,我嗅探到的更多的是他的商业能力,不得不说,现在生成类的AI模型,已经越来越来接近甚至超越人类水平。

今天就来一探究竟,看看StableFusion到底能做啥?并附上这个 超级大模型的int8量化教程,以及ONNX导出,甚至是TensorRT加速推理。

请注意,一下的所有测试案例,都是我用CPU跑出来的,你要问我多慢?通过CPU OpenVINO加速也就3分钟推理。为什么不用GPU?因为显存不足!

好在我们用CPU也能比较完善的推理,结果并不差。未来我们还会继续使用TensorRT推理,加速整个推理流程。更进一步的将StableDiffusion变成生产力工具!

代码

这次我们直接先上代码,这里面包含了CPU下推理StableDiffusion,以及OpenVINO加速的代码,同时,也包含了量化脚本,感觉兴趣的可以再github提issue。

git clone https://github.com/luohao123/gaintmodels

备注:代码来自大佬,不是本人写的。不过有问题欢迎提问交流。

测试StableDiffusion

来看看生成的效果,由于模型只能编码英文,我们就以英文作为promopt。

A green car with appearance of Tesla Model 3 and Porsche 911

98a602ab2050cecf630815a4912ac938.jpeg

这长得还真的就像是,保时捷和model3的合体!中间那个logo你注意看,感觉并不是特斯拉的logo!有点像保时捷的logo!~

A robot Elon Musk in cyberpunk, driving on a Tesla Model X

5da6296c8b6ef77854de5b36619150d0.jpeg

ModelX倒是有点像,但是马斯克人呢??

StableDiffusion这类模型,似乎在生成风景画上表现不错

A beautiful mansion beside a lake in the woods, with a clean road front of it.

一栋湖边的别墅

eae023805fd4956fa6f6ff0157bb04ad.jpeg

A beautiful castle beside a waterfall in the woods, detailed, 4k

瀑布旁边的城堡

46b159c91d08434579481cc83c5e8faa.jpeg

真的是非常的优美!而且细节清晰可见!!

接下来我们测试一下,一些NSFW的内容,请注意,高能预警,我们的模型把huggingface的SaftyChecker去掉了,为什么?因为我们并不需要!并且这个模块是会占用很多内存的!

A beautiful sexy girl with red hair, 4k, detailed, without any cloth.

5fdf3585cd2dc543eaca6aa397548173.jpeg

由于你懂得原因,我只截取了一部分!!但是,这个生成的效果真的令人震惊!过于真实!!

再来测试一些创造性的东西:

A advanced spaceship with Elon Musk driving on it, detailed, in reality style

91f4acdd1a13f29410cbce7be426f5a0.jpeg

这个非常设计的,地区非常的逼真!看这个反光,这个倒影,以及上面的mount,甚至有种自动驾驶飞船的感觉。

A red tv in front of sofa, a child is looking at it with a dog.

23fa7368e8b4d804dd2e40765afbafa3.jpeg

在比如这个图片,这个真实度简直超乎了我的预料,电视机里面甚至还可以看到倒影!!

代码讲解

Experiements on testing GaintModels such as GPT3, StableFusion. We offer TensorRT && Int8 quantization on those gaint models. Make you can inference on a 6GB below GPU mem card!

Install

Some requirements to install:

pip install diffusers
pip install transformers
pip install alfred-py

Models

  1. StableFusion:

First, we need download stablefusion weights from hugging face.

git clone https://huggingface.co/CompVis/stable-diffusion-v1-4
git lfs install
cd stable-diffusion-v1-4
git lfs pull

You should downloading weights using git lfs large file system, the model about 3GB.

To make unet_2d_condition in stablefusion able to export to onnx, make some modification on diffusers, following: link

file: diffuers/models/unet_2d_conditions.py

# L137
timesteps = timesteps.broadcast_to(sample.shape[0])
#timesteps = timesteps.broadcast_to(sample.shape[0])
timesteps = timesteps * torch.ones(sample.shape[0])

output = {"sample": sample}
#output = {"sample": sample}

return output
return sample

After that, move stable-diffusion-v1-4 to weights folder. Run:

python export_df_onnx.py

To generate onnx models.

总结

生成模型在之前效果其实并不好,但是到如今,大模型已经展示出了惊人的能力。不管是创作还是设计logo,从某种方面来说可能甚至是超过常人的。然而大模型都非常大,门槛比较高,我们将StableDiffusion 降维到int8,你甚至只需要一个CPU就能推理!

这里面还有无数种可能等待大家来探索,欢迎关注、点赞文章,更多教程更新中。

猜您喜欢:

47ed0b24d7a0f8aa7ebacaebceb453b6.png 戳我,查看GAN的系列专辑~!

一顿午饭外卖,成为CV视觉前沿弄潮儿!

ECCV2022 | 生成对抗网络GAN部分论文汇总

CVPR 2022 | 25+方向、最新50篇GAN论文

 ICCV 2021 | 35个主题GAN论文汇总

超110篇!CVPR 2021最全GAN论文梳理

超100篇!CVPR 2020最全GAN论文梳理

拆解组新的GAN:解耦表征MixNMatch

StarGAN第2版:多域多样性图像生成

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 |《计算机视觉中的数学方法》分享

《基于深度学习的表面缺陷检测方法综述》

《零样本图像分类综述: 十年进展》

《基于深度神经网络的少样本学习综述》

083ff789808e6d40f070a146618b0ded.jpeg

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于tensorrt int8量化yolov5 onnx模型并实现推理python源码(加速推理)+操作说明.zip 环境配置 ubuntu:18.04 cuda:11.0 cudnn:8.0 tensorrt:7.2.16 OpenCV:3.4.2 cuda,cudnn,tensorrt和OpenCV安装包(编译好了,也可以自己从官网下载编译)可以从链接: https://pan.baidu.com/s/1dpMRyzLivnBAca2c_DIgGw 密码: 0rct cuda安装 如果系统有安装驱动,运行如下命令卸载 sudo apt-get purge nvidia* 禁用nouveau,运行如下命令 sudo vim /etc/modprobe.d/blacklist.conf 在末尾添加 blacklist nouveau 然后执行 sudo update-initramfs -u chmod +x cuda_11.0.2_450.51.05_linux.run sudo ./cuda_11.0.2_450.51.05_linux.run 是否接受协议: accept 然后选择Install 最后回车 vim ~/.bashrc 添加如下内容: export PATH=/usr/local/cuda-11.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH source .bashrc 激活环境 cudnn 安装 tar -xzvf cudnn-11.0-linux-x64-v8.0.4.30.tgz cd cuda/include sudo cp *.h /usr/local/cuda-11.0/include cd cuda/lib64 sudo cp libcudnn* /usr/local/cuda-11.0/lib64 tensorrt及OpenCV安装 定位到用户根目录 tar -xzvf TensorRT-7.2.1.6.Ubuntu-18.04.x86_64-gnu.cuda-11.0.cudnn8.0.tar.gz cd TensorRT-7.2.1.6/python,该目录有4个python版本的tensorrt安装包 sudo pip3 install tensorrt-7.2.1.6-cp37-none-linux_x86_64.whl(根据自己的python版本安装) pip install pycuda 安装python版本的cuda 定位到用户根目录 tar -xzvf opencv-3.4.2.zip 以备推理调用 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
ONNX模型量化int8是一种将模型数据从浮点表示转换为8位整数表示的优化方法。这种量化方法可以带来多个好处。首先,使用8位整数数据进行计算时,NVIDIA GPU可以使用更快更低成本的8位张量核来执行卷积和矩阵乘法运算,从而提高计算吞吐量。其次,将数据从内存移动到计算单元需要时间和能量,并且会产生热量,将激活和参数数据的精度从32位浮点值降低到8位整数可以减少数据量,从而节省能量并减少热量的产生。此外,对于具有带宽限制的层,减少内存占用可以提高缓存利用率和参数更新效率。因此,ONNX模型量化int8是一种有效的优化方法,可以在保持模型准确性的同时提高计算效率和节省资源。\[3\] 要将模型量化int8,可以使用PyTorch的torch.onnx.export函数将模型导出ONNX格式,并在导出时设置opset_version为13以支持每通道量化(PCQ)。在导出时,还可以将do_constant_folding参数设置为True,以生成更小且可读性更好的模型。以下是导出模型为ONNX并进行量化的示例代码: ``` import torch import torchvision import torch.onnx # 初始化模型 model = torchvision.models.__dict__\[model_name\](pretrained=pretrained) # 导出模型为ONNX dummy_input = torch.randn(1, 3, 224, 224) # 输入的示例数据 onnx_filename = "model.onnx" # 导出ONNX文件名 opset_version = 13 # 使用的opset版本 torch.onnx.export(model, dummy_input, onnx_filename, verbose=False, opset_version=opset_version, do_constant_folding=True) ``` 通过以上代码,您可以将PyTorch模型导出ONNX格式,并在导出时进行量化,从而将模型数据转换为int8表示。\[2\] #### 引用[.reference_title] - *1* *2* *3* [利用TensorRT实现INT8量化感知训练QAT](https://blog.csdn.net/zong596568821xp/article/details/120904429)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值