阿里妈妈技术开源FLUX图像修复&蒸馏加速模型

简介: 本文介绍了阿里妈妈技术团队基于FLUX开发的Controlnet修复模型和蒸馏加速模型,填补了社区空白并提升了FLUX的实用性和效率。

01

概述

阿里妈妈智能创作与AI应用团队近期开源了两项FLUX 文生图模型的的实用配套模型。Black Forest Lab 的 FLUX [1] 文生图模型具有更高的生成画面质量和指令遵循能力,一经推出便受到业界广泛关注,也有很多优秀的控制插件和 LoRA 微调模型陆续跟进,但是通过修复(Inpainting)进行可控生成的插件还未有公开可用的模型,另一方面 FLUX 12B 的参数量会带来显著的推理时耗和计算开销。

研究团队针对这一行业需求进行了相关探索,开源了基于 FLUX(FLUX.1-dev) 的Controlnet 修复模型以及8步加速 Turbo 模型两个配套模型。更进一步,两个模型可互相兼容配合实用,达到更快的修复生图。两项开源模型收到了社区积极反馈,在HuggingFace 社区居于趋势榜前列。

FLUX修复Controlnet模型主页(已更新至Beta版本):

FLUX8步加速Lora模型主页(Alpha版本):

两个模型均排名开源社区趋势榜前列(2024年10月16日)

02

图像修复 Controlnet模型

图像修复(Image Inpainting)对图像的指定区域根据指令进行重新生成。在创意设计领域,设计师可以利用该模型快速修复或改变图像中的特定元素、在个人照片编辑领域,普通用户可以轻松去除照片中不想要的元素或添加新的内容。毫不夸张地说,图像修复的ControlNet 是FLUX基础模型用于图像可控生成的关键插件, 同时相较于其他控制条件(线稿、姿势、深度图等)也有较高的训练难度,对模型在丰富场景中的泛化能力、预测合理性和稳定性有较高要求。

因此,研究团队从FLUX 模型采用的 DiT 模型结构和 Flow Matching [2] 训练机制出发,在嵌入的ControlNet模型结构和训练流程方面进行探索。

FLUX图像修复 ControlNet 整体使用流程

Controlnet模型结构探索

社区普遍使用的Unet Controlnet [3] (图a) ,直接迁移到DiT架构上需要将前一半的特征加到后一半上面。不同于传统的基于Unet的文生图结构,Dit的文生图模型由一系列的transformer block堆叠而成,没有显式的Encoder-Decoder结构,因此直接迁移效果不好。研究团队在同样是 DiT 框架的 SD3 Inpainting 上实验发现更多控制层数的 Full 结构相较于 Half 与 Interleave 结构收敛更快。由于训练时显存限制,FLUX 的inpainting 采用interleave(图c)结构进行训练,在模型收敛效果和显存&计算量取得平衡。

由粗到细的多阶段训练

从公开的图文对数据集和内部数据集过滤出千万量级数据用于训练,并对其中的图片通过多模态大模型进行长Caption重打标。研究团队先在768分辨率进行训练得到Alpha版本,然后在1024分辨率进行继续训练得到 Beta 版本。相比于 Alpha 版本相比,Beta图像修复模型提升了以下特性:

1、从768图像分辨率升级到1024:能够直接处理和生成1024x1024分辨率的图像,无需额外的放大步骤,提供更高质量和更详细的输出结果。得益于多通道VAE的强大重构能力,生成的结果中非重绘区域依然能高保真复原。

2、增强细节生成:经过微调以捕捉和重现修复区域的更精细细节。

3、改进提示词控制:减少额外的控制信号对 FLUX.1底模能力的影响使模型对生成内容提供更精确的控制。


效果对比

对比Diffusers官方开源的基于SDXL的Inpainting模型 [4] ,FLUX-Inpainting模型继承了FLUX 更好基础能力,在指令跟随、文字生成、画面效果方面都有突出优势,

其中最新的Beta版相比一个月前的Alpha版效果有进一步提升。以下是对比结果(都没有进行原图贴回操作):

跟其他扩散模型一样,直接使用Inpainting模型仍需进行多步迭代推理(28步)才能达到比较满意的结果,为加快推理速度,研究团队探索了加速扩散方法:

03

蒸馏加速模型

扩散模型由于需要多步去噪的推理生成方式,使得图片生成速度缓慢,计算资源需求高。尤其是对于 FLUX 模型来讲,其高达12B的参数量,在实际使用中具有较大困难。针对推理加速这个问题,已经有不少优秀的工作在 SD1.5 或 SDXL 上进行了降低采样步数的相关研究,但是对于FLUX的相关加速研究还较少。

由此,阿里妈妈智能创作与AI应用团队探索训练出了一个8步蒸馏模型,使得 FLUX 在8步的采样步数下,接近原本 FLUX 30步左右推理的效果,模型对于修复也适配良好,能够在接近原修复质量同时实现更快的推理。


技术介绍

研究团队采用改进的一致性蒸馏算法 [5],并使用了对抗训练来提升蒸馏的效果。对于对抗训练所需的判别器模型,研究团队设计了一种多头的判别器模型,在固定原始 FLUX 的Transformer的权重,在每一层 Transformer Block 后接一个可训练的由几层 MLP 构成的Head,如图所示。判别器的输出由所有Head的均值决定,这样的Head设计,充分利用了FLUX Transformer 的不同层级特征,能够更加有效的监督蒸馏后的效果。

Turbo蒸馏加速训练流程图

效果&加速对比

研究团队在文生图任务上进行了尝试,对比原始 FLUX.1-dev 28步的结果, 8步 LoRA加速后的结果几乎逼近原始结果。可以看到,加速模型在通用场景、人像场景、电商场景都取得了不错的效果:

图像修复叠加蒸馏加速

加速模型配合修复模型能够在接近原始修复效果的情况下实现更快的修复速度。在H20机器,使用T5xxl-fp16结合FLUX.1-dev-fp8模型进行测试,在true_cfg设置为1的情况下,原始30step需要约26s,叠加加速模型后只需要约8s,推理速度提升了约三倍,效果损失微小。

04

最佳实践

diffusers模型推理

diffusers推理示例代码(A100):

import torch
from diffusers.pipelines import FluxPipeline
from modelscope import snapshot_download
model_id = snapshot_download("AI-ModelScope/FLUX.1-dev")
adapter_id = snapshot_download("alimama-creative/FLUX.1-Turbo-Alpha")
pipe = FluxPipeline.from_pretrained(
  model_id,
  torch_dtype=torch.bfloat16
)
pipe.to("cuda")
pipe.load_lora_weights(adapter_id)
pipe.fuse_lora()
prompt = "A DSLR photo of a shiny VW van that has a cityscape painted on it. A smiling sloth stands on grass in front of the van and is wearing a leather jacket, a cowboy hat, a kilt and a bowtie. The sloth is holding a quarterstaff and a big book."
image = pipe(
            prompt=prompt,
            guidance_scale=3.5,
            height=1024,
            width=1024,
            num_inference_steps=8,
            max_sequence_length=512).images[0]

生图速度:

显存占用:

ComfyUI模型体验

使用diffusers的显存占用较高,下面演示在魔搭免费算力(22G)通过ComfyUI使用FLUX fp8模型+图像修复ControlNet模型+加速模型实现秒级图像修复生图。

环境配置和安装:

  1. python 3.10及以上版本
  2. pytorch 1.12及以上版本,推荐2.0及以上版本
  3. 建议使用CUDA 11.4及以上

本文在魔搭社区免费提供的GPU免费算力上体验:


下载和部署ComfyUI(A10)

Clone代码,并安装相关依赖,链接如下:

https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes

https://github.com/rgthree/rgthree-comfy

https://github.com/JPS-GER/ComfyUI_JPS-Nodes

https://github.com/pythongosssss/ComfyUI-Custom-Scripts

https://github.com/kijai/ComfyUI-KJNodes

https://github.com/XLabs-AI/x-flux-comfyui

# #@title Environment Setup
from pathlib import Path
OPTIONS = {}
UPDATE_COMFY_UI = True  #@param {type:"boolean"}
INSTALL_COMFYUI_MANAGER = True  #@param {type:"boolean"}
INSTALL_CUSTOM_NODES_DEPENDENCIES = True  #@param {type:"boolean"}
INSTALL_ComfyUI_CustomNodes = True #@param {type:"boolean"}
INSTALL_x_flux_comfyui = True  #@param {type:"boolean"}
OPTIONS['UPDATE_COMFY_UI'] = UPDATE_COMFY_UI
OPTIONS['INSTALL_COMFYUI_MANAGER'] = INSTALL_COMFYUI_MANAGER
OPTIONS['INSTALL_CUSTOM_NODES_DEPENDENCIES'] = INSTALL_CUSTOM_NODES_DEPENDENCIES
OPTIONS['INSTALL_ComfyUI_CustomNodes'] = INSTALL_ComfyUI_CustomNodes
OPTIONS['INSTALL_x_flux_comfyui'] = INSTALL_x_flux_comfyui
current_dir = !pwd
WORKSPACE = f"{current_dir[0]}/ComfyUI"
%cd /mnt/workspace/
![ ! -d $WORKSPACE ] && echo -= Initial setup ComfyUI =- && git clone https://github.com/comfyanonymous/ComfyUI
%cd $WORKSPACE
if OPTIONS['UPDATE_COMFY_UI']:
  !echo "-= Updating ComfyUI =-"
  !git pull
if OPTIONS['INSTALL_COMFYUI_MANAGER']:
  %cd custom_nodes
  ![ ! -d ComfyUI-Manager ] && echo -= Initial setup ComfyUI-Manager =- && git clone https://github.com/ltdrdata/ComfyUI-Manager
  %cd ComfyUI-Manager
  !git pull
if OPTIONS['INSTALL_ComfyUI_CustomNodes']:
  %cd ..
  !echo -= Initial setup ComfyUI_Comfyroll_CustomNodes =- && git clone https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes.git
  !echo -= Initial setup ComfyUI_rgthree_comfy =- && git clone https://github.com/rgthree/rgthree-comfy.git
  !echo -= Initial setup ComfyUI_JPS =- && git clone https://github.com/JPS-GER/ComfyUI_JPS-Nodes.git
  !echo -= Initial setup ComfyUI_Custom_Scripts =- && git clone https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git
  !echo -= Initial setup ComfyUI-KJNodes =- && git clone https://github.com/kijai/ComfyUI-KJNodes.git
if OPTIONS['INSTALL_x_flux_comfyui']:
  !echo -= Initial setup x-flux-comfyui =- && git clone https://github.com/XLabs-AI/x-flux-comfyui.git
if OPTIONS['INSTALL_CUSTOM_NODES_DEPENDENCIES']:
  !pwd
  !echo "-= Install custom nodes dependencies =-"
  ![ -f "custom_nodes/ComfyUI-Manager/scripts/colab-dependencies.py" ] && python "custom_nodes/ComfyUI-Manager/scripts/colab-dependencies.py"
!pip install spandrel


下载模型(包含FLUX.1基础模型fp8版本,encoder模型,vae模型,LoRA模型如FLUX.1-Turbo-Alpha,Controlnet如FLUX.1-dev-Controlnet-Inpainting-Beta等),并存放到models目录的相关子目录下。小伙伴们可以选择自己希望使用的模型并下载。

#@markdown ###Download #@markdown ###Download standard resources
%cd /mnt/workspace/ComfyUI
### FLUX1-DEV
# !modelscope download --model=AI-ModelScope/FLUX.1-dev --local_dir ./models/unet/ flux1-dev.safetensors
!modelscope download --model=AI-ModelScope/flux-fp8 --local_dir ./models/unet/ flux1-dev-fp8.safetensors
### clip
!modelscope download --model=AI-ModelScope/flux_text_encoders --local_dir ./models/clip/ clip_l.safetensors
!modelscope download --model=AI-ModelScope/flux_text_encoders --local_dir ./models/clip/ t5xxl_fp8_e4m3fn.safetensors
### vae
!modelscope download --model=AI-ModelScope/FLUX.1-dev --local_dir ./models/vae/ ae.safetensors
### lora
!modelscope download --model=alimama-creative/FLUX.1-Turbo-Alpha --local_dir ./models/loras/ diffusion_pytorch_model.safetensors
### Controlnet
!modelscope download --model=alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta --local_dir ./models/controlnet diffusion_pytorch_model.safetensors resources%cd /mnt/workspace/ComfyUI### FLUX1-DEV# !modelscope download --model=AI-ModelScope/FLUX.1-dev --local_dir ./models/unet/ flux1-dev.safetensors!modelscope download --model=AI-ModelScope/flux-fp8 --local_dir ./models/unet/ flux1-dev-fp8.safetensors### clip!modelscope download --model=AI-ModelScope/flux_text_encoders --local_dir ./models/clip/ clip_l.safetensors!modelscope download --model=AI-ModelScope/flux_text_encoders --local_dir ./models/clip/ t5xxl_fp8_e4m3fn.safetensors### vae!modelscope download --model=AI-ModelScope/FLUX.1-dev --local_dir ./models/vae/ ae.safetensors### lora!modelscope download --model=alimama-creative/FLUX.1-Turbo-Alpha --local_dir ./models/loras/ diffusion_pytorch_model.safetensors### Controlnet!modelscope download --model=alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta --local_dir ./models/controlnet diffusion_pytorch_model.safetensors


使用cloudflared运行ComfyUI

!wget "https://modelscope.oss-cn-beijing.aliyuncs.com/resource/cloudflared-linux-amd64.deb"
!dpkg -i cloudflared-linux-amd64.deb
%cd /mnt/workspace/ComfyUI
import subprocess
import threading
import time
import socket
import urllib.request
def iframe_thread(port):
  while True:
      time.sleep(0.5)
      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      result = sock.connect_ex(('127.0.0.1', port))
      if result == 0:
        break
      sock.close()
  print("\nComfyUI finished loading, trying to launch cloudflared (if it gets stuck here cloudflared is having issues)\n")
  p = subprocess.Popen(["cloudflared", "tunnel", "--url", "http://127.0.0.1:{}".format(port)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  for line in p.stderr:
    l = line.decode()
    if "trycloudflare.com " in l:
      print("This is the URL to access ComfyUI:", l[l.find("http"):], end='')
    #print(l, end='')
threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()
!python main.py --dont-print-server


load ComfyUI流程图,链接:

t2I_flux_turbo加速生图:

https://modelscope.cn/models/alimama-creative/FLUX.1-Turbo-Alpha/resolve/master/workflows/t2I_flux_turbo.json

inpainting加速生图:

https://modelscope.cn/models/alimama-creative/FLUX.1-Turbo-Alpha/resolve/master/workflows/alimama_flux_inpainting_turbo_8step.json


t2I_flux_turbo加速生图流程图如下:

image.png

inpainting加速生图流程图如下:

显存占用:


05

总结

本文介绍了阿里妈妈技术团队基于FLUX开发的Controlnet修复模型和蒸馏加速模型,填补了社区空白并提升了FLUX的实用性和效率。未来研究团队将着力提高复杂纹理和结构的理解生成能力,增加多尺寸支持,探索4步生图的加速方案。研究团队相信,持续创新将使FLUX在AI创意生成等众多领域发挥更大潜力。

引用

[1] https://github.com/black-forest-labs/flux

[2]Lipman Y, Chen R T Q, Ben-Hamu H, et al. Flow matching for generative modeling[J]. arXiv preprint arXiv:2210.02747, 2022.

[3]Zhang L, Rao A, Agrawala M. Adding conditional control to text-to-image diffusion models[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2023: 3836-3847.

[4] https://huggingface.co/diffusers/stable-diffusion-xl-1.0-inpainting-0.1

[5] Luo S, Tan Y, Huang L, et al. Latent consistency models: Synthesizing high-resolution images with few-step inference[J]. arXiv preprint arXiv:2310.04378, 2023.


点击链接👇,直达原文

https://www.modelscope.cn/models/alimama-creative/FLUX.1-Turbo-Alpha?from=alizishequ__text

相关文章
|
人工智能 物联网
AI 绘画Stable Diffusion 研究(十七)SD lora 详解(上)
AI 绘画Stable Diffusion 研究(十七)SD lora 详解(上)
2255 0
|
机器学习/深度学习 编解码 人工智能
Reading Notes: Human-Computer Interaction System: A Survey of Talking-Head Generation
由于人工智能的快速发展,虚拟人被广泛应用于各种行业,包括个人辅助、智能客户服务和在线教育。拟人化的数字人可以快速与人接触,并在人机交互中增强用户体验。因此,我们设计了人机交互系统框架,包括语音识别、文本到语音、对话系统和虚拟人生成。接下来,我们通过虚拟人深度生成框架对Talking-Head Generation视频生成模型进行了分类。同时,我们系统地回顾了过去五年来在有声头部视频生成方面的技术进步和趋势,强调了关键工作并总结了数据集。 对于有关于Talking-Head Generation的方法,这是一篇比较好的综述,我想着整理一下里面比较重要的部分,大概了解近几年对虚拟人工作的一些发展和
|
存储 小程序 物联网
|
10月前
|
JavaScript 计算机视觉
FLUX.1 Tools 全家桶开源!文末附一键ComfyUI启动链接
Black Forest Labs 发布了 FLUX.1 Tools,一套增强 FLUX.1 文本转图像模型的工具集,包括 FLUX.1 Fill、FLUX.1 Depth、FLUX.1 Canny 和 FLUX.1 Redux,分别用于图像修复、深度引导、边缘检测和图像重组。提供详细的安装指南和模型下载链接,支持用户快速上手并优化图像处理流程。
3627 4
FLUX.1 Tools 全家桶开源!文末附一键ComfyUI启动链接
|
6月前
|
开发者 异构计算
高效部署通义万相Wan2.1:ComfyUI文生/图生视频实战,工作流直取!
通义万相Wan2.1开源不到一周,已登顶HuggingFace Model 和 Space 榜双榜首,在HuggingFace和ModelScope平台的累计下载量突破100万次,社区热度持续攀升!为响应小伙伴们对ComfyUI工作流运行Wan2.1的强烈需求,社区开发者整理了实战教程👇
5638 23
高效部署通义万相Wan2.1:ComfyUI文生/图生视频实战,工作流直取!
|
8月前
|
机器学习/深度学习 编解码 人工智能
STAR:南京大学联合字节开源视频超分辨率增强生成框架,视频清晰度一键提升,支持从低分辨率视频生成高分辨率视频
STAR 是由南京大学、字节跳动和西南大学联合推出的视频超分辨率框架,能够将低分辨率视频提升为高分辨率,同时保持细节清晰度和时间一致性。
1356 13
STAR:南京大学联合字节开源视频超分辨率增强生成框架,视频清晰度一键提升,支持从低分辨率视频生成高分辨率视频
|
10月前
|
算法 物联网 开发者
In-Context LoRA实现高效多任务图像生成,开启视觉创作新篇章
这篇文章介绍了通义实验室提出的In-Context LoRA,这是一种基于现有文本到图像模型的任务无关性框架,用于实现高质量的多任务图像生成。
1456 11
In-Context LoRA实现高效多任务图像生成,开启视觉创作新篇章
|
9月前
|
机器学习/深度学习 人工智能
Qwen2VL-Flux:开源的多模态图像生成模型,支持多种生成模式
Qwen2VL-Flux 是一个开源的多模态图像生成模型,结合了 Qwen2VL 的视觉语言理解和 FLUX 框架,能够基于文本提示和图像参考生成高质量的图像。该模型支持多种生成模式,包括变体生成、图像到图像转换、智能修复及 ControlNet 引导生成,具备深度估计和线条检测功能,提供灵活的注意力机制和高分辨率输出,是一站式的图像生成解决方案。
938 4
Qwen2VL-Flux:开源的多模态图像生成模型,支持多种生成模式
|
11月前
|
编解码 物联网 计算机视觉
实战 | 猫猫、少女、FLUX、ControlNet
魔搭社区集结了来自多个组织的 FLUX ControlNet 模型,魔搭社区的开源项目 DiffSynth-Studio 为这些模型提供了支持,今天就随我们一起,体验一下这些 FLUX ControlNet 模型的神奇生成能力。
|
人工智能 自然语言处理 API
阿里云百炼平台上线首个最新文生图模型FLUX中文优化版
由Stable Diffusion团队推出的开源文生图模型FLUX风靡全球,其生成质量媲美Midjourney,被誉为“开源王者”。阿里云百炼平台首发FLUX中文优化版,提升了中文指令的理解与执行能力。开发者可直接在平台上体验并调用FLUX模型,且享有1000张图像的免费生成额度,有效期180天。无需额外部署,即可轻松利用这一先进模型创造高质量图像。
1641 0