A difusão estável implementada pela NCNN Framework baseada em C ++, TXT2IMG suportada e IMG2IMG!
Zhihu: https://zhuanlan.zhihu.com/p/582552276
Vídeo: https://www.bilibili.com/video/bv15g411x7hc
TXT2IMG Performance (Time pré-it e Ram)
| per-it | i7-12700 (512x512) | i7-12700 (256x256) | Snapdragon865 (256x256) |
|---|---|---|---|
| lento | 4.85s/5.24g (7,07g) | 1.05s/3,58g (4,02g) | 1.6s/2.2g (2.6g) |
| rápido | 2.85s/9.47g (11.29g) | 0,65s/5.76g (6,20g) |
2023-03-11: Fico feliz em adicionar img2img android e lançar novo APK
2023-03-10: Fico feliz em adicionar img2img x86
2023-01-19: Acelerar e menos ram em x86, forma dinâmica em x86
2023-01-12: Atualização para o código NCNN mais recente e use o Modelo Otimize, Atualizar Android, Adicionar Memory Monitor
2023-01-05: Adicionar modelo 256x256 ao projeto x86
2023-01-04: Mesclar e termine o MHA OP em x86, Ativar Gelu Fast


Todos os modelos e arquivo exe que você pode baixar de 百度网盘 ou Google Drive ou liberação
Se você precisar apenas do modelo NCNN, pode pesquisá-lo em 硬件模型库-设备专用模型, seria mais rápido e gratuito.
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin e coloque-os para assetsmagic.txt , cada linha é:stable-diffusion.exeNota: Por favor, cumpra os requisitos do modelo SD e não o use para fins ilegais
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin e coloque-os para assets cd x86/linux
mkdir -p build && cd build
cmake ..
make -j $( nproc )AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin e coloque build/assets os na pasta./stable-diffusion-ncnnAutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin e coloque-os na pasta de assetsEu carreguei os três modelos ONNX usados pela Stable-Diffusion, para que você possa fazer algum trabalho interessante.
Você pode encontrá -los no link acima.
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