Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[飞桨多模态大模型套件PaddleMIX开发大赛] rfc: 缓解大模型的数据偏见问题 #917

Open
wants to merge 23 commits into
base: develop
Choose a base branch
from
48 changes: 48 additions & 0 deletions paddlemix/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
### 标题:
"缓解扩散模型训练数据的偏见问题:分布引导的无偏扩散模型"
---

### 引言:
本RFC提出了一种方法,旨在解决PaddleMIX在扩散模型训练过程中反映出训练数据集中存在的偏见。该方案借鉴了(https://arxiv.org/pdf/2402.18206)中的思想——Distribution-guidacnce,通过约束生成图像的属性分布,使其符合预设的公平分布。实现这一目标的关键在于:去噪 UNet的潜层特征中包含丰富的人口统计语义,这些语义可以用于指导去偏生成。为此,可以训练一个属性分布预测器(Attribute Distribution Predictor, ADP),将潜在特征映射到属性上。通过这种方式,可以在不重新训练整个扩散模型的情况下,有效地对生成的图像进行去偏。

---

### 问题描述:
扩散模型(Diffusion Models, DMs)作为一种强大的生成模型广泛应用于数据增强和数据生成领域。然而,DMs会反映出训练数据集中存在的偏见,在面部图像的生成中尤为严重。例如模型可能偏向于生成某一特定人群体的图像(如女性优于男性)。

---

### 解决方案:
GitHub项目地址: [https://github.com/rishubhpar/debiasing_gen_models](https://github.com/rishubhpar/debiasing_gen_models)
将属性预测和分布指导的技术适配到传统扩散模型场景,核心方法包括:
1. **属性分布预测器(ADP):** 用于在给定参考属性分布的情况下,无需重新训练扩散模型即可对现有扩散模型(DMs)进行去偏。具体而言,该方法训练了一个属性分布预测器(Attribute Distribution Predictor,ADP),它能够直接从扩散模型的h-space特征中预测属性分布。
2. **分布指导(DG):** 分布指导(Distribution Guidance)用于在逆扩散过程中,根据参考属性分布进行条件生成。在扩散网络的中间特征空间h-space中引入指导机制,从而实现高效的数据训练和快速的无偏图像生成。

---

### 方法细节:

1. **数据集:**
我们以面部数据集为研究对象,因为这些数据集通常存在显著的人口统计偏差,如性别、种族等。利用预训练的属性预测模型,为CelebA-HQ每个图像生成伪标签,并利用去噪Unet提取图像的h-vector,与对应的标签组成pairs,用来训练ADP。

2. **分布引导:**
- 为了实现分布指导,我们通过 h-space 分类器构建了分布预测函数 ADP(Attribute Distribution Predictor)。
- 对于批次数据,获得其h-space特征和对应的属性标签,最后一个batch中的不同类别的softmax值相加作为分布估计。利用卡方散度损失来优化ADP。

3. **模型架构:**
- 一个在CelebA-HQ上预训练无条件扩散模型。
- 一个文本条件扩散模型 Stable Diffusion v1.5,在 LAION数据集上训练。
- 这两种模型都表现出不错的图像生成质量;然而,它们面部属性方面表现出显著的偏差。

4. **评估指标:**
- 图像质量和公平性。用于衡量生成图像这两个方面的指标。
- 对于给定的属性𝑎,我们可以选择一个高准确度的属性分类器,基于该分类器的预测结果计算其与均匀向量的FD分数。FD分数越低,属性值的分布就越接近均匀分布也就是说,生成的图像在属性𝑎上越公平。
- 图像质量通过FID分数衡量,FID分数越低,图像质量会越高。

5. **实施计划:**
- 将DG引导采样算法集成到PaddleMIX/ppdiffusers的采样pipeline中。
- 重写基于paddle实现的ADP训练,集成到现有pipeline中。

6. **交付内容:**
- 代码库更新:包括DG引导采样算法和ADP训练模块及相应代码测试。
- 文档更新:算法解释及使用指南。
48 changes: 48 additions & 0 deletions paddlemix/read.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
### 标题:
"缓解扩散模型训练数据的偏见问题:分布引导的无偏扩散模型"
---

### 引言:
本RFC提出了一种方法,旨在解决PaddleMIX在扩散模型训练过程中反映出训练数据集中存在的偏见。该方案借鉴了(https://arxiv.org/pdf/2402.18206) 中Distribution-guidacnce的核心思想,通过约束生成图像的属性分布,使其符合预设的公平分布。实现这一目标的关键在于:去噪 UNet 的潜层特征中包含丰富的人口统计语义,这些语义可以用于指导去偏生成。为此,可以训练一个属性分布预测器(Attribute Distribution Predictor, ADP),将潜在特征映射到属性分布上。ADP 的训练数据来源于现有属性分类器生成的伪标签。

---

### 问题描述:
扩散模型(Diffusion Models, DMs)作为一种强大的生成模型广泛应用于数据增强和创意领域。然而,DMs会反映出训练数据集中存在的偏见,在面部图像的生成中尤为严重。例如模型可能偏向于生成某一特定人子群体的图像(如女性优于男性)。

---

### 解决方案:
GitHub项目地址: [https://github.com/rishubhpar/debiasing_gen_models](https://github.com/rishubhpar/debiasing_gen_models)
将OPERA的解码技术适配到单样本场景,核心方法包括:
1. **属性分布预测器(ADP):** 一种新颖的设置,用于在给定参考属性分布的情况下,无需重新训练扩散模型即可对现有扩散模型(DMs)进行去偏。具体而言,该方法训练了一个属性分布预测器(Attribute Distribution Predictor,ADP),它能够直接从扩散模型的h-space特征中预测属性分布。
2. **分布指导(DG):** 分布指导(Distribution Guidance)用于在逆扩散过程中,根据参考属性分布进行条件生成。在扩散网络的中间特征空间(h-space)中引入指导机制,从而实现高效的数据训练和快速的图像生成。

---

### 方法细节:

1. **数据集:**
我们以面部数据集为研究对象,因为这些数据集通常存在显著的人口统计偏差,如性别、种族等。利用预训练的属性预测模型,为CelebA-HQ每个图像生成伪标签,并利用去噪Unet提取图像的h-vcector,与对应的标签组成paris,用来训练ADP。

2. **分布引导:**
- 为了实现分布指导,我们通过 h-space 分类器构建了分布预测函数 ADP(Attribute Distribution Predictor)。
- 对于批次数据,获得其h-space特征和对应的属性标签,最后一个batch中的不同类别的softmax值相加作为分布估计。利用卡方散度损失来优化ADP。

3. **模型架构:**
- 一个在CelebA-HQ上预训练无条件扩散模型。
- 一个文本条件扩散模型 Stable Diffusion v1.5,在 LAION数据集上训练。
- 这两种模型都表现出不错的图像生成质量;然而,它们面部属性方面表现出显著的偏差。

4. **评估指标:**
- 图像质量和公平性。用于衡量生成图像这两个方面的指标。
- 对于给定的属性𝑎,我们可以访问一个高准确度的属性分类器,基于该分类器的预测结果计算其与均匀向量的FD分数。FD分数越低,属性值的分布就越接近均匀分也就是说,生成的图像在属性𝑎上越公平。
- 图像质量通过FID分数衡量,FID分数越低,图像质量越高。

5. **实施计划:**
- 将DG引导采样算法集成到PaddleMIX/ppdiffusers的采样pipeline中。
- 重写基于paddle实现的ADP训练,并集成到现有pipeline中。

6. **交付内容:**
- 代码库更新:包括DG引导采样和ADP训练模块及相应代码测试。
- 文档更新:算法解释及使用指南。
64 changes: 64 additions & 0 deletions ppdiffusers/examples/StableAnimator/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Stable Animator: 高质量 ID-Perserving 人物动漫化视频生成推理
## 1. 模型简介
StableAnimator是由姿势驱动的人体运动动画生成模型,展示了合成图像的高保真度和ID-perserving能力。动画可由StableAnimator直接合成,无需使用任何与面部相关的后处理工具。具体实现借鉴于[Francis-Rings/StableAnimator](https://github.com/Francis-Rings/StableAnimator/tree/main)

目前用于人物图像动画的扩散模型难以确保身份(ID)的一致性。StableAnimator,这是第一个端到端的ID保持视频扩散框架,它在参考图像和姿势的条件下,无需任何后处理即可合成高质量的视频。StableAnimator包含精心设计的模块,用于训练和推理,努力实现身份一致性。首先,StableAnimator使用现成的提取器计算image-embedding和face-embdeing。然后,StableAnimator引入了一种新的分布感知ID-adapter,该adepter可以防止时间层引起的干扰,同时通过对齐来保留ID。在推理过程中,StableAnimator提出基于Hamilton-Jacobi-Bellman(HJB)方程的优化方法,以进一步提高人脸质量。


![](https://github.com/Francis-Rings/StableAnimator/raw/main/assets/figures/framework.jpg?raw=true)
![](https://github.com/Francis-Rings/StableAnimator/raw/main/assets/figures/case-18.gif?raw=true)

注:上图引自 [StableAnimator](https://arxiv.org/abs/2411.17697)。
## 2. 环境准备
通过 `git clone` 命令拉取 PaddleMIX 源码,并安装必要的依赖库。请确保你的 PaddlePaddle 框架版本在 2.6.0 之后,PaddlePaddle 框架安装可参考 [飞桨官网-安装](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html)。
```bash
# 克隆 PaddleMIX 仓库
git clone https://github.com/PaddlePaddle/PaddleMIX

# 安装2.6.0版本的paddlepaddle-gpu,当前我们选择了cuda12.0的版本,可以查看 https://www.paddlepaddle.org.cn/ 寻找自己适合的版本
python -m pip install paddlepaddle-gpu==2.6.0.post120 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

# 进入consistency_distillation目录
cd PaddleMIX/ppdiffusers/examples/InstantID/

# 安装新版本ppdiffusers
pip install https://paddlenlp.bj.bcebos.com/models/community/junnyu/wheels/ppdiffusers-0.24.0-py3-none-any.whl --user

# 安装其他所需的依赖, 如果提示权限不够,请在最后增加 --user 选项
pip install -r requirements.txt
```

## 3. 数据准备

测试样例需要按照以下格式排列:
inference/
``` bash
├── case-1
│   ├── poses
│   ├── faces
│   └── reference.png
├── case-2
│   ├── poses
│   ├── faces
│   └── reference.png
├── case-3
│   ├── poses
│   ├── faces
│   └── reference.png
```
poses文件夹包含所有姿势图像,faces文件夹包含所有面部图像,reference.png是参考图像。

### 姿态图提取
我们利用预训练的DWPose来提取人体骨骼。在初始化DWPose时,应在中配置预训练权重。
给定包含多个.png文件的目标图像文件夹,您可以使用命令获取相应的人体姿态图。
需要注意的是,target文件夹中的.png文件以frame_i.png格式命名,如frame_0.png、frame_1.png等。--ref_image_path表示给定参考图像的路径。获得的人体姿态图像保存在path/test/pose中。特别重要的是,inference姿态图像应该与关于身体形状的参考图像对齐。
如果您只有目标MP4文件,我们建议您使用ffmpeg将MP4文件转换为多帧(.png文件),而不会造成任何质量损失。

### 面部图提取
给定包含多个RGB.png文件的图像文件夹的路径,您可以运行以下命令来提取相应的人脸mask。

StableAnimator支持两种不同分辨率设置的人体图像动画:512x512和576x1024。您可以在command_basic_infer.sh中修改“--width”和“--height”来设置动画的分辨率。

## 4. 参考资料

[ Francis-Rings/StableAnimator🔥](https://github.com/Francis-Rings/StableAnimator/tree/main)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.