Энтони Чен 1,2 · Цзяньцзинь Сюй 3 · Вэньчжао Чжэн 4 · Гаоле Дай 1 · Йида Ван 5 · Ренруй Чжан 6 · Хаофань Ван 2 · Шанхан Чжан 1*
1 Пекинский университет · 2 Команда InstantX · 3 Университет Карнеги-Меллон · 4 Калифорнийский университет в Беркли · 5 Li Auto Inc. · 6 CUHK
Не требующая обучения региональная подсказка для диффузионных преобразователей (Regional-Prompting-FLUX) позволяет диффузионным преобразователям (т. е. FLUX) выполнять детальную композиционную генерацию текста в изображение без необходимости обучения. Опытным путем мы показываем, что наш метод высокоэффективен и совместим с LoRA и ControlNet.
Мы делаем вывод быстрее, чем реализация на основе RPG, но при этом занимаем меньше памяти графического процессора .
[2024/11/05] Мы публикуем код, попробуйте его!
[2024/11/05] Публикуем технический отчет!
Региональные маски | Конфигурация | Сгенерированный результат |
---|---|---|
Красный: регион «Коктейль» (xyxy: [450, 560, 960, 900]). Зеленый: область таблицы (xyxy: [320, 900, 1280, 1280]). Синий: фон | Базовая подсказка: «Тропический коктейль на деревянном столе на пляже во время заката». Фоновая подсказка: "Фото" Региональные подсказки:
| |
Красный: область радуги (xyxy: [0, 0, 1280, 256]) Зеленый: регион корабля (xyxy: [0, 256, 1280, 520]) Желтый: регион рыбы (xyxy: [0, 520, 640, 768]) Синий: регион сокровищ (xyxy: [640, 520, 1280, 768]) | Базовая подсказка: «Величественный корабль плывет под радугой, яркие морские существа скользят по кристально чистой воде внизу, олицетворяя чудо природы, а древний ржавый сундук с сокровищами спрятан на дне океана». Региональные подсказки:
| |
Красный: женщина с факелом (xyxy: [128, 128, 640, 768]) Зеленый: фон | Базовая подсказка: «Древняя женщина торжественно стоит с пылающим факелом, в то время как на заднем плане бушует жестокая битва, отражая одновременно силу и трагедию исторической военной сцены». Фоновая подсказка: «Фото». Региональные подсказки:
| |
Красный: регион собаки (assets/demo_custom_0_mask_0.png) Зеленый: регион кошки (assets/demo_custom_0_mask_1.png) Синий: фон | Базовая подсказка: «Собака и кошка сидят на пышной зеленой траве на солнечном открытом воздухе». Фоновая подсказка: "Фото" Региональные подсказки:
| Примечание. Генерация с маской сегментации — это экспериментальная функция. Сгенерированное изображение не полностью ограничено областями. Мы предполагаем, что это связано с ухудшением маски в процессе понижающей дискретизации. |
Региональные маски | Конфигурация | Сгенерированный результат |
---|---|---|
Красный: регион динозавров (xyxy: [0, 0, 640, 1280]) Синий: регион города (xyxy: [640, 0, 1280, 1280]) | Базовая подсказка: «Эскизный стиль: милый динозавр игриво пускает крошечные клубы огня над мультяшным городом в веселой сцене». Региональные подсказки:
| |
Красный: регион НЛО (xyxy: [320, 320, 640, 640]) | Базовая подсказка: «Милый НЛО в мультяшном стиле, парящий над солнечной городской улицей, художественный стиль сочетает в себе реальность и элементы иллюстрации» Фоновая подсказка: "Фото" Региональные подсказки:
|
Региональные маски | Конфигурация | Сгенерированный результат |
---|---|---|
Красный: регион первого автомобиля (xyxy: [0, 0, 426, 968]) Зеленый: второй автомобильный регион (xyxy: [426, 0, 853, 968]) Синий: регион третьего автомобиля (xyxy: [853, 0, 1280, 968]). | Базовая подсказка: «Три мощных спортивных автомобиля — красный, синий и желтый — мчатся бок о бок по городской улице» Региональные подсказки:
| |
Красный: женский регион (xyxy: [0, 0, 640, 968]) Зеленый: регион пляжа (xyxy: [640, 0, 1280, 968]). | Базовая подсказка: «Женщина, идущая по красивому пляжу с живописным видом на побережье». Региональные подсказки:
|
Мы используем предыдущую фиксацию из репозитория диффузоров, чтобы обеспечить воспроизводимость, поскольку мы обнаружили, что новая версия диффузоров может давать другие результаты.
# install diffusers locally git clone https://github.com/huggingface/diffusers.git cd diffusers # reset diffusers version to 0.31.dev, where we developed Regional-Prompting-FLUX on, different version may experience different results git reset --hard d13b0d63c0208f2c4c078c4261caf8bf587beb3b pip install -e ".[torch]" cd .. # install other dependencies pip install -U transformers sentencepiece protobuf PEFT # clone this repo git clone https://github.com/antonioo-c/Regional-Prompting-FLUX.git # replace file in diffusers cd Regional-Prompting-FLUX cp transformer_flux.py ../diffusers/src/diffusers/models/transformers/transformer_flux.py
Подробный пример (включая LoRA и ControlNets) см. в infer_flux_regional.py. Ниже приведен пример быстрого запуска.
import torchfrom Pipeline_flux_regional import RegionalFluxPipeline, RegionalFluxAttnProcessor2_0pipeline = RegionalFluxPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", torch_dtype=torch.bfloat16).to("cuda")attn_procs = {}для имени в конвейер.transformer.attn_processors.keys():if 'transformer_blocks' в имени и имени.endswith("attn.processor"):attn_procs[имя] = RegionalFluxAttnProcessor2_0()else:attn_procs[имя] = конвейер.transformer.attn_processors[имя] ]pipeline.transformer.set_attn_processor(attn_procs)## общие settingsimage_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = "Древняя женщина торжественно стоит с пылающим факелом, в то время как на заднем плане бушует ожесточенная битва, запечатлевшая одновременно силу и трагедию в исторической военной сцене."background_prompt = "фото" # set по умолчанию, но если вы хотите обогатить фон, вы можете установить его на более descriptive Prompt_mask_pairs = {"0": {"description": "Достойная женщина в древних одеждах стоит на переднем плане, ее лицо освещено факелом, который она высоко держит. Выражение ее лица выражает решимость и печаль, ее одежда и внешний вид отражают исторический период. Факел отбрасывает драматические тени на ее лицо, его пламя ярко танцует в темноте.","маска": [128, 128, 640, 768] } }## Настройки коэффициента контроля регионаmask_inject_steps = 10 # больше означает более сильный контроль, рекомендуется от 5 до 10double_inject_blocks_interval = 1 # 1 означает самый сильный элемент управленияsingle_inject_blocks_interval = 1 # 1 означает самый сильный controlbase_ratio = 0.2 # меньше означает более сильный контрольregional_prompts = []regional_masks = []background_mask = torch.ones((image_height, image_width)) для региона_idx, региона в Regional_prompt_mask_pairs.items():description = регион['description']маска = регион['маска']x1, y1, x2, y2 = маскамаска = torch.zeros ((высота_изображения, ширина_изображения))маска[y1:y2, x1:x2] = 1.0background_mask -= Maskregional_prompts.append(description)regional_masks.append(mask)# если региональные маски не покрывают все изображение, добавьте фоновое приглашение и маску, если background_mask.sum() > 0:regional_prompts.append(background_prompt)regional_masks.append (background_mask)изображение = конвейер(prompt=base_prompt,width=image_width, height=image_height,mask_inject_steps=mask_inject_steps,num_inference_steps=num_inference_steps,generator=torch.Generator("cuda").manual_seed(seed),joint_attention_kwargs={"regional_prompts": Regional_prompts, «regional_masks»: Regional_masks, «double_inject_blocks_interval»: double_inject_blocks_interval, «single_inject_blocks_interval»: single_inject_blocks_interval, «base_ratio»: base_ratio}, ).images[0]image.save(f"output.jpg")
Нашу работу спонсируют HuggingFace и fal.ai. Спасибо!
Если вы считаете, что Regional-Prompting-FLUX полезен для ваших исследований и приложений, процитируйте нас, используя этот BibTeX:
@article{chen2024training, title={Региональные подсказки для диффузионных трансформаторов без обучения}, автор={Чен, Энтони и Сюй, Цзяньцзинь и Чжэн, Вэньчжао и Дай, Гаоле и Ван, Ида и Чжан, Жэньруй и Ван, Хаофань и Чжан , Шанхан}, журнал = {препринт arXiv arXiv:2411.02395}, год={2024}}
По любым вопросам пишите нам по адресу [email protected].