576e8
Browse files- README.md +37 -47
- TRAIN.md +51 -0
- samples/sdxs_320x576_0.jpg +2 -2
- samples/sdxs_384x576_0.jpg +2 -2
- samples/sdxs_448x576_0.jpg +2 -2
- samples/sdxs_512x576_0.jpg +2 -2
- samples/sdxs_576x320_0.jpg +2 -2
- samples/sdxs_576x384_0.jpg +2 -2
- samples/sdxs_576x448_0.jpg +2 -2
- samples/sdxs_576x512_0.jpg +2 -2
- samples/sdxs_576x576_0.jpg +2 -2
- sdxs/diffusion_pytorch_model.safetensors +1 -1
README.md
CHANGED
@@ -2,50 +2,40 @@
|
|
2 |
license: apache-2.0
|
3 |
---
|
4 |
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
Настройте accelerate для многокарточного обучения:
|
43 |
-
|
44 |
-
```
|
45 |
-
accelerate config
|
46 |
-
```
|
47 |
-
Запустите обучение!
|
48 |
-
|
49 |
-
```
|
50 |
-
nohup accelerate launch train.py &
|
51 |
-
```
|
|
|
2 |
license: apache-2.0
|
3 |
---
|
4 |
|
5 |
+
# SDXS: Быстрая, простая, многоязычная модель для генерации изображений
|
6 |
+
|
7 |
+
**Компактная архитектура | Обучение на потребительских GPU | Свободная лицензия**
|
8 |
+
|
9 |
+
## Предисловие
|
10 |
+
Мы — **AI Art Lab**, небольшая команда энтузиастов с ограниченным бюджетом. Наша цель — создать компактную и быструю модель, которую можно обучать на пользовательских видеокартах (полный цикл обучения, не LoRA), мы выбрали U-Net за его способность эффективно работать с малыми датасетами и быстро обучаться даже на 16GB GPU (например, RTX 4080). Наш бюджет был ограничен несколькими тысячами долларов, что значительно меньше, чем например у SDXL (десятки миллионов).
|
11 |
+
|
12 |
+
## Архитектура энкодера (текст и изображения)
|
13 |
+
Мы исследовали различные энкодеры и пришли к выводу, что большие языковые модели / T5 XXL не нужны для качественной генерации. Нам был необходим энкодер, который хорошо понимает контекст запроса. Мы использовали мультиязычный энкодер **Mexma-SigLIP** с поддержкой 80 языков, который обрабатывает предложения, а не отдельные токены. Mexma принимает до 512 токенов, что создаёт большую матрицу и замедляет обучение. Поэтому мы использовали пулинг-слой, упрощающий вектор до 1x1152. Точнее мы пропускаем через линейную модель / текстовый проектор - чтобы добиться совместимости с эмбедингами SigLIP. Это позволило синхронизировать текстовые эмбединги с изображениями, что в перспективе даст единую мультимодальную модель. Данный функционал позволит смешивать в запросе ембединги изображений с текстовыми описаниями. Более того модель можно учить без описаний текстом вовсе, подавая только картинки. Что должно упростить тренировку модели например на видео - где задача разметки существенно затруднена, а также получить более конистентную и бесконечную видео генерацию - подавая на вход эмбединг предыдущих кадров с затуханием. Те в перспективе мы хотели бы расширить модель до 3д/видео генерации
|
14 |
+
|
15 |
+
## Архитектура U-Net
|
16 |
+
Мы выбрали плавную пирамиду каналов: [384, 576, 768, 960], с двумя слоями на блок, [4, 6, 8, 10] трансформеров и 1152/48=24 головы внимания. Эта архитектура обеспечивает наивысшую скорость обучения при размере модели около 2 миллиардов параметров (влазит в RTX 4080). Мы предполагаем, что благодаря большей "глубине" - качество будет выше, чем у SDXL, несмотря на меньший "размер". Модель может быть расширена до 4 миллиардов параметров (путем добавления слоя 1152), что приведёт к идеальной симметрии с размером эмбединга.
|
17 |
+
|
18 |
+
## Архитектура VAE
|
19 |
+
Мы выбрали нестандартный, 8x 16-канальный AuraDiffusion VAE, который сохраняет детали/текст/не искажает анатомию и цветовую палитру и при этом в нем отсутствует "дымка", характерная для SD3/Flux. Мы использовали быструю версию с FFN свёрткой, в которой наблюдаем незначительные повреждения текстур на тонких узорах (что видимо занижает рейтинг данного VAE). Апскейлеры, такие как ESRGAN, помогут справиться с этими артефактами. Вы всех остальных аспектах мы нашли данный VAE сильно недооцененным.
|
20 |
+
|
21 |
+
## Процесс обучения
|
22 |
+
### Оптимизатор
|
23 |
+
Мы тестировали несколько оптимизаторов (adamw, laion, optimi-adamw, adafactor и adamw-8bit) и выбрали **AdamW-8bit**. Наиболее плавную кривую с плавным затуханием градиентов продемонстрировал optimi-adamw. Наиболее хаотично ведет себя adamw-8bit, но он позволяет увеличить размер батча, что позволяет получить наивысшую скорость обучения на low price gpu (мы использовали 4*A6000/5*L40 для обучения).
|
24 |
+
|
25 |
+
### Learning Rate
|
26 |
+
Мы пришли к выводу что манипуляции с кривой затухания/прогревом дают эффект, но несущественный. Также выбор оптимального лернинг рейт кажется нам переоцененным. По нашим экспериментам адам прощает и позволяет выбрать лернинг рейт в широком диапазоне. Мы начинали с 1e-4 плавно понижая по мере обучения до 1e-6. Другими словами выбор корректной архитектуры модели имеет катастрафически большее значение чем манипуляции с гиперпараметрами.
|
27 |
+
|
28 |
+
### Датасет
|
29 |
+
Мы обучали модель всего на ~1 миллионе изображений. 60 эпох на Imagenet в 256 (в целом бесполезный из-за низкого качества разметки), и 8 эпох в 576 на Midjourney/Nijijourney + реалистичные фото и аниме/арты. При разметке мы использовали человеческие промпты, промпты каптион емпорум, wd-tagger и moondream2. Мы по разному компоновали длину промпта и состав - от разметки только тегами до подробных описаний чтобы получить модель которая понимает различные стили промптирования. Размер датасета крайне мал - что приводит к тому что модель не знает огромного количества сущностей и будет неорректно рисовать например "гуся на велосипеде". Также в датасете было огромное количество вайфу и тому подобных генераций - так как нам интересно было исследовать насколько хорошо модель выучит анатомию человека, а не способность к рисованию бургеров. Подавляющее большинство описаний было на английском, но наши тесты на других языках показывают что модель мультиязычна.
|
30 |
+
|
31 |
+
## Ограничения
|
32 |
+
- Низкое покрытие концепциями из-за экстремально небольшого датасета.
|
33 |
+
- Image2Image функционал требует дообучения. (Мы снизили долю siglip до 5% чтобы успеть "протренить" text2image)
|
34 |
+
|
35 |
+
## Благодарности
|
36 |
+
- **Стэн** — ключевой инвестор.
|
37 |
+
- **Вадим** — материальная поддержка.
|
38 |
+
- **Lovescape** & **Whargarbl** — сообщество тестировщиков.
|
39 |
+
- **Caption Imperium** — датасеты.
|
40 |
+
|
41 |
+
> "Мы верим, что будущее — за эффективными компактными моделями. Мы благодарим за безвомездные пожертвоания и очень надеемся на вашу поддержку в будующем.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TRAIN.md
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
license: apache-2.0
|
3 |
+
---
|
4 |
+
|
5 |
+
Краткая инструкция по установке
|
6 |
+
Обновите систему и установите git-lfs:
|
7 |
+
|
8 |
+
```
|
9 |
+
apt update
|
10 |
+
apt install git-lfs
|
11 |
+
```
|
12 |
+
Обновите pip и установите требуемые пакеты:
|
13 |
+
|
14 |
+
```
|
15 |
+
python -m pip install --upgrade pip
|
16 |
+
pip install -r requirements.txt
|
17 |
+
```
|
18 |
+
Настройте git-credentials:
|
19 |
+
|
20 |
+
```
|
21 |
+
git config --global credential.helper store
|
22 |
+
```
|
23 |
+
Клонируйте репозиторий:
|
24 |
+
|
25 |
+
```
|
26 |
+
git clone https://huggingface.co/AiArtLab/sdxs
|
27 |
+
cd sdxs/
|
28 |
+
```
|
29 |
+
Подготовьте датасет:
|
30 |
+
|
31 |
+
```
|
32 |
+
mkdir datasets
|
33 |
+
cd datasets
|
34 |
+
git clone https://huggingface.co/datasets/AiArtLab/imagenet-1kk
|
35 |
+
```
|
36 |
+
Выполните вход в сервисы:
|
37 |
+
|
38 |
+
```
|
39 |
+
huggingface-cli login
|
40 |
+
wandb login
|
41 |
+
```
|
42 |
+
Настройте accelerate для многокарточного обучения:
|
43 |
+
|
44 |
+
```
|
45 |
+
accelerate config
|
46 |
+
```
|
47 |
+
Запустите обучение!
|
48 |
+
|
49 |
+
```
|
50 |
+
nohup accelerate launch train.py &
|
51 |
+
```
|
samples/sdxs_320x576_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
samples/sdxs_384x576_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
samples/sdxs_448x576_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
samples/sdxs_512x576_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
samples/sdxs_576x320_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
samples/sdxs_576x384_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
samples/sdxs_576x448_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
samples/sdxs_576x512_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
samples/sdxs_576x576_0.jpg
CHANGED
![]() |
Git LFS Details
|
![]() |
Git LFS Details
|
sdxs/diffusion_pytorch_model.safetensors
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:
|
3 |
size 4529095968
|
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c1521efedf07d86f8a40e6fe334128e0848faf9a60c92a7e7266f436246d34fe
|
3 |
size 4529095968
|