biptv3 / code /pointcept_framework /tools /ptv3_plot_cards_0920.py
YYYYYYUUU's picture
Add core reproduction code (binarization layers, PTv3, superpoint ops, min-repro pack)
7b95dc2 verified
Raw
History Blame Contribute Delete
4.52 kB
# -*- coding: utf-8 -*-
"""
tools/ptv3_plot_cards_0920.py —— 只画图,不读取任何文件
- 把指标硬编码在 data 里,生成 base/quant 单卡片 + 对比卡片
- 输出:--out-dir / 默认 exp/summary_0920/plots_0920_cards
"""
import argparse
from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
def draw_card_png(dataset: str, tag: str, info: dict, out_png: Path):
plt.figure(figsize=(10.5, 6.5))
ax = plt.gca(); ax.axis("off")
miou = info.get("miou")
rows = [
["Dataset", dataset.upper()],
["Variant", tag.upper()],
["mIoU (%)", "-" if miou is None else f"{(miou*100):.2f}"],
["Avg Weight Bit", "-" if info.get("avg_bit") is None else f"{info['avg_bit']:.3f}"],
["Quant Ratio (%)", "-" if info.get("qratio") is None else f"{info['qratio']:.2f}"],
]
table = ax.table(cellText=rows, colLabels=["Metric","Value"], loc="center", cellLoc="center")
table.auto_set_font_size(False); table.set_fontsize(18); table.scale(1.4, 2.0)
for (r,c),cell in table.get_celld().items():
if r==0: cell.set_text_props(weight='bold')
ax.set_title(f"{dataset.upper()} - {tag.upper()} (0920)", fontsize=28, fontweight="bold", pad=20)
plt.tight_layout()
out_png.parent.mkdir(parents=True, exist_ok=True)
plt.savefig(out_png, dpi=220, bbox_inches="tight")
plt.close()
print(f"[card] {out_png}")
def draw_compare_png(dataset: str, base_info: dict, quant_info: dict, out_png: Path):
plt.figure(figsize=(12, 6.5))
ax = plt.gca(); ax.axis("off")
b = base_info.get("miou"); q = quant_info.get("miou")
delta = None if (b is None or q is None) else ((q - b) * 100)
fmt_bit = lambda v: "-" if v is None else f"{v:.3f}"
bit_base, bit_quant = fmt_bit(base_info.get("avg_bit")), fmt_bit(quant_info.get("avg_bit"))
qratio_s = "-" if quant_info.get("qratio") is None else f"{quant_info['qratio']:.2f}"
rows = [
["Dataset", dataset.upper()],
["mIoU BASE (%)", "-" if b is None else f"{b*100:.2f}"],
["mIoU QUANT (%)", "-" if q is None else f"{q*100:.2f}"],
["Δ mIoU (pp)", "-" if delta is None else f"{delta:+.2f}"],
["Avg Bit (BASE/QUANT)", f"{bit_base} / {bit_quant}"],
["Quant Ratio (QUANT %)", qratio_s],
]
table = ax.table(cellText=rows, colLabels=["Metric","Value"], loc="center", cellLoc="center")
table.auto_set_font_size(False); table.set_fontsize(18); table.scale(1.6, 2.0)
for (r,c),cell in table.get_celld().items():
if r==0: cell.set_text_props(weight='bold')
ax.set_title(f"{dataset.upper()} - BASE vs QUANT (0920)", fontsize=28, fontweight="bold", pad=20)
plt.tight_layout()
out_png.parent.mkdir(parents=True, exist_ok=True)
plt.savefig(out_png, dpi=220, bbox_inches="tight")
plt.close()
print(f"[compare] {out_png}")
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--out-dir", default="exp/summary_0920/plots_0920_cards")
args = ap.parse_args()
out_dir = Path(args.out_dir); out_dir.mkdir(parents=True, exist_ok=True)
# === 手动填数据(不读取任何文件)===
data = {
"nuscenes": {
"base": {"miou": 0.2598, "avg_bit": 32.0, "qratio": 0.0},
"quant": {"miou": 0.6264, "avg_bit": 2.058, "qratio": 99.81},
},
"scannet": {
"base": {"miou": 0.1836, "avg_bit": 32.0, "qratio": 0.0},
"quant": {"miou": 0.2450, "avg_bit": 2.125, "qratio": 99.58},
},
# 需要的话可在此继续添加:
# "s3dis": {
# "base": {"miou": None, "avg_bit": 32.0, "qratio": 0.0},
# "quant": {"miou": 0.2450, "avg_bit": 2.125,"qratio": 99.58},
# },
# "modelnet": { # 分类任务就把 miou 改成 acc(本脚本目前是分割卡片)
# "base": {"acc": 0.98, "avg_bit": 32.0, "qratio": 0.0},
# "quant": {"acc": 0.97, "avg_bit": 2.0, "qratio": 99.5},
# },
}
for ds, kinds in data.items():
# 单卡片
for tag in ("base","quant"):
if tag in kinds:
out = out_dir / f"{ds}_{tag}_0920.png"
draw_card_png(ds, tag, kinds[tag], out)
# 对比卡片
if "base" in kinds and "quant" in kinds:
out_cmp = out_dir / f"{ds}_compare_0920.png"
draw_compare_png(ds, kinds["base"], kinds["quant"], out_cmp)
if __name__ == "__main__":
main()