recoilme commited on
Commit
90402bd
·
1 Parent(s): 9070537
README.md CHANGED
@@ -2,50 +2,40 @@
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
- ```
 
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

  • SHA256: 7d8bd4c878aea503fa8247823652da31fa18e1480840958b5f2bff9f88842f2b
  • Pointer size: 130 Bytes
  • Size of remote file: 56.5 kB

Git LFS Details

  • SHA256: 4f9c480def7a9f10411473a4fba56ca5fa3bfb21fab334dfb0e60fddbe5a05af
  • Pointer size: 130 Bytes
  • Size of remote file: 70.8 kB
samples/sdxs_384x576_0.jpg CHANGED

Git LFS Details

  • SHA256: 7f8b4c899618b2010cbf3479813c4cc4985220c297c9a0f0a817c7e2fa26e672
  • Pointer size: 130 Bytes
  • Size of remote file: 67.4 kB

Git LFS Details

  • SHA256: d157bc81efa54604b482d5e1d3f935f17d93d1c18b39ccd736d4c2ab91b049ab
  • Pointer size: 130 Bytes
  • Size of remote file: 69.7 kB
samples/sdxs_448x576_0.jpg CHANGED

Git LFS Details

  • SHA256: 9af5231cd9cc8b432d37feca56d71c8fb821b841c9378c448eb7cbe0b76c568e
  • Pointer size: 131 Bytes
  • Size of remote file: 153 kB

Git LFS Details

  • SHA256: cbad8b4fc14902ec6080eabc2b937e39a28dcf4931575e14fcefe8a50deeb08d
  • Pointer size: 131 Bytes
  • Size of remote file: 117 kB
samples/sdxs_512x576_0.jpg CHANGED

Git LFS Details

  • SHA256: ceb6130a7c901ea49fa3ba0aa6653d5f1d3dff3aed6fc23895da17c96824f5d5
  • Pointer size: 131 Bytes
  • Size of remote file: 193 kB

Git LFS Details

  • SHA256: 308ea359beed8b490488232af15538b958c3545c43d77f2abb3899a39fc132c0
  • Pointer size: 131 Bytes
  • Size of remote file: 233 kB
samples/sdxs_576x320_0.jpg CHANGED

Git LFS Details

  • SHA256: 2be293e7b5d74a1f2d7c43c0d56a0f9ba68dc7f6ffd91300a2d39dfdcc36c071
  • Pointer size: 130 Bytes
  • Size of remote file: 76.3 kB

Git LFS Details

  • SHA256: 92f040a090396c9a0bd63e895668d297385aa5f4200299045fb195abb14d26c0
  • Pointer size: 130 Bytes
  • Size of remote file: 86.6 kB
samples/sdxs_576x384_0.jpg CHANGED

Git LFS Details

  • SHA256: 5f937ca89294b0233e308b469017e7d871c853f75a3f0fe13a9e62369dc934cd
  • Pointer size: 131 Bytes
  • Size of remote file: 161 kB

Git LFS Details

  • SHA256: 2a2bdaca8d84be547bd50ed84482712d1b917d2860f5fee4e6ea1711c974314d
  • Pointer size: 131 Bytes
  • Size of remote file: 147 kB
samples/sdxs_576x448_0.jpg CHANGED

Git LFS Details

  • SHA256: fdb1039750e06fa1a847928d4180edbc5f36cb538bd82b397116a221bf31a8c8
  • Pointer size: 130 Bytes
  • Size of remote file: 89.2 kB

Git LFS Details

  • SHA256: d1b7c178a81ea2aa4fc4030c2902b2e657553a1a54c89b5e7f6b36e1d65949a7
  • Pointer size: 130 Bytes
  • Size of remote file: 85.7 kB
samples/sdxs_576x512_0.jpg CHANGED

Git LFS Details

  • SHA256: 36289445fab2a75f20d8cf83ab17ea7c59e705e403f0228015105ec766e13d3c
  • Pointer size: 130 Bytes
  • Size of remote file: 47.9 kB

Git LFS Details

  • SHA256: 1bda1de8acab8d927984840d024ed256b88256f5a0373692f92c8290892b2de0
  • Pointer size: 130 Bytes
  • Size of remote file: 73.2 kB
samples/sdxs_576x576_0.jpg CHANGED

Git LFS Details

  • SHA256: de3d9745b80ce0729de0404c743b0ac15416f0d4fcc1856710b482c75ffee9aa
  • Pointer size: 130 Bytes
  • Size of remote file: 44.8 kB

Git LFS Details

  • SHA256: 8e95fb4f221e0dca72ac50413ca8cd55d321513b6e2ee744728dd261930c623b
  • Pointer size: 130 Bytes
  • Size of remote file: 83.1 kB
sdxs/diffusion_pytorch_model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:74770515282e22ea2f330710e193ee7fb3c81f14895233a8bf2003501019940e
3
  size 4529095968
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c1521efedf07d86f8a40e6fe334128e0848faf9a60c92a7e7266f436246d34fe
3
  size 4529095968