Buckets:
twanghcmut/backup-foundation-physics / third_party /diffsynth /docs /en /Model_Details /Image-Quality-Metrics.md
| # Image Quality Evaluation Metrics | |
| DiffSynth-Studio provides a suite of image quality evaluation metrics and reward models in `diffsynth.metrics` to assess text alignment, aesthetic quality, human preference, and image distribution quality of generated images. Example code for these metrics can be found in [`examples/image_quality_metric/`](../../../examples/image_quality_metric/). | |
| ## Installation | |
| Before using this project for model inference and training, please install DiffSynth-Studio first. | |
| ```shell | |
| git clone https://github.com/modelscope/DiffSynth-Studio.git | |
| cd DiffSynth-Studio | |
| pip install -e . | |
| ``` | |
| For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). | |
| ## Quick Start | |
| Run the following code to quickly load PickScore and score an image against a prompt. The default models will be downloaded from ModelScope to `./models`. | |
| ```python | |
| from diffsynth.metrics import PickScoreMetric, ModelConfig | |
| from modelscope import dataset_snapshot_download | |
| from PIL import Image | |
| dataset_snapshot_download( | |
| "DiffSynth-Studio/diffsynth_example_dataset", | |
| allow_file_pattern="flux/FLUX.1-dev/*", | |
| local_dir="./data/diffsynth_example_dataset", | |
| ) | |
| image = Image.open("data/diffsynth_example_dataset/flux/FLUX.1-dev/1.jpg").convert("RGB") | |
| prompt = "a dog" | |
| metric = PickScoreMetric.from_pretrained( | |
| model_config=ModelConfig(model_id="DiffSynth-Studio/ImageMetrics", origin_file_pattern="PickScore/model.safetensors"), | |
| device="cuda" | |
| ) | |
| score = metric.compute(prompt, image)[0] | |
| print(f"PickScore score:: {score:.3f}") | |
| ``` | |
| ## Metrics Overview | |
| | Metric | Input | Output | Example Code | | |
| | --- | --- | --- | --- | | |
| | PickScore | prompt + PIL Image | Preference Score | [code](../../../examples/image_quality_metric/pickscore.py) | | |
| | ImageReward | prompt + PIL Image | Preference Score | [code](../../../examples/image_quality_metric/image_reward.py) | | |
| | HPSv2 | prompt + PIL Image | Preference Score | [code](../../../examples/image_quality_metric/hpsv2.py) | | |
| | HPSv3 | prompt + PIL Image | Preference Score | [code](../../../examples/image_quality_metric/hpsv3.py) | | |
| | CLIP Score | prompt + PIL Image | Text-Image Similarity | [code](../../../examples/image_quality_metric/clipscore.py) | | |
| | UnifiedReward 2.0 | prompt + PIL Image | multi-dimension scores | [code](../../../examples/image_quality_metric/unified_reward_2.py) | | |
| | Qwen-Image-Bench | prompt + PIL Image | Overall score and multi-level dimension scores | [code](../../../examples/image_quality_metric/qwen_image_bench.py) | | |
| | UnifiedReward Edit | editing instruction + source image + edited image | Image editing quality score | [code](../../../examples/image_quality_metric/unified_reward_edit.py) | | |
| | Aesthetic | PIL Image | Aesthetic Score | [code](../../../examples/image_quality_metric/aesthetic.py) | | |
| | FID | reference image directory + generated image directory | Distribution Distance | [code](../../../examples/image_quality_metric/fid.py) | | |
| ### Text-Image Alignment and Preference Evaluation | |
| Applicable metrics: **PickScore**, **ImageReward**, **HPSv2**, **HPSv3**, **CLIP Score**, **UnifiedReward 2.0**, **Qwen-Image-Bench** | |
| These models are used to evaluate whether an image follows the prompt and aligns with human visual preferences. They must receive both the `prompt` and the `image` simultaneously. | |
| **Basic Scoring** | |
| ```python | |
| score = metric.compute(prompt, image)[0] | |
| ``` | |
| **Batch Scoring** | |
| If you need to evaluate multiple images, you can directly pass a list: | |
| ```python | |
| scores = metric.compute("a cute cat", [image1, image2, image3]) | |
| scores = metric.compute(["a cat", "a dog"], [image_cat, image_dog]) | |
| ``` | |
| When prompt is a single string, the same prompt will be applied to every image. When prompt is a list of strings, the number of prompts must exactly match the number of images. | |
| ### Multi-Dimensional Image Quality Evaluation | |
| Applicable metrics: **UnifiedReward 2.0**, **Qwen-Image-Bench** | |
| These metrics also receive a `prompt` and an `image`, but in addition to the primary score, `evaluate()` returns more detailed evaluation dimensions. They are useful when you need to analyze text-image alignment, visual coherence, style, or multi-level quality dimensions. | |
| **Qwen-Image-Bench** | |
| ```python | |
| from diffsynth.metrics import ModelConfig, QwenImageBenchMetric | |
| metric = QwenImageBenchMetric.from_pretrained( | |
| model_config=ModelConfig( | |
| model_id="Qwen/Qwen-Image-Bench", | |
| origin_file_pattern="model-*.safetensors", | |
| ), | |
| processor_config=ModelConfig( | |
| model_id="Qwen/Qwen-Image-Bench", | |
| origin_file_pattern="", | |
| ), | |
| device="cuda", | |
| ) | |
| details = metric.evaluate(prompt, image)[0] | |
| score = details["total_score"] | |
| print(details["level1_scores"]) | |
| print(details["level2_scores"]) | |
| ``` | |
| If you only need the primary score, you can also call `metric.compute(prompt, image)`. | |
| ### Image Editing Quality Evaluation | |
| Applicable metric: **UnifiedReward Edit** | |
| UnifiedReward Edit evaluates whether an edited image follows the editing instruction and whether it is over-edited. The input usually includes an editing instruction, a source image, and edited image candidates. It supports three tasks: | |
| * `edit_pointwise_score`: scores a single edited result with `[source_image, edited_image]`. | |
| * `edit_pairwise_rank`: compares two edited results and returns the winner with `[source_image, edited_image_1, edited_image_2]`. | |
| * `edit_pairwise_score`: returns separate scores for two edited results with `[source_image, edited_image_1, edited_image_2]`. | |
| ```python | |
| from diffsynth.metrics import ModelConfig, UnifiedRewardEditMetric | |
| metric = UnifiedRewardEditMetric.from_pretrained( | |
| model_config=ModelConfig( | |
| model_id="DiffSynth-Studio/ImageMetrics", | |
| origin_file_pattern="UnifiedReward-Edit-qwen3vl-8b/model-*.safetensors", | |
| ), | |
| processor_config=ModelConfig( | |
| model_id="DiffSynth-Studio/ImageMetrics", | |
| origin_file_pattern="UnifiedReward-Edit-qwen3vl-8b/", | |
| ), | |
| device="cuda", | |
| ) | |
| details = metric.evaluate( | |
| instruction, | |
| [source_image, edited_image], | |
| task="edit_pointwise_score", | |
| )[0] | |
| print(details["score"], details["editing_success"], details["overediting"]) | |
| ``` | |
| ### Pure Image Aesthetics Evaluation | |
| Applicable metric: **Aesthetic** | |
| This model solely evaluates aesthetic features such as the composition, color, and clarity of the image itself. It does not require a prompt. | |
| ```python | |
| from diffsynth.metrics import AestheticMetric | |
| metric = AestheticMetric.from_pretrained(device="cuda") | |
| score = metric.compute(image)[0] | |
| ``` | |
| ### Dataset Distribution Evaluation | |
| Applicable metric: **FID** (Fréchet Inception Distance) | |
| FID does not score individual images; instead, it compares the overall feature distribution distance between a real reference image set and a generated image set. A lower score indicates that the generated distribution is closer to the real distribution. | |
| ```python | |
| from diffsynth.metrics import FIDMetric | |
| reference_dir = "path/to/real_reference_images" | |
| generated_dir = "path/to/model_generated_images" | |
| metric = FIDMetric.from_pretrained(device="cuda", batch_size=16) | |
| fid_score = metric.compute(reference_dir, generated_dir) | |
| print(f"FID: {fid_score:.3f}") | |
| ``` | |
| The baseline for FID is not fixed or unique. For general image generation, COCO Validation is commonly used; for specific domains (such as medical images or e-commerce products), a `reference_dir` composed of real data from that specific domain should be provided. | |
| ## Important Notes | |
| * The scores from PickScore, ImageReward, HPSv2, HPSv3, CLIPScore, UnifiedReward 2.0, Qwen-Image-Bench, UnifiedReward Edit, and Aesthetic are suitable for relative comparison within the same metric. It is not recommended to directly compare the numerical values across different metrics. | |
| * HPSv3, UnifiedReward 2.0, UnifiedReward Edit, and Qwen-Image-Bench are based on multimodal large models, requiring significantly more VRAM than CLIP-based metrics. | |
| * FID is sensitive to the choice of reference, the reference sample size, and the generated sample size. | |
Xet Storage Details
- Size:
- 8.08 kB
- Xet hash:
- f345eb32edfab1cc298daaeff38bd683414ae28509e52503ce4a83cd66cc1ebb
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.