Difusi stabil yang diimplementasikan oleh NCNN Framework berdasarkan C ++, yang didukung TXT2IMG dan IMG2IMG!
Zhihu: https://zhuanlan.zhihu.com/p/582552276
Video: https://www.bilibili.com/video/bv15g411x7hc
Kinerja TXT2IMG (Waktu Pra-IT dan RAM)
| per-it | i7-12700 (512x512) | I7-12700 (256x256) | Snapdragon865 (256x256) |
|---|---|---|---|
| lambat | 4.85S/5.24G (7.07G) | 1.05s/3.58g (4.02g) | 1.6s/2.2g (2.6g) |
| cepat | 2.85S/9.47G (11.29g) | 0.65S/5.76g (6.20g) |
2023-03-11: Senang menambahkan IMG2IMG Android dan rilis APK baru
2023-03-10: Senang menambahkan IMG2IMG x86
2023-01-19: cepat & lebih sedikit ram dalam x86, bentuk dinamis di x86
2023-01-12: Perbarui ke kode NCNN terbaru dan gunakan Model Optimize, Perbarui Android, Tambahkan Monitor Memori
2023-01-05: Tambahkan model 256x256 ke proyek x86
2023-01-04: Gabungkan dan selesaikan MHA OP di x86, aktifkan Gelu cepat


Semua model dan file exe yang dapat Anda unduh dari 百度网盘 atau Google Drive atau rilis
Jika Anda hanya membutuhkan model NCNN, Anda dapat mencarinya dari 硬件模型库-设备专用模型, itu akan lebih cepat dan gratis.
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin dan letakkan di assetsmagic.txt , setiap baris adalah:stable-diffusion.exeCatatan: Harap patuhi persyaratan model SD dan jangan gunakan untuk tujuan ilegal
AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin, AutoencoderKL-encoder-512-512-fp16.bin dan letakkan di assets cd x86/linux
mkdir -p build && cd build
cmake ..
make -j $( nproc )AutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin dan letakkan mereka untuk build/assets./stable-diffusion-ncnnAutoencoderKL-fp16.bin, FrozenCLIPEmbedder-fp16.bin, UNetModel-MHA-fp16.bin dan letakkan di folder assetsSaya telah mengunggah tiga model ONNX yang digunakan oleh difusi stabil, sehingga Anda dapat melakukan beberapa pekerjaan yang menarik.
Anda dapat menemukannya dari tautan di atas.
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