ImageReward 文本到图像生成中的人类偏好预测
ImageReward是第一个通用的文本到图像人类偏好RM,它总共经过137k对专家比较的训练,在理解文本到图像合成中的人类偏好方面优于现有的文本图像评分方法,如CLIP(38.6%)、Aesthetic(39.6%)和BLIP(31.6%)。
引入了奖励反馈学习(ReFL),用于使用ImageReward直接优化文本到图像的扩散模型。在人类评估中,ReFL调谐的稳定扩散以58.4%的优势战胜了未调谐的版本。
github: https://github.com/zai-org/ImageReward
论文: https://arxiv.org/abs/2304.05977
中文博客: https://zhuanlan.zhihu.com/p/639494251

ImageReward解决方案由以下几个步骤组成:
专业的大规模数据集ImageRewardDB:约13.7万个⽐较pairs,完全开源。
通⽤的反映⼈类对于⽂本到图像偏好的模型ImageReward:文生图奖励模型之先锋,优于现有的⽂本-图像评分⽅法,例如CLIP、Aesthetic和BLIP;也是新的文生图自动评价指标。
借助ImageReward的直接优化⽅法ReFL:用人类偏好改进扩散生成模型。
导入:为什么文生图也需要RLHF?
文生图存在什么痛点问题?
⽂本到图像⽣成模型,包括⾃回归(主要是一系列基于Transformer架构的模型例如DALLE、CogView、Parti等)和基于扩散(基于Diffusion架构的模型例如DALLE-2、Stable Diffusion等)的⽅法,近年来取得了快速发展。给定一个适当的⽂本描述(即prompt),这些模型便可以在⼴泛的主题上⽣成相应的⾼质量图像,引起了公众对其潜在应⽤和影响的广泛关注。
尽管取得了一定的进展,但现有的⾃监督预训练图像⽣成模型还远⾮完美,⽣成的图像中存在一系列被广泛反映的问题,包括但不限于:
-
图文一致性:生成的图像未能准确描述所有的数字、属性和⽂字提⽰中描述的对象关系。(例如封面图中的a, b,“小女孩被地上的向日葵挡住去路”以及“太阳神加冕”)
-
肢体问题:生成的图像呈现了扭曲、不完整、重复或者异常的肢体部位(例如:四肢等),这一问题在人类或动物中均可能出现。(例如封面图中的e和f)
-
审美问题:生成的图像偏离⼈类对审美⻛格的平均或主流偏好。(例如封面图中的c和d)
-
有害与偏⻅内容:生成的图像具有有害、暴⼒、性相关、存在歧视、⾮法或引起⼼理不适的内容。(例如封面图中的e和f)
-
然⽽,这些普遍存在的挑战很难仅通过改进模型架构和预训练数据来解决。
LLM中的RLHF回顾
在自然语言处理中,研究⼈员利⽤基于⼈类反馈的强化学习 (RLHF: Reinforcement Learning from Human Feedback) 来指导⼤型语⾔模型接近⼈类的偏好和价值观。该⽅法依赖于训练一个奖励模型 (RM),该奖励模型能通过大量对不同模型输出的专业标注来捕获⼈类偏好。虽然这一方法非常有效,但是标注的过程可能花费非常⾼昂的成本,且具有较大的挑战性,因为它需要通过数⽉的努⼒来建⽴标注标准、招募和培训标注专家、验证标注结果并最终训练生成RM。
为什么RLHF有希望解决文生图现在的问题?
文生图现存问题很大程度上受限于预训练数据的质量:预训练的数据分布嘈杂,而且与实际的⽤⼾prompt数据的分布不同。
RM (reward model):为人类偏好建模。
RM as metric:当前文生图并没有令人满意的自动评测指标(FID和CLIPScore各有问题),RM为引入人类偏好进行评价成为可能。更好的评价体系决定更好的发展,引导解决当前痛点。
RLHF:借助RM促使模型与⼈类的偏好分布趋向⼀致。
ImageRewardDB:人类偏好的数据集构建
-
prompt采样和生成图像收集。我们的数据集使用了来⾃开源数据集DiffusionDB的真实⽤⼾提⽰。为了确保所选提⽰的多样性,我们采⽤了⼀种基于图的算法,该算法利⽤基于语⾔模型的文本相似性。通过这一方法我们选择产⽣了10,000个候选prompt,每个提⽰都伴随着来⾃ DiffusionDB 的4到9个样本图像,从⽽产⽣了177,304个⽤于标记的候选对。
-
人工标注设计:prompt标注(对promp进⾏分类;指出promp中存在的问题);图片rating(对图像根据文本-图像一致性、图像质量和⽆害性进⾏评价);图片ranking:按偏好顺序对图像进⾏排名。
-
人工标注分析。经过2个⽉的标注,我们收集了对8,878个prompt的有效标注,产⽣了136,892个⽐较对。原论文的附录中对标注数据进行了详尽的分析。
ImageReward:人类偏好预测模型
训练过程
模型结构:BLIP(ViT-L作为图像编码器的,12层Transformer作为文本编码器)+ MLP(打分器)
训练方法:对于同一个prompt对应的k张图片,根据其排序结果得到pairs,每个pair中有相对更受偏好和不受偏好的两张图片。ImageReward训练所用的目标函数如下,其中T表示prompt,x表示生成的图片。

训练技巧:
- 训练时,BLIP的参数全都固定或者全都不固定都不能达到满意的准确率;事实上,我们发现固定70%的Transformer层是最有效的;
- 训练对超参数很敏感,我们通过搜索超参数发现1e-5的学习率和64的batch大小最合适。
模型性能

人类偏好的一致性分析。在大多数情况下,人们会就哪个图像更好达成一致。然而,考虑到模型生成的一些图像之间可能各有优缺点,在某些情况下,不同的人认为更好的图像可能是不同的。在测量模型的性能之前,我们首先需要测量人们在选择更好的图像方面达成一致的可能性。我们使用其他40个prompt(778个pairs)来计算不同标注者和研究人员之间的偏好一致性(agreement)。如上表所示,标注员相互之间的agreement均值为65.3%;而我们的模型达到了这样的agreement,远超过其他模型。

偏好准确率。模型预测人类偏好的准确率,计算方式是对于两个不同的图片,模型是否和人对于图片优劣的判断一致。在测试集上,ImageReward的偏好准确率达到65.14%(和人与人之间的agreement差不多大),比50%(随机)高出15.14%,约为7.76%(BLIP Score)的两倍。

人类评测。为了评估ImageReward在大量生成的图片中选出最受人类偏好图片的能力,我们构建了另一个数据集,从DiffusionDB中收集同一个prompt下对应的9/25/64张生成图片,并使用包括ImageReward在内的不同方法从这些图片中分别选择top3的结果。标注者对这些top3图片进行排序,上图显示了ImageReward的胜率。ImageReward可以选择与文本更对齐、保真度更高的图像,并避免有毒内容。
ImageReward作为自动评测指标
训练文本到图像的生成模型是困难的,但合理地评估这些模型则更难。
目前,FID和CLIP Score是两种流行的评估方法。
FID(fine-tune或者zero-shot):使用MS-COCO image caption数据集,文本到图像生成模型与真实图像进行评估。
CLIP Score:使用CLIP来衡量模型生成的图片和文本之间的匹配度。
FID存在以下几个问题:
-
零样本使用:由于生成模型现在主要被公众以没有微调的零样本方式使用,微调后的FID可能不会真实地反映模型在实际使用中的实际性能。此外,尽管在最近的流行做法中采用了零样本FID,一些模型的预训练数据中MS-COCO的可能泄漏将使其成为一个潜在的不公平设置。
-
人类偏好:FID衡量生成的图像和参考真实图像之间的平均距离,因此在评估中未能包含对文本到图像合成至关重要的人类偏好。此外,FID依赖于整个数据集的平均值来提供准确的评估,而在许多情况下,我们需要该指标作为单个图像的选择器。
看到这些挑战,本文提出ImageReward作为一个有效的零样本自动评估指标,用于文本到图像的模型比较和图片选择。

与人类偏好更加符合的模型评测指标。研究人员对6个流行的高分辨率(约512 × 512)可用的文本到图像模型进行了评测:CogView 2、Versatile Diffusion (VD)、Stable Diffusion (SD) 1.4和2.1、DALL-E 2(通过OpenAI API)和Openjourney。测试所用的100个prompt从真实用户使用prompt中采样得到,每个模型根据每个prompt生成10个图片作为候选。为了比较这些模型,我们首先从每个模型对每个prompt的10个输出中选择最佳的图像。然后,标注员根据ImageRewardDB中描述的排序规则,对每个prompt下来自不同模型的图像进行排序。每个模型对所有其他模型的最终获胜计数见上表。如表所示:ImageReward与人类排名很一致,而零样本的FID和CLIP则不一致。

更好的区分度。另一个亮点是,与CLIP相比,我们观察到ImageReward可以更好地区分单个样本之间的质量。上图展示了ImageReward的箱线图和CLIP在每个模 型的1000张图片上的分数分布。使用每个模型的最小值和最大值ImageReward和CLIP分数将分布归一化到0.0~1.0,并丢弃异常值。如图所示,ImageReward在每个模型的得分比CLIP的得分有更大的方差,这意味着ImageReward可以很好地区分彼此的图像质量。此外,在跨模型的比较方面,我们发现ImageReward分数的中位数也大致与人类排名一致。考虑到分布已经标准化,这尤其令人惊讶。相反,CLIP的中位数未能呈现属性。
ReFL:文生图Diffusion的奖励反馈学习(Reward Feedback Learning)
已有算法回顾
语言模型的RLHF不能直接应用在Diffusion中。在NLP中,有研究工作使用强化学习算法例如PPO来引导语言模型与人类偏好相一致,代表性的工作包括OpenAI的InstructGPT和ChatGPT,基于一次完整生成的likelihood来更新整个模型。然而,与基于Transformer的语言模型不同,Latent Diffusion Models的多步去噪生成无法产生一次完整生成的likelihood,因此不能采用相同的RLHF方法。
现有的LDM人类反馈微调方法都是间接的。目前可用的人类反馈微调LDM的优化方法基本上可以分为两类,一类是使用奖励模型获取新的数据集,另一类是使用奖励模型改变损失函数的系数。但是这些方法都是间接的,效果有限,这可以在后面的实验结果部分得到体现。
算法设计

通过观察去噪步骤中的ImageReward分数,我们得出了一个有趣的发现(参见上图左)。对于一个降噪过程,例如降噪步数为40步时,在降噪过程中途直接预测中间降噪结果对应的原图:
当t ≤ 15:ImageReward得分和最终结果的一致性很低;
当15 ≤ t ≤ 30:高质量生成结果的ImageReward得分开始脱颖而出,但总体上我们仍然无法根据目前的ImageReward分数清楚地判断所有生成结果的最终质量;
当t ≥ 30:不同生成结果对应的ImageReward分数的已经可以区分。
根据观察,我们得出结论,经过30步去噪(总步数为40步),而不需要到最后一步降噪,ImageReward分数可以作为改进LDM的可靠反馈。因此,我们提出了一种直接微调LDM的算法。算法流程可见上图右。将RM的分数视为人类的偏好损失,将梯度反向传播到去噪过程中随机挑选的后一步t(在我们的例子中t取值范围为30~40)。随机选择t而不是使用最后一步的原因是,如果只保留最后一个去噪步骤的梯度,训练被证明是非常不稳定的,结果是不好的。在实践中,为了避免快速过拟合和稳定微调,我们对ReFL Loss进行重新加权,并用Pre-training Loss进行正则化。
ReFL的实验结果

我们的实验基于Stable Diffusion v1.4,奖励模型统一采用ImageReward,使用PNDM作为noise scheduler,classifier free guidance采用默认值7.5。相比于微调之前的Stable Diffusion v1.4,ReFL微调模型最受青睐而且胜率最高。当和其他方法相互比较时,ReFL的结果总是更受偏好。

快速开始
依赖管理
为了减少解决包版本不兼容问题,我将使用一份已经验证通过的包版本,可以把它放到 requirements.txt 文件中直接进行安装。
accelerate==0.20.0
aiohappyeyeballs==2.6.1
aiohttp==3.13.2
aiosignal==1.4.0
anyio==4.12.0
attrs==25.4.0
certifi==2025.11.12
charset-normalizer==3.4.4
clip @ git+https://github.com/openai/CLIP.git@dcba3cb2e2827b402d2701e7e1c7d9fed8a20ef1
colorama==0.4.6
datasets==2.14.0
diffusers==0.16.0
dill==0.3.7
fairscale==0.4.13
filelock==3.20.0
frozenlist==1.8.0
fsspec==2025.10.0
ftfy==6.3.1
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
huggingface-hub==0.14.1
idna==3.11
image-reward==1.5
importlib_metadata==8.7.0
Jinja2==3.1.6
MarkupSafe==3.0.3
mpmath==1.3.0
multidict==6.7.0
multiprocess==0.70.15
networkx==3.6
numpy==1.26.4
packaging==25.0
pandas==2.3.3
pillow==12.0.0
propcache==0.4.1
psutil==7.1.3
pyarrow==12.0.0
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.3
regex==2025.11.3
requests==2.32.5
safetensors==0.7.0
six==1.17.0
sympy==1.14.0
timm==0.6.13
tokenizers==0.13.3
torch==2.9.1
torchvision==0.24.1
tqdm==4.67.1
transformers==4.27.4
typing_extensions==4.15.0
tzdata==2025.2
urllib3==2.5.0
wcwidth==0.2.14
xxhash==3.6.0
yarl==1.22.0
zipp==3.23.0
示例代码
import ImageReward as RM
import os
import tempfile
import requests
from PIL import Image
from io import BytesIO
models_dir = os.path.abspath("./models")
temp_dir = os.path.join(models_dir, ".temp")
os.makedirs(temp_dir, exist_ok=True)
os.environ['TMP'] = temp_dir
os.environ['TEMP'] = temp_dir
tempfile.tempdir = temp_dir
def load_model():
return RM.load("ImageReward-v1.0", download_root=models_dir)
def example(model):
prompt = 'a painting of an ocean with clouds and birds, day time, low depth field effect'
img_prefix = "./images"
generations = [f"{pic_id}.webp" for pic_id in range(1, 5)]
img_list = [os.path.join(img_prefix, img) for img in generations]
ranking, rewards = model.inference_rank(prompt, img_list)
# Print the result
print("\nPreference predictions:\n")
print(f"ranking = {ranking}")
print(f"rewards = {rewards}")
for index in range(len(img_list)):
score = model.score(prompt, img_list[index])
print(f"{generations[index]:>16s}: {score:.2f}")
def image_score(model, prompt, img_urls):
imgs = []
for img_url in img_urls:
try:
# 下载网络图片
response = requests.get(img_url, timeout=30)
response.raise_for_status()
# 将图片数据转换为PIL Image对象
image = Image.open(BytesIO(response.content))
imgs.append(image)
except Exception as e:
print(f"图片下载 {img_url} 时出错: {e}")
scores = model.score(prompt, imgs)
rank = model.inference_rank(prompt, imgs)
return rank, scores
if __name__ == '__main__':
model = load_model()
# example(model)
# 这是一张充满活力的照片,捕捉到两个年轻的白人女孩在阳光明媚的日子里并肩站在户外。
# 左边的女孩皮肤白皙,戴着大大的圆眼镜,穿着浅色长袖衬衫和牛仔裤。
# 她把头发扎了回去,用左手做了个和平的手势。右边的女孩皮肤稍黑,穿着米色长袖衬衫和牛仔裤。
# 她把头发梳成马尾辫,笑容满面,还用右手做了个和平的手势。两个女孩都站在一张白色桌子前,桌子上有一个玻璃罐,里面装着一条在清水中的小鱼。
# 背景显示了一片郁郁葱葱的绿色草地,上面有树木和五颜六色的流苏状装饰。整体氛围欢快活泼。
rank1, scores1 = image_score(model,
'This is a vibrant photograph capturing two young white girls standing side by side outdoors on a sunny day. The girl on the left has light skin and is wearing large, round glasses, a light long-sleeve shirt, and jeans. She has her hair tied back and is making a peace sign with her left hand. The girl on the right has slightly darker skin and is dressed in a cream-colored long-sleeve shirt and jeans. She has her hair pulled back into a ponytail and is smiling broadly, also making a peace sign with her right hand. Both girls are standing in front of a white table with a glass jar containing a small fish in clear water. The background shows a lush, green grassy field with trees and a colorful, tassel-like decoration hanging above. The overall atmosphere is cheerful and lively.',
[
'https://domain/de58649e30a74725ac64016b5c8b55dc.jpeg'])
print(f'评分:{scores1[0]}')
# 这是一张充满活力的照片,一个年轻的白人女孩,留着卷曲的浅色头发,戴着一顶波尔卡圆点派对帽。
# 她坐在一张圆形的白色桌子旁,桌子上摆满了五颜六色的五彩纸屑和一条用闪亮的银丝带包裹的礼物。
# 女孩微笑着低头看着礼物,她正要打开。她穿着一件轻便的t恤。背景是一面墙和一扇窗户,窗户上挂着纯白色的窗帘,让自然光洒满整个房间。
# 在女孩的右边,有一束黄色和蓝色的气球绑在一个架子上,增添了节日的气氛。桌子上还摆放着一盆绿叶盆栽,为庆祝活动增添了色彩。
# 照片的整体氛围是欢乐和喜庆的,捕捉到了兴奋和期待的时刻。
rank2, scores2 = image_score(model,
'This is a vibrant photograph of a young white girl with curly, light hair, wearing a polka-dotted party hat. She is seated at a round, white table covered with colorful confetti and a wrapped gift with a shiny silver ribbon. The girl is smiling and looking down at the gift, which she is about to unwrap. She is dressed in a light t-shirt. The background features a wall and a window with sheer white curtains that allow natural light to flood the room. To the right of the girl, there is a bouquet of yellow and blue balloons tied to a stand, adding to the festive atmosphere. A potted plant with green leaves is also visible on the table, contributing to the celebratory setting. The overall mood of the photograph is joyful and festive, capturing a moment of excitement and anticipation.',
[
'https://domain/2a1345a48efc469d8f5d4b236400a59e.jpeg'])
print(f'评分:{scores2[0]}')
# 用2.5D效果制作一张迷人的儿童图画书风格的生日贺卡,上面有许多色彩鲜艳、可爱的卡通丛林动物。
# 这张欢快而喜庆的卡片包括一只挂在藤蔓上的顽皮猴子、一只有明显棕色斑点的长颈鹿、一只面带微笑、表情友好的豹子、一只鬃毛飘逸的骄傲狮子和一只迷人的粉红色大象。
# 所有动物的设计都有圆形、可爱的特征和快乐的面孔。中心是一个制作精美的木制路标,上面用大胆、欢快的字体刻着“生日快乐”的字样。
# 这个标志被郁郁葱葱的热带绿叶巧妙地包围着,给卡片一种充满活力、活泼的感觉。背景是浅米色,增强了温暖、诱人的色调,让人联想到阳光明媚的热带稀树草原景观,地平线上有平缓的山丘和稀疏的树木。
# 在这幅生动的插图中,顽皮的动物被安排在一个动态、生动的构图中,每只动物都展现出独特、详细的特征,这些特征让孩子们立刻就能认出并喜爱。
# 2.5D风格增加了深度和趣味性,使元素与主导场景的柔和混合水彩效果形成鲜明对比。
# 明亮柔和的灯光增强了整体的温暖和天真,非常适合儿童生日庆祝活动。
rank3, scores3 = image_score(model,
"Create a captivating children's picture book-style birthday greeting card with a 2.5D effect that features a multitude of brightly colored, cute cartoon jungle animals. This cheerful and festive card includes a playful monkey hanging from a vine, a giraffe with distinct brown spots, a smiling leopard with a friendly expression, a proud lion with a flowing mane, and a charming pink elephant. All animals are designed with round, adorable features and joyful faces.At the center is a beautifully crafted wooden signpost with the words 'HAPPY BIRTHDAY' emblazoned on it in bold, cheerful lettering. This sign is artfully surrounded by lush, green tropical foliage, giving the card a vibrant, lively feel. The background is a light beige, enhancing the warm, inviting color palette that evokes a sunny savanna landscape with gentle hills and sparse trees lining the horizon.In this vivid illustration, the playful animals are arranged in a dynamic, lively composition, each displaying unique, detailed characteristics that are instantly recognizable and endearing to children. The 2.5D style adds depth and interest, making the elements pop against the softly blended watercolor effect that dominates the scene. Bright, gentle lighting enhances the overall warmth and innocence, making it perfect for a children's birthday celebration.",
[
'https://domain/b726c7f33ebc46639c277806882608de.png',
'https://domain/06471ccc90aa474980bc596badc7d592.png'
])
print(f'排名:{rank3} ,评分:{scores3}')