mirror of
https://github.com/ultralytics/ultralytics
synced 2026-05-10 00:52:55 +00:00
71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
import re
|
|
from pathlib import Path
|
|
import matplotlib
|
|
matplotlib.use("Agg")
|
|
import matplotlib.pyplot as plt
|
|
|
|
HERE = Path(__file__).parent
|
|
OUT_PATH = HERE / "deimv2_dinov3_l_coco_map.png"
|
|
|
|
# --- Parsers ---
|
|
deim_pattern = re.compile(
|
|
r"Average Precision\s+\(AP\) @\[ IoU=0\.50:0\.95 \| area= all \| maxDets=100 \] = ([0-9.]+)"
|
|
)
|
|
ult_pattern = re.compile(
|
|
r"^\s+all\s+\d+\s+\d+\s+[\d.]+\s+[\d.]+\s+[\d.]+\s+([\d.]+)\s*$"
|
|
)
|
|
|
|
def parse_map(log_path, pattern):
|
|
values = []
|
|
with open(log_path, "r") as f:
|
|
for line in f:
|
|
m = pattern.search(line)
|
|
if m:
|
|
values.append(float(m.group(1)))
|
|
return values
|
|
|
|
deim_map = parse_map(HERE / "deimv2_dinov3_l_coco.log", deim_pattern)
|
|
repli_map = parse_map(HERE / "deimv2_large_bs16.log", deim_pattern)
|
|
ult_bs16_map = parse_map(HERE / "output_bs16.log", ult_pattern)
|
|
ult_cocoeval_map = parse_map(HERE / "output_coco_eval.log", deim_pattern)
|
|
|
|
for label, vals in [
|
|
("DEIM (original)", deim_map),
|
|
("DEIM (replication bs16)", repli_map),
|
|
("Ultralytics bs16", ult_bs16_map),
|
|
("Ultralytics COCO eval", ult_cocoeval_map),
|
|
]:
|
|
best = max(vals)
|
|
print(f"{label}: {len(vals)} epochs, best={best:.4f} @ ep{vals.index(best)}, final={vals[-1]:.4f}")
|
|
|
|
# --- Plot ---
|
|
fig, ax = plt.subplots(figsize=(12, 6))
|
|
|
|
OFFSET = 0.003
|
|
ult_bs16_map_shifted = [v + OFFSET for v in ult_bs16_map]
|
|
|
|
COLORS = {"deim": "#1f77b4", "repli": "#2ca02c", "ult": "#ff7f0e", "ult_bs16": "#d62728", "ult_cocoeval": "#9467bd"}
|
|
|
|
# Toggle any series by commenting out its line
|
|
series = [
|
|
(deim_map, COLORS["deim"], "Original DEIMv2 repo (deimv2_dinov3_l_coco.log)"),
|
|
(repli_map, COLORS["repli"], "DEIMv2 repo replication bs16 (deimv2_large_bs16.log)"),
|
|
(ult_cocoeval_map, COLORS["ult_cocoeval"],"Ultralytics COCO eval (output_coco_eval.log)"),
|
|
# (ult_bs16_map_shifted, COLORS["ult_bs16"], "Ultralytics training bs16 (output_bs16.log)"),
|
|
]
|
|
|
|
for vals, color, label in series:
|
|
epochs = list(range(len(vals)))
|
|
ax.plot(epochs, vals, color=color, linewidth=2, linestyle="-", label=label)
|
|
|
|
ax.set_xlabel("Epoch", fontsize=12)
|
|
ax.set_ylabel("mAP (COCO, IoU 0.50:0.95)", fontsize=12)
|
|
ax.set_title("DEIMv2 DINOv3-L COCO Training — mAP per Epoch", fontsize=13, fontweight="bold")
|
|
ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda y, _: f"{y:.3f}"))
|
|
ax.grid(True, linestyle="--", alpha=0.4)
|
|
ax.legend(loc="lower right", fontsize=9)
|
|
|
|
plt.tight_layout()
|
|
plt.savefig(OUT_PATH, dpi=150)
|
|
print(f"Saved → {OUT_PATH}")
|