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 |
+
```
|