Diffusion stable implémentée par NCNN Framework basée sur C ++, prise en charge TXT2IMG et IMG2IMG!
Zhihu: https://zhuanlan.zhihu.com/p/582552276
Vidéo: https://www.bilibili.com/video/bv15g411x7hc
Performance txt2img (temps pré-it et ram)
| par rapport | I7-12700 (512x512) | I7-12700 (256x256) | Snapdragon865 (256x256) |
|---|---|---|---|
| lent | 4,85s / 5,24g (7,07g) | 1,05s / 3,58g (4,02g) | 1.6s / 2,2g (2,6 g) |
| rapide | 2,85s / 9,47g (11,29g) | 0,65s / 5,76 g (6,20g) |
2023-03-11: heureux d'ajouter IMG2IMG Android et de publier un nouvel APK
2023-03-10: heureux d'ajouter IMG2IMG x86
2023-01-19: accélérer et moins de RAM en x86, forme dynamique en x86
2023-01-12: Mise à jour du dernier code NCNN et utilisez le modèle Optimize, mettez à jour Android, ajoutez un moniteur de mémoire
2023-01-05: Ajouter un modèle 256x256 au projet x86
2023-01-04: fusionnez et terminez le MHA OP en x86, activez Fast Gelu


Tous les modèles et fichiers EXE que vous pouvez télécharger à partir de 百度网盘 ou Google Drive ou Release
Si vous n'avez besoin que du modèle NCNN, vous pouvez le rechercher à partir de 硬件模型库 - 设备专用模型, ce serait plus rapide et gratuit.
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin et placez-les à assets Foldermagic.txt , chaque ligne est:stable-diffusion.exeRemarque: veuillez respecter les exigences du modèle SD et ne pas l'utiliser à des fins illégales
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin et placez-les à assets Folder cd x86/linux
mkdir -p build && cd build
cmake ..
make -j $( nproc )AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin et mettez-les dans le dossier build/assets./stable-diffusion-ncnnAutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin et mettez-les dans le dossier assetsJ'ai téléchargé les trois modèles ONNX utilisés par stable-diffusion, afin que vous puissiez faire un travail intéressant.
Vous pouvez les trouver à partir du lien ci-dessus.
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