跳转至

AI 生图高级技术 (2025-2026)

最后更新: 2026年4月30日 | 状态: 高级研究 覆盖范围: ComfyUI 高级工作流、LoRA 训练、区域控制、批量生产管线


1. ComfyUI 高级工作流模式

1.1 高分辨率修复(Hires Fix)完整管线

[Base Generation 1024px] → [VAE Decode] → [Upscale (4x-UltraSharp)]
[VAE Encode] → [KSampler 2nd pass (denoise=0.35)] → [FaceDetailer] → [Save]

关键参数: - 第 1 次采样: steps=20, guidance=3.5, sampler=euler, scheduler=simple - 第 2 次采样: steps=15, denoise=0.35, sampler=euler_ancestral - denoise >0.4 会改变构图,<0.25 仅锐化无细节增强

1.2 批量角色一致性管线

[Load 5 Reference Images] → [IPAdapter Batch] → [Average Embeddings]
[Flux Model + LoRA] → [KSampler] → [FaceDetailer per image]

一致性评分标准: - CLIP 相似度 >0.85 为"高一致" - 使用 CLIP Vision 节点计算生成图与参考图的 CLIP 相似度 - 自动过滤 <0.80 的结果并重试


2. LoRA 训练进阶

2.1 数据集准备

  • 图像数量: 20-50 张(角色),50-200 张(风格)
  • 图像质量: 1024px+,清晰面部,多视角/光照
  • 标注格式: caption.txt 每行 trigger_word, detailed description
  • 数据增强: 水平翻转(对称角色)、小幅旋转(±5°) 照
  • 标注格式: caption.txt 每行 trigger_word, detailed description
  • 数据增强: 水平翻转(对称角色)、小幅旋转(±5°)### 2.2 kohya-ss 训练配置(Flux.1 专用)
    {
      "model_name": "flux1-dev.safetensors",
      "train_data_dir": "./train_images",
      "output_dir": "./output",
      "output_name": "my_character_v1",
      "resolution": [1024, 1024],
      "batch_size": 1,
      "gradient_accumulation_steps": 4,
      "max_train_steps": 2000,
      "learning_rate": 2e-4,
      "lr_scheduler": "cosine_with_restarts",
      "lr_warmup_steps": 100,
      "optimizer_type": "AdamW8bit",
      "network_module": "networks.lora_flux",
      "network_dim": 32,
      "network_alpha": 16,
      "train_unet": true,
      "train_text_encoder": false,
      "prior_loss_weight": 1.0,
      "mixed_precision": "fp16",
      "save_every_n_epochs": 5,
      "sample_prompts": "sample_prompts.txt",
      "sample_every_n_steps": 200
    }
    

2.3 过拟合检测与预防

  • 监控损失曲线: 训练损失持续下降但验证损失上升 = 过拟合
  • 早停策略: 当验证损失连续 3 个 checkpoint 不下降时停止
  • 正则化图像: 使用 10-20 张同类风格但不同主体的图像作为正则化
  • Dropout 率: 0.05-0.1 适用于 50+ 图像数据集,0.1-0.15 适用于 20-50 张

3. 区域控制高级技巧

3.1 多层区域条件化

[Positive Prompt A] → [ConditioningSetArea] (top 50%) → ┐
                                                          ├──→ [ConditioningCombine] → KSampler
[Positive Prompt B] → [ConditioningSetArea] (bottom 50%) →┘

适用场景: - 上半身:角色肖像,下半身:环境/服装 - 前景:主体,背景:场景 - 左侧:角色 A,右侧:角色 B itioningSetArea] (bottom 50%) →┘

**适用场景**:
- 上半身:角色肖像,下半身:环境/服装
- 前景:主体,背景:场景
- 左侧:角色 A,右侧:角色 B### 3.2 分层 ControlNet 混合
[Depth ControlNet] (strength=0.8, start=0.0, end=0.6) [Canny ControlNet] (strength=0.5, start=0.2, end=0.8) [OpenPose ControlNet] (strength=0.7, start=0.0, end=0.9)
- 不同 ControlNet 在不同采样阶段生效
- 结构控制(Depth)早期介入,细节控制(Canny)中期介入
- 姿势控制(OpenPose)贯穿全程

---

## 4. 批量生产管线

### 4.1 自动化脚本
```python
import subprocess
import json
import glob

def batch_generate(api_url, workflow_path, prompt_template, count=50):
    """批量生成管线"""
    for i in range(count):
        # 加载工作流模板
        with open(workflow_path) as f:
            workflow = json.load(f)

        # 替换提示词
        prompt = prompt_template.format(seed=i)
        workflow['123']['inputs']['text'] = prompt  # CLIP Text Encode 节点 ID
        workflow['124']['inputs']['text'] = ''  # Negative prompt

        # 发送到 ComfyUI API
        resp = requests.post(f"{api_url}/prompt", json={"prompt": workflow})
        task_id = resp.json()['prompt_id']

        # 轮询结果
        result = wait_for_completion(api_url, task_id)
        save_image(result, f"output/batch_{i:04d}.png")

def wait_for_completion(api_url, task_id):
    while True:
        resp = requests.get(f"{api_url}/history/{task_id}")
        data = resp.json()
        if task_id in data:
            return data[task_id]['outputs']
        time.sleep(2)
() if task_id in data: return data[task_id]['outputs'] time.sleep(2) ```### 4.2 质量自动过滤
import torch
from transformers import CLIPProcessor, CLIPModel

def quality_filter(image_path, reference_path, threshold=0.80):
    """使用 CLIP 相似度自动过滤低质量生成"""
    model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")
    processor = CLIPProcessor.from_pretrained("openai/clip-vit-large-patch14")

    image1 = Image.open(image_path)
    image2 = Image.open(reference_path)

    inputs = processor(images=[image1, image2], return_tensors="pt", padding=True)
    with torch.no_grad():
        embeddings = model.get_image_features(pixel_values=inputs['pixel_values'])

    similarity = torch.cosine_similarity(embeddings[0], embeddings[1], dim=0)
    return similarity.item() >= threshold


5. 性能优化

5.1 多 GPU 策略

  • 模型并行: DiT 模型太大无法单卡容纳时使用
  • 数据并行: 不同 GPU 生成不同提示词/seed
  • ComfyUI 分布式: 使用 comfyui-remote 节点跨 GPU 分配工作

5.2 显存优化技巧

技术 显存节省 质量影响
FP8 量化 ~50% 可忽略
T5 CPU 卸载 ~6GB 轻微速度降低
梯度检查点 ~40% 推理中不适用
分块 VAE 解码 ~70% 无影响
LoRA 融合 ~1GB/LoRA 不可逆,但速度提升

文档更新日期: 2026年4月30日 | 来源: ComfyUI 社区、kohya-ss 文档、HuggingFace 模型卡片