recoilme commited on
Commit
9e469cd
·
verified ·
1 Parent(s): 4d181ed

Upload skills/dataset-utils/references/training-dataset.md with huggingface_hub

Browse files
skills/dataset-utils/references/training-dataset.md ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Сборка датасета для тренировки (SDXS / FLUX / ai-toolkit)
2
+
3
+ Рецепт «от картинок до готового тренировочного датасета». Основан на
4
+ `dataset.py` и `train.py` из AiArtLab/sdxs, работает и с ai-toolkit.
5
+
6
+ ## Формат
7
+
8
+ - **Папка** с картинками + **парные `.txt` подписи** (`foo.jpg` → `foo.txt`).
9
+ В датасет попадают ТОЛЬКО картинки с `.txt` — без подписи файл игнорируется.
10
+ - Подпись — одна строка: описание (Moondream) или danbooru-теги (WD14),
11
+ либо комбинация. Без мусорных префиксов вроде «The image depicts...».
12
+ - Для SDXS финальный датасет — HF Dataset на диске с колонками:
13
+ `vae` (латент float32 `[4, H/8, W/8]`), `text` (подпись), `width`, `height`.
14
+ Латент получают заранее: `vae.encode(...)` → `(latent - shift_factor) / scaling_factor`.
15
+
16
+ ## Шаги
17
+
18
+ ```bash
19
+ export DUTILS=~/.cache/dataset-utils
20
+ ```
21
+
22
+ 1. **Собрать картинки** — civitai (`$DUTILS/civitai/download_feed.py`) или свои.
23
+
24
+ 2. **Отсеять брак** — скан качества, раскладка по причинам:
25
+ ```bash
26
+ python3 "$DUTILS/quality/scan.py" --sort /путь/к/картинкам --copy -j 16 --no-good
27
+ ```
28
+ Оставить только `good/` (или то, что нужно), удалить/перенести остальное.
29
+
30
+ 3. **Разметить подписи** (GPU):
31
+ ```bash
32
+ python3 "$DUTILS/caption/caption.py" /путь/к/картинкам # описания
33
+ python3 "$DUTILS/caption/wd14_tagger.py" /путь/к/картинкам # danbooru-теги
34
+ ```
35
+ Пропустят уже размеченные. Проверить покрытие:
36
+ ```bash
37
+ ls /путь/к/картинкам/*.jpg | wc -l # vs количество .txt
38
+ ```
39
+
40
+ 4. **Выбрать бакиты и нарезать**:
41
+ - SDXS-1B: `--min-size 320 --max-size 640 --step 64` (кроп сверху ⅓, как в dataset.py)
42
+ - FLUX / ~1MP: `--min-size 1024 --max-size 1152 --step 64`
43
+ ```bash
44
+ python3 "$DUTILS/resize/img_sizes.py" /путь/к/картинкам # прикинуть размеры
45
+ python3 "$DUTILS/resize/preprocess_dataset.py" --input /путь/к/картинкам \
46
+ --output /путь/к/out --min-size 320 --max-size 640 --step 64
47
+ ```
48
+
49
+ 5. **Балансировка** (по желанию): разнообразные по бакиту / похожие на референс
50
+ ```bash
51
+ python3 "$DUTILS/resize/diverse_images.py" /путь/к/out --output /путь/к/bal --take 500 --pick 50
52
+ ```
53
+
54
+ 6. **Прекомпьют латентов** (для SDXS; у ai-toolkit прекомпьют встроен):
55
+ перегнать папку через VAE → HF Dataset `{vae, text, width, height}`,
56
+ сгруппированный по размеру батчами (см. `dataset.py` — чанки по ~10–20k,
57
+ по бакитам, потом `concatenate_datasets`).
58
+
59
+ 7. **Обучить**:
60
+ ```bash
61
+ # sdxs
62
+ python train.py --ds-path /путь/к/датасету --batch-size 16 --lr 5e-5
63
+ # ai-toolkit — указать папку датасета в GUI/job.yaml
64
+ ```
65
+
66
+ ## Важные детали (из sdxs dataset.py / train.py)
67
+
68
+ - **Группировка по (width, height) обязательна**: семплер в train.py собирает
69
+ батчи только из одного бакита — без паддинга, экономия памяти и флопсов.
70
+ - Кроп в dataset.py — `top = (h - crop_h) // 3, left = 0` (не центр!).
71
+ - Только картинки с парным `.txt` попадают в датасет — проверяй покрытие
72
+ подписями ДО прекомпьюта, иначе половина датасета молча потеряется.
73
+ - Аугментации текста в train: word dropout (p=0.05), caption dropout (p=0.10).
74
+ - `empty_share` — доля пустых подписей для guidance-тренировки (в dataset.py = 0).
75
+ - Латенты float32; под-чанки делятся, чтобы не упереться в лимит pyarrow
76
+ (~2.1 млрд элементов на колонку) — держи запас.
77
+
78
+ ## Типовой пайплайн
79
+
80
+ ```
81
+ сбор (civitai) → scan.py (брак) → caption.py / wd14_tagger.py (подписи)
82
+ → preprocess_dataset.py (бакиты) → diverse_images.py (баланс)
83
+ → vae-прекомпьют → HF Dataset {vae,text,width,height}
84
+ → train.py / ai-toolkit
85
+ ```