| # PortraitCraft Challenge Track 2: Portrait Composition Generation - Top 1 Solution |
|
|
| This repository contains the Top 1 solution code for the **PortraitCraft Challenge Track 2: Portrait Composition Generation**. |
|
|
| Our solution leverages a powerful diffusion pipeline built upon Z-Image-Turbo, enhanced with ControlNet for precise pose conditioning and fine-tuned using DPO-LoRA. |
|
|
| *** |
| |
| ## 🚀 Getting Started |
| |
| ### 1. Model Preparation |
| |
| Before running the code, you need to download the required base models and ControlNet models into the `models` directory. You can choose to download them from either Hugging Face or ModelScope. |
| |
| **From Hugging Face:** |
|
|
| - `Tongyi-MAI/Z-Image-Turbo` |
| - `alibaba-pai/Z-Image-Turbo-Fun-Controlnet-Union-2.1` |
|
|
| **From ModelScope:** |
|
|
| - `Tongyi-MAI/Z-Image-Turbo` |
| - `PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1` |
|
|
| Ensure the downloaded weights are placed correctly so the scripts can load them properly. |
|
|
| *** |
| |
| ### 2. Inference |
| |
| To generate portrait images based on the provided JSON tasks (which include text prompts and control pose prompt), run the evaluation script: |
| |
| ```bash |
| python inference/eval.py |
| ``` |
| |
| The script will load the base model, ControlNet, and the trained LoRA weights to generate the final submitted images. |
| |
| *** |
|
|
| ### 3. Calculate Parameters |
|
|
| If you want to check the parameter count of the complete model pipeline (including DiT, Text Encoder, VAE, ControlNet, and LoRA), run: |
|
|
| ```bash |
| python inference/calculate_params.py |
| ``` |
|
|
| **Expected Output:** |
|
|
| ```text |
| === Components Parameter Count === |
| DiT (Transformer): 6.1549 B |
| Text Encoder: 4.0225 B |
| VAE (Encoder + Decoder): 0.0838 B |
| ControlNet: 3.3562 B |
| LoRA (Included in DiT): 0.1588 B |
| |
| === Parameter Summary === |
| Total Model Parameters: 13.6174 B |
| Total Model Parameters: 13,617,422,307 |
| ``` |
|
|
| *(Note: During inference, the LoRA weights are fused directly into the DiT transformer backbone to avoid extra computation overhead. Thus, the total parameter count remains highly efficient.)* |
|
|
| *** |
| |
| ### 4. Training |
| |
| We use a DPO-based LoRA training strategy combined with ControlNet to align the model with human preferences and improve composition quality. |
| |
| To start the training process, execute the provided bash script: |
| |
| ```bash |
| bash train/train_ai4va_pose_controlnet_dpo_lora_8x1.sh |
| ``` |
| |
| |