humanpreference / README.md
hongweiyi's picture
Upload folder using huggingface_hub
89b5bcd verified

A newer version of the Gradio SDK is available: 6.12.0

Upgrade
metadata
title: humanpreference
app_file: vote_interface.py
sdk: gradio
sdk_version: 5.49.1

太好了,这一转向其实更聪明。Label Studio 的设计是为“团队标注+权限+版本管理”而生的,而你现在的任务只是图像对比偏好评估(A/B 投票)——这类场景用轻量、交互快的 Gradio 更合适。


🎯 一、对话总结(问题脉络)

  1. 你最初尝试用 Label Studio 做图像偏好投票(比较 base vs LoRA 图像对)。

  2. 你编写了自动生成 JSON 的 Python 脚本,为每个 prompt 生成左右图像组合(left_imageright_image)。

  3. 你尝试启用本地图片访问,通过环境变量

    LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
    LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=...
    

    来让 Label Studio 读取本地路径。

  4. 虽然环境变量设置成功,但 Django 后端仍无法读取(优先使用 .env),导致 /data/betamix1022/... 图片全部返回 404。

  5. 经过日志分析确定 Label Studio 并不适合快速单机偏好评估任务。

结论: → Label Studio 方案过重、易错,不适合单机图像偏好对比任务。 → 改用 Gradio WebUI 可以实现一键加载图片对、显示 prompt、支持左右选择与保存偏好结果。


🧩 二、明确任务目标

设计一个 人类偏好评估界面(Human Preference Voting Interface),核心需求如下:

1. 功能目标

  • 显示 prompt 与对应的两张图片(base vs LoRA)
  • 允许用户点击“左更好 / 右更好 / 难以区分”
  • 每次提交保存一条结果记录(JSON 或 CSV)
  • 可随机化左右顺序,防止偏置
  • 支持批量遍历任务列表

2. 数据输入格式(与现有 Label Studio JSON 保持兼容)

每条记录格式如下:

{
  "id": 1,
  "prompt_id": 3,
  "pair_index": 2,
  "prompt": "A beautiful sunset over the mountains.",
  "left_image": "betamix1022/base0/3.png",
  "right_image": "betamix1022/lora0/3.png",
  "model_left": "base",
  "model_right": "lora",
  "swap": false
}

你已有完整生成脚本,因此只需把 JSON 加载给 Gradio。

3. 输出格式

结果可保存为:

[
  {
    "id": 1,
    "prompt_id": 3,
    "left_model": "base",
    "right_model": "lora",
    "choice": "right",        # 或 "left" / "tie"
    "timestamp": "2025-10-28T22:45:00",
    "prompt": "A beautiful sunset over the mountains."
  },
  ...
]

4. 前端设计要点

  • 上方显示当前 prompt;
  • 中间显示左右图片;
  • 下方提供三个按钮: [← Left better] [→ Right better] [= Tie / Hard to tell]
  • 评完一对自动进入下一对;
  • 页脚显示当前进度(如 “12 / 200”)。

5. 技术实现建议

  • 使用 Gradio Blocks(更灵活布局);
  • 读取 JSON 列表,维护一个 state 变量跟踪进度;
  • 使用 gr.Image(label=None, show_label=False) 显示图片;
  • 保存结果到本地 results.json(或 CSV);
  • 可选:在任务结束时自动压缩结果文件或导出到某目录。

⚙️ 三、任务交付要求(交给“大神”)

任务标题:

用 Gradio 实现图像偏好评估界面(Base vs LoRA 对比)

任务内容:

  1. 编写 vote_interface.py

    • 输入参数:任务 JSON 文件路径(例如 tasks.json
    • 可选参数:输出文件路径(默认为 votes.json
  2. 界面要求:

    • 显示 prompt + 左右两图
    • 三个投票按钮 + 进度条
    • 自动跳转下一项
    • 支持随机化左右顺序(按 swap 字段)
    • 用户关闭界面时自动保存中间结果
  3. 结果文件追加保存,避免数据丢失

  4. 界面运行命令示例:

    python vote_interface.py --tasks ./tasks.json --out ./votes.json
    

    打开浏览器地址 http://localhost:7860

  5. 所有图片均从本地路径(如 betamix1022/base0/1.png)加载,无需 Label Studio 环境变量。


💡 四、未来扩展点(可选)

  • 加入 键盘快捷键:← → =
  • 加入 随机抽样 / prompt 搜索 / tag 过滤
  • 集成 统计模块:投票分布、模型胜率
  • 使用 SQLite + Gradio Dataframe 实时记录

📦 五、总结输出(交给大神的说明)

任务名称: Gradio 图像偏好评估工具 核心目标: 替代 Label Studio,实现可本地运行的快速人工偏好标注界面 输入: tasks.json(包含 prompt 与图片路径) 输出: votes.json(记录用户偏好) 需求:

  • prompt + 左右图显示
  • 三个按钮:左更好 / 右更好 / 难区分
  • 自动保存结果与进度
  • 支持随机化左右顺序
  • 前端基于 Gradio
  • 单命令启动,无需数据库

是否希望我接着帮你写出完整的 vote_interface.py 结构草稿(含 Gradio 界面框架与保存逻辑),方便交付?

🚀 Gradio 人类偏好评估工具使用说明

环境准备

  • Python 3.9 及以上版本。
  • 安装依赖:
    pip install -U gradio
    

本地启动

  • 在仓库根目录执行:
    python vote_interface.py --tasks ./tasks.json --image-root ./betamix1022 --out ./votes.json
    
    • --tasks:任务列表 JSON 文件。
    • --image-root:图片所在的根目录(若任务文件使用相对路径,需指定)。
    • --out:投票结果保存路径,默认 ./votes.json
  • 启动后浏览器访问 http://localhost:7860,即可开始标注。界面会展示 prompt、左右图片,以及“左更好 / 难以区分 / 右更好”三个按钮。每次点击都会实时写入结果,任务完成进度同步显示。

局域网或远程部署

  • 局域网共享(供同一网络中的其他设备访问):
    python vote_interface.py --tasks ./tasks.json --image-root ./betamix1022 --server-name 0.0.0.0 --server-port 7860
    
    然后在其他设备的浏览器访问 http://<服务器IP>:7860
  • 临时公网链接(Gradio 官方托管,注意数据隐私):
    python vote_interface.py --tasks ./tasks.json --image-root ./betamix1022 --share
    
    运行后终端会显示可分享的外网地址。

使用小贴士

  • votes.json 会保存已完成的任务记录,可随中断随继续。
  • 结果里会附带 swap 标记,方便后续统计模型胜率时还原原始左右顺序。
  • 若需进一步扩展(如键盘快捷键、筛选器、数据库存储),可在 vote_interface.py 中继续迭代。