Spaces:
Runtime error
A newer version of the Gradio SDK is available: 6.12.0
title: humanpreference
app_file: vote_interface.py
sdk: gradio
sdk_version: 5.49.1
太好了,这一转向其实更聪明。Label Studio 的设计是为“团队标注+权限+版本管理”而生的,而你现在的任务只是图像对比偏好评估(A/B 投票)——这类场景用轻量、交互快的 Gradio 更合适。
🎯 一、对话总结(问题脉络)
你最初尝试用 Label Studio 做图像偏好投票(比较 base vs LoRA 图像对)。
你编写了自动生成 JSON 的 Python 脚本,为每个 prompt 生成左右图像组合(
left_image、right_image)。你尝试启用本地图片访问,通过环境变量
LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=...来让 Label Studio 读取本地路径。
虽然环境变量设置成功,但 Django 后端仍无法读取(优先使用
.env),导致/data/betamix1022/...图片全部返回 404。经过日志分析确定 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 对比)
任务内容:
编写
vote_interface.py:- 输入参数:任务 JSON 文件路径(例如
tasks.json) - 可选参数:输出文件路径(默认为
votes.json)
- 输入参数:任务 JSON 文件路径(例如
界面要求:
- 显示 prompt + 左右两图
- 三个投票按钮 + 进度条
- 自动跳转下一项
- 支持随机化左右顺序(按
swap字段) - 用户关闭界面时自动保存中间结果
结果文件追加保存,避免数据丢失
界面运行命令示例:
python vote_interface.py --tasks ./tasks.json --out ./votes.json打开浏览器地址
http://localhost:7860。所有图片均从本地路径(如
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 7860http://<服务器IP>:7860。 - 临时公网链接(Gradio 官方托管,注意数据隐私):
运行后终端会显示可分享的外网地址。python vote_interface.py --tasks ./tasks.json --image-root ./betamix1022 --share
使用小贴士
votes.json会保存已完成的任务记录,可随中断随继续。- 结果里会附带
swap标记,方便后续统计模型胜率时还原原始左右顺序。 - 若需进一步扩展(如键盘快捷键、筛选器、数据库存储),可在
vote_interface.py中继续迭代。