recoilme commited on
Commit
77a5b73
·
verified ·
1 Parent(s): a282f31

Upload folder using huggingface_hub

Browse files
.ipynb_checkpoints/config-checkpoint.json ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "AutoencoderKL",
3
+ "_diffusers_version": "0.36.0",
4
+ "_name_or_path": "vae_empty",
5
+ "act_fn": "silu",
6
+ "block_out_channels": [
7
+ 64,
8
+ 128,
9
+ 256,
10
+ 512,
11
+ 512
12
+ ],
13
+ "down_block_types": [
14
+ "DownEncoderBlock2D",
15
+ "DownEncoderBlock2D",
16
+ "DownEncoderBlock2D",
17
+ "DownEncoderBlock2D",
18
+ "DownEncoderBlock2D"
19
+ ],
20
+ "force_upcast": true,
21
+ "in_channels": 3,
22
+ "latent_channels": 16,
23
+ "latents_mean": null,
24
+ "latents_std": null,
25
+ "layers_per_block": 3,
26
+ "mid_block_add_attention": true,
27
+ "norm_num_groups": 32,
28
+ "out_channels": 3,
29
+ "sample_size": 1024,
30
+ "scaling_factor": 1.0,
31
+ "shift_factor": null,
32
+ "up_block_types": [
33
+ "UpDecoderBlock2D",
34
+ "UpDecoderBlock2D",
35
+ "UpDecoderBlock2D",
36
+ "UpDecoderBlock2D",
37
+ "UpDecoderBlock2D"
38
+ ],
39
+ "use_post_quant_conv": false,
40
+ "use_quant_conv": false
41
+ }
.ipynb_checkpoints/vae17-checkpoint.ipynb ADDED
@@ -0,0 +1,443 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "c15deb04-94a0-4073-a174-adcd22af10b8",
7
+ "metadata": {},
8
+ "outputs": [
9
+ {
10
+ "name": "stderr",
11
+ "output_type": "stream",
12
+ "text": [
13
+ "The config attributes {'block_out_channels': [128, 128, 256, 512, 512], 'force_upcast': False} were passed to AsymmetricAutoencoderKL, but are not expected and will be ignored. Please verify your config.json configuration file.\n"
14
+ ]
15
+ },
16
+ {
17
+ "name": "stdout",
18
+ "output_type": "stream",
19
+ "text": [
20
+ "✅ Создана новая модель: <class 'diffusers.models.autoencoders.autoencoder_kl.AutoencoderKL'>\n",
21
+ "\n",
22
+ "--- Перенос весов ---\n"
23
+ ]
24
+ },
25
+ {
26
+ "name": "stderr",
27
+ "output_type": "stream",
28
+ "text": [
29
+ "100%|██████████| 326/326 [00:00<00:00, 54186.54it/s]\n"
30
+ ]
31
+ },
32
+ {
33
+ "name": "stdout",
34
+ "output_type": "stream",
35
+ "text": [
36
+ "\n",
37
+ "✅ Перенос завершён.\n",
38
+ "Статистика:\n",
39
+ " перенесено: 227\n",
40
+ " дублировано: 0\n",
41
+ " пропущено: 0\n",
42
+ "AutoencoderKL(\n",
43
+ " (encoder): Encoder(\n",
44
+ " (conv_in): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
45
+ " (down_blocks): ModuleList(\n",
46
+ " (0): DownEncoderBlock2D(\n",
47
+ " (resnets): ModuleList(\n",
48
+ " (0-2): 3 x ResnetBlock2D(\n",
49
+ " (norm1): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
50
+ " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
51
+ " (norm2): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
52
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
53
+ " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
54
+ " (nonlinearity): SiLU()\n",
55
+ " )\n",
56
+ " )\n",
57
+ " (downsamplers): ModuleList(\n",
58
+ " (0): Downsample2D(\n",
59
+ " (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2))\n",
60
+ " )\n",
61
+ " )\n",
62
+ " )\n",
63
+ " (1): DownEncoderBlock2D(\n",
64
+ " (resnets): ModuleList(\n",
65
+ " (0): ResnetBlock2D(\n",
66
+ " (norm1): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
67
+ " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
68
+ " (norm2): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
69
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
70
+ " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
71
+ " (nonlinearity): SiLU()\n",
72
+ " (conv_shortcut): Conv2d(64, 128, kernel_size=(1, 1), stride=(1, 1))\n",
73
+ " )\n",
74
+ " (1-2): 2 x ResnetBlock2D(\n",
75
+ " (norm1): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
76
+ " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
77
+ " (norm2): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
78
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
79
+ " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
80
+ " (nonlinearity): SiLU()\n",
81
+ " )\n",
82
+ " )\n",
83
+ " (downsamplers): ModuleList(\n",
84
+ " (0): Downsample2D(\n",
85
+ " (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2))\n",
86
+ " )\n",
87
+ " )\n",
88
+ " )\n",
89
+ " (2): DownEncoderBlock2D(\n",
90
+ " (resnets): ModuleList(\n",
91
+ " (0): ResnetBlock2D(\n",
92
+ " (norm1): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
93
+ " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
94
+ " (norm2): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
95
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
96
+ " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
97
+ " (nonlinearity): SiLU()\n",
98
+ " (conv_shortcut): Conv2d(128, 256, kernel_size=(1, 1), stride=(1, 1))\n",
99
+ " )\n",
100
+ " (1-2): 2 x ResnetBlock2D(\n",
101
+ " (norm1): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
102
+ " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
103
+ " (norm2): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
104
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
105
+ " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
106
+ " (nonlinearity): SiLU()\n",
107
+ " )\n",
108
+ " )\n",
109
+ " (downsamplers): ModuleList(\n",
110
+ " (0): Downsample2D(\n",
111
+ " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2))\n",
112
+ " )\n",
113
+ " )\n",
114
+ " )\n",
115
+ " (3): DownEncoderBlock2D(\n",
116
+ " (resnets): ModuleList(\n",
117
+ " (0): ResnetBlock2D(\n",
118
+ " (norm1): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
119
+ " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
120
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
121
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
122
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
123
+ " (nonlinearity): SiLU()\n",
124
+ " (conv_shortcut): Conv2d(256, 512, kernel_size=(1, 1), stride=(1, 1))\n",
125
+ " )\n",
126
+ " (1-2): 2 x ResnetBlock2D(\n",
127
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
128
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
129
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
130
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
131
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
132
+ " (nonlinearity): SiLU()\n",
133
+ " )\n",
134
+ " )\n",
135
+ " (downsamplers): ModuleList(\n",
136
+ " (0): Downsample2D(\n",
137
+ " (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2))\n",
138
+ " )\n",
139
+ " )\n",
140
+ " )\n",
141
+ " (4): DownEncoderBlock2D(\n",
142
+ " (resnets): ModuleList(\n",
143
+ " (0-2): 3 x ResnetBlock2D(\n",
144
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
145
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
146
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
147
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
148
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
149
+ " (nonlinearity): SiLU()\n",
150
+ " )\n",
151
+ " )\n",
152
+ " )\n",
153
+ " )\n",
154
+ " (mid_block): UNetMidBlock2D(\n",
155
+ " (attentions): ModuleList(\n",
156
+ " (0): Attention(\n",
157
+ " (group_norm): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
158
+ " (to_q): Linear(in_features=512, out_features=512, bias=True)\n",
159
+ " (to_k): Linear(in_features=512, out_features=512, bias=True)\n",
160
+ " (to_v): Linear(in_features=512, out_features=512, bias=True)\n",
161
+ " (to_out): ModuleList(\n",
162
+ " (0): Linear(in_features=512, out_features=512, bias=True)\n",
163
+ " (1): Dropout(p=0.0, inplace=False)\n",
164
+ " )\n",
165
+ " )\n",
166
+ " )\n",
167
+ " (resnets): ModuleList(\n",
168
+ " (0-1): 2 x ResnetBlock2D(\n",
169
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
170
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
171
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
172
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
173
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
174
+ " (nonlinearity): SiLU()\n",
175
+ " )\n",
176
+ " )\n",
177
+ " )\n",
178
+ " (conv_norm_out): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
179
+ " (conv_act): SiLU()\n",
180
+ " (conv_out): Conv2d(512, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
181
+ " )\n",
182
+ " (decoder): Decoder(\n",
183
+ " (conv_in): Conv2d(16, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
184
+ " (up_blocks): ModuleList(\n",
185
+ " (0-1): 2 x UpDecoderBlock2D(\n",
186
+ " (resnets): ModuleList(\n",
187
+ " (0-3): 4 x ResnetBlock2D(\n",
188
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
189
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
190
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
191
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
192
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
193
+ " (nonlinearity): SiLU()\n",
194
+ " )\n",
195
+ " )\n",
196
+ " (upsamplers): ModuleList(\n",
197
+ " (0): Upsample2D(\n",
198
+ " (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
199
+ " )\n",
200
+ " )\n",
201
+ " )\n",
202
+ " (2): UpDecoderBlock2D(\n",
203
+ " (resnets): ModuleList(\n",
204
+ " (0): ResnetBlock2D(\n",
205
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
206
+ " (conv1): Conv2d(512, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
207
+ " (norm2): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
208
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
209
+ " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
210
+ " (nonlinearity): SiLU()\n",
211
+ " (conv_shortcut): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n",
212
+ " )\n",
213
+ " (1-3): 3 x ResnetBlock2D(\n",
214
+ " (norm1): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
215
+ " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
216
+ " (norm2): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
217
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
218
+ " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
219
+ " (nonlinearity): SiLU()\n",
220
+ " )\n",
221
+ " )\n",
222
+ " (upsamplers): ModuleList(\n",
223
+ " (0): Upsample2D(\n",
224
+ " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
225
+ " )\n",
226
+ " )\n",
227
+ " )\n",
228
+ " (3): UpDecoderBlock2D(\n",
229
+ " (resnets): ModuleList(\n",
230
+ " (0): ResnetBlock2D(\n",
231
+ " (norm1): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
232
+ " (conv1): Conv2d(256, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
233
+ " (norm2): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
234
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
235
+ " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
236
+ " (nonlinearity): SiLU()\n",
237
+ " (conv_shortcut): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))\n",
238
+ " )\n",
239
+ " (1-3): 3 x ResnetBlock2D(\n",
240
+ " (norm1): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
241
+ " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
242
+ " (norm2): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
243
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
244
+ " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
245
+ " (nonlinearity): SiLU()\n",
246
+ " )\n",
247
+ " )\n",
248
+ " (upsamplers): ModuleList(\n",
249
+ " (0): Upsample2D(\n",
250
+ " (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
251
+ " )\n",
252
+ " )\n",
253
+ " )\n",
254
+ " (4): UpDecoderBlock2D(\n",
255
+ " (resnets): ModuleList(\n",
256
+ " (0): ResnetBlock2D(\n",
257
+ " (norm1): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
258
+ " (conv1): Conv2d(128, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
259
+ " (norm2): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
260
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
261
+ " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
262
+ " (nonlinearity): SiLU()\n",
263
+ " (conv_shortcut): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1))\n",
264
+ " )\n",
265
+ " (1-3): 3 x ResnetBlock2D(\n",
266
+ " (norm1): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
267
+ " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
268
+ " (norm2): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
269
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
270
+ " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
271
+ " (nonlinearity): SiLU()\n",
272
+ " )\n",
273
+ " )\n",
274
+ " )\n",
275
+ " )\n",
276
+ " (mid_block): UNetMidBlock2D(\n",
277
+ " (attentions): ModuleList(\n",
278
+ " (0): Attention(\n",
279
+ " (group_norm): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
280
+ " (to_q): Linear(in_features=512, out_features=512, bias=True)\n",
281
+ " (to_k): Linear(in_features=512, out_features=512, bias=True)\n",
282
+ " (to_v): Linear(in_features=512, out_features=512, bias=True)\n",
283
+ " (to_out): ModuleList(\n",
284
+ " (0): Linear(in_features=512, out_features=512, bias=True)\n",
285
+ " (1): Dropout(p=0.0, inplace=False)\n",
286
+ " )\n",
287
+ " )\n",
288
+ " )\n",
289
+ " (resnets): ModuleList(\n",
290
+ " (0-1): 2 x ResnetBlock2D(\n",
291
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
292
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
293
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
294
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
295
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
296
+ " (nonlinearity): SiLU()\n",
297
+ " )\n",
298
+ " )\n",
299
+ " )\n",
300
+ " (conv_norm_out): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
301
+ " (conv_act): SiLU()\n",
302
+ " (conv_out): Conv2d(64, 3, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
303
+ " )\n",
304
+ ")\n"
305
+ ]
306
+ }
307
+ ],
308
+ "source": [
309
+ "from diffusers.models import AsymmetricAutoencoderKL, AutoencoderKL\n",
310
+ "import torch\n",
311
+ "from tqdm import tqdm\n",
312
+ "\n",
313
+ "# ---- Конфиг новой модели ----\n",
314
+ "config = {\n",
315
+ " \"_class_name\": \"AutoencoderKL\",\n",
316
+ " \"act_fn\": \"silu\",\n",
317
+ " \"in_channels\": 3,\n",
318
+ " \"out_channels\": 3,\n",
319
+ " \"scaling_factor\": 1.0,\n",
320
+ " \"norm_num_groups\": 32,\n",
321
+ " \"block_out_channels\": [64, 128, 256, 512, 512],\n",
322
+ " \"down_block_types\": [\n",
323
+ " \"DownEncoderBlock2D\",\n",
324
+ " \"DownEncoderBlock2D\",\n",
325
+ " \"DownEncoderBlock2D\",\n",
326
+ " \"DownEncoderBlock2D\",\n",
327
+ " \"DownEncoderBlock2D\",\n",
328
+ " ],\n",
329
+ " \"latent_channels\": 16,\n",
330
+ " \"up_block_types\": [\n",
331
+ " \"UpDecoderBlock2D\",\n",
332
+ " \"UpDecoderBlock2D\",\n",
333
+ " \"UpDecoderBlock2D\",\n",
334
+ " \"UpDecoderBlock2D\",\n",
335
+ " \"UpDecoderBlock2D\",\n",
336
+ " ],\n",
337
+ "}\n",
338
+ "\n",
339
+ "# ---- Создание пустой асимметричной модели ----\n",
340
+ "vae = AutoencoderKL(\n",
341
+ " act_fn=config[\"act_fn\"],\n",
342
+ " block_out_channels=config[\"block_out_channels\"],\n",
343
+ " down_block_types=config[\"down_block_types\"],\n",
344
+ " latent_channels=config[\"latent_channels\"],\n",
345
+ " up_block_types=config[\"up_block_types\"],\n",
346
+ " in_channels=config[\"in_channels\"],\n",
347
+ " out_channels=config[\"out_channels\"],\n",
348
+ " scaling_factor=config[\"scaling_factor\"],\n",
349
+ " norm_num_groups=config[\"norm_num_groups\"],\n",
350
+ " layers_per_block=3,\n",
351
+ " sample_size=1024,\n",
352
+ " use_post_quant_conv = False,\n",
353
+ " use_quant_conv = False,\n",
354
+ ")\n",
355
+ "\n",
356
+ "vae.save_pretrained(\"vae_empty\")\n",
357
+ "print(\"✅ Создана новая модель:\", type(vae))\n",
358
+ "\n",
359
+ "# ---- Функция переноса весов старого VAE ----\n",
360
+ "def transfer_weights(old_path, new_path, save_path=\"asymmetric_vae\", device=\"cuda\", dtype=torch.float16):\n",
361
+ " old_vae = AsymmetricAutoencoderKL.from_pretrained(old_path).to(device, dtype=dtype)\n",
362
+ " new_vae = AutoencoderKL.from_pretrained(new_path).to(device, dtype=dtype)\n",
363
+ "\n",
364
+ " old_sd = old_vae.state_dict()\n",
365
+ " new_sd = new_vae.state_dict()\n",
366
+ "\n",
367
+ " transferred_keys = set()\n",
368
+ " transfer_stats = {\"перенесено\": 0, \"дублировано\": 0, \"пропущено\": 0}\n",
369
+ "\n",
370
+ " print(\"\\n--- Перенос весов ---\")\n",
371
+ " for k, v in tqdm(old_sd.items()):\n",
372
+ " # Копирование энкодера и прочих совпадающих ключей\n",
373
+ " if (\"encoder\" in k) or (\"quant_conv\" in k) or (\"post_quant_conv\" in k):\n",
374
+ " if k in new_sd and new_sd[k].shape == v.shape:\n",
375
+ " new_sd[k] = v.clone()\n",
376
+ " transferred_keys.add(k)\n",
377
+ " transfer_stats[\"перенесено\"] += 1\n",
378
+ " continue\n",
379
+ "\n",
380
+ " # Копирование декодера (без сдвига)\n",
381
+ " if \"decoder.up_blocks\" in k:\n",
382
+ " if k in new_sd and new_sd[k].shape == v.shape:\n",
383
+ " new_sd[k] = v.clone()\n",
384
+ " transferred_keys.add(k)\n",
385
+ " transfer_stats[\"перенесено\"] += 1\n",
386
+ " continue\n",
387
+ "\n",
388
+ " # Дублирование весов старого первого 512→512 блока в новый блок 64→128 для апскейла\n",
389
+ " #ref_prefix = \"encoder.down_blocks.1\"\n",
390
+ " #new_prefix = \"encoder.down_blocks.0\"\n",
391
+ " #for k, v in old_sd.items():\n",
392
+ " # if k.startswith(ref_prefix) and new_prefix + k[len(ref_prefix):] in new_sd:\n",
393
+ " # new_k = k.replace(ref_prefix, new_prefix)\n",
394
+ " # if new_sd[new_k].shape == v.shape:\n",
395
+ " # new_sd[new_k] = v.clone()\n",
396
+ " # transferred_keys.add(new_k)\n",
397
+ " # transfer_stats[\"дублировано\"] += 1\n",
398
+ "\n",
399
+ " # Загрузка и сохранение\n",
400
+ " new_vae.load_state_dict(new_sd, strict=False)\n",
401
+ " new_vae.save_pretrained(save_path)\n",
402
+ "\n",
403
+ " print(\"\\n✅ Перенос завершён.\")\n",
404
+ " print(\"Статистика:\")\n",
405
+ " for k, v in transfer_stats.items():\n",
406
+ " print(f\" {k}: {v}\")\n",
407
+ " print(new_vae)\n",
408
+ "\n",
409
+ "# ---- Запуск переноса ----\n",
410
+ "transfer_weights(\"vae16\", \"vae_empty\", save_path=\"vae17\")\n"
411
+ ]
412
+ },
413
+ {
414
+ "cell_type": "code",
415
+ "execution_count": null,
416
+ "id": "59fcafb9-6d89-49b4-8362-b4891f591687",
417
+ "metadata": {},
418
+ "outputs": [],
419
+ "source": []
420
+ }
421
+ ],
422
+ "metadata": {
423
+ "kernelspec": {
424
+ "display_name": "Python 3 (ipykernel)",
425
+ "language": "python",
426
+ "name": "python3"
427
+ },
428
+ "language_info": {
429
+ "codemirror_mode": {
430
+ "name": "ipython",
431
+ "version": 3
432
+ },
433
+ "file_extension": ".py",
434
+ "mimetype": "text/x-python",
435
+ "name": "python",
436
+ "nbconvert_exporter": "python",
437
+ "pygments_lexer": "ipython3",
438
+ "version": "3.11.10"
439
+ }
440
+ },
441
+ "nbformat": 4,
442
+ "nbformat_minor": 5
443
+ }
config.json ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "AutoencoderKL",
3
+ "_diffusers_version": "0.36.0",
4
+ "_name_or_path": "vae17",
5
+ "act_fn": "silu",
6
+ "block_out_channels": [
7
+ 64,
8
+ 128,
9
+ 256,
10
+ 512,
11
+ 512
12
+ ],
13
+ "down_block_types": [
14
+ "DownEncoderBlock2D",
15
+ "DownEncoderBlock2D",
16
+ "DownEncoderBlock2D",
17
+ "DownEncoderBlock2D",
18
+ "DownEncoderBlock2D"
19
+ ],
20
+ "force_upcast": true,
21
+ "in_channels": 3,
22
+ "latent_channels": 16,
23
+ "latents_mean": null,
24
+ "latents_std": null,
25
+ "layers_per_block": 3,
26
+ "mid_block_add_attention": true,
27
+ "norm_num_groups": 32,
28
+ "out_channels": 3,
29
+ "sample_size": 1024,
30
+ "scaling_factor": 1.0,
31
+ "shift_factor": null,
32
+ "up_block_types": [
33
+ "UpDecoderBlock2D",
34
+ "UpDecoderBlock2D",
35
+ "UpDecoderBlock2D",
36
+ "UpDecoderBlock2D",
37
+ "UpDecoderBlock2D"
38
+ ],
39
+ "use_post_quant_conv": false,
40
+ "use_quant_conv": false
41
+ }
diffusion_pytorch_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:49f60fb3f1172304df199c5d7c0a5312389cede350e81df532535f6a333d566e
3
+ size 425399748
vae17.ipynb ADDED
@@ -0,0 +1,443 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "c15deb04-94a0-4073-a174-adcd22af10b8",
7
+ "metadata": {},
8
+ "outputs": [
9
+ {
10
+ "name": "stderr",
11
+ "output_type": "stream",
12
+ "text": [
13
+ "The config attributes {'block_out_channels': [128, 128, 256, 512, 512], 'force_upcast': False} were passed to AsymmetricAutoencoderKL, but are not expected and will be ignored. Please verify your config.json configuration file.\n"
14
+ ]
15
+ },
16
+ {
17
+ "name": "stdout",
18
+ "output_type": "stream",
19
+ "text": [
20
+ "✅ Создана новая модель: <class 'diffusers.models.autoencoders.autoencoder_kl.AutoencoderKL'>\n",
21
+ "\n",
22
+ "--- Перенос весов ---\n"
23
+ ]
24
+ },
25
+ {
26
+ "name": "stderr",
27
+ "output_type": "stream",
28
+ "text": [
29
+ "100%|██████████| 326/326 [00:00<00:00, 54186.54it/s]\n"
30
+ ]
31
+ },
32
+ {
33
+ "name": "stdout",
34
+ "output_type": "stream",
35
+ "text": [
36
+ "\n",
37
+ "✅ Перенос завершён.\n",
38
+ "Статистика:\n",
39
+ " перенесено: 227\n",
40
+ " дублировано: 0\n",
41
+ " пропущено: 0\n",
42
+ "AutoencoderKL(\n",
43
+ " (encoder): Encoder(\n",
44
+ " (conv_in): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
45
+ " (down_blocks): ModuleList(\n",
46
+ " (0): DownEncoderBlock2D(\n",
47
+ " (resnets): ModuleList(\n",
48
+ " (0-2): 3 x ResnetBlock2D(\n",
49
+ " (norm1): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
50
+ " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
51
+ " (norm2): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
52
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
53
+ " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
54
+ " (nonlinearity): SiLU()\n",
55
+ " )\n",
56
+ " )\n",
57
+ " (downsamplers): ModuleList(\n",
58
+ " (0): Downsample2D(\n",
59
+ " (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2))\n",
60
+ " )\n",
61
+ " )\n",
62
+ " )\n",
63
+ " (1): DownEncoderBlock2D(\n",
64
+ " (resnets): ModuleList(\n",
65
+ " (0): ResnetBlock2D(\n",
66
+ " (norm1): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
67
+ " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
68
+ " (norm2): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
69
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
70
+ " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
71
+ " (nonlinearity): SiLU()\n",
72
+ " (conv_shortcut): Conv2d(64, 128, kernel_size=(1, 1), stride=(1, 1))\n",
73
+ " )\n",
74
+ " (1-2): 2 x ResnetBlock2D(\n",
75
+ " (norm1): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
76
+ " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
77
+ " (norm2): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
78
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
79
+ " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
80
+ " (nonlinearity): SiLU()\n",
81
+ " )\n",
82
+ " )\n",
83
+ " (downsamplers): ModuleList(\n",
84
+ " (0): Downsample2D(\n",
85
+ " (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2))\n",
86
+ " )\n",
87
+ " )\n",
88
+ " )\n",
89
+ " (2): DownEncoderBlock2D(\n",
90
+ " (resnets): ModuleList(\n",
91
+ " (0): ResnetBlock2D(\n",
92
+ " (norm1): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
93
+ " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
94
+ " (norm2): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
95
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
96
+ " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
97
+ " (nonlinearity): SiLU()\n",
98
+ " (conv_shortcut): Conv2d(128, 256, kernel_size=(1, 1), stride=(1, 1))\n",
99
+ " )\n",
100
+ " (1-2): 2 x ResnetBlock2D(\n",
101
+ " (norm1): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
102
+ " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
103
+ " (norm2): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
104
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
105
+ " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
106
+ " (nonlinearity): SiLU()\n",
107
+ " )\n",
108
+ " )\n",
109
+ " (downsamplers): ModuleList(\n",
110
+ " (0): Downsample2D(\n",
111
+ " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2))\n",
112
+ " )\n",
113
+ " )\n",
114
+ " )\n",
115
+ " (3): DownEncoderBlock2D(\n",
116
+ " (resnets): ModuleList(\n",
117
+ " (0): ResnetBlock2D(\n",
118
+ " (norm1): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
119
+ " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
120
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
121
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
122
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
123
+ " (nonlinearity): SiLU()\n",
124
+ " (conv_shortcut): Conv2d(256, 512, kernel_size=(1, 1), stride=(1, 1))\n",
125
+ " )\n",
126
+ " (1-2): 2 x ResnetBlock2D(\n",
127
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
128
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
129
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
130
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
131
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
132
+ " (nonlinearity): SiLU()\n",
133
+ " )\n",
134
+ " )\n",
135
+ " (downsamplers): ModuleList(\n",
136
+ " (0): Downsample2D(\n",
137
+ " (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2))\n",
138
+ " )\n",
139
+ " )\n",
140
+ " )\n",
141
+ " (4): DownEncoderBlock2D(\n",
142
+ " (resnets): ModuleList(\n",
143
+ " (0-2): 3 x ResnetBlock2D(\n",
144
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
145
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
146
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
147
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
148
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
149
+ " (nonlinearity): SiLU()\n",
150
+ " )\n",
151
+ " )\n",
152
+ " )\n",
153
+ " )\n",
154
+ " (mid_block): UNetMidBlock2D(\n",
155
+ " (attentions): ModuleList(\n",
156
+ " (0): Attention(\n",
157
+ " (group_norm): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
158
+ " (to_q): Linear(in_features=512, out_features=512, bias=True)\n",
159
+ " (to_k): Linear(in_features=512, out_features=512, bias=True)\n",
160
+ " (to_v): Linear(in_features=512, out_features=512, bias=True)\n",
161
+ " (to_out): ModuleList(\n",
162
+ " (0): Linear(in_features=512, out_features=512, bias=True)\n",
163
+ " (1): Dropout(p=0.0, inplace=False)\n",
164
+ " )\n",
165
+ " )\n",
166
+ " )\n",
167
+ " (resnets): ModuleList(\n",
168
+ " (0-1): 2 x ResnetBlock2D(\n",
169
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
170
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
171
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
172
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
173
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
174
+ " (nonlinearity): SiLU()\n",
175
+ " )\n",
176
+ " )\n",
177
+ " )\n",
178
+ " (conv_norm_out): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
179
+ " (conv_act): SiLU()\n",
180
+ " (conv_out): Conv2d(512, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
181
+ " )\n",
182
+ " (decoder): Decoder(\n",
183
+ " (conv_in): Conv2d(16, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
184
+ " (up_blocks): ModuleList(\n",
185
+ " (0-1): 2 x UpDecoderBlock2D(\n",
186
+ " (resnets): ModuleList(\n",
187
+ " (0-3): 4 x ResnetBlock2D(\n",
188
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
189
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
190
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
191
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
192
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
193
+ " (nonlinearity): SiLU()\n",
194
+ " )\n",
195
+ " )\n",
196
+ " (upsamplers): ModuleList(\n",
197
+ " (0): Upsample2D(\n",
198
+ " (conv): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
199
+ " )\n",
200
+ " )\n",
201
+ " )\n",
202
+ " (2): UpDecoderBlock2D(\n",
203
+ " (resnets): ModuleList(\n",
204
+ " (0): ResnetBlock2D(\n",
205
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
206
+ " (conv1): Conv2d(512, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
207
+ " (norm2): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
208
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
209
+ " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
210
+ " (nonlinearity): SiLU()\n",
211
+ " (conv_shortcut): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n",
212
+ " )\n",
213
+ " (1-3): 3 x ResnetBlock2D(\n",
214
+ " (norm1): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
215
+ " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
216
+ " (norm2): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
217
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
218
+ " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
219
+ " (nonlinearity): SiLU()\n",
220
+ " )\n",
221
+ " )\n",
222
+ " (upsamplers): ModuleList(\n",
223
+ " (0): Upsample2D(\n",
224
+ " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
225
+ " )\n",
226
+ " )\n",
227
+ " )\n",
228
+ " (3): UpDecoderBlock2D(\n",
229
+ " (resnets): ModuleList(\n",
230
+ " (0): ResnetBlock2D(\n",
231
+ " (norm1): GroupNorm(32, 256, eps=1e-06, affine=True)\n",
232
+ " (conv1): Conv2d(256, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
233
+ " (norm2): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
234
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
235
+ " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
236
+ " (nonlinearity): SiLU()\n",
237
+ " (conv_shortcut): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))\n",
238
+ " )\n",
239
+ " (1-3): 3 x ResnetBlock2D(\n",
240
+ " (norm1): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
241
+ " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
242
+ " (norm2): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
243
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
244
+ " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
245
+ " (nonlinearity): SiLU()\n",
246
+ " )\n",
247
+ " )\n",
248
+ " (upsamplers): ModuleList(\n",
249
+ " (0): Upsample2D(\n",
250
+ " (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
251
+ " )\n",
252
+ " )\n",
253
+ " )\n",
254
+ " (4): UpDecoderBlock2D(\n",
255
+ " (resnets): ModuleList(\n",
256
+ " (0): ResnetBlock2D(\n",
257
+ " (norm1): GroupNorm(32, 128, eps=1e-06, affine=True)\n",
258
+ " (conv1): Conv2d(128, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
259
+ " (norm2): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
260
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
261
+ " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
262
+ " (nonlinearity): SiLU()\n",
263
+ " (conv_shortcut): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1))\n",
264
+ " )\n",
265
+ " (1-3): 3 x ResnetBlock2D(\n",
266
+ " (norm1): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
267
+ " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
268
+ " (norm2): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
269
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
270
+ " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
271
+ " (nonlinearity): SiLU()\n",
272
+ " )\n",
273
+ " )\n",
274
+ " )\n",
275
+ " )\n",
276
+ " (mid_block): UNetMidBlock2D(\n",
277
+ " (attentions): ModuleList(\n",
278
+ " (0): Attention(\n",
279
+ " (group_norm): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
280
+ " (to_q): Linear(in_features=512, out_features=512, bias=True)\n",
281
+ " (to_k): Linear(in_features=512, out_features=512, bias=True)\n",
282
+ " (to_v): Linear(in_features=512, out_features=512, bias=True)\n",
283
+ " (to_out): ModuleList(\n",
284
+ " (0): Linear(in_features=512, out_features=512, bias=True)\n",
285
+ " (1): Dropout(p=0.0, inplace=False)\n",
286
+ " )\n",
287
+ " )\n",
288
+ " )\n",
289
+ " (resnets): ModuleList(\n",
290
+ " (0-1): 2 x ResnetBlock2D(\n",
291
+ " (norm1): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
292
+ " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
293
+ " (norm2): GroupNorm(32, 512, eps=1e-06, affine=True)\n",
294
+ " (dropout): Dropout(p=0.0, inplace=False)\n",
295
+ " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
296
+ " (nonlinearity): SiLU()\n",
297
+ " )\n",
298
+ " )\n",
299
+ " )\n",
300
+ " (conv_norm_out): GroupNorm(32, 64, eps=1e-06, affine=True)\n",
301
+ " (conv_act): SiLU()\n",
302
+ " (conv_out): Conv2d(64, 3, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
303
+ " )\n",
304
+ ")\n"
305
+ ]
306
+ }
307
+ ],
308
+ "source": [
309
+ "from diffusers.models import AsymmetricAutoencoderKL, AutoencoderKL\n",
310
+ "import torch\n",
311
+ "from tqdm import tqdm\n",
312
+ "\n",
313
+ "# ---- Конфиг новой модели ----\n",
314
+ "config = {\n",
315
+ " \"_class_name\": \"AutoencoderKL\",\n",
316
+ " \"act_fn\": \"silu\",\n",
317
+ " \"in_channels\": 3,\n",
318
+ " \"out_channels\": 3,\n",
319
+ " \"scaling_factor\": 1.0,\n",
320
+ " \"norm_num_groups\": 32,\n",
321
+ " \"block_out_channels\": [64, 128, 256, 512, 512],\n",
322
+ " \"down_block_types\": [\n",
323
+ " \"DownEncoderBlock2D\",\n",
324
+ " \"DownEncoderBlock2D\",\n",
325
+ " \"DownEncoderBlock2D\",\n",
326
+ " \"DownEncoderBlock2D\",\n",
327
+ " \"DownEncoderBlock2D\",\n",
328
+ " ],\n",
329
+ " \"latent_channels\": 16,\n",
330
+ " \"up_block_types\": [\n",
331
+ " \"UpDecoderBlock2D\",\n",
332
+ " \"UpDecoderBlock2D\",\n",
333
+ " \"UpDecoderBlock2D\",\n",
334
+ " \"UpDecoderBlock2D\",\n",
335
+ " \"UpDecoderBlock2D\",\n",
336
+ " ],\n",
337
+ "}\n",
338
+ "\n",
339
+ "# ---- Создание пустой асимметричной модели ----\n",
340
+ "vae = AutoencoderKL(\n",
341
+ " act_fn=config[\"act_fn\"],\n",
342
+ " block_out_channels=config[\"block_out_channels\"],\n",
343
+ " down_block_types=config[\"down_block_types\"],\n",
344
+ " latent_channels=config[\"latent_channels\"],\n",
345
+ " up_block_types=config[\"up_block_types\"],\n",
346
+ " in_channels=config[\"in_channels\"],\n",
347
+ " out_channels=config[\"out_channels\"],\n",
348
+ " scaling_factor=config[\"scaling_factor\"],\n",
349
+ " norm_num_groups=config[\"norm_num_groups\"],\n",
350
+ " layers_per_block=3,\n",
351
+ " sample_size=1024,\n",
352
+ " use_post_quant_conv = False,\n",
353
+ " use_quant_conv = False,\n",
354
+ ")\n",
355
+ "\n",
356
+ "vae.save_pretrained(\"vae_empty\")\n",
357
+ "print(\"✅ Создана новая модель:\", type(vae))\n",
358
+ "\n",
359
+ "# ---- Функция переноса весов старого VAE ----\n",
360
+ "def transfer_weights(old_path, new_path, save_path=\"asymmetric_vae\", device=\"cuda\", dtype=torch.float16):\n",
361
+ " old_vae = AsymmetricAutoencoderKL.from_pretrained(old_path).to(device, dtype=dtype)\n",
362
+ " new_vae = AutoencoderKL.from_pretrained(new_path).to(device, dtype=dtype)\n",
363
+ "\n",
364
+ " old_sd = old_vae.state_dict()\n",
365
+ " new_sd = new_vae.state_dict()\n",
366
+ "\n",
367
+ " transferred_keys = set()\n",
368
+ " transfer_stats = {\"перенесено\": 0, \"дублировано\": 0, \"пропущено\": 0}\n",
369
+ "\n",
370
+ " print(\"\\n--- Перенос весов ---\")\n",
371
+ " for k, v in tqdm(old_sd.items()):\n",
372
+ " # Копирование энкодера и прочих совпадающих ключей\n",
373
+ " if (\"encoder\" in k) or (\"quant_conv\" in k) or (\"post_quant_conv\" in k):\n",
374
+ " if k in new_sd and new_sd[k].shape == v.shape:\n",
375
+ " new_sd[k] = v.clone()\n",
376
+ " transferred_keys.add(k)\n",
377
+ " transfer_stats[\"перенесено\"] += 1\n",
378
+ " continue\n",
379
+ "\n",
380
+ " # Копирование декодера (без сдвига)\n",
381
+ " if \"decoder.up_blocks\" in k:\n",
382
+ " if k in new_sd and new_sd[k].shape == v.shape:\n",
383
+ " new_sd[k] = v.clone()\n",
384
+ " transferred_keys.add(k)\n",
385
+ " transfer_stats[\"перенесено\"] += 1\n",
386
+ " continue\n",
387
+ "\n",
388
+ " # Дублирование весов старого первого 512→512 блока в новый блок 64→128 для апскейла\n",
389
+ " #ref_prefix = \"encoder.down_blocks.1\"\n",
390
+ " #new_prefix = \"encoder.down_blocks.0\"\n",
391
+ " #for k, v in old_sd.items():\n",
392
+ " # if k.startswith(ref_prefix) and new_prefix + k[len(ref_prefix):] in new_sd:\n",
393
+ " # new_k = k.replace(ref_prefix, new_prefix)\n",
394
+ " # if new_sd[new_k].shape == v.shape:\n",
395
+ " # new_sd[new_k] = v.clone()\n",
396
+ " # transferred_keys.add(new_k)\n",
397
+ " # transfer_stats[\"дублировано\"] += 1\n",
398
+ "\n",
399
+ " # Загрузка и сохранение\n",
400
+ " new_vae.load_state_dict(new_sd, strict=False)\n",
401
+ " new_vae.save_pretrained(save_path)\n",
402
+ "\n",
403
+ " print(\"\\n✅ Перенос завершён.\")\n",
404
+ " print(\"Статистика:\")\n",
405
+ " for k, v in transfer_stats.items():\n",
406
+ " print(f\" {k}: {v}\")\n",
407
+ " print(new_vae)\n",
408
+ "\n",
409
+ "# ---- Запуск переноса ----\n",
410
+ "transfer_weights(\"vae16\", \"vae_empty\", save_path=\"vae17\")\n"
411
+ ]
412
+ },
413
+ {
414
+ "cell_type": "code",
415
+ "execution_count": null,
416
+ "id": "59fcafb9-6d89-49b4-8362-b4891f591687",
417
+ "metadata": {},
418
+ "outputs": [],
419
+ "source": []
420
+ }
421
+ ],
422
+ "metadata": {
423
+ "kernelspec": {
424
+ "display_name": "Python 3 (ipykernel)",
425
+ "language": "python",
426
+ "name": "python3"
427
+ },
428
+ "language_info": {
429
+ "codemirror_mode": {
430
+ "name": "ipython",
431
+ "version": 3
432
+ },
433
+ "file_extension": ".py",
434
+ "mimetype": "text/x-python",
435
+ "name": "python",
436
+ "nbconvert_exporter": "python",
437
+ "pygments_lexer": "ipython3",
438
+ "version": "3.11.10"
439
+ }
440
+ },
441
+ "nbformat": 4,
442
+ "nbformat_minor": 5
443
+ }