تنفيذ مستقر تنفذه 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.85S/5.24G (7.07G) | 1.05s/3.58g (4.02g) | 1.6s/2.2g (2.6 جم) |
| سريع | 2.85s/9.47g (11.29g) | 0.65s/5.76g (6.20g) |
2023-03-11: سعيد لإضافة img2img android وإصدار APK جديد
2023-03-10: سعيد لإضافة IMG2IMG X86
2023-01-19: تسرع وأقل ذاكرة الوصول العشوائي في x86 ، الشكل الديناميكي في x86
2023-01-12: التحديث إلى أحدث رمز NCNN واستخدم نموذج تحسين ، تحديث Android ، أضف Memory Monitor
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 وأضعها في مجلد assetsmagic.txt ، كل سطر هو:stable-diffusion.exeملاحظة: يرجى الامتثال لمتطلبات نموذج SD وعدم استخدامه لأغراض غير قانونية
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin وأضعها في مجلد assets 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