ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何用目标检测自动评估文生图扩散模型输出与提示词的匹配程度

如何用目标检测自动评估文生图扩散模型输出与提示词的匹配程度 如何用目标检测自动评估文生图扩散模型输出与提示词的匹配程度【免费下载链接】supervisionWe write your reusable computer vision tools. 项目地址: https://gitcode.com/GitHub_Trending/su/supervision评估文生图text-to-image扩散模型时一个常见需求是检查生成图像与提示词的匹配程度提示词里要求了哪些对象、对象是什么颜色生成结果是否真的满足。人工逐张看图效率很低supervision 仓库中提供了一个可运行的 cookbookevaluating-alignment-of-text-to-image-diffusion-models.ipynb用 SDXL 生成图像再用零样本目标检测模型 YOLO-World 自动找出图中对象最后通过集合比较判断提示词要求的所有对象是否都出现在画面中。本文按该 cookbook 的完整流程演示这条评估路径最终得到两个结果一张带检测框和标签的可视化图以及一个True/False的自动判定。整个流程依赖 GPU 环境运行扩散模型以下命令和代码均可在 Notebook 中直接执行。准备条件确认 GPU 可用生成图像和推理都需要 GPU。先在 Notebook 中执行nvidia-smi确认nvidia-smi文档示例输出中显示的是一块 Tesla T415360MiB 显存、Driver Version 535.104.05、CUDA Version 12.2这只是文档示例具体硬件取决于你的运行环境。如果在 Colab 中执行后没有列出 GPU按 cookbook 说明操作进入Edit-Notebook settings-Hardware accelerator将加速器设为GPU点击Save。安装依赖该 cookbook 用到的 Python 包diffusers图像生成管线、inference运行目标检测、supervision检测结果的转换与可视化以及torch等运行依赖。安装命令注意其中包含一个从 GitHub 源码安装的依赖安装时会联网克隆对应仓库代码pip install -q torch diffusers accelerate inference-gpu[yolo-world] dill githttps://github.com/openai/CLIP.git supervision导入所需模块import itertools import cv2 from diffusers import StableDiffusionXLPipeline import numpy as np from PIL import Image import supervision as sv import torch from inference.models import YOLOWorld用 SDXL 生成待评估图像先加载 SDXL 管线。以下代码使用stabilityai/stable-diffusion-xl-base-1.0模型以float16精度加载到 CUDA 设备pipeline StableDiffusionXLPipeline.from_pretrained( stabilityai/stable-diffusion-xl-base-1.0, torch_dtypetorch.float16, variantfp16, use_safetensorsTrue, ).to(cuda)提示词要包含明确可检测的对象及其物理属性颜色、状态否则后续检测无从核对。cookbook 使用的示例提示词是一只黑猫在一个停放的白车旁边玩一个蓝球固定随机种子SEED 9213799保证结果可复现PROMPT a black cat playing with a blue ball next to a parked white car, wide angle, photorealistic NEGATIVE_PROMPT low quality, blurred, text, illustration WIDTH, HEIGHT 1024, 768 SEED 9213799 image pipeline( promptPROMPT, negative_promptNEGATIVE_PROMPT, generatortorch.manual_seed(SEED), widthWIDTH, heightHEIGHT, ).images[0]执行后image是PIL.Image对象文档示例尺寸为 1024x768。换自己的提示词时PROMPT、SEED等值按需替换即可。用 YOLO-World 检测图中对象YOLO-World 支持自定义标签集这里把一组颜色和一组对象做笛卡尔积生成颜色 对象形式的标签如black cat、blue ballCOLORS [green, yellow, black, blue, red, white, orange] OBJECTS [car, cat, ball, dog, tree, house, person] CLASSES [f{color} {obj} for color, obj in itertools.product(COLORS, OBJECTS)] print(Number of labels:, len(CLASSES))7 种颜色 × 7 种对象得到 49 个标签文档示例输出Number of labels: 49。把标签集喂给模型并执行推理model YOLOWorld(model_idyolo_world/l) model.set_classes(CLASSES) results model.infer(image)标签列表的选取原则覆盖你提示词中可能出现的颜色和对象类型。上面两组列表是 cookbook 的默认示例实际评估时应根据提示词集合调整确保提示词要求的所有颜色 对象组合都在CLASSES中否则检测器找不到对应类别。转换为 sv.Detections 并过滤弱检测把推理结果转成 supervision 的sv.Detections格式才能使用过滤、标注等能力detections sv.Detections.from_inference(results)自动评估只关心置信度足够高的检测cookbook 过滤掉低于 0.6 的检测结果valid_detections detections[detections.confidence 0.6]可以打印检测到的标签和分数确认情况。文档示例输出为[blue ball 0.95, black cat 0.72, white car 0.68]这只是文档示例你的提示词和种子不同实际标签与分数会不同labels [ f{CLASSES[class_id]} {confidence:0.2f} for class_id, confidence in zip(valid_detections.class_id, valid_detections.confidence) ] labels可视化检测结果sv.BoundingBoxAnnotator和sv.LabelAnnotator组合可以画出检测框与标签文本。annotator 接受 BGR 的np.ndarray或PIL.Image.Image两种输入这里直接传入上一步得到的PIL图像bounding_box_annotator sv.BoundingBoxAnnotator(thickness2) label_annotator sv.LabelAnnotator(text_thickness1, text_scale0.5, text_colorsv.Color.BLACK) annotated_image bounding_box_annotator.annotate(image, valid_detections) annotated_image label_annotator.annotate(annotated_image, valid_detections, labels) sv.plot_image(annotated_image, (12, 12))在 Notebook 中执行后会渲染出带框线和标签 分数文本的标注图可直观核对检测框是否落在提示词描述的物体上。自动判定提示词要求是否全部满足cookbook 的核心判定逻辑是把提示词要求的颜色 对象写成集合GROUND_TRUTH把本次检测到的类别映射回CLASSES中的标签名写成集合prediction用issubset判断预测集是否完全落在要求集内GROUND_TRUTH {black cat, blue ball, white car} prediction {CLASSES[class_id] for class_id in valid_detections.class_id} prediction.issubset(GROUND_TRUTH)文档示例中该表达式返回True即 0.6 置信度以上的三个检测蓝球、黑猫、白车恰好就是提示词要求的全部对象。换用其他提示词时你需要把GROUND_TRUTH同步改成该提示词对应的对象集合返回False说明高置信度检测里没有完整覆盖要求集或缺了某个对象此时可结合上一步的可视化图和分数列表定位缺失项。需要注意判定的边界issubset只检查检测到的类别是否都在要求集内配合 0.6 的置信度阈值它反映的是强检测是否命中了提示词要求的对象类别不检查每个对象的数量是否正确。限制与下一步这套流程验证的是单张图像的评估管线生成一张图、检测、过滤、可视化、集合判定每个环节都有可核对的输出nvidia-smi确认 GPU、Number of labels确认标签集、检测分数列表确认检测质量、True/False确认整体匹配。cookbook 给出的下一步是把这条管线跑在一组预定义场景提示词上并统计指标即从单图判定扩展到批量评估。参考文件docs/notebooks/evaluating-alignment-of-text-to-image-diffusion-models.ipynb本文全部代码的完整可运行版本docs/detection/core.mdsv.Detections的字段、过滤与转换接口说明docs/detection/annotators.mdBoundingBoxAnnotator、LabelAnnotator参数说明【免费下载链接】supervisionWe write your reusable computer vision tools. 项目地址: https://gitcode.com/GitHub_Trending/su/supervision创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表