v3
Browse files- samples/unet_320x640_0.jpg +3 -0
- samples/unet_384x640_0.jpg +2 -2
- samples/unet_448x640_0.jpg +2 -2
- samples/unet_512x640_0.jpg +2 -2
- samples/unet_576x640_0.jpg +2 -2
- samples/unet_640x320_0.jpg +3 -0
- samples/unet_640x384_0.jpg +2 -2
- samples/unet_640x448_0.jpg +2 -2
- samples/unet_640x512_0.jpg +2 -2
- samples/unet_640x576_0.jpg +2 -2
- samples/unet_640x640_0.jpg +2 -2
- src/dataset_combine.py +1 -1
- src/dataset_combine_zstd.py +47 -0
- src/dataset_from_folder_qwen.py +2 -2
- train.py +19 -9
- unet/config.json +2 -2
- unet/diffusion_pytorch_model.safetensors +2 -2
samples/unet_320x640_0.jpg
ADDED
|
Git LFS Details
|
samples/unet_384x640_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
samples/unet_448x640_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
samples/unet_512x640_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
samples/unet_576x640_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
samples/unet_640x320_0.jpg
ADDED
|
Git LFS Details
|
samples/unet_640x384_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
samples/unet_640x448_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
samples/unet_640x512_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
samples/unet_640x576_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
samples/unet_640x640_0.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
src/dataset_combine.py
CHANGED
|
@@ -65,4 +65,4 @@ def combine_datasets(main_dataset_path, datasets_to_add):
|
|
| 65 |
|
| 66 |
return combined
|
| 67 |
|
| 68 |
-
combine_datasets("/workspace/sdxs3d/datasets/
|
|
|
|
| 65 |
|
| 66 |
return combined
|
| 67 |
|
| 68 |
+
combine_datasets("/workspace/sdxs3d/datasets/batch0_640", ["/workspace/sdxs3d/datasets/esh640"])
|
src/dataset_combine_zstd.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import shutil
|
| 3 |
+
from datasets import load_from_disk, concatenate_datasets
|
| 4 |
+
|
| 5 |
+
def combine_datasets(main_dataset_path, datasets_to_add):
|
| 6 |
+
try:
|
| 7 |
+
main_dataset = load_from_disk(main_dataset_path)
|
| 8 |
+
print(f"Загружен основной датасет: {main_dataset_path} ({len(main_dataset)} записей)")
|
| 9 |
+
except Exception as e:
|
| 10 |
+
print(f"Ошибка загрузки основного датасета: {e}")
|
| 11 |
+
return None
|
| 12 |
+
|
| 13 |
+
all_datasets = [main_dataset]
|
| 14 |
+
|
| 15 |
+
for path in datasets_to_add:
|
| 16 |
+
try:
|
| 17 |
+
ds = load_from_disk(path)
|
| 18 |
+
all_datasets.append(ds)
|
| 19 |
+
print(f"Добавлен датасет: {path} ({len(ds)} записей)")
|
| 20 |
+
except Exception as e:
|
| 21 |
+
print(f"Ошибка загрузки датасета {path}: {e}")
|
| 22 |
+
|
| 23 |
+
combined = concatenate_datasets(all_datasets)
|
| 24 |
+
print(f"Объединение {len(all_datasets)} датасетов...")
|
| 25 |
+
|
| 26 |
+
temp_dir = f"{main_dataset_path}_temp"
|
| 27 |
+
if os.path.exists(temp_dir):
|
| 28 |
+
shutil.rmtree(temp_dir)
|
| 29 |
+
|
| 30 |
+
try:
|
| 31 |
+
print(f"Сохранение в сжатом формате во временную директорию {temp_dir}...")
|
| 32 |
+
combined.save_to_disk(temp_dir)#, compression="zstd") # <-- Сжатие
|
| 33 |
+
|
| 34 |
+
print(f"Обновление основного датасета...")
|
| 35 |
+
if os.path.exists(main_dataset_path):
|
| 36 |
+
shutil.rmtree(main_dataset_path)
|
| 37 |
+
shutil.copytree(temp_dir, main_dataset_path)
|
| 38 |
+
shutil.rmtree(temp_dir)
|
| 39 |
+
|
| 40 |
+
print(f"✅ Объединенный датасет ({len(combined)} записей) успешно сохранен в: {main_dataset_path}")
|
| 41 |
+
except Exception as e:
|
| 42 |
+
print(f"Ошибка при сохранении датасета: {e}")
|
| 43 |
+
print(f"Временные данные сохранены в: {temp_dir}")
|
| 44 |
+
|
| 45 |
+
return combined
|
| 46 |
+
|
| 47 |
+
combine_datasets("/workspace/sdxs3d/datasets/esh640", ["/workspace/sdxs3d/datasets/batch0_640_temp"])
|
src/dataset_from_folder_qwen.py
CHANGED
|
@@ -27,8 +27,8 @@ step = 64 #64
|
|
| 27 |
empty_share = 0.05
|
| 28 |
limit = 0
|
| 29 |
# Основная процедура обработки
|
| 30 |
-
folder_path = "/workspace/sdxs3d/datasets/
|
| 31 |
-
save_path = "/workspace/sdxs3d/datasets/
|
| 32 |
os.makedirs(save_path, exist_ok=True)
|
| 33 |
|
| 34 |
# Функция для очистки CUDA памяти
|
|
|
|
| 27 |
empty_share = 0.05
|
| 28 |
limit = 0
|
| 29 |
# Основная процедура обработки
|
| 30 |
+
folder_path = "/workspace/sdxs3d/datasets/batch1" #alchemist"
|
| 31 |
+
save_path = "/workspace/sdxs3d/datasets/batch1_640" #"alchemist"
|
| 32 |
os.makedirs(save_path, exist_ok=True)
|
| 33 |
|
| 34 |
# Функция для очистки CUDA памяти
|
train.py
CHANGED
|
@@ -26,16 +26,16 @@ import torch.nn.functional as F
|
|
| 26 |
from collections import deque
|
| 27 |
|
| 28 |
# --------------------------- Параметры ---------------------------
|
| 29 |
-
ds_path = "/workspace/sdxs3d/datasets/
|
| 30 |
project = "unet"
|
| 31 |
-
batch_size =
|
| 32 |
base_learning_rate = 6e-5
|
| 33 |
min_learning_rate = 1e-5
|
| 34 |
-
num_epochs =
|
| 35 |
# samples/save per epoch
|
| 36 |
-
sample_interval_share =
|
| 37 |
-
use_wandb =
|
| 38 |
-
use_comet_ml =
|
| 39 |
save_model = True
|
| 40 |
use_decay = True
|
| 41 |
fbp = False # fused backward pass
|
|
@@ -52,7 +52,7 @@ torch.backends.cudnn.allow_tf32 = True
|
|
| 52 |
torch.backends.cuda.enable_mem_efficient_sdp(False)
|
| 53 |
dtype = torch.float32
|
| 54 |
save_barrier = 1.006
|
| 55 |
-
warmup_percent = 0.
|
| 56 |
percentile_clipping = 99 # 8bit optim
|
| 57 |
betta2 = 0.99
|
| 58 |
eps = 1e-8
|
|
@@ -480,7 +480,8 @@ def get_negative_embedding(neg_prompt="", batch_size=1):
|
|
| 480 |
# Возвращаем эмбеддинг
|
| 481 |
if not neg_prompt:
|
| 482 |
hidden_dim = 1024 # Размерность эмбеддинга Qwen3-Embedding-0.6B
|
| 483 |
-
|
|
|
|
| 484 |
|
| 485 |
uncond_emb = encode_texts([neg_prompt]).to(dtype=dtype, device=device)
|
| 486 |
uncond_emb = uncond_emb.repeat(batch_size, 1, 1) # Добавляем батч
|
|
@@ -533,10 +534,19 @@ def generate_and_save_samples(fixed_samples_cpu,empty_embeddings, step):
|
|
| 533 |
# guidance: удваиваем батч
|
| 534 |
if guidance_scale != 1:
|
| 535 |
latent_model_input = torch.cat([latents, latents], dim=0)
|
| 536 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 537 |
else:
|
| 538 |
latent_model_input = latents
|
| 539 |
text_embeddings_batch = sample_text_embeddings
|
|
|
|
|
|
|
| 540 |
|
| 541 |
# предсказание потока (velocity)
|
| 542 |
model_out = original_model(latent_model_input, t, encoder_hidden_states=text_embeddings_batch)
|
|
|
|
| 26 |
from collections import deque
|
| 27 |
|
| 28 |
# --------------------------- Параметры ---------------------------
|
| 29 |
+
ds_path = "/workspace/sdxs3d/datasets/batch0_640_temp"
|
| 30 |
project = "unet"
|
| 31 |
+
batch_size = 32
|
| 32 |
base_learning_rate = 6e-5
|
| 33 |
min_learning_rate = 1e-5
|
| 34 |
+
num_epochs = 10
|
| 35 |
# samples/save per epoch
|
| 36 |
+
sample_interval_share = 2
|
| 37 |
+
use_wandb = False
|
| 38 |
+
use_comet_ml = True
|
| 39 |
save_model = True
|
| 40 |
use_decay = True
|
| 41 |
fbp = False # fused backward pass
|
|
|
|
| 52 |
torch.backends.cuda.enable_mem_efficient_sdp(False)
|
| 53 |
dtype = torch.float32
|
| 54 |
save_barrier = 1.006
|
| 55 |
+
warmup_percent = 0.005
|
| 56 |
percentile_clipping = 99 # 8bit optim
|
| 57 |
betta2 = 0.99
|
| 58 |
eps = 1e-8
|
|
|
|
| 480 |
# Возвращаем эмбеддинг
|
| 481 |
if not neg_prompt:
|
| 482 |
hidden_dim = 1024 # Размерность эмбеддинга Qwen3-Embedding-0.6B
|
| 483 |
+
seq_len = 150
|
| 484 |
+
return torch.zeros((batch_size, seq_len, hidden_dim), dtype=dtype, device=device)
|
| 485 |
|
| 486 |
uncond_emb = encode_texts([neg_prompt]).to(dtype=dtype, device=device)
|
| 487 |
uncond_emb = uncond_emb.repeat(batch_size, 1, 1) # Добавляем батч
|
|
|
|
| 534 |
# guidance: удваиваем батч
|
| 535 |
if guidance_scale != 1:
|
| 536 |
latent_model_input = torch.cat([latents, latents], dim=0)
|
| 537 |
+
|
| 538 |
+
# empty_embeddings: [1, 1, hidden_dim] → повторяем по seq_len и batch
|
| 539 |
+
seq_len = sample_text_embeddings.shape[1]
|
| 540 |
+
hidden_dim = sample_text_embeddings.shape[2]
|
| 541 |
+
empty_embeddings_exp = empty_embeddings.expand(-1, seq_len, hidden_dim) # [1, seq_len, hidden_dim]
|
| 542 |
+
empty_embeddings_exp = empty_embeddings_exp.repeat(sample_text_embeddings.shape[0], 1, 1) # [batch, seq_len, hidden_dim]
|
| 543 |
+
|
| 544 |
+
text_embeddings_batch = torch.cat([empty_embeddings_exp, sample_text_embeddings], dim=0)
|
| 545 |
else:
|
| 546 |
latent_model_input = latents
|
| 547 |
text_embeddings_batch = sample_text_embeddings
|
| 548 |
+
|
| 549 |
+
|
| 550 |
|
| 551 |
# предсказание потока (velocity)
|
| 552 |
model_out = original_model(latent_model_input, t, encoder_hidden_states=text_embeddings_batch)
|
unet/config.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fac879374be0c1cd3ffcbfa188e72f50576f25326aada5da077b0fc7af442ad4
|
| 3 |
+
size 1874
|
unet/diffusion_pytorch_model.safetensors
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:74563fd4bef0e9f811d7ed6571b6064707beafa8f6ea7f4eeae0dbdfe819f902
|
| 3 |
+
size 6184944280
|