Стабильная диффузия, реализованная NCNN Framework на основе C ++, поддерживается TXT2IMG и IMG2IMG!
Zhihu: https://zhuanlan.zhihu.com/p/582552276
Видео: https://www.bilibili.com/video/bv15g411x7hc
производительность txt2img (время до-его и оперативная память)
| за это | i7-12700 (512x512) | i7-12700 (256x256) | Snapdragon865 (256x256) |
|---|---|---|---|
| медленный | 4,85 с/5,24 г (7,07 г) | 1,05 с/3,58 г (4,02 г) | 1,6 с/2,2 г (2,6 г) |
| быстрый | 2,85 с/9,47 г (11,29 г) | 0,65 с/5,76 г (6,20 г) |
2023-03-11: счастлив добавить Img2img Android и выпустить новый APK
2023-03-10: счастлив добавить img2img x86
2023-01-19: скорость и меньше оперативной памяти в x86, динамическая форма в x86
2023-01-12: обновление до последнего кода NCNN и используйте модель оптимизации, обновление Android, добавить монитор памяти
2023-01-05: добавить модель 256x256 в проект x86
2023-01-04: слияние и завершить MHA OP в x86, включить Fast Gelu


Все модели и exe -файл, которые вы можете скачать с 百度网盘 или Google Drive или выпуска
Если вам нужна только модель NCNN, вы можете искать ее из 硬件模型库-设备专用模型, это было бы более быстрее и бесплатно.
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin и поместите их в assets Foldermagic.txt , каждая строка:stable-diffusion.exeПримечание. Пожалуйста, соблюдайте требования модели SD и не используйте ее для незаконных целей
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin и поместите их в assets Folder cd x86/linux
mkdir -p build && cd build
cmake ..
make -j $( nproc )AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin и поместите их в папку build/assets./stable-diffusion-ncnnAutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin и поместите их в папку assetsЯ загрузил три модели ONNX, используемые стабильной диффузией, чтобы вы могли сделать некоторую интересную работу.
Вы можете найти их по ссылке выше.
ncnn (input & output): token, multiplier, cond, conds
onnx (input & output): onnx::Reshape_0, 2271
z = onnx(onnx::Reshape_0=token)
origin_mean = z.mean()
z *= multiplier
new_mean = z.mean()
z *= origin_mean / new_mean
conds = torch.concat([cond,z], dim=- 2 ) ncnn (input & output): in0, in1, in2, c_in, c_out, outout
onnx (input & output): x, t, cc, out
outout = in0 + onnx(x=in0 * c_in, t=in1, cc=in2) * c_out