docs: swap步数+重绘分辨率对比报告(热数据)
4图×2发型×(3步数档+3分辨率档) 热数据对比,48/48成功,0 OOM,峰值20.6GB。 - benchmark_steps_res.py: 测试脚本(预热+正式取热数据) - benchmark_steps_res_report.py: 报告生成 - static/bench2_report.html: 对比报告 - static/bench2/: 48张结果图 结论: B维度 steps10→20 swap 3.0s→3.9s; C维度 res640比896省3s(comfy 4.3s vs 7.3s)
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""swap步数 + 重绘分辨率 对比测试(热数据)。
|
||||
|
||||
每个组合: 预热1次(丢弃) + 正式测1次(取热数据)。
|
||||
B维度: steps=10/15/20 (分辨率固定896)
|
||||
C维度: 分辨率=640/896/1024 (steps固定15)
|
||||
4图×2发型=8组 × 6档 × 2次(预热+正式) = 96次
|
||||
"""
|
||||
import base64
|
||||
import json
|
||||
import os
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
|
||||
API = "http://127.0.0.1:8187/api/v1/debug/grow-timing"
|
||||
TOKEN = "dev-shared-secret-2026"
|
||||
OUT = Path("/home/ubuntu/hair/benchmark_out/bench2")
|
||||
OUT.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
IMGS = [
|
||||
("asdf", "/home/ubuntu/hair/image/asdf.jpg"),
|
||||
("qwer", "/home/ubuntu/hair/image/qwer.jpg"),
|
||||
("girl2", "/home/ubuntu/hair/image/girl_img/girl2.jpg"),
|
||||
("girl5", "/home/ubuntu/hair/image/girl_img/girl5.jpg"),
|
||||
]
|
||||
HAIRSTYLES = [(5, "wave", "波浪"), (3, "heart", "心形")]
|
||||
|
||||
# B维度: swap步数对比 (分辨率固定896)
|
||||
B_STEPS = [10, 15, 20]
|
||||
# C维度: 重绘分辨率对比 (steps固定15)
|
||||
C_RES = [640, 896, 1024]
|
||||
|
||||
|
||||
def call(img_path, hair_num, webui_steps=None, redraw_max_side=None, save_grown=None):
|
||||
"""调调试接口。返回 dict。save_grown 非None时把结果图存到该路径。"""
|
||||
data = {"hair_style": str(hair_num)}
|
||||
if webui_steps is not None:
|
||||
data["webui_steps"] = str(webui_steps)
|
||||
if redraw_max_side is not None:
|
||||
data["redraw_max_side"] = str(redraw_max_side)
|
||||
t0 = time.perf_counter()
|
||||
try:
|
||||
with open(img_path, "rb") as f:
|
||||
r = requests.post(API, headers={"X-Internal-Token": TOKEN},
|
||||
files={"image_file": (os.path.basename(img_path), f, "image/jpeg")},
|
||||
data=data, timeout=300)
|
||||
wall = time.perf_counter() - t0
|
||||
j = r.json()
|
||||
if j.get("code") != 0:
|
||||
return {"ok": False, "error": j.get("message", "")[:100], "wall": wall}
|
||||
d = j["data"]
|
||||
hs = d["per_hairstyle"][0]
|
||||
if save_grown and hs.get("grown_b64"):
|
||||
b = hs["grown_b64"].split(",")[1] if "," in hs["grown_b64"] else hs["grown_b64"]
|
||||
with open(save_grown, "wb") as gf:
|
||||
gf.write(base64.b64decode(b))
|
||||
return {
|
||||
"ok": hs.get("ok", False), "wall": wall,
|
||||
"total_ms": d["total_ms"], "ctx_ms": d["extract_context_ms"],
|
||||
"mask_ms": hs.get("mask_ms"), "swap_ms": hs.get("swap_ms"),
|
||||
"blend_ms": hs.get("blend_ms"), "comfy_ms": hs.get("comfyui_redraw_ms"),
|
||||
"error": hs.get("error"),
|
||||
}
|
||||
except Exception as e:
|
||||
return {"ok": False, "error": str(e)[:100], "wall": time.perf_counter() - t0}
|
||||
|
||||
|
||||
def main():
|
||||
results = {"B_steps": [], "C_res": []}
|
||||
total_calls = len(IMGS) * len(HAIRSTYLES) * (len(B_STEPS) + len(C_RES)) * 2
|
||||
idx = 0
|
||||
|
||||
# ===== B维度: swap步数对比 (分辨率固定896) =====
|
||||
print("\n===== B维度: swap步数对比 (分辨率=896) =====", flush=True)
|
||||
for steps in B_STEPS:
|
||||
print(f"\n--- steps={steps} ---", flush=True)
|
||||
for ilabel, ipath in IMGS:
|
||||
for hnum, hkey, hname in HAIRSTYLES:
|
||||
# 预热(丢弃)
|
||||
idx += 1
|
||||
print(f"[{idx}/{total_calls}] 预热 {ilabel}|{hname}|steps={steps}", flush=True)
|
||||
call(ipath, hnum, webui_steps=steps, redraw_max_side=896)
|
||||
# 正式(热数据)
|
||||
idx += 1
|
||||
save = OUT / f"B_steps{steps}_{ilabel}_{hkey}.jpg"
|
||||
print(f"[{idx}/{total_calls}] 正式 {ilabel}|{hname}|steps={steps}", flush=True)
|
||||
r = call(ipath, hnum, webui_steps=steps, redraw_max_side=896, save_grown=save)
|
||||
r["steps"] = steps; r["img"] = ilabel; r["hair"] = hkey; r["hair_name"] = hname
|
||||
r["grown_path"] = str(save) if r.get("ok") else None
|
||||
print(f" -> total={r.get('total_ms')}ms swap={r.get('swap_ms')}ms comfy={r.get('comfy_ms')}ms ok={r.get('ok')}", flush=True)
|
||||
results["B_steps"].append(r)
|
||||
|
||||
# ===== C维度: 重绘分辨率对比 (steps固定15) =====
|
||||
print("\n===== C维度: 重绘分辨率对比 (steps=15) =====", flush=True)
|
||||
for res in C_RES:
|
||||
print(f"\n--- res={res} ---", flush=True)
|
||||
for ilabel, ipath in IMGS:
|
||||
for hnum, hkey, hname in HAIRSTYLES:
|
||||
idx += 1
|
||||
print(f"[{idx}/{total_calls}] 预热 {ilabel}|{hname}|res={res}", flush=True)
|
||||
call(ipath, hnum, webui_steps=15, redraw_max_side=res)
|
||||
idx += 1
|
||||
save = OUT / f"C_res{res}_{ilabel}_{hkey}.jpg"
|
||||
print(f"[{idx}/{total_calls}] 正式 {ilabel}|{hname}|res={res}", flush=True)
|
||||
r = call(ipath, hnum, webui_steps=15, redraw_max_side=res, save_grown=save)
|
||||
r["res"] = res; r["img"] = ilabel; r["hair"] = hkey; r["hair_name"] = hname
|
||||
r["grown_path"] = str(save) if r.get("ok") else None
|
||||
print(f" -> total={r.get('total_ms')}ms swap={r.get('swap_ms')}ms comfy={r.get('comfy_ms')}ms ok={r.get('ok')}", flush=True)
|
||||
results["C_res"].append(r)
|
||||
|
||||
with open(OUT / "results.json", "w", encoding="utf-8") as f:
|
||||
json.dump(results, f, ensure_ascii=False, indent=2)
|
||||
ok = sum(1 for r in results["B_steps"] + results["C_res"] if r.get("ok"))
|
||||
print(f"\n✓ 完成: {ok}/{len(results['B_steps'])+len(results['C_res'])} 成功 -> {OUT/'results.json'}", flush=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,157 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""生成 swap步数 + 重绘分辨率 对比报告 HTML。"""
|
||||
import json
|
||||
import os
|
||||
from collections import defaultdict
|
||||
from pathlib import Path
|
||||
|
||||
OUT = Path("/home/ubuntu/hair/benchmark_out/bench2")
|
||||
RESULTS = OUT / "results.json"
|
||||
HTML = OUT / "report.html"
|
||||
|
||||
|
||||
def img_src(path):
|
||||
if not path or not os.path.isfile(path):
|
||||
return None
|
||||
# benchmark_out/bench2/xxx.jpg -> bench2/xxx.jpg (报告在 static/ 下部署时调整)
|
||||
p = str(path)
|
||||
return "bench2/" + os.path.basename(p)
|
||||
|
||||
|
||||
def main():
|
||||
d = json.load(open(RESULTS, encoding="utf-8"))
|
||||
b_data = d["B_steps"] # steps 对比
|
||||
c_data = d["C_res"] # 分辨率对比
|
||||
|
||||
# B维度聚合
|
||||
by_steps = defaultdict(list)
|
||||
for r in b_data:
|
||||
by_steps[r["steps"]].append(r)
|
||||
b_summary = []
|
||||
for s in sorted(by_steps):
|
||||
rs = by_steps[s]
|
||||
b_summary.append({
|
||||
"label": f"steps={s}", "n": len(rs),
|
||||
"swap": sum(r["swap_ms"] for r in rs) // len(rs),
|
||||
"total": sum(r["total_ms"] for r in rs) // len(rs),
|
||||
})
|
||||
|
||||
# C维度聚合
|
||||
by_res = defaultdict(list)
|
||||
for r in c_data:
|
||||
by_res[r["res"]].append(r)
|
||||
c_summary = []
|
||||
for res in sorted(by_res):
|
||||
rs = by_res[res]
|
||||
c_summary.append({
|
||||
"label": f"res={res}", "n": len(rs),
|
||||
"comfy": sum(r["comfy_ms"] for r in rs) // len(rs),
|
||||
"total": sum(r["total_ms"] for r in rs) // len(rs),
|
||||
})
|
||||
|
||||
# B维度明细行(每图每发型每步数)
|
||||
b_rows = []
|
||||
for r in sorted(b_data, key=lambda x: (x["img"], x["hair"], x["steps"])):
|
||||
src = img_src(r.get("grown_path"))
|
||||
b_rows.append(f"""<tr>
|
||||
<td>{r['img']}</td><td>{r['hair_name']}</td><td>{r['steps']}</td>
|
||||
<td>{r.get('swap_ms','?')}</td><td>{r.get('comfy_ms','?')}</td><td>{r.get('total_ms','?')}</td>
|
||||
<td>{f'<img src="{src}" loading="lazy">' if src else '⚠'}</td></tr>""")
|
||||
|
||||
# C维度明细行
|
||||
c_rows = []
|
||||
for r in sorted(c_data, key=lambda x: (x["img"], x["hair"], x["res"])):
|
||||
src = img_src(r.get("grown_path"))
|
||||
c_rows.append(f"""<tr>
|
||||
<td>{r['img']}</td><td>{r['hair_name']}</td><td>{r['res']}</td>
|
||||
<td>{r.get('swap_ms','?')}</td><td>{r.get('comfy_ms','?')}</td><td>{r.get('total_ms','?')}</td>
|
||||
<td>{f'<img src="{src}" loading="lazy">' if src else '⚠'}</td></tr>""")
|
||||
|
||||
def bar_row(label, val, max_val, color, unit="ms"):
|
||||
pct = max(1, val / max_val * 100) if max_val else 0
|
||||
return f'<div class="step-row"><div class="step-name">{label}</div>' \
|
||||
f'<div class="step-bar-wrap"><div class="step-bar {color}" style="width:{pct}%">{val}{unit}</div></div>' \
|
||||
f'<div class="step-time">{val}{unit}</div></div>'
|
||||
|
||||
# B维度汇总条形图
|
||||
b_max_swap = max(s["swap"] for s in b_summary)
|
||||
b_bars = "".join(bar_row(s["label"], s["swap"], b_max_swap, "c-swap") for s in b_summary)
|
||||
b_max_total = max(s["total"] for s in b_summary)
|
||||
b_total_bars = "".join(bar_row(s["label"], s["total"], b_max_total, "c-total") for s in b_summary)
|
||||
|
||||
# C维度汇总条形图
|
||||
c_max_comfy = max(s["comfy"] for s in c_summary)
|
||||
c_bars = "".join(bar_row(s["label"], s["comfy"], c_max_comfy, "c-comfy") for s in c_summary)
|
||||
c_max_total = max(s["total"] for s in c_summary)
|
||||
c_total_bars = "".join(bar_row(s["label"], s["total"], c_max_total, "c-total") for s in c_summary)
|
||||
|
||||
html = f"""<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>swap步数 + 重绘分辨率 对比报告</title>
|
||||
<style>
|
||||
* {{ box-sizing: border-box; margin: 0; padding: 0; }}
|
||||
body {{ font-family: -apple-system, "Segoe UI", sans-serif; background: #f5f5f5; padding: 16px; color: #333; }}
|
||||
h1 {{ font-size: 20px; margin-bottom: 4px; }}
|
||||
h2 {{ font-size: 16px; margin: 20px 0 10px; }}
|
||||
.subtitle {{ color: #888; font-size: 12px; margin-bottom: 14px; }}
|
||||
.card {{ background: #fff; border-radius: 10px; box-shadow: 0 1px 4px rgba(0,0,0,.06); margin-bottom: 16px; overflow: hidden; }}
|
||||
.card-header {{ font-weight: 700; font-size: 14px; padding: 12px 18px; border-bottom: 1px solid #f0f0f0; background: #fafafa; }}
|
||||
.card-body {{ padding: 18px; }}
|
||||
.summary-grid {{ display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }}
|
||||
.step-row {{ display: flex; align-items: center; gap: 10px; margin-bottom: 8px; font-size: 13px; }}
|
||||
.step-name {{ width: 100px; flex-shrink: 0; font-weight: 600; }}
|
||||
.step-bar-wrap {{ flex: 1; background: #f3f4f6; border-radius: 4px; height: 24px; min-width: 200px; }}
|
||||
.step-bar {{ height: 100%; border-radius: 4px; display: flex; align-items: center; padding-left: 8px; color: #fff; font-size: 11px; font-weight: 600; min-width: 2px; }}
|
||||
.step-time {{ width: 70px; text-align: right; font-weight: 600; flex-shrink: 0; font-variant-numeric: tabular-nums; }}
|
||||
.c-swap {{ background: #f59e0b; }} .c-comfy {{ background: #ef4444; }} .c-total {{ background: #2563eb; }}
|
||||
table {{ border-collapse: collapse; width: 100%; font-size: 12px; }}
|
||||
th, td {{ border: 1px solid #eee; padding: 5px 8px; text-align: center; }}
|
||||
th {{ background: #f9fafb; font-weight: 600; position: sticky; top: 0; }}
|
||||
td img {{ max-height: 100px; max-width: 80px; border-radius: 4px; }}
|
||||
.scroll {{ max-height: 400px; overflow: auto; }}
|
||||
.note {{ background: #fef3c7; border-radius: 8px; padding: 10px 14px; font-size: 12px; color: #92400e; margin-top: 10px; }}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>📊 swap步数 + 重绘分辨率 对比报告</h1>
|
||||
<p class="subtitle">4图(asdf/qwer/girl2/girl5) × 2发型(波浪/心形) · 热数据(预热后取第2次) · 48/48成功 · 峰值20.6GB · 0 OOM</p>
|
||||
|
||||
<div class="note">💡 结论速览: B维度 steps 10→20 swap从3.0s→3.9s(每步省~90ms);C维度 res 640比896省3s(comfy 4.3s vs 7.3s),1024与896接近。</div>
|
||||
|
||||
<h2>B维度:swap步数对比(分辨率固定896)</h2>
|
||||
<div class="summary-grid">
|
||||
<div class="card"><div class="card-header">swap 耗时(越低越快)</div><div class="card-body">{b_bars}</div></div>
|
||||
<div class="card"><div class="card-header">总耗时(越低越快)</div><div class="card-body">{b_total_bars}</div></div>
|
||||
</div>
|
||||
|
||||
<h2>C维度:重绘分辨率对比(steps固定15)</h2>
|
||||
<div class="summary-grid">
|
||||
<div class="card"><div class="card-header">ComfyUI重绘 耗时(越低越快)</div><div class="card-body">{c_bars}</div></div>
|
||||
<div class="card"><div class="card-header">总耗时(越低越快)</div><div class="card-body">{c_total_bars}</div></div>
|
||||
</div>
|
||||
|
||||
<h2>B维度明细(每图每发型每步数)</h2>
|
||||
<div class="card"><div class="scroll"><table>
|
||||
<tr><th>图片</th><th>发型</th><th>steps</th><th>swap(ms)</th><th>comfy(ms)</th><th>总(ms)</th><th>结果</th></tr>
|
||||
{"".join(b_rows)}
|
||||
</table></div></div>
|
||||
|
||||
<h2>C维度明细(每图每发型每分辨率)</h2>
|
||||
<div class="card"><div class="scroll"><table>
|
||||
<tr><th>图片</th><th>发型</th><th>res</th><th>swap(ms)</th><th>comfy(ms)</th><th>总(ms)</th><th>结果</th></tr>
|
||||
{"".join(c_rows)}
|
||||
</table></div></div>
|
||||
</body>
|
||||
</html>"""
|
||||
|
||||
with open(HTML, "w", encoding="utf-8") as f:
|
||||
f.write(html)
|
||||
print(f"✓ 报告: {HTML} ({HTML.stat().st_size // 1024} KB)")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 168 KiB |
|
After Width: | Height: | Size: 172 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 112 KiB |
@@ -0,0 +1,205 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>swap步数 + 重绘分辨率 对比报告</title>
|
||||
<style>
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body { font-family: -apple-system, "Segoe UI", sans-serif; background: #f5f5f5; padding: 16px; color: #333; }
|
||||
h1 { font-size: 20px; margin-bottom: 4px; }
|
||||
h2 { font-size: 16px; margin: 20px 0 10px; }
|
||||
.subtitle { color: #888; font-size: 12px; margin-bottom: 14px; }
|
||||
.card { background: #fff; border-radius: 10px; box-shadow: 0 1px 4px rgba(0,0,0,.06); margin-bottom: 16px; overflow: hidden; }
|
||||
.card-header { font-weight: 700; font-size: 14px; padding: 12px 18px; border-bottom: 1px solid #f0f0f0; background: #fafafa; }
|
||||
.card-body { padding: 18px; }
|
||||
.summary-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
|
||||
.step-row { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; font-size: 13px; }
|
||||
.step-name { width: 100px; flex-shrink: 0; font-weight: 600; }
|
||||
.step-bar-wrap { flex: 1; background: #f3f4f6; border-radius: 4px; height: 24px; min-width: 200px; }
|
||||
.step-bar { height: 100%; border-radius: 4px; display: flex; align-items: center; padding-left: 8px; color: #fff; font-size: 11px; font-weight: 600; min-width: 2px; }
|
||||
.step-time { width: 70px; text-align: right; font-weight: 600; flex-shrink: 0; font-variant-numeric: tabular-nums; }
|
||||
.c-swap { background: #f59e0b; } .c-comfy { background: #ef4444; } .c-total { background: #2563eb; }
|
||||
table { border-collapse: collapse; width: 100%; font-size: 12px; }
|
||||
th, td { border: 1px solid #eee; padding: 5px 8px; text-align: center; }
|
||||
th { background: #f9fafb; font-weight: 600; position: sticky; top: 0; }
|
||||
td img { max-height: 100px; max-width: 80px; border-radius: 4px; }
|
||||
.scroll { max-height: 400px; overflow: auto; }
|
||||
.note { background: #fef3c7; border-radius: 8px; padding: 10px 14px; font-size: 12px; color: #92400e; margin-top: 10px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>📊 swap步数 + 重绘分辨率 对比报告</h1>
|
||||
<p class="subtitle">4图(asdf/qwer/girl2/girl5) × 2发型(波浪/心形) · 热数据(预热后取第2次) · 48/48成功 · 峰值20.6GB · 0 OOM</p>
|
||||
|
||||
<div class="note">💡 结论速览: B维度 steps 10→20 swap从3.0s→3.9s(每步省~90ms);C维度 res 640比896省3s(comfy 4.3s vs 7.3s),1024与896接近。</div>
|
||||
|
||||
<h2>B维度:swap步数对比(分辨率固定896)</h2>
|
||||
<div class="summary-grid">
|
||||
<div class="card"><div class="card-header">swap 耗时(越低越快)</div><div class="card-body"><div class="step-row"><div class="step-name">steps=10</div><div class="step-bar-wrap"><div class="step-bar c-swap" style="width:76.94087403598971%">2993ms</div></div><div class="step-time">2993ms</div></div><div class="step-row"><div class="step-name">steps=15</div><div class="step-bar-wrap"><div class="step-bar c-swap" style="width:88.63753213367609%">3448ms</div></div><div class="step-time">3448ms</div></div><div class="step-row"><div class="step-name">steps=20</div><div class="step-bar-wrap"><div class="step-bar c-swap" style="width:100.0%">3890ms</div></div><div class="step-time">3890ms</div></div></div></div>
|
||||
<div class="card"><div class="card-header">总耗时(越低越快)</div><div class="card-body"><div class="step-row"><div class="step-name">steps=10</div><div class="step-bar-wrap"><div class="step-bar c-total" style="width:90.79392624728851%">10464ms</div></div><div class="step-time">10464ms</div></div><div class="step-row"><div class="step-name">steps=15</div><div class="step-bar-wrap"><div class="step-bar c-total" style="width:96.13882863340564%">11080ms</div></div><div class="step-time">11080ms</div></div><div class="step-row"><div class="step-name">steps=20</div><div class="step-bar-wrap"><div class="step-bar c-total" style="width:100.0%">11525ms</div></div><div class="step-time">11525ms</div></div></div></div>
|
||||
</div>
|
||||
|
||||
<h2>C维度:重绘分辨率对比(steps固定15)</h2>
|
||||
<div class="summary-grid">
|
||||
<div class="card"><div class="card-header">ComfyUI重绘 耗时(越低越快)</div><div class="card-body"><div class="step-row"><div class="step-name">res=640</div><div class="step-bar-wrap"><div class="step-bar c-comfy" style="width:57.23118279569892%">4258ms</div></div><div class="step-time">4258ms</div></div><div class="step-row"><div class="step-name">res=896</div><div class="step-bar-wrap"><div class="step-bar c-comfy" style="width:97.72849462365592%">7271ms</div></div><div class="step-time">7271ms</div></div><div class="step-row"><div class="step-name">res=1024</div><div class="step-bar-wrap"><div class="step-bar c-comfy" style="width:100.0%">7440ms</div></div><div class="step-time">7440ms</div></div></div></div>
|
||||
<div class="card"><div class="card-header">总耗时(越低越快)</div><div class="card-body"><div class="step-row"><div class="step-name">res=640</div><div class="step-bar-wrap"><div class="step-bar c-total" style="width:68.26090758065926%">7807ms</div></div><div class="step-time">7807ms</div></div><div class="step-row"><div class="step-name">res=896</div><div class="step-bar-wrap"><div class="step-bar c-total" style="width:96.72116813849786%">11062ms</div></div><div class="step-time">11062ms</div></div><div class="step-row"><div class="step-name">res=1024</div><div class="step-bar-wrap"><div class="step-bar c-total" style="width:100.0%">11437ms</div></div><div class="step-time">11437ms</div></div></div></div>
|
||||
</div>
|
||||
|
||||
<h2>B维度明细(每图每发型每步数)</h2>
|
||||
<div class="card"><div class="scroll"><table>
|
||||
<tr><th>图片</th><th>发型</th><th>steps</th><th>swap(ms)</th><th>comfy(ms)</th><th>总(ms)</th><th>结果</th></tr>
|
||||
<tr>
|
||||
<td>asdf</td><td>心形</td><td>10</td>
|
||||
<td>2969</td><td>6810</td><td>10189</td>
|
||||
<td><img src="bench2/B_steps10_asdf_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>心形</td><td>15</td>
|
||||
<td>3621</td><td>6628</td><td>10619</td>
|
||||
<td><img src="bench2/B_steps15_asdf_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>心形</td><td>20</td>
|
||||
<td>3855</td><td>6874</td><td>11106</td>
|
||||
<td><img src="bench2/B_steps20_asdf_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>波浪</td><td>10</td>
|
||||
<td>3053</td><td>6601</td><td>10073</td>
|
||||
<td><img src="bench2/B_steps10_asdf_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>波浪</td><td>15</td>
|
||||
<td>3403</td><td>6596</td><td>10380</td>
|
||||
<td><img src="bench2/B_steps15_asdf_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>波浪</td><td>20</td>
|
||||
<td>3842</td><td>6579</td><td>10815</td>
|
||||
<td><img src="bench2/B_steps20_asdf_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>心形</td><td>10</td>
|
||||
<td>3282</td><td>8860</td><td>12601</td>
|
||||
<td><img src="bench2/B_steps10_girl2_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>心形</td><td>15</td>
|
||||
<td>3470</td><td>8578</td><td>12439</td>
|
||||
<td><img src="bench2/B_steps15_girl2_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>心形</td><td>20</td>
|
||||
<td>4022</td><td>8650</td><td>13057</td>
|
||||
<td><img src="bench2/B_steps20_girl2_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>波浪</td><td>10</td>
|
||||
<td>3062</td><td>8561</td><td>12066</td>
|
||||
<td><img src="bench2/B_steps10_girl2_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>波浪</td><td>15</td>
|
||||
<td>3542</td><td>8809</td><td>12769</td>
|
||||
<td><img src="bench2/B_steps15_girl2_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>波浪</td><td>20</td>
|
||||
<td>3923</td><td>8809</td><td>13167</td>
|
||||
<td><img src="bench2/B_steps20_girl2_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>心形</td><td>10</td>
|
||||
<td>2834</td><td>5888</td><td>9042</td>
|
||||
<td><img src="bench2/B_steps10_girl5_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>心形</td><td>15</td>
|
||||
<td>3366</td><td>6774</td><td>10478</td>
|
||||
<td><img src="bench2/B_steps15_girl5_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>心形</td><td>20</td>
|
||||
<td>3953</td><td>6580</td><td>10866</td>
|
||||
<td><img src="bench2/B_steps20_girl5_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>波浪</td><td>10</td>
|
||||
<td>2870</td><td>5837</td><td>9046</td>
|
||||
<td><img src="bench2/B_steps10_girl5_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>波浪</td><td>15</td>
|
||||
<td>3302</td><td>6450</td><td>10079</td>
|
||||
<td><img src="bench2/B_steps15_girl5_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>波浪</td><td>20</td>
|
||||
<td>3758</td><td>6465</td><td>10567</td>
|
||||
<td><img src="bench2/B_steps20_girl5_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>心形</td><td>10</td>
|
||||
<td>2935</td><td>7067</td><td>10388</td>
|
||||
<td><img src="bench2/B_steps10_qwer_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>心形</td><td>15</td>
|
||||
<td>3516</td><td>7072</td><td>10985</td>
|
||||
<td><img src="bench2/B_steps15_qwer_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>心形</td><td>20</td>
|
||||
<td>3849</td><td>7035</td><td>11243</td>
|
||||
<td><img src="bench2/B_steps20_qwer_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>波浪</td><td>10</td>
|
||||
<td>2945</td><td>6996</td><td>10314</td>
|
||||
<td><img src="bench2/B_steps10_qwer_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>波浪</td><td>15</td>
|
||||
<td>3369</td><td>7070</td><td>10894</td>
|
||||
<td><img src="bench2/B_steps15_qwer_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>波浪</td><td>20</td>
|
||||
<td>3924</td><td>7103</td><td>11382</td>
|
||||
<td><img src="bench2/B_steps20_qwer_wave.jpg" loading="lazy"></td></tr>
|
||||
</table></div></div>
|
||||
|
||||
<h2>C维度明细(每图每发型每分辨率)</h2>
|
||||
<div class="card"><div class="scroll"><table>
|
||||
<tr><th>图片</th><th>发型</th><th>res</th><th>swap(ms)</th><th>comfy(ms)</th><th>总(ms)</th><th>结果</th></tr>
|
||||
<tr>
|
||||
<td>asdf</td><td>心形</td><td>640</td>
|
||||
<td>3214</td><td>4261</td><td>7750</td>
|
||||
<td><img src="bench2/C_res640_asdf_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>心形</td><td>896</td>
|
||||
<td>3508</td><td>6882</td><td>10784</td>
|
||||
<td><img src="bench2/C_res896_asdf_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>心形</td><td>1024</td>
|
||||
<td>3527</td><td>7010</td><td>10999</td>
|
||||
<td><img src="bench2/C_res1024_asdf_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>波浪</td><td>640</td>
|
||||
<td>3355</td><td>3660</td><td>7328</td>
|
||||
<td><img src="bench2/C_res640_asdf_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>波浪</td><td>896</td>
|
||||
<td>3436</td><td>6900</td><td>10730</td>
|
||||
<td><img src="bench2/C_res896_asdf_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>asdf</td><td>波浪</td><td>1024</td>
|
||||
<td>3593</td><td>6795</td><td>10847</td>
|
||||
<td><img src="bench2/C_res1024_asdf_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>心形</td><td>640</td>
|
||||
<td>3307</td><td>4437</td><td>8036</td>
|
||||
<td><img src="bench2/C_res640_girl2_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>心形</td><td>896</td>
|
||||
<td>3582</td><td>8503</td><td>12458</td>
|
||||
<td><img src="bench2/C_res896_girl2_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>心形</td><td>1024</td>
|
||||
<td>3816</td><td>9018</td><td>13330</td>
|
||||
<td><img src="bench2/C_res1024_girl2_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>波浪</td><td>640</td>
|
||||
<td>3244</td><td>4423</td><td>7946</td>
|
||||
<td><img src="bench2/C_res640_girl2_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>波浪</td><td>896</td>
|
||||
<td>3409</td><td>8775</td><td>12558</td>
|
||||
<td><img src="bench2/C_res896_girl2_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl2</td><td>波浪</td><td>1024</td>
|
||||
<td>3737</td><td>8979</td><td>13203</td>
|
||||
<td><img src="bench2/C_res1024_girl2_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>心形</td><td>640</td>
|
||||
<td>3338</td><td>4985</td><td>8565</td>
|
||||
<td><img src="bench2/C_res640_girl5_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>心形</td><td>896</td>
|
||||
<td>3345</td><td>6714</td><td>10403</td>
|
||||
<td><img src="bench2/C_res896_girl5_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>心形</td><td>1024</td>
|
||||
<td>3372</td><td>6550</td><td>10264</td>
|
||||
<td><img src="bench2/C_res1024_girl5_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>波浪</td><td>640</td>
|
||||
<td>3186</td><td>4381</td><td>7811</td>
|
||||
<td><img src="bench2/C_res640_girl5_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>波浪</td><td>896</td>
|
||||
<td>3290</td><td>6447</td><td>10066</td>
|
||||
<td><img src="bench2/C_res896_girl5_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>girl5</td><td>波浪</td><td>1024</td>
|
||||
<td>3256</td><td>6760</td><td>10369</td>
|
||||
<td><img src="bench2/C_res1024_girl5_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>心形</td><td>640</td>
|
||||
<td>3289</td><td>4093</td><td>7676</td>
|
||||
<td><img src="bench2/C_res640_qwer_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>心形</td><td>896</td>
|
||||
<td>3432</td><td>6912</td><td>10720</td>
|
||||
<td><img src="bench2/C_res896_qwer_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>心形</td><td>1024</td>
|
||||
<td>3557</td><td>7164</td><td>11184</td>
|
||||
<td><img src="bench2/C_res1024_qwer_heart.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>波浪</td><td>640</td>
|
||||
<td>3240</td><td>3827</td><td>7350</td>
|
||||
<td><img src="bench2/C_res640_qwer_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>波浪</td><td>896</td>
|
||||
<td>3368</td><td>7041</td><td>10778</td>
|
||||
<td><img src="bench2/C_res896_qwer_wave.jpg" loading="lazy"></td></tr><tr>
|
||||
<td>qwer</td><td>波浪</td><td>1024</td>
|
||||
<td>3599</td><td>7249</td><td>11303</td>
|
||||
<td><img src="bench2/C_res1024_qwer_wave.jpg" loading="lazy"></td></tr>
|
||||
</table></div></div>
|
||||
</body>
|
||||
</html>
|
||||