Views
No views yet
pip install torch transformers pillow numpy open-clip-torch1# import
2import torch
3from transformers import CLIPModel, CLIPProcessor
4from PIL import Image
5import torch.nn as nn
6
7class MLP(nn.Module):
8 def __init__(self):
9 super().__init__()
10 self.layers = nn.Sequential(
11 nn.Linear(1024, 1024), nn.Dropout(0.2),
12 nn.Linear(1024, 128), nn.Dropout(0.2),
13 nn.Linear(128, 64), nn.Dropout(0.1),
14 nn.Linear(64, 16), nn.Linear(16, 1)
15 )
16 def forward(self, x):
17 return self.layers(x)
18
19# load model
20device = "cuda"
21processor_name_or_path = "laion/CLIP-ViT-H-14-laion2B-s32B-b79K"
22model_pretrained_name_or_path = "8y/HP"
23
24processor = CLIPProcessor.from_pretrained(processor_name_or_path)
25backbone = CLIPModel.from_pretrained(model_pretrained_name_or_path, subfolder="hp_backbone").eval().to(device)
26scorer = MLP()
27scorer.load_state_dict(torch.load(f"{model_pretrained_name_or_path}/hp_scorer/mlp_pytorch_model.bin"))
28scorer = scorer.eval().to(device)
29
30def calc_hp_scores(images):
31 # preprocess
32 image_inputs = processor(
33 images=images,
34 return_tensors="pt"
35 ).to(device)
36
37 with torch.no_grad():
38 # extract features
39 image_features = backbone.get_image_features(**image_inputs)
40
41 # calculate hp scores
42 hp_scores = torch.sigmoid(scorer(image_features))
43
44 return hp_scores.cpu().squeeze().tolist()
45
46pil_images = [Image.open("image1.jpg"), Image.open("image2.jpg")]
47scores = calc_hp_scores(pil_images)
48print(f"HP Scores: {scores}")1@misc{ba2025enhancingrewardmodelshighquality,
2 title={Enhancing Reward Models for High-quality Image Generation: Beyond Text-Image Alignment},
3 author={Ying Ba and Tianyu Zhang and Yalong Bai and Wenyi Mo and Tao Liang and Bing Su and Ji-Rong Wen},
4 year={2025},
5 eprint={2507.19002},
6 archivePrefix={arXiv},
7 primaryClass={cs.CV},
8 url={https://arxiv.org/abs/2507.19002},
9}