How to create ground-truth depth maps for my own monocular camera, for model.calibrate()?

Hi Ultralytics team and community,

I’m working with the YOLO depth estimation model, and my goal is to measure real-world physical distances (in meters) using a monocular camera .

I first tried the official pretrained weights, but the depth error was too large for my use case. From the docs ( Calibrating the Depth Scale ), I learned that calibration requires ground-truth depth maps from my own camera — roughly 100 pairs of RGB images + corresponding ground-truth depth maps (.npy float data, absolute depth in meters).

I’ve already got the model.calibrate() pipeline working locally (using the official depth8.yaml calibration data), following the sample code from the docs:

from ultralytics import YOLO

model = YOLO("yolo26s-depth.pt")

# Fit scale on a labeled split (~100+ images is enough), 
then persist it
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")

So the calibration pipeline itself isn’t the problem — the real blocker is: where do the ground-truth depth maps come from?

I already understand the required dataset format from the docs ( Depth Datasets ). The hard part is the data capture step. My camera only outputs YUV / RAW / RGB images, plus specs like focal length and sensor size — it has no depth sensor.

I did consider one possible workaround: using the iPhone 13 Pro’s LiDAR to capture depth maps. But on second thought, it wouldn’t work — depth maps from the iPhone correspond to the phone’s own camera , and its focal length, resolution, and field of view don’t match my actual camera, so the depth maps wouldn’t be usable. I dropped the idea before even trying it.

So my questions are:

  1. For a regular monocular camera without any depth sensor, what’s the typical way to obtain or create ground-truth depth maps?
  2. Is there any low-cost, practical approach to adapt the depth model to my own camera?
    Thanks in advance!

Hello.

We expect the depth labels to come from a depth camera because otherwise they are very difficult to obtain. However, you can also use a larger monocular depth estimation model to get the depth maps instead, since it will probably be more accurate than YOLO Depth, and then use those to calibrate. The model has to output metric depth though, so you can try DA3MetricLarge which can also take your camera’s field of view so the scale matches your camera. Models like Marigold only give relative depth, so they won’t work for calibration.

You can also measure the distance to a few points in each image with a laser rangefinder or a tape and put those in the depth map, leaving the rest as 0. calibrate() ignores pixels with 0 depth, so the maps don’t need to be dense.

Thank you for your reply. I would like to follow up with a few questions:

When using calibrate() for camera calibration, is it necessary to capture depth maps for each individual scene? My concern is that the calibration result might only be valid for the specific scenes used during calibration and may not generalize to other scenes. I would appreciate your perspective on this.

Additionally, based on your experience, if fine-tuning is required, is it feasible to use sparse depth maps? And approximately how many samples would be appropriate?

Lastly, I would like to validate an idea of mine: using YOLO’s depth model to estimate object distances (an error of 30–40 cm is acceptable, as high precision is not required), and then dynamically adjusting the camera’s focal length based on those distances to achieve an autofocus effect. Do you think this approach is viable?

Looking forward to your reply. Thank you again for your help!

When using calibrate() for camera calibration, is it necessary to capture depth maps for each individual scene? My concern is that the calibration result might only be valid for the specific scenes used during calibration and may not generalize to other scenes. I would appreciate your perspective on this.

Calibration corrects the model’s absolute depth scale for your camera or domain while preserving relative depth structure. The correction is intended to generalize as long as domain and camera is similar.

Additionally, based on your experience, if fine-tuning is required, is it feasible to use sparse depth maps? And approximately how many samples would be appropriate?

Sparse depth maps can be used for fine-tuning. Missing pixels should be marked invalid rather than assigned invented depths. To avoid overfitting, you will need thousands of samples. Also fine-tuning doesn’t only modify metric depth like calibration, it also changes depth map.

Lastly, I would like to validate an idea of mine: using YOLO’s depth model to estimate object distances (an error of 30–40 cm is acceptable, as high precision is not required), and then dynamically adjusting the camera’s focal length based on those distances to achieve an autofocus effect. Do you think this approach is viable?

I am not sure how well the depth model will work if the object is out of focus due to the camera being out of focus.

@hhhFuture We added a guide for calibration:

We also fixed a bug with depth inference on rectangular images. So if you use latest Ultralytics, you will get better accuracy.

Thanks so much for your help! Over the past couple of days, I’ve been using the DA3MetricLarge model you recommended to generate depth maps for the camera and using them for calibration. However, I’m running into a bit of an issue right now: the model’s error ranges from 1 to 3 meters depending on the scene. I’m currently working on fixing this, and if I manage to sort it out, I’ll make sure to share my solution with the community. Thanks again for pointing me in the right direction!

Also, I forgot to ask you one more thing. I’ve already upgraded to ultralytics 8.4.174 using pip install -U ultralytics. I noticed that PR #26556 (Stretch depth predict input to match validation and add a calibration guide without a depth camera - Pull Request #26556 - ultralytics/ultralytics - GitHub) was merged recently, and I was wondering if it’s already included in the 8.4.174 release? Do I need to download any new models for it? Also, if I export the model to ONNX, will this PR have any impact on that process? Looking forward to hearing from you, and thanks in advance!

It will be included in 8.4.175

The guide also shows how to use manually measure points for calibration. You can use 5 points per image and calibrate using it.

Hi again, back with some confusing results after following the guide.

My setup: ultralytics 8.4.178, yolo26n-depth / yolo26m-depth, my own camera (OV50C40, 3840×2160). I laser-measured 5 points per image on 123 images (flat surfaces, perpendicular distance to the camera plane, meters) and built sparse NPY maps like the docs show (disk radius max(h,w)//768 + a small margin). Then I ran model.calibrate(data=calib.yaml, imgsz=768) .

Three things that went wrong or confused me:

  1. calibrate() wiped the scale correction the released models already had. I noticed the official checkpoints already carry calibration numbers: yolo26n-depth.pt ships with cal_b = -0.1938, yolo26m-depth.pt with cal_b = +1.6309. After my calibrate() run on the n model, it said “selected ‘identity’” and cal_b became 0 — so the saved model lost the factory correction and got ~21% worse than the released model. Shouldn’t “keep the existing calibration” be one of the candidates, instead of only identity(raw) and scale-only?
    The log of the terminal’s operation is as follows:
Ultralytics 8.4.178  Python-3.10.0 torch-2.6.0+cu124 CUDA:0 (NVIDIA GeForce RTX 4070 SUPER, 12282MiB)
YOLO26n-depth-log summary (fused): 108 layers, 6,345,865 parameters, 0 gradients, 32.5 GFLOPs
val: Fast image access  (ping: 0.0±0.0 ms, read: 3540.0±243.9 MB/s, size: 5340.8 KB)
val: Scanning E:\All_Data\depth_data\sparse_data\depth\train.cache... 123 imag…: 100% ━━━━━━━━━━━━ 123/123  0.0s 
                 Class     Images     delta1    abs_rel       rmse      si…: 100% ━━━━━━━━━━━━ 8/8 1.6s/it 13.1s 
             depth_val        123     0.6982     0.1769     0.6781      17.87
Speed: 4.5ms preprocess, 4.8ms inference, 0.0ms loss, 0.0ms postprocess per image
Results saved to E:\Project_DeepImg\YOLO2026\runs\depth\val-5
Depth calibration selected 'identity' (a=1.0000 b=0.0000); CV held-out δ1 identity=0.4996 scale-only=0.4722
Call model.save(...) to persist the calibration.
  1. A single global scale just can’t fit my data. I computed k = median(GT/pred) per image: it ranges from 0.23 to 1.88 across my 123 images. The worst ones are ultra-close shots (~0.2 m, predicted 2.4–4× too far). Even inside one image, near points read too high while far points read too low (e.g. GT 1.82 m → 2.00 m, GT 5.81 m → 4.12 m). So any single b helps one side and hurts the other — that’s probably why identity won for the n model. I saw in the source that a log-affine (a, b) candidate existed but was removed. For a fixed single-camera setup, that slope is exactly what I need — any chance of bringing it back as an option?

  2. Even the released model is ~24% off on my camera. On 16 laser points (1.5–6.8 m): released yolo26m-depth = 23.8% mean abs-rel, my calibrated m = 19.0%. PR #26556 showed single-digit scale errors after calibration on NYU/KITTI cameras. Is ~24% just what I should expect on a camera the model has never seen, or does it mean something is wrong with my GT? (GT = perpendicular distance to camera plane, points on flat walls/boxes, NPY float32 meters, 0 = invalid.)

Bonus question: for calibrate(), is sparse laser GT fine, or would dense pseudo-GT from Depth Anything 3 (metric-scaled with the hfov formula) give a better fit?

Any hints appreciated, thanks!

  1. I opened a PR to preserve the scale correction. Keep a depth model's existing calibration in calibrate() when it scores best - Pull Request #26778 - ultralytics/ultralytics - GitHub
  2. Based on our internal testing on NYU and KITTI, the slope didn’t help. It came out close to 1 in every case. We haven’t tested it on your camera.
  3. It’s expected. The single-digit numbers in the PR are scale error, not AbsRel. After calibration, AbsRel in the PR was 0.12 to 0.26 depending on the camera, so your 19% is in the normal range.

You should use laser points if you have them instead of DA3.

Thank you very much for your reply. I have already upgraded Ultralytics to the latest version 8.4.183. Secondly, once again, thank you for submitting PR #26778! Now I can see the new “current” candidate model in the log.

Setup (unchanged): 3840×2160. 123 images, each with ~5 laser-measured points on flat surfaces (perpendicular distance to the camera plane, sparse NPY in meters, 0 = invalid). model.calibrate(data=calib.yaml, imgsz=768) . After calibrating both model sizes, I ran both calibrated models on all 123 images and compared predictions against my 495 labeled points.

  1. The n model still gets strictly worse after calibrate()

Log: identity=0.4996 current=0.3998 scale-only=0.4722 → identity won, cal_b got reset to 0, and the factory correction (-0.1938) was lost again. On my 495 points the calibrated n is worse than the released n in basically every scene (overall mean abs-rel 54.6% vs 42.7%). I understand identity legitimately won the CV — but from a user perspective it’s odd that running calibrate() makes the released model strictly worse. Would it make sense to prefer “current” on near-ties, or at least print a warning like “no candidate beat raw output, consider keeping the factory calibration / your GT may be inconsistent”?

  1. The m model improved overall, but the error is strongly distance-dependent

Log: identity=0.0000 current=0.3585 scale-only=0.5865 → scale-only won (cal_b = 1.8477). Fair enough — raw m is ~6× off, so any global scale is a big win. But when I break the error down by GT distance (495 laser points):

The global scale fitted mostly on mid/far points overshoots at close range. I read your earlier reply that the log-affine slope came out ≈1 on NYU/KITTI so it was removed — understood, I won’t ask for it back. But on my camera the error clearly has a distance-dependent trend (plus per-image scale ratios ranging from 0.23 to 1.88). Does a trend like this on an unmodeled camera surprise you, or is it about what you’d expect?

  1. It’s also very scene/viewpoint-dependent

My images were shot at several camera heights. The 0.2 m-height set is a disaster for every model (144% mean abs-rel for released n) even though its GT distances (0.35–7.66 m) overlap with other sets that only get 14–25%. So it’s not just distance — the low viewpoint (mostly floor, weird perspective?) seems to break the model. In random tests I see the same thing: sometimes close objects are way off, sometimes far ones are, no consistent pattern.

My questions:

  1. Is the n-model outcome (calibrate strictly worsens the released model) the intended behavior?By calibrating the n and m models, the parameters of the m model are much larger than those of the n model. Could this mean that the capability of the n model has reached its limit? Because I found that during the calibration process, the m model selected “scale-only”.
  2. Given the distance- and scene-dependence above, is ~18% median abs-rel after scale-only calibration roughly what you’d expect on a camera the model was never trained on, or does it hint that my GT/setup still has a problem I should hunt for?
  3. At what point should I stop calibrating and fine-tune on my own images instead? Is fine-tuning with ~123 sparsely-labeled images (5 laser points each) even meaningful, or do I need dense GT (e.g. pseudo-GT from Depth Anything 3)?If I need to make minor adjustments or conduct training, can I increase the dataset by copying the data to use for training or fine-tuning?
    Happy to share the per-point CSV and sample images if useful. Thanks again for the quick turnaround on the last PR!

Thanks for the detailed measurements, @hhhFuture. The n-model selection matches the current policy, but it does not guarantee lower AbsRel. The calibration selection policy optimizes held-out delta1, not mean absolute relative error. Your identity=0.4996 versus current=0.3998 is not a near-tie: identity puts more evaluated pixels within the 1.25 ratio threshold, while potentially making the remaining errors larger. That can explain the worse mean AbsRel without implying another calibration-reset bug.

Neither the selected candidate nor the magnitude of cal_b establishes that the n model has reached its capacity limit. Calibration changes the output scale, not the learned network weights; selecting scale-only for m only means that candidate scored best under this criterion. For your application, I would retain whichever checkpoint performs best on an independent, representative test set using your actual distance-error requirements.

I would not interpret 18% median relative error as either an expected accuracy guarantee or evidence of faulty GT. Also, median pointwise relative error is not the same statistic as the mean AbsRel reported in the documentation. Your height-dependent failures suggest a viewpoint/domain issue worth investigating, but that remains a hypothesis. I would first compare released and calibrated predictions at imgsz=768, using identical point coordinates and preprocessing, and report both delta1 and mean relative error by distance and camera height.

Once those checks confirm that relative scene structure—not just global scale—is wrong, fine-tuning is the relevant next experiment. Repeating calibration cannot change that structure.

Dense GT is not required: the depth training loss masks invalid pixels, although five measured locations provide very limited supervision for learning scene structure. I would treat 123 sparsely labeled images as a pilot experiment, not assume they are sufficient. Copying them adds no independent information; collect new scenes/viewpoints instead, and keep related images out of the held-out test split. If you try DA3 pseudo-labels, validate them against your laser measurements before trusting them.

Please share the per-point CSV, your evaluation script, and a few representative images with labeled-point overlays here—especially one low-viewpoint failure and one successful scene. That would help distinguish metric/sampling differences from genuine model errors.

Hi @pderrenger, thanks for the detailed reply! I re-ran everything exactly in the format you asked for — same point coordinates, same preprocessing, imgsz=768 , reporting both delta1 and mean/median relative error, grouped by camera height and GT distance. 495 laser-measured points over 123 images.

Package attached: per_point_errors.csv (per-point details), evaluate_calibration.py + official_metrics_analysis.py (my scripts), and 4 overlay images (see the table at the bottom). Note: in the CSV, folder names like 0.20m_camera_height refer to the camera HEIGHT during capture, not subject distances.

  1. The metrics you asked for

Overall (delta1% / mean rel% / median rel%):


By GT distance (m-released → m-calibrated):

The m calibration is a real win everywhere except below 1 m, where the global scale overshoots (mean 45.7→70.4 while delta1 stays flat). Just sharing in case it’s useful for tuning the policy.

  1. One thing that doesn’t quite add up for the n model

You explained identity won because it puts more pixels inside the 1.25 threshold — makes sense. But in my independent recheck over all 495 points, identity’s delta1 is actually NOT higher: n-calibrated = 44.8% vs n-released = 45.5%, and mean/median are worse as well. That’s the opposite ordering of the calibration-time CV log (identity=0.4996 vs current=0.3998). Same points, same coordinates — the only differences are the 768px subsampling, the fold split, and full-res vs resized evaluation. Not claiming a bug, but the identity win here looks pretty fragile to how the scoring set is sampled. Maybe worth a note in the docs that “identity selected” can flip depending on evaluation details?

  1. The low-viewpoint failure is structural, as you suspected

By camera height, the 0.2 m-height set collapses for every model — delta1 of 5.5 / 7.3 / 36.4 / 34.5 (n-rel / n-cal / m-rel / m-cal) versus 45–78% on all other heights. Per your criterion (relative scene structure wrong, not just scale), I’ll take this as the signal to move on to fine-tuning.

  1. Representative images (overlays with GT + all 4 model predictions)

  2. It appears that fine-tuning is the only viable path forward, and I would greatly appreciate your guidance on how to proceed.

Plan: fine-tune yolo26m-depth or yolo26n-depth on my 123 images (5 sparse laser points each, NPY in meters), keep related images out of the test split as you said, and collect more scenes/viewpoints (especially low ones). Before I start: any recommended starting values for lr0 , epochs , imgsz , and does freezing part of the network make sense with this little data? If I try DA3 pseudo-labels, I’ll validate them against the laser points first, as you suggested.

Once again, I would like to express my gratitude to all the friends who have offered help. At the same time, I look forward to your reply.

Sorry about this! I couldn’t figure out how to upload a .py file, so I’m just pasting the code directly below. Thanks for bearing with me.

evaluate_calibration.py

# -*- coding: utf-8 -*-
"""
Calibration evaluation for YOLO26-depth models.

Runs released + calibrated YOLO26n/m-depth over every labeled image under
E:\\All_Data\\depth_data\\src and compares predictions against sparse laser
ground truth, point by point.

Ground truth: sparse NPY maps (float32, meters, 0 = invalid) created with a
laser rangefinder (perpendicular distance to the camera plane, points on flat
surfaces). One NPY per image, stored in each folder's depth/ subfolder.
Folder names are the camera HEIGHT in meters (not subject distance).

Outputs:
  1. per_point_errors.csv - one row per annotated disk: GT value, per-model
     prediction (median over the disk), absolute relative error in %
  2. Console summaries: mean relative error by folder and by GT-distance bin

Run directly:  python evaluate_calibration.py
"""
import csv
import re
from pathlib import Path

import cv2
import numpy as np
from ultralytics import YOLO

# ================= config =================
SRC = Path(r"E:\All_Data\depth_data\src")
MODELS = {
    "n-released": r"E:\Project_DeepImg\YOLO2026\model\yolo26n-depth.pt",
    "n-calibrated": r"E:\Project_DeepImg\YOLO2026\yolo26n-depth-calibrated.pt",
    "m-released": r"E:\Project_DeepImg\YOLO2026\model\yolo26m-depth.pt",
    "m-calibrated": r"E:\Project_DeepImg\YOLO2026\yolo26m-depth-calibrated.pt",
}
IMGSZ = 768  # released weights are trained/validated at 768 (see depth docs)
CSV_OUT = Path(__file__).parent / "per_point_errors.csv"
BINS = [(0, 1.0), (1.0, 2.0), (2.0, 3.0), (3.0, 5.0), (5.0, 100.0)]  # GT distance bins (m)
# ===========================================


def annotate_folder(name: str) -> str:
    """Make the folder column self-explanatory in the shared CSV.

    Folders starting with a number are camera HEIGHTS in meters (not subject
    distance), e.g. "0.20" -> "0.20m_camera_height",
    "1.35_person" -> "1.35m_camera_height_person". Descriptive names like
    "any_distance_person" are left unchanged.
    """
    m = re.match(r"^([\d.]+)(.*)$", name)
    return f"{m.group(1)}m_camera_height{m.group(2)}" if m else name


def find_disks(gt: np.ndarray):
    """Split the sparse gt>0 mask into annotated disks via connected components.

    Returns [(cx, cy, mask, gt_value)] with gt_value = median GT inside the disk.
    """
    n, lab, _, cent = cv2.connectedComponentsWithStats((gt > 1e-3).astype(np.uint8), 8)
    return [(int(cent[i][0]), int(cent[i][1]), lab == i, float(np.median(gt[lab == i])))
            for i in range(1, n)]


def main():
    pairs = []
    for folder in sorted(SRC.iterdir()):
        if not folder.is_dir():
            continue
        dep = folder / "depth"
        for jpg in sorted(p for p in folder.iterdir() if p.suffix.lower() in {".jpg", ".jpeg", ".png"}):
            npy = dep / (jpg.stem + ".npy")
            if npy.exists():
                pairs.append((folder.name, jpg, npy))
    print(f"{len(pairs)} labeled images, loading {len(MODELS)} models...")

    models = {name: YOLO(p) for name, p in MODELS.items()}
    rows = []
    for idx, (fname, jpg, npy) in enumerate(pairs, 1):
        gt = np.load(npy)
        preds = {name: m.predict(str(jpg), imgsz=IMGSZ, verbose=False)[0].depth.data.cpu().numpy().astype(np.float32)
                 for name, m in models.items()}
        for cx, cy, mask, g in find_disks(gt):
            row = {"folder": annotate_folder(fname), "image": jpg.name, "point_x": cx, "point_y": cy,
                   "gt_m": round(g, 4)}
            for name in MODELS:
                p = float(np.median(preds[name][mask]))
                row[f"{name}_m"] = round(p, 4)
                row[f"{name}_err_pct"] = round(abs(p - g) / g * 100, 1)
            rows.append(row)
        if idx % 20 == 0 or idx == len(pairs):
            print(f"  progress {idx}/{len(pairs)}")

    with open(CSV_OUT, "w", newline="", encoding="utf-8-sig") as f:
        w = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
        w.writeheader()
        w.writerows(rows)
    print(f"\nper-point CSV saved: {CSV_OUT} ({len(rows)} points)")

    print("\n===== mean relative error % by folder (points) =====")
    print(f"{'folder':<22}" + "".join(f"{n:>14}" for n in MODELS))
    for fname in sorted({r["folder"] for r in rows}):
        sub = [r for r in rows if r["folder"] == fname]
        line = f"{fname:<22}"
        for n in MODELS:
            line += f"{np.mean([r[f'{n}_err_pct'] for r in sub]):>13.1f} "
        print(line + f" ({len(sub)} pts)")

    print("\n===== mean relative error % by GT distance (points) =====")
    print(f"{'bin':<22}" + "".join(f"{n:>14}" for n in MODELS))
    for lo, hi in BINS:
        sub = [r for r in rows if lo <= r["gt_m"] < hi]
        if not sub:
            continue
        tag = f"{lo:g}~{hi:g}m" if hi < 100 else f">={lo:g}m"
        line = f"{tag:<22}"
        for n in MODELS:
            line += f"{np.mean([r[f'{n}_err_pct'] for r in sub]):>13.1f} "
        print(line + f" ({len(sub)} pts)")

    print("\n===== overall relative error % =====")
    for n in MODELS:
        errs = [r[f"{n}_err_pct"] for r in rows]
        print(f"  {n}: mean={np.mean(errs):.1f}%  median={np.median(errs):.1f}%")


if __name__ == "__main__":
    main()

official_metrics_analysis.py

# -*- coding: utf-8 -*-
"""
Official-metric analysis of per_point_errors.csv, following the Ultralytics
team's request:

  - report BOTH delta1 (share of points with max(pred/gt, gt/pred) < 1.25, in %)
    AND mean / median relative error (%), grouped by camera-height folder and
    by GT-distance bin
  - cross-check the n-model selection: does identity (n-calibrated) really win
    delta1 while losing mean abs-rel, as the calibration-time CV log claims?
  - pick one low-viewpoint failure image and one normal success image and draw
    labeled-point overlays (GT + all 4 model predictions) for sharing

No re-inference needed: the CSV already stores every point's 4 predictions.
Run directly:  python official_metrics_analysis.py
"""
import csv
import re
from collections import defaultdict
from pathlib import Path

import cv2
import numpy as np

HERE = Path(__file__).parent
CSV_PATH = HERE / "per_point_errors.csv"
SRC = Path(r"E:\All_Data\depth_data\src")
MODELS = ["n-released", "n-calibrated", "m-released", "m-calibrated"]
BINS = [(0, 1.0), (1.0, 2.0), (2.0, 3.0), (3.0, 5.0), (5.0, 100.0)]


def real_folder(annotated: str) -> str:
    """Map the annotated CSV folder name back to the real folder on disk.

    "0.20m_camera_height" -> "0.20", "1.35m_camera_height_person" -> "1.35_person",
    "any_distance_person" -> unchanged.
    """
    m = re.match(r"^([\d.]+)m_camera_height(.*)$", annotated)
    return m.group(1) + m.group(2) if m else annotated


def stats(rs, m):
    """Return (delta1 %, mean relative error %, median relative error %)."""
    gt = np.array([float(r["gt_m"]) for r in rs])
    p = np.array([float(r[f"{m}_m"]) for r in rs])
    ratio = np.maximum(p / gt, gt / p)
    rel = np.abs(p - gt) / gt * 100
    return float((ratio < 1.25).mean() * 100), float(rel.mean()), float(np.median(rel))


def print_table(title, groups):
    print(f"\n===== {title} =====")
    print(f"{'group':<22}" + "".join(f"{m + ' d1/mean/med':>24}" for m in MODELS))
    for name, rs in groups:
        line = f"{name:<22}"
        for m in MODELS:
            d1, mean, med = stats(rs, m)
            line += f"{d1:>8.1f}{mean:>7.1f}{med:>7.1f}  "
        print(line + f"({len(rs)} pts)")


def draw_overlay(folder, img_name, pts, out_path):
    """Overlay each labeled point with GT and the 4 model predictions."""
    img = cv2.imread(str(SRC / real_folder(folder) / img_name))
    h, w = img.shape[:2]
    fs = max(0.8, w / 2200)
    th = max(2, int(fs * 2))
    for r in pts:
        x, y = int(float(r["point_x"])), int(float(r["point_y"]))
        cv2.circle(img, (x, y), 10, (0, 0, 255), 3)
        lines = [
            f"GT {float(r['gt_m']):.2f}m",
            f"n-rel {float(r['n-released_m']):.2f} n-cal {float(r['n-calibrated_m']):.2f}",
            f"m-rel {float(r['m-released_m']):.2f} m-cal {float(r['m-calibrated_m']):.2f}",
        ]
        for i, t in enumerate(lines):
            color = (0, 255, 255) if i == 0 else (255, 255, 255)
            cv2.putText(img, t, (x + 16, y - 10 + i * int(34 * fs + 8)),
                        cv2.FONT_HERSHEY_SIMPLEX, fs, color, th, cv2.LINE_AA)
    ok, buf = cv2.imencode(".jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 90])
    if not ok:
        raise RuntimeError("imencode failed")
    buf.tofile(str(out_path))


def main():
    rows = list(csv.DictReader(open(CSV_PATH, encoding="utf-8-sig")))
    print(f"{len(rows)} labeled points")

    print_table("overall (delta1% / mean rel% / median rel%)", [("all", rows)])

    print("\n===== n-model cross-check (identity=n-calibrated, current=n-released) =====")
    for m, tag in (("n-calibrated", "identity(raw)"), ("n-released", "current(factory)")):
        d1, mean, med = stats(rows, m)
        print(f"  {m} [{tag}]: delta1={d1:.1f}%  mean abs-rel={mean:.1f}%  median={med:.1f}%")

    by_folder = defaultdict(list)
    for r in rows:
        by_folder[r["folder"]].append(r)
    print_table("by camera height (delta1% / mean% / median%)",
                [(f, by_folder[f]) for f in sorted(by_folder)])

    by_bin = []
    for lo, hi in BINS:
        sub = [r for r in rows if lo <= float(r["gt_m"]) < hi]
        if sub:
            by_bin.append((f"{lo:g}~{hi:g}m" if hi < 100 else f">={lo:g}m", sub))
    print_table("by GT distance (delta1% / mean% / median%)", by_bin)

    # representative images for the Ultralytics team:
    #   lowview_fail   - worst failure in the low-viewpoint (0.20m height) set
    #   normal_success - best scene outside the low-viewpoint set
    #   slope_flip     - strongest within-image distance trend: nearest point
    #                    overestimated AND farthest underestimated (m-calibrated)
    #   normal_fail    - worst failure outside the low-viewpoint set
    by_img = defaultdict(list)
    for r in rows:
        by_img[(r["folder"], r["image"])].append(r)

    def score(rs):
        return np.mean([float(r["m-calibrated_err_pct"]) for r in rs])

    def is_lowview(folder):
        return real_folder(folder) == "0.20"

    fail_key = max(((k, v) for k, v in by_img.items() if is_lowview(k[0]) and len(v) >= 4),
                   key=lambda kv: score(kv[1]))
    ok_key = min(((k, v) for k, v in by_img.items() if not is_lowview(k[0]) and len(v) >= 4),
                 key=lambda kv: score(kv[1]))
    normal_fail_key = max(((k, v) for k, v in by_img.items() if not is_lowview(k[0]) and len(v) >= 4),
                          key=lambda kv: score(kv[1]))

    def flip_score(rs):
        """(pred/gt at nearest point) / (pred/gt at farthest point), m-calibrated."""
        near = min(rs, key=lambda r: float(r["gt_m"]))
        far = max(rs, key=lambda r: float(r["gt_m"]))
        if float(far["gt_m"]) - float(near["gt_m"]) < 3.0:
            return 0.0
        rn = float(near["m-calibrated_m"]) / float(near["gt_m"])
        rf = float(far["m-calibrated_m"]) / float(far["gt_m"])
        return rn / rf if rf > 0 else 0.0

    flip_key = max(((k, v) for k, v in by_img.items() if len(v) >= 4), key=lambda kv: flip_score(kv[1]))

    for tag, (k, v) in (("lowview_fail", fail_key), ("normal_success", ok_key),
                        ("slope_flip", flip_key), ("normal_fail", normal_fail_key)):
        folder, img_name = k
        out = HERE / f"overlay_{tag}_{Path(img_name).stem}.jpg"
        draw_overlay(folder, img_name, v, out)
        extra = f"  flip_score={flip_score(v):.2f}" if tag == "slope_flip" else ""
        print(f"\n[{tag}] {folder}/{img_name}  m-calibrated mean err={score(v):.1f}%  pts={len(v)}{extra}")
        for r in v:
            print(f"    GT={float(r['gt_m']):.2f}m  n-rel={float(r['n-released_m']):.2f}  "
                  f"n-cal={float(r['n-calibrated_m']):.2f}  m-rel={float(r['m-released_m']):.2f}  "
                  f"m-cal={float(r['m-calibrated_m']):.2f}")
        print(f"    overlay: {out}")


if __name__ == "__main__":
    main()

The content of the first part of the csv file:

folder image point_x point_y gt_m n-released_m n-released_err_pct n-calibrated_m n-calibrated_err_pct m-released_m m-released_err_pct m-calibrated_m m-calibrated_err_pct
0.20m_camera_height 0.20_1.jpg 2315 1047 0.6 1.6348 172.5 1.9845 230.8 1.0263 71 1.2747 112.5
0.20m_camera_height 0.20_1.jpg 640 1051 1.8 3.7832 110.2 4.5925 155.1 1.9427 7.9 2.4131 34.1
0.20m_camera_height 0.20_1.jpg 1941 1134 2.15 4.825 124.4 5.8571 172.4 2.6803 24.7 3.3292 54.8
0.20m_camera_height 0.20_1.jpg 1418 1294 1.1 2.7296 148.1 3.3135 201.2 1.3882 26.2 1.7243 56.8
0.20m_camera_height 0.20_10.jpg 1952 981 5.54 3.0854 44.3 3.7454 32.4 3.8442 30.6 4.7748 13.8
0.20m_camera_height 0.20_10.jpg 1680 1230 2.68 2.3301 13.1 2.8285 5.5 2.9222 9 3.6296 35.4
0.20m_camera_height 0.20_10.jpg 2075 1301 1.95 1.3976 28.3 1.6966 13 1.4238 27 1.7685 9.3
0.20m_camera_height 0.20_10.jpg 3237 1381 1.51 1.1473 24 1.3927 7.8 1.0708 29.1 1.33 11.9
0.20m_camera_height 0.20_10.jpg 2538 1623 1.01 0.7683 23.9 0.9326 7.7 0.8085 19.9 1.0042 0.6
0.20m_camera_height 0.20_11.jpg 2531 908 2.12 9.2565 336.6 11.2366 430 5.906 178.6 7.3358 246
0.20m_camera_height 0.20_11.jpg 2287 1232 3.33 9.0324 171.2 10.9645 229.3 7.5891 127.9 9.4264 183.1
0.20m_camera_height 0.20_11.jpg 1736 1451 1.65 7.2769 341 8.8335 435.4 3.9447 139.1 4.8996 196.9
0.20m_camera_height 0.20_11.jpg 2901 1512 1.1 4.3639 296.7 5.2974 381.6 2.3379 112.5 2.9039 164
0.20m_camera_height 0.20_12.jpg 1442 1211 1.94 4.2441 118.8 5.152 165.6 1.4572 24.9 1.81 6.7
0.20m_camera_height 0.20_12.jpg 2112 1298 1.33 3.8995 193.2 4.7337 255.9 1.1076 16.7 1.3757 3.4
0.20m_camera_height 0.20_12.jpg 755 1512 1.04 2.3715 128 2.8787 176.8 0.924 11.2 1.1477 10.4
0.20m_camera_height 0.20_12.jpg 3291 1675 0.69 2.2216 222 2.6969 290.8 0.6836 0.9 0.8491 23.1
0.20m_camera_height 0.20_2.jpg 1129 1352 1.4 3.5812 155.8 4.3473 210.5 2.0332 45.2 2.5254 80.4
0.20m_camera_height 0.20_2.jpg 1449 1440 1.25 3.2555 160.4 3.9519 216.2 1.6884 35.1 2.0972 67.8
0.20m_camera_height 0.20_2.jpg 1978 1536 1 3.1169 211.7 3.7836 278.4 1.6441 64.4 2.0422 104.2
0.20m_camera_height 0.20_2.jpg 341 1672 0.74 2.431 228.5 2.951 298.8 1.2238 65.4 1.5201 105.4
0.20m_camera_height 0.20_2.jpg 2774 1863 0.61 2.6007 326.3 3.157 417.5 1.3425 120.1 1.6676 173.4
0.20m_camera_height 0.20_3.jpg 2155 1275 1.11 2.4119 117.3 2.9278 163.8 1.8683 68.3 2.3206 109.1
0.20m_camera_height 0.20_3.jpg 1611 1277 1.39 4.0449 191 4.9101 253.2 3.3752 142.8 4.1923 201.6
0.20m_camera_height 0.20_3.jpg 2552 1388 0.85 1.8775 120.9 2.2791 168.1 1.5501 82.4 1.9253 126.5
0.20m_camera_height 0.20_3.jpg 1301 1564 0.81 2.8268 249 3.4315 323.6 2.0216 149.6 2.511 210
0.20m_camera_height 0.20_3.jpg 1830 1912 0.51 1.9179 276.1 2.3282 356.5 1.2713 149.3 1.5791 209.6
0.20m_camera_height 0.20_4.jpg 2343 1261 2.08 2.5757 23.8 3.1266 50.3 1.4612 29.7 1.815 12.7
0.20m_camera_height 0.20_4.jpg 1854 1322 1.63 3.1269 91.8 3.7957 132.9 1.6172 0.8 2.0087 23.2
0.20m_camera_height 0.20_4.jpg 2564 1447 1.11 3.3906 205.5 4.1159 270.8 1.1627 4.7 1.4441 30.1
0.20m_camera_height 0.20_4.jpg 2152 1529 0.93 1.9082 105.2 2.3163 149.1 0.9734 4.7 1.209 30
0.20m_camera_height 0.20_4.jpg 1176 1802 0.64 1.3912 117.4 1.6888 163.9 0.7544 17.9 0.937 46.4
0.20m_camera_height 0.20_5.jpg 1536 1327 2.38 3.8035 59.8 4.6171 94 2.9963 25.9 3.7217 56.4
0.20m_camera_height 0.20_5.jpg 2508 1345 1.89 3.6714 94.3 4.4567 135.8 2.4158 27.8 3.0007 58.8
0.20m_camera_height 0.20_5.jpg 1971 1369 1.54 3.4206 122.1 4.1523 169.6 2.3408 52 2.9075 88.8
0.20m_camera_height 0.20_5.jpg 1750 1651 0.98 2.4276 147.7 2.9469 200.7 1.696 73.1 2.1066 115
0.20m_camera_height 0.20_5.jpg 2955 1792 0.8 2.0571 157.1 2.4971 212.1 1.2031 50.4 1.4943 86.8
0.20m_camera_height 0.20_6.jpg 2475 1232 1.4 3.3597 140 4.0784 191.3 1.1249 19.7 1.3972 0.2
0.20m_camera_height 0.20_6.jpg 988 1265 1.26 2.4816 97 3.0125 139.1 1.0157 19.4 1.2616 0.1
0.20m_camera_height 0.20_6.jpg 2089 1385 1.01 1.8004 78.3 2.1856 116.4 0.8399 16.8 1.0432 3.3
0.20m_camera_height 0.20_6.jpg 1357 1531 0.69 1.3219 91.6 1.6047 132.6 0.575 16.7 0.7142 3.5
0.20m_camera_height 0.20_6.jpg 3110 1731 0.53 1.1616 119.2 1.4101 166.1 0.3876 26.9 0.4815 9.2
0.20m_camera_height 0.20_7.jpg 1352 1225 2.26 7.5751 235.2 9.1955 306.9 4.9274 118 6.1202 170.8
0.20m_camera_height 0.20_7.jpg 1661 1275 1.74 4.1676 139.5 5.0591 190.8 1.5582 10.4 1.9355 11.2
0.20m_camera_height 0.20_7.jpg 3214 1378 1.26 1.5883 26.1 1.9281 53 1.066 15.4 1.324 5.1
0.20m_camera_height 0.20_7.jpg 2432 1531 0.84 1.2967 54.4 1.5741 87.4 0.7502 10.7 0.9319 10.9
0.20m_camera_height 0.20_8.jpg 1880 1094 1.64 4.4687 172.5 5.4246 230.8 2.9452 79.6 3.6582 123.1
0.20m_camera_height 0.20_8.jpg 755 1103 1.19 3.1451 164.3 3.8178 220.8 3.2431 172.5 4.0283 238.5
0.20m_camera_height 0.20_8.jpg 2089 1416 0.9 1.8519 105.8 2.248 149.8 1.2742 41.6 1.5826 75.8
0.20m_camera_height 0.20_8.jpg 1303 1722 0.35 0.9675 176.4 1.1744 235.5 0.6961 98.9 0.8647 147
0.20m_camera_height 0.20_9.jpg 2390 1214 7.66 8.3454 8.9 10.1306 32.3 6.4605 15.7 8.0245 4.8
0.20m_camera_height 0.20_9.jpg 1830 1437 1.97 6.1099 210.1 7.4168 276.5 3.1284 58.8 3.8858 97.2
0.20m_camera_height 0.20_9.jpg 3451 1449 1.75 2.8713 64.1 3.4855 99.2 1.9959 14.1 2.4791 41.7
0.20m_camera_height 0.20_9.jpg 2856 1498 1.48 3.9357 165.9 4.7776 222.8 2.3385 58 2.9047 96.3
0.20m_camera_height 0.20_9.jpg 2176 1757 0.92 2.81 205.4 3.4111 270.8 1.5403 67.4 1.9133 108
0.76m_camera_height 0.76_1.jpg 1931 694 2.79 2.009 28 2.4387 12.6 1.4527 47.9 1.8044 35.3
0.76m_camera_height 0.76_1.jpg 2204 837 3.51 2.2006 37.3 2.6713 23.9 1.9238 45.2 2.3896 31.9
0.76m_camera_height 0.76_1.jpg 2127 1072 2.5 1.7432 30.3 2.1161 15.4 1.405 43.8 1.7451 30.2
0.76m_camera_height 0.76_1.jpg 2087 1908 1.9 1.3792 27.4 1.6743 11.9 0.9465 50.2 1.1756 38.1
0.76m_camera_height 0.76_1.jpg 1465 1927 1.53 1.2179 20.4 1.4785 3.4 0.891 41.8 1.1067 27.7
0.76m_camera_height 0.76_10.jpg 1291 1529 4.51 4.7003 4.2 5.7057 26.5 2.9753 34 3.6956 18.1
0.76m_camera_height 0.76_10.jpg 1811 1604 4.05 2.3673 41.5 2.8736 29 2.0139 50.3 2.5014 38.2
0.76m_camera_height 0.76_10.jpg 2254 1741 3.31 1.9129 42.2 2.322 29.8 1.7026 48.6 2.1148 36.1
0.76m_camera_height 0.76_10.jpg 2562 2007 1.85 1.8374 0.7 2.2305 20.6 1.1802 36.2 1.466 20.8
0.76m_camera_height 0.76_2.jpg 2242 818 2.28 1.6713 26.7 2.0289 11 1.0799 52.6 1.3413 41.2
0.76m_camera_height 0.76_2.jpg 1661 1136 3.45 2.6221 24 3.183 7.7 1.442 58.2 1.7911 48.1
0.76m_camera_height 0.76_2.jpg 2562 1600 2.99 2.1604 27.7 2.6225 12.3 1.1671 61 1.4496 51.5
0.76m_camera_height 0.76_2.jpg 1310 1684 1.36 1.8833 38.5 2.2861 68.1 0.9616 29.3 1.1944 12.2
0.76m_camera_height 0.76_3.jpg 2898 776 2.41 2.415 0.2 2.9316 21.6 1.0533 56.3 1.3082 45.7
0.76m_camera_height 0.76_3.jpg 2418 978 3.57 3.4651 2.9 4.2063 17.8 1.9684 44.9 2.445 31.5
0.76m_camera_height 0.76_3.jpg 1837 1677 2.67 1.7623 34 2.1393 19.9 1.2202 54.3 1.5156 43.2
0.76m_camera_height 0.76_3.jpg 2275 1908 2.07 1.7507 15.4 2.1252 2.7 1.0537 49.1 1.3088 36.8
0.76m_camera_height 0.76_4.jpg 1164 1480 4.03 5.2966 31.4 6.4297 59.5 4.4006 9.2 5.4659 35.6
0.76m_camera_height 0.76_4.jpg 2148 1555 2.54 3.0465 19.9 3.6982 45.6 2.1423 15.7 2.661 4.8
0.76m_camera_height 0.76_4.jpg 350 1581 2.13 2.7102 27.2 3.2899 54.5 1.757 17.5 2.1824 2.5
0.76m_camera_height 0.76_4.jpg 1670 1611 2.96 3.4844 17.7 4.2297 42.9 3.1506 6.4 3.9133 32.2
0.76m_camera_height 0.76_5.jpg 1978 1084 3.67 3.6891 0.5 4.4782 22 3.317 9.6 4.1201 12.3
0.76m_camera_height 0.76_5.jpg 1661 1383 3.67 3.7017 0.9 4.4936 22.4 3.3847 7.8 4.2041 14.6
0.76m_camera_height 0.76_5.jpg 1680 1635 3.24 3.4427 6.3 4.1791 29 2.7673 14.6 3.4372 6.1
0.76m_camera_height 0.76_5.jpg 2552 1661 2.56 2.4902 2.7 3.0229 18.1 2.1644 15.5 2.6884 5
0.76m_camera_height 0.76_6.jpg 2496 296 2.63 3.346 27.2 4.0617 54.4 3.5098 33.5 4.3595 65.8
0.76m_camera_height 0.76_6.jpg 484 755 2.93 2.8788 1.7 3.4946 19.3 2.6585 9.3 3.3021 12.7
0.76m_camera_height 0.76_6.jpg 2171 1035 3.96 2.3637 40.3 2.8693 27.5 2.4955 37 3.0997 21.7
0.76m_camera_height 0.76_6.jpg 2435 1677 2.29 1.6724 27 2.0302 11.3 1.7093 25.4 2.1231 7.3
0.76m_camera_height 0.76_7.jpg 1437 1150 3.87 4.8135 24.4 5.8432 51 3.0853 20.3 3.8322 1
0.76m_camera_height 0.76_7.jpg 2338 1176 3.87 4.7075 21.6 5.7144 47.7 3.1847 17.7 3.9557 2.2
0.76m_camera_height 0.76_7.jpg 3310 1618 3.23 3.0319 6.1 3.6804 13.9 2.3274 27.9 2.8908 10.5
0.76m_camera_height 0.76_7.jpg 2124 1741 2.04 2.2426 9.9 2.7223 33.4 1.3932 31.7 1.7305 15.2
0.76m_camera_height 0.76_8.jpg 2190 576 3.78 3.2326 14.5 3.9241 3.8 1.877 50.3 2.3314 38.3
0.76m_camera_height 0.76_8.jpg 2183 790 3.17 2.8065 11.5 3.4069 7.5 1.7418 45.1 2.1635 31.8
0.76m_camera_height 0.76_8.jpg 2223 1105 2.56 2.4575 4 2.9832 16.5 1.6093 37.1 1.9989 21.9
0.76m_camera_height 0.76_8.jpg 2249 1621 1.95 2.1371 9.6 2.5942 33 1.3848 29 1.72 11.8
0.76m_camera_height 0.76_9.jpg 2131 1188 4.61 6.8184 47.9 8.2769 79.5 5.1817 12.4 6.4361 39.6
0.76m_camera_height 0.76_9.jpg 1096 1331 4.56 6.5387 43.4 7.9374 74.1 4.3009 5.7 5.3421 17.2
0.76m_camera_height 0.76_9.jpg 1621 1397 3.07 3.5828 16.7 4.3493 41.7 2.8839 6.1 3.582 16.7
0.76m_camera_height 0.76_9.jpg 3298 1802 1.55 1.5881 2.5 1.9278 24.4 1.4115 8.9 1.7532 13.1
1.04m_camera_height 1.04_1.jpg 2625 962 2.68 2.7153 1.3 3.2962 23 2.1708 19 2.6963 0.6
1.04m_camera_height 1.04_1.jpg 1524 1037 2.24 2.4341 8.7 2.9547 31.9 2.1117 5.7 2.6229 17.1
1.04m_camera_height 1.04_1.jpg 661 1094 3.41 3.0552 10.4 3.7087 8.8 2.5669 24.7 3.1884 6.5
1.04m_camera_height 1.04_1.jpg 2148 1903 1.62 1.9225 18.7 2.3337 44.1 1.5531 4.1 1.9291 19.1
1.04m_camera_height 1.04_2.jpg 976 385 2.83 2.9197 3.2 3.5443 25.2 2.142 24.3 2.6606 6
1.04m_camera_height 1.04_2.jpg 1583 418 2.81 3.0015 6.8 3.6435 29.7 2.1908 22 2.7211 3.2
1.04m_camera_height 1.04_2.jpg 767 1096 2.6 2.8289 8.8 3.4341 32.1 1.961 24.6 2.4357 6.3
1.04m_camera_height 1.04_2.jpg 1847 1425 1.8 2.2992 27.7 2.791 55.1 1.4187 21.2 1.7622 2.1
1.04m_camera_height 1.04_3.jpg 1936 785 4.32 8.5407 97.7 10.3677 140 7.2474 67.8 9.0019 108.4
1.04m_camera_height 1.04_3.jpg 1047 995 5.27 5.9398 12.7 7.2104 36.8 5.5735 5.8 6.9228 31.4
1.04m_camera_height 1.04_3.jpg 2329 1129 3.08 5.2266 69.7 6.3446 106 4.8643 57.9 6.0419 96.2
1.04m_camera_height 1.04_3.jpg 710 1178 2.47 3.681 49 4.4684 80.9 3.5804 45 4.4472 80
1.04m_camera_height 1.04_3.jpg 3040 1388 1.23 2.3216 88.8 2.8183 129.1 2.0401 65.9 2.534 106
1.04m_camera_height 1.04_4.jpg 2920 585 4.24 9.8689 132.8 11.98 182.5 6.9059 62.9 8.5777 102.3
1.04m_camera_height 1.04_4.jpg 1663 757 6 11.5924 93.2 14.0721 134.5 9.3695 56.2 11.6378 94
1.04m_camera_height 1.04_4.jpg 2357 825 3.35 6.2914 87.8 7.6372 128 5.152 53.8 6.3992 91
1.04m_camera_height 1.04_4.jpg 950 964 2.55 4.7906 87.9 5.8154 128.1 3.9373 54.4 4.8904 91.8
1.04m_camera_height 1.04_4.jpg 1847 1162 1.99 3.9842 100.2 4.8365 143 3.2546 63.5 4.0426 103.1
1.04m_camera_height 1.04_6.jpg 2317 1117 4.1 4.6611 13.7 5.6581 38 3.9759 3 4.9384 20.4
1.04m_camera_height 1.04_6.jpg 2863 1842 3.04 2.974 2.2 3.6102 18.8 2.4623 19 3.0584 0.6
1.04m_camera_height 1.04_6.jpg 2352 1849 3.31 3.4818 5.2 4.2266 27.7 3.1188 5.8 3.8738 17
1.04m_camera_height 1.04_6.jpg 757 1861 4.16 3.4477 17.1 4.1852 0.6 3.4041 18.2 4.2282 1.6
1.04m_camera_height 1.04_7.jpg 2960 1134 4.14 4.6808 13.1 5.6821 37.2 3.1437 24.1 3.9047 5.7
1.04m_camera_height 1.04_7.jpg 2023 1407 5.14 5.5518 8 6.7394 31.1 3.5603 30.7 4.4223 14
1.04m_camera_height 1.04_7.jpg 797 1585 3.65 3.9077 7.1 4.7436 30 2.6477 27.5 3.2887 9.9
1.04m_camera_height 1.04_7.jpg 2247 1807 3.2 2.9672 7.3 3.6019 12.6 1.9784 38.2 2.4574 23.2
1.04m_camera_height 1.04_7.jpg 2258 2028 3.05 2.6966 11.6 3.2735 7.3 1.9093 37.4 2.3715 22.2
1.04m_camera_height 1.04_8.jpg 2272 1748 3.93 2.6292 33.1 3.1916 18.8 2.8494 27.5 3.5392 9.9
1.04m_camera_height 1.04_8.jpg 2687 1750 4.9 2.7003 44.9 3.278 33.1 2.7626 43.6 3.4314 30
1.04m_camera_height 1.04_8.jpg 2896 1762 4.31 2.5624 40.5 3.1105 27.8 2.4961 42.1 3.1004 28.1
1.04m_camera_height 1.04_8.jpg 447 1981 3.44 2.2242 35.3 2.7 21.5 2.0572 40.2 2.5552 25.7
1.04m_camera_height 1.04_8.jpg 1174 2018 2.87 1.8892 34.2 2.2934 20.1 1.5888 44.6 1.9734 31.2
1.08m_camera_height 1.08_1.jpg 1919 1079 5.4585 6.2463 14.4 7.5825 38.9 4.0684 25.5 5.0534 7.4
1.08m_camera_height 1.08_10.jpg 2072 1362 6.62 7.0467 6.4 8.554 29.2 5.4246 18.1 6.7379 1.8
1.08m_camera_height 1.08_10.jpg 1557 1529 4.56 4.8117 5.5 5.8409 28.1 3.7568 17.6 4.6662 2.3
1.08m_camera_height 1.08_10.jpg 1265 1748 3.2 3.3463 4.6 4.0621 26.9 2.9034 9.3 3.6063 12.7
1.08m_camera_height 1.08_10.jpg 830 1905 1.78 2.3459 31.8 2.8477 60 1.9787 11.2 2.4577 38.1
1.08m_camera_height 1.08_2.jpg 2385 1249 7.55 7.012 7.1 8.512 12.7 5.9302 21.5 7.3658 2.4
1.08m_camera_height 1.08_2.jpg 1254 1312 4.06 4.5103 11.1 5.4751 34.9 3.332 17.9 4.1386 1.9
1.08m_camera_height 1.08_2.jpg 1995 1341 4.89 6.3967 30.8 7.765 58.8 4.4585 8.8 5.5379 13.2
1.08m_camera_height 1.08_2.jpg 2929 1378 6.83 7.0195 2.8 8.521 24.8 5.2143 23.7 6.4767 5.2
1.08m_camera_height 1.08_3.jpg 1298 1080 5.08 5.2819 4 6.4117 26.2 4.0905 19.5 5.0808 0
1.08m_camera_height 1.08_3.jpg 2701 1164 5.08 5.437 7 6.6 29.9 3.7644 25.9 4.6757 8
1.08m_camera_height 1.08_3.jpg 2534 1543 4.07 4.8361 18.8 5.8706 44.2 3.4985 14 4.3454 6.8
1.08m_camera_height 1.08_3.jpg 1477 1891 3.4 4.0861 20.2 4.9601 45.9 3.1151 8.4 3.8693 13.8
1.08m_camera_height 1.08_4.jpg 1564 990 4.26 3.3771 20.7 4.0995 3.8 3.432 19.4 4.2629 0.1
1.08m_camera_height 1.08_4.jpg 1409 1002 3.36 3.1345 6.7 3.805 13.2 2.7947 16.8 3.4713 3.3
1.08m_camera_height 1.08_4.jpg 1875 1025 6.01 3.7302 37.9 4.5281 24.7 3.7102 38.3 4.6084 23.3
1.08m_camera_height 1.08_4.jpg 2475 1764 4.88 4.1253 15.5 5.0078 2.6 3.7415 23.3 4.6473 4.8
1.08m_camera_height 1.08_5.jpg 3091 1105 4.73 4.1657 11.9 5.0568 6.9 3.9369 16.8 4.89 3.4
1.08m_camera_height 1.08_5.jpg 3484 1268 3.08 2.6441 14.2 3.2097 4.2 2.0079 34.8 2.494 19
1.08m_camera_height 1.08_5.jpg 1828 1320 4.21 4.5157 7.3 5.4817 30.2 3.9457 6.3 4.9009 16.4
1.08m_camera_height 1.08_5.jpg 2512 1571 5.52 5.383 2.5 6.5345 18.4 4.102 25.7 5.0951 7.7
1.08m_camera_height 1.08_6.jpg 967 1181 3.23 2.8186 12.7 3.4215 5.9 1.9208 40.5 2.3858 26.1
1.08m_camera_height 1.08_6.jpg 2503 1362 5.36 5.1669 3.6 6.2722 17 4.1368 22.8 5.1383 4.1
1.08m_camera_height 1.08_6.jpg 3096 1557 2.52 3.2316 28.2 3.9229 55.7 2.4821 1.5 3.083 22.3
1.08m_camera_height 1.08_6.jpg 2023 1642 1.47 2.3304 58.5 2.8289 92.4 1.5216 3.5 1.89 28.6
1.08m_camera_height 1.08_7.jpg 889 1202 4.61 3.1473 31.7 3.8205 17.1 2.765 40 3.4344 25.5
1.08m_camera_height 1.08_7.jpg 1985 1247 6.01 8.4199 40.1 10.2211 70.1 5.2361 12.9 6.5038 8.2
1.08m_camera_height 1.08_7.jpg 1974 1607 3.97 3.4623 12.8 4.203 5.9 3.0336 23.6 3.768 5.1
1.08m_camera_height 1.08_7.jpg 1920 1757 2.89 2.8002 3.1 3.3992 17.6 2.4672 14.6 3.0644 6
1.08m_camera_height 1.08_8.jpg 1830 1188 4.78 4.1621 12.9 5.0524 5.7 2.8698 40 3.5646 25.4
1.08m_camera_height 1.08_8.jpg 952 1211 2.39 1.4913 37.6 1.8103 24.3 1.3309 44.3 1.6531 30.8
1.08m_camera_height 1.08_8.jpg 2334 1336 3.74 3.1972 14.5 3.8811 3.8 2.5276 32.4 3.1395 16.1
1.08m_camera_height 1.08_8.jpg 1496 1538 6.83 5.9508 12.9 7.2238 5.8 4.1273 39.6 5.1265 24.9
1.08m_camera_height 1.08_9.jpg 2552 1157 2.04 2.2043 8.1 2.6759 31.2 1.4684 28 1.8239 10.6
1.08m_camera_height 1.08_9.jpg 1964 1232 5.76 4.1719 27.6 5.0644 12.1 2.8488 50.5 3.5385 38.6
1.08m_camera_height 1.08_9.jpg 1472 1357 3.94 3.5559 9.7 4.3166 9.6 2.3321 40.8 2.8967 26.5
1.08m_camera_height 1.08_9.jpg 1025 1868 3.33 3.1609 5.1 3.837 15.2 1.9902 40.2 2.472 25.8
1.28m_camera_height 1.28_1.jpg 969 962 3.26 2.4768 24 3.0066 7.8 2.3248 28.7 2.8877 11.4
1.28m_camera_height 1.28_1.jpg 3065 1475 0.98 0.9877 0.8 1.199 22.3 0.859 12.3 1.067 8.9
1.28m_camera_height 1.28_1.jpg 385 2025 2.24 1.5376 31.4 1.8665 16.7 1.3109 41.5 1.6283 27.3
1.28m_camera_height 1.28_2.jpg 1762 818 4.02 3.5907 10.7 4.3588 8.4 3.5972 10.5 4.468 11.1
1.28m_camera_height 1.28_2.jpg 571 1129 1.7 1.7636 3.7 2.1408 25.9 1.439 15.4 1.7874 5.1
1.28m_camera_height 1.28_2.jpg 2604 1840 2.45 2.0115 17.9 2.4418 0.3 1.9578 20.1 2.4317 0.7
1.28m_camera_height 1.28_3.jpg 2454 1096 3.34 3.0045 10 3.6472 9.2 2.3345 30.1 2.8996 13.2
1.28m_camera_height 1.28_3.jpg 891 1152 1.62 2.2599 39.5 2.7434 69.3 1.9839 22.5 2.4642 52.1
1.28m_camera_height 1.28_3.jpg 2047 1348 4.25 4.1522 2.3 5.0404 18.6 3.3169 22 4.1199 3.1
1.28m_camera_height 1.28_3.jpg 2404 1995 2.36 2.0108 14.8 2.4409 3.4 1.6537 29.9 2.054 13
1.28m_camera_height 1.28_4.jpg 738 964 2.6 3.3391 28.4 4.0533 55.9 3.1529 21.3 3.9162 50.6
1.28m_camera_height 1.28_4.jpg 1934 1343 5.49 3.8818 29.3 4.7122 14.2 3.5321 35.7 4.3872 20.1
1.28m_camera_height 1.28_4.jpg 1604 1611 4.66 4.4167 5.2 5.3615 15.1 3.3781 27.5 4.1959 10
1.28m_camera_height 1.28_4.jpg 1985 1611 3.28 3.5582 8.5 4.3194 31.7 2.5269 23 3.1386 4.3
1.28m_camera_height 1.28_5.jpg 2463 1477 5 3.8396 23.2 4.6609 6.8 3.306 33.9 4.1063 17.9
1.28m_camera_height 1.28_5.jpg 1924 1557 3.46 2.2546 34.8 2.7368 20.9 2.7609 20.2 3.4292 0.9
1.28m_camera_height 1.28_5.jpg 1035 1696 2.15 2.1368 0.6 2.5939 20.6 1.7918 16.7 2.2255 3.5
1.28m_camera_height 1.28_5.jpg 1715 1950 1.85 2.302 24.4 2.7945 51.1 1.6355 11.6 2.0314 9.8
1.35m_camera_height 1.35_1.jpg 3021 1188 2.25 2.8952 28.7 3.5145 56.2 1.9857 11.7 2.4664 9.6
1.35m_camera_height 1.35_1.jpg 440 1327 4.02 3.9856 0.9 4.8382 20.4 2.457 38.9 3.0518 24.1
1.35m_camera_height 1.35_1.jpg 1569 1505 7.52 6.6171 12 8.0326 6.8 4.37 41.9 5.4279 27.8
1.35m_camera_height 1.35_1.jpg 1760 1684 5.44 4.7773 12.2 5.7992 6.6 3.0855 43.3 3.8325 29.6
1.35m_camera_height 1.35_1.jpg 2183 1717 3.37 2.7821 17.4 3.3772 0.2 1.8623 44.7 2.3132 31.4
1.35m_camera_height 1.35_10.jpg 1371 931 5.49 4.6262 15.7 5.6159 2.3 4.4503 18.9 5.5277 0.7
1.35m_camera_height 1.35_10.jpg 1924 1082 4.39 3.5187 19.8 4.2714 2.7 3.8639 12 4.7993 9.3
1.35m_camera_height 1.35_10.jpg 2200 1557 1.69 2.4063 42.4 2.921 72.8 2.6463 56.6 3.2869 94.5
1.35m_camera_height 1.35_10.jpg 2658 1743 3.83 2.972 22.4 3.6077 5.8 3.0899 19.3 3.8379 0.2
1.35m_camera_height 1.35_10.jpg 1157 1760 2.94 2.4592 16.4 2.9852 1.5 2.5036 14.8 3.1097 5.8
1.35m_camera_height 1.35_11.jpg 1654 776 3.25 4.1262 27 5.0088 54.1 2.5655 21.1 3.1866 2
1.35m_camera_height 1.35_11.jpg 2032 1200 4.16 3.711 10.8 4.5048 8.3 2.9203 29.8 3.6273 12.8
1.35m_camera_height 1.35_11.jpg 2672 1922 3.04 2.7522 9.5 3.341 9.9 2.0356 33 2.5284 16.8
1.35m_camera_height 1.35_11.jpg 1694 1936 2.67 2.4104 9.7 2.926 9.6 1.7789 33.4 2.2095 17.2
1.35m_camera_height 1.35_12.jpg 1614 1317 5.05 4.1926 17 5.0895 0.8 4.5958 9 5.7084 13
1.35m_camera_height 1.35_12.jpg 2781 1418 6.72 3.5832 46.7 4.3497 35.3 3.8083 43.3 4.7303 29.6
1.35m_camera_height 1.35_12.jpg 1929 1691 2.74 2.8572 4.3 3.4684 26.6 2.4137 11.9 2.998 9.4
1.35m_camera_height 1.35_13.jpg 2705 1374 6.34 5.3141 16.2 6.4509 1.7 3.8266 39.6 4.753 25
1.35m_camera_height 1.35_13.jpg 2240 1781 5.52 4.6706 15.4 5.6697 2.7 3.7128 32.7 4.6116 16.5
1.35m_camera_height 1.35_13.jpg 1211 1945 3.74 3.2366 13.5 3.9289 5.1 2.5993 30.5 3.2286 13.7
1.35m_camera_height 1.35_2.jpg 1571 1298 6.85 9.5581 39.5 11.6027 69.4 5.9842 12.6 7.433 8.5
1.35m_camera_height 1.35_2.jpg 2378 1517 3.95 9.3921 137.8 11.4012 188.6 3.5356 10.5 4.3915 11.2
1.35m_camera_height 1.35_2.jpg 2825 1785 2.22 4.3247 94.8 5.2498 136.5 1.3812 37.8 1.7155 22.7
1.35m_camera_height 1.35_3.jpg 2637 1461 2.31 1.3555 41.3 1.6455 28.8 1.0371 55.1 1.2882 44.2
1.35m_camera_height 1.35_3.jpg 1174 1609 6.64 5.125 22.8 6.2213 6.3 4.9367 25.7 6.1319 7.7
1.35m_camera_height 1.35_3.jpg 1825 2035 3.92 2.486 36.6 3.0178 23 1.9572 50.1 2.431 38
1.35m_camera_height 1.35_4.jpg 3197 1143 4.01 6.4033 59.7 7.7731 93.8 5.9765 49 7.4234 85.1
1.35m_camera_height 1.35_4.jpg 1336 1498 5.82 4.8552 16.6 5.8938 1.3 5.5722 4.3 6.9212 18.9
1.35m_camera_height 1.35_4.jpg 2042 1616 5 4.4356 11.3 5.3844 7.7 4.6882 6.2 5.8232 16.5
1.35m_camera_height 1.35_4.jpg 392 2004 2.44 1.8988 22.2 2.305 5.5 2.1728 11 2.6988 10.6
1.35m_camera_height 1.35_5.jpg 1228 1322 5.92 6.8284 15.3 8.289 40 4.5267 23.5 5.6226 5
1.35m_camera_height 1.35_5.jpg 3009 1402 0.9 1.615 79.4 1.9605 117.8 1.2559 39.5 1.56 73.3
1.35m_camera_height 1.35_5.jpg 1381 1872 2.84 3.6859 29.8 4.4744 57.5 2.0214 28.8 2.5107 11.6
1.35m_camera_height 1.35_5.jpg 2583 1887 3.94 2.2756 42.2 2.7624 29.9 1.7105 56.6 2.1246 46.1
1.35m_camera_height 1.35_6.jpg 1602 1468 2.97 3.9684 33.6 4.8172 62.2 2.5853 13 3.2112 8.1
1.35m_camera_height 1.35_6.jpg 1270 1741 2.08 2.4636 18.4 2.9906 43.8 1.2471 40 1.5491 25.5
1.35m_camera_height 1.35_6.jpg 3127 1927 3.29 2.4779 24.7 3.0079 8.6 1.5565 52.7 1.9333 41.2
1.35m_camera_height 1.35_7.jpg 2065 1597 6.81 5.2169 23.4 6.3329 7 7.1371 4.8 8.8649 30.2
1.35m_camera_height 1.35_7.jpg 2352 1698 5.93 4.8495 18.2 5.8869 0.7 6.8319 15.2 8.4859 43.1
1.35m_camera_height 1.35_7.jpg 1960 1809 5.09 3.2452 36.2 3.9394 22.6 4.4382 12.8 5.5127 8.3
1.35m_camera_height 1.35_7.jpg 3235 1988 4.15 2.6686 35.7 3.2394 21.9 3.1692 23.6 3.9364 5.1
1.35m_camera_height 1.35_8.jpg 1884 1501 3.36 3.7062 10.3 4.499 33.9 2.7388 18.5 3.4019 1.2
1.35m_camera_height 1.35_8.jpg 2592 1531 4.3 3.4741 19.2 4.2172 1.9 3.0217 29.7 3.7532 12.7
1.35m_camera_height 1.35_8.jpg 1635 2065 2.13 2.5031 17.5 3.0385 42.7 2.1132 0.8 2.6248 23.2
1.35m_camera_height 1.35_9.jpg 1258 1157 5.34 5.9177 10.8 7.1835 34.5 5.6509 5.8 7.019 31.4
1.35m_camera_height 1.35_9.jpg 1421 1762 4.83 5.308 9.9 6.4434 33.4 4.3121 10.7 5.356 10.9
1.35m_camera_height 1.35_9.jpg 2590 1835 3.6 2.8339 21.3 3.4401 4.4 2.6131 27.4 3.2457 9.8
1.35m_camera_height 1.35_9.jpg 1910 1898 4.47 3.3149 25.8 4.024 10 3.6234 18.9 4.5006 0.7
1.35m_camera_height_person 1.35_person1.jpg 1087 423 3.25 1.6086 50.5 1.9526 39.9 1.5898 51.1 1.9746 39.2
1.35m_camera_height_person 1.35_person1.jpg 1687 811 4.36 2.5862 40.7 3.1394 28 2.1438 50.8 2.6628 38.9
1.35m_camera_height_person 1.35_person1.jpg 2185 971 2.02 1.1109 45 1.3485 33.2 0.8774 56.6 1.0898 46.1
1.35m_camera_height_person 1.35_person1.jpg 1477 1595 2.91 1.8658 35.9 2.265 22.2 1.6186 44.4 2.0105 30.9
1.35m_camera_height_person 1.35_person10.jpg 1774 1364 3.87 2.5035 35.3 3.039 21.5 2.0007 48.3 2.485 35.8
1.35m_camera_height_person 1.35_person10.jpg 1395 1465 6.68 6.4652 3.2 7.8482 17.5 3.9608 40.7 4.9197 26.4
1.35m_camera_height_person 1.35_person10.jpg 675 1543 2.8 1.8717 33.2 2.2721 18.9 1.7182 38.6 2.1342 23.8
1.35m_camera_height_person 1.35_person10.jpg 2329 1592 6.26 6.1338 2 7.4458 18.9 3.9216 37.4 4.871 22.2
1.35m_camera_height_person 1.35_person11.jpg 1884 1390 3.94 2.7461 30.3 3.3335 15.4 2.5267 35.9 3.1384 20.3
1.35m_camera_height_person 1.35_person11.jpg 1225 1418 9.95 9.2923 6.6 11.2801 13.4 6.8098 31.6 8.4584 15
1.35m_camera_height_person 1.35_person11.jpg 821 1501 2.62 1.8516 29.3 2.2477 14.2 2.2254 15.1 2.7641 5.5
1.35m_camera_height_person 1.35_person11.jpg 3171 1616 1.87 1.5301 18.2 1.8574 0.7 1.2751 31.8 1.5838 15.3
1.35m_camera_height_person 1.35_person2.jpg 2668 1482 6.48 5.7208 11.7 6.9445 7.2 3.684 43.1 4.5759 29.4
1.35m_camera_height_person 1.35_person2.jpg 2075 1548 3.07 2.1249 30.8 2.5795 16 1.7658 42.5 2.1933 28.6
1.35m_camera_height_person 1.35_person2.jpg 3327 1576 1.45 1.4746 1.7 1.79 23.4 1.0014 30.9 1.2439 14.2
1.35m_camera_height_person 1.35_person2.jpg 1016 1792 3.71 2.1018 43.3 2.5514 31.2 1.8501 50.1 2.298 38.1
1.35m_camera_height_person 1.35_person4.jpg 1755 1348 7.01 5.9307 15.4 7.1993 2.7 4.4181 37 5.4877 21.7
1.35m_camera_height_person 1.35_person4.jpg 1988 1517 4.08 4.3027 5.5 5.2231 28 2.6243 35.7 3.2597 20.1
1.35m_camera_height_person 1.35_person4.jpg 2818 1574 3.37 3.5213 4.5 4.2745 26.8 2.6822 20.4 3.3315 1.1

The content of the second part of the CSV:

folder image point_x point_y gt_m n-released_m n-released_err_pct n-calibrated_m n-calibrated_err_pct m-released_m m-released_err_pct m-calibrated_m m-calibrated_err_pct
1.35m_camera_height_person 1.35_person4.jpg 665 1800 2.2 1.235 43.9 1.4992 31.9 0.8453 61.6 1.05 52.3
1.35m_camera_height_person 1.35_person5.jpg 1889 1101 5.44 5.4926 1 6.6676 22.6 4.306 20.8 5.3484 1.7
1.35m_camera_height_person 1.35_person5.jpg 2378 1275 4.69 4.269 9 5.1822 10.5 3.1584 32.7 3.923 16.4
1.35m_camera_height_person 1.35_person5.jpg 1124 1548 3.17 2.2987 27.5 2.7905 12 1.4757 53.4 1.8329 42.2
1.35m_camera_height_person 1.35_person5.jpg 2251 1703 2.71 2.6238 3.2 3.1851 17.5 1.258 53.6 1.5626 42.3
1.35m_camera_height_person 1.35_person6.jpg 2021 1362 7.05 7.2703 3.1 8.8255 25.2 5.6732 19.5 7.0466 0
1.35m_camera_height_person 1.35_person6.jpg 1689 1416 4.85 4.9744 2.6 6.0385 24.5 3.6327 25.1 4.5121 7
1.35m_camera_height_person 1.35_person6.jpg 2291 1640 2.82 2.1052 25.3 2.5556 9.4 1.518 46.2 1.8855 33.1
1.35m_camera_height_person 1.35_person6.jpg 1470 1927 2 1.7034 14.8 2.0678 3.4 1.3504 32.5 1.6773 16.1
1.35m_camera_height_person 1.35_person7.jpg 1929 1320 9.6 8.0894 15.7 9.8198 2.3 5.9287 38.2 7.364 23.3
1.35m_camera_height_person 1.35_person7.jpg 1604 1397 7 5.4419 22.3 6.606 5.6 4.6647 33.4 5.794 17.2
1.35m_camera_height_person 1.35_person7.jpg 2402 1430 3.91 2.575 34.1 3.1258 20.1 2.1075 46.1 2.6177 33.1
1.35m_camera_height_person 1.35_person7.jpg 898 1628 1.86 1.5914 14.4 1.9318 3.9 1.5039 19.1 1.868 0.4
1.35m_camera_height_person 1.35_person8.jpg 1574 1150 7.4 2.7287 63.1 3.3124 55.2 3.3457 54.8 4.1556 43.8
1.35m_camera_height_person 1.35_person8.jpg 1258 1270 5.54 3.4175 38.3 4.1485 25.1 2.6923 51.4 3.3441 39.6
1.35m_camera_height_person 1.35_person8.jpg 2680 1378 3.75 2.3386 37.6 2.8388 24.3 1.9671 47.5 2.4433 34.8
1.35m_camera_height_person 1.35_person8.jpg 2160 1411 2.54 1.7996 29.2 2.1845 14 1.6123 36.5 2.0026 21.2
1.35m_camera_height_person 1.35_person9.jpg 3616 1232 2.29 1.9122 16.5 2.3213 1.4 1.2402 45.8 1.5405 32.7
1.35m_camera_height_person 1.35_person9.jpg 2696 1282 4.27 2.6319 38.4 3.1949 25.2 1.6572 61.2 2.0584 51.8
1.35m_camera_height_person 1.35_person9.jpg 1181 1585 3.54 2.6916 24 3.2674 7.7 1.5657 55.8 1.9448 45.1
1.35m_camera_height_person 1.35_person9.jpg 2000 1637 1.73 1.6918 2.2 2.0537 18.7 1.2457 28 1.5473 10.6
any_distance_person any_distance_person1.jpg 3127 1120 3.02 1.693 43.9 2.0552 31.9 1.9551 35.3 2.4284 19.6
any_distance_person any_distance_person1.jpg 1668 1261 8.55 6.7002 21.6 8.1334 4.9 5.3648 37.3 6.6635 22.1
any_distance_person any_distance_person1.jpg 2425 1280 5.45 3.5579 34.7 4.3189 20.8 3.8784 28.8 4.8173 11.6
any_distance_person any_distance_person1.jpg 705 1282 1.63 0.9842 39.6 1.1948 26.7 1.2337 24.3 1.5323 6
any_distance_person any_distance_person10.jpg 3211 1183 3.63 2.4837 31.6 3.015 16.9 1.8975 47.7 2.3569 35.1
any_distance_person any_distance_person10.jpg 1776 1230 4.96 3.9878 19.6 4.8408 2.4 3.554 28.3 4.4143 11
any_distance_person any_distance_person10.jpg 618 1367 1.89 1.3601 28 1.651 12.6 1.0157 46.3 1.2616 33.2
any_distance_person any_distance_person10.jpg 2329 1432 1.83 1.8086 1.2 2.1955 20 1.3787 24.7 1.7124 6.4
any_distance_person any_distance_person11.jpg 3112 872 3.93 2.2443 42.9 2.7244 30.7 2.3258 40.8 2.8889 26.5
any_distance_person any_distance_person11.jpg 823 1258 2.56 1.6563 35.3 2.0106 21.5 1.4576 43.1 1.8105 29.3
any_distance_person any_distance_person11.jpg 3360 1395 2.25 1.2312 45.3 1.4946 33.6 1.3502 40 1.677 25.5
any_distance_person any_distance_person11.jpg 2804 1475 4.34 2.2598 47.9 2.7432 36.8 2.3248 46.4 2.8877 33.5
any_distance_person any_distance_person11.jpg 1696 1611 1.1 1.2305 11.9 1.4938 35.8 1.1622 5.7 1.4435 31.2
any_distance_person any_distance_person12.jpg 1430 891 1.62 1.4653 9.5 1.7788 9.8 1.4624 9.7 1.8164 12.1
any_distance_person any_distance_person12.jpg 910 1007 5.65 5.0603 10.4 6.1428 8.7 4.6691 17.4 5.7995 2.6
any_distance_person any_distance_person12.jpg 3122 1195 2.59 2.1407 17.3 2.5986 0.3 1.8646 28 2.316 10.6
any_distance_person any_distance_person12.jpg 2261 1585 3.85 4.5406 17.9 5.5119 43.2 3.6711 4.6 4.5599 18.4
any_distance_person any_distance_person13.jpg 355 760 1.55 1.6452 6.1 1.9971 28.8 1.2239 21 1.5202 1.9
any_distance_person any_distance_person13.jpg 3028 920 2.81 2.1932 22 2.6623 5.3 1.9757 29.7 2.454 12.7
any_distance_person any_distance_person13.jpg 2223 1049 5.83 4.3824 24.8 5.3199 8.7 3.8569 33.8 4.7906 17.8
any_distance_person any_distance_person13.jpg 1484 1188 3.82 2.9794 22 3.6167 5.3 3.1201 18.3 3.8755 1.5
any_distance_person any_distance_person14.jpg 889 901 1.82 1.8358 0.9 2.2285 22.4 1.4292 21.5 1.7751 2.5
any_distance_person any_distance_person14.jpg 3110 922 2.95 2.3097 21.7 2.8038 5 2.0587 30.2 2.5571 13.3
any_distance_person any_distance_person14.jpg 1861 1188 4.61 6.239 35.3 7.5736 64.3 3.285 28.7 4.0803 11.5
any_distance_person any_distance_person14.jpg 2270 1630 3.76 4.2159 12.1 5.1177 36.1 2.4397 35.1 3.0304 19.4
any_distance_person any_distance_person15.jpg 882 298 1.69 1.2127 28.2 1.4721 12.9 1.2912 23.6 1.6038 5.1
any_distance_person any_distance_person15.jpg 3341 510 2.83 3.6627 29.4 4.4461 57.1 2.8839 1.9 3.582 26.6
any_distance_person any_distance_person15.jpg 2456 861 4.61 3.1726 31.2 3.8512 16.5 3.7301 19.1 4.6331 0.5
any_distance_person any_distance_person15.jpg 1908 1317 3.54 2.7314 22.8 3.3157 6.3 2.8181 20.4 3.5003 1.1
any_distance_person any_distance_person16.jpg 1604 1021 4.92 2.5911 47.3 3.1454 36.1 3.4738 29.4 4.3148 12.3
any_distance_person any_distance_person16.jpg 3181 1063 4.43 3.5788 19.2 4.3444 1.9 3.5059 20.9 4.3546 1.7
any_distance_person any_distance_person16.jpg 2701 1263 2.73 2.1937 19.6 2.663 2.5 2.5607 6.2 3.1806 16.5
any_distance_person any_distance_person16.jpg 844 1498 1.57 1.9412 23.6 2.3564 50.1 1.5376 2.1 1.9099 21.6
any_distance_person any_distance_person17.jpg 1317 291 1.28 1.2224 4.5 1.4839 15.9 1.0212 20.2 1.2684 0.9
any_distance_person any_distance_person17.jpg 407 691 2.27 2.9381 29.4 3.5666 57.1 1.9569 13.8 2.4306 7.1
any_distance_person any_distance_person17.jpg 2760 741 5.21 5.4296 4.2 6.5911 26.5 3.4577 33.6 4.2948 17.6
any_distance_person any_distance_person17.jpg 2207 750 5.74 5.5807 2.8 6.7745 18 3.8514 32.9 4.7838 16.7
any_distance_person any_distance_person18.jpg 2124 1167 4.2 4.6954 11.8 5.6998 35.7 3.8742 7.8 4.8121 14.6
any_distance_person any_distance_person18.jpg 795 1310 2.58 2.6453 2.5 3.2112 24.5 1.8852 26.9 2.3416 9.2
any_distance_person any_distance_person18.jpg 1470 1512 1.08 0.9418 12.8 1.1432 5.9 0.6853 36.6 0.8511 21.2
any_distance_person any_distance_person18.jpg 2804 1694 1.32 1.1651 11.7 1.4143 7.1 0.8476 35.8 1.0528 20.2
any_distance_person any_distance_person19.jpg 3042 731 1.5 1.1958 20.3 1.4516 3.2 1.0711 28.6 1.3304 11.3
any_distance_person any_distance_person19.jpg 1929 955 4.04 2.54 37.1 3.0833 23.7 2.9636 26.6 3.6811 8.9
any_distance_person any_distance_person19.jpg 2277 1385 5.9 5.0443 14.5 6.1234 3.8 3.5656 39.6 4.4289 24.9
any_distance_person any_distance_person19.jpg 823 1400 2.27 2.1127 6.9 2.5646 13 1.7267 23.9 2.1447 5.5
any_distance_person any_distance_person2.jpg 1138 924 4.9 3.8443 21.5 4.6667 4.8 3.6838 24.8 4.5756 6.6
any_distance_person any_distance_person2.jpg 3755 1032 4.19 3.3745 19.5 4.0963 2.2 2.9701 29.1 3.6891 12
any_distance_person any_distance_person2.jpg 2720 1169 6.62 4.7503 28.2 5.7665 12.9 4.3507 34.3 5.4039 18.4
any_distance_person any_distance_person2.jpg 1910 1223 3.31 2.7268 17.6 3.3101 0 2.4986 24.5 3.1035 6.2
any_distance_person any_distance_person20.jpg 2004 771 1.47 1.3105 10.8 1.5909 8.2 1.2093 17.7 1.502 2.2
any_distance_person any_distance_person20.jpg 750 988 3.6 1.7921 50.2 2.1755 39.6 2.4042 33.2 2.9862 17
any_distance_person any_distance_person20.jpg 1324 1051 6.43 3.591 44.2 4.3592 32.2 3.334 48.1 4.1412 35.6
any_distance_person any_distance_person20.jpg 3322 1242 2.5 1.2764 48.9 1.5495 38 1.5791 36.8 1.9614 21.5
any_distance_person any_distance_person21.jpg 3296 435 2.19 2.3561 7.6 2.8601 30.6 1.6668 23.9 2.0704 5.5
any_distance_person any_distance_person21.jpg 2482 710 6.11 6.7147 9.9 8.151 33.4 4.5877 24.9 5.6984 6.7
any_distance_person any_distance_person21.jpg 637 851 1.34 1.6485 23 2.0012 49.3 1.0826 19.2 1.3447 0.3
any_distance_person any_distance_person21.jpg 1898 851 4.24 5.5483 30.9 6.7351 58.8 3.3547 20.9 4.1668 1.7
any_distance_person any_distance_person22.jpg 2837 811 2.01 1.2747 36.6 1.5474 23 1.2498 37.8 1.5523 22.8
any_distance_person any_distance_person22.jpg 971 901 2.91 2.0003 31.3 2.4282 16.6 2.088 28.2 2.5935 10.9
any_distance_person any_distance_person22.jpg 2418 1317 4.05 2.9828 26.3 3.6209 10.6 2.7173 32.9 3.3752 16.7
any_distance_person any_distance_person22.jpg 2087 1404 4.05 3.9794 1.7 4.8306 19.3 3.2843 18.9 4.0793 0.7
any_distance_person any_distance_person23.jpg 3028 865 1.65 1.3879 15.9 1.6847 2.1 1.1055 33 1.3731 16.8
any_distance_person any_distance_person23.jpg 1889 1127 4.19 3.0017 28.4 3.6438 13 2.2709 45.8 2.8207 32.7
any_distance_person any_distance_person23.jpg 456 1585 2.76 2.0106 27.2 2.4407 11.6 2.054 25.6 2.5512 7.6
any_distance_person any_distance_person23.jpg 2162 1837 2.32 1.9662 15.2 2.3868 2.9 1.79 22.8 2.2234 4.2
any_distance_person any_distance_person24.jpg 1618 922 2.56 1.7938 29.9 2.1775 14.9 1.8568 27.5 2.3064 9.9
any_distance_person any_distance_person24.jpg 2809 941 4.39 2.5334 42.3 3.0753 29.9 2.7726 36.8 3.4438 21.6
any_distance_person any_distance_person24.jpg 3400 1811 3.03 2.4692 18.5 2.9974 1.1 2.1808 28 2.7087 10.6
any_distance_person any_distance_person24.jpg 2668 1891 1.2 1.6319 36 1.981 65.1 1.5272 27.3 1.8969 58.1
any_distance_person any_distance_person25.jpg 2611 844 2.68 1.9429 27.5 2.3585 12 1.9397 27.6 2.4092 10.1
any_distance_person any_distance_person25.jpg 1524 985 4.57 3.947 13.6 4.7913 4.8 3.2643 28.6 4.0545 11.3
any_distance_person any_distance_person25.jpg 1748 1583 3.19 2.6548 16.8 3.2227 1 2.4992 21.7 3.1042 2.7
any_distance_person any_distance_person25.jpg 785 2058 1.78 1.9458 9.3 2.362 32.7 1.4713 17.3 1.8275 2.7
any_distance_person any_distance_person26.jpg 2517 1235 3.14 1.6881 46.2 2.0492 34.7 1.839 41.4 2.2842 27.3
any_distance_person any_distance_person26.jpg 1698 1282 4.5 1.3351 70.3 1.6207 64 1.7893 60.2 2.2224 50.6
any_distance_person any_distance_person26.jpg 3642 1312 2.2 1.363 38 1.6545 24.8 1.3689 37.8 1.7003 22.7
any_distance_person any_distance_person26.jpg 602 1510 1.14 0.9344 18 1.1343 0.5 0.9917 13 1.2317 8
any_distance_person any_distance_person27.jpg 1367 1312 3.04 1.7097 43.8 2.0754 31.7 1.8604 38.8 2.3108 24
any_distance_person any_distance_person27.jpg 3508 1345 2.28 1.1198 50.9 1.3594 40.4 1.4278 37.4 1.7734 22.2
any_distance_person any_distance_person27.jpg 2256 1390 1.31 1.0925 16.6 1.3262 1.2 1.1943 8.8 1.4834 13.2
any_distance_person any_distance_person27.jpg 329 1392 2.4 1.6247 32.3 1.9723 17.8 2.002 16.6 2.4867 3.6
any_distance_person any_distance_person28.jpg 2477 1195 4.59 2.6407 42.5 3.2055 30.2 2.6825 41.6 3.332 27.4
any_distance_person any_distance_person28.jpg 1710 1272 3.97 2.5807 35 3.1327 21.1 2.5254 36.4 3.1368 21
any_distance_person any_distance_person28.jpg 2943 1371 3.43 2.1479 37.4 2.6074 24 2.0442 40.4 2.5391 26
any_distance_person any_distance_person28.jpg 1169 1520 1.81 1.7155 5.2 2.0825 15.1 1.4682 18.9 1.8236 0.8
any_distance_person any_distance_person29.jpg 3491 734 3.51 2.7289 22.3 3.3127 5.6 1.3434 61.7 1.6687 52.5
any_distance_person any_distance_person29.jpg 731 891 1.88 2.8076 49.3 3.4082 81.3 1.7078 9.2 2.1213 12.8
any_distance_person any_distance_person29.jpg 3129 1454 4.36 3.5912 17.6 4.3594 0 2.0901 52.1 2.5961 40.5
any_distance_person any_distance_person29.jpg 447 1901 1.7 2.5322 49 3.0738 80.8 1.4859 12.6 1.8456 8.6
any_distance_person any_distance_person3.jpg 3148 785 1.96 1.3493 31.2 1.638 16.4 1.4675 25.1 1.8228 7
any_distance_person any_distance_person3.jpg 1141 1110 4.36 3.9085 10.4 4.7445 8.8 3.1301 28.2 3.8878 10.8
any_distance_person any_distance_person3.jpg 710 1218 3.24 4.3677 34.8 5.3021 63.6 2.7852 14 3.4594 6.8
any_distance_person any_distance_person3.jpg 2571 1418 2.73 2.0775 23.9 2.5219 7.6 2.0217 25.9 2.5111 8
any_distance_person any_distance_person30.jpg 3682 847 1.85 1.8705 1.1 2.2707 22.7 1.5364 17 1.9083 3.2
any_distance_person any_distance_person30.jpg 1367 1310 2.73 2.7046 0.9 3.2831 20.3 2.343 14.2 2.9102 6.6
any_distance_person any_distance_person30.jpg 760 1658 4.18 2.1542 48.5 2.615 37.4 1.8335 56.1 2.2773 45.5
any_distance_person any_distance_person30.jpg 3192 1861 1.98 2.1131 6.7 2.5651 29.5 1.7569 11.3 2.1823 10.2
any_distance_person any_distance_person31.jpg 2392 1181 4.43 4.1184 7 4.9994 12.9 3.6769 17 4.5671 3.1
any_distance_person any_distance_person31.jpg 1470 1604 2.54 4.1891 64.9 5.0852 100.2 3.0055 18.3 3.7331 47
any_distance_person any_distance_person31.jpg 3407 1927 1.52 1.6775 10.4 2.0363 34 0.796 47.6 0.9888 35
any_distance_person any_distance_person32.jpg 2025 1188 4.33 4.385 1.3 5.323 22.9 4.0039 7.5 4.9732 14.9
any_distance_person any_distance_person32.jpg 1143 1550 2.01 2.569 27.8 3.1185 55.1 2.112 5.1 2.6232 30.5
any_distance_person any_distance_person32.jpg 2105 1712 1.63 2.1969 34.8 2.6669 63.6 1.4518 10.9 1.8032 10.6
any_distance_person any_distance_person33.jpg 2668 670 3.13 2.8084 10.3 3.4091 8.9 2.2245 28.9 2.763 11.7
any_distance_person any_distance_person33.jpg 3148 1517 2.54 2.7255 7.3 3.3085 30.3 1.9638 22.7 2.4392 4
any_distance_person any_distance_person33.jpg 482 1604 2.3 2.2339 2.9 2.7117 17.9 1.8507 19.5 2.2987 0.1
any_distance_person any_distance_person34.jpg 487 889 0.85 1.4078 65.6 1.7089 101 1.0353 21.8 1.286 51.3
any_distance_person any_distance_person34.jpg 1865 1141 3.34 6.3346 89.7 7.6896 130.2 3.3267 0.4 4.1321 23.7
any_distance_person any_distance_person34.jpg 2143 1209 5.07 6.7674 33.5 8.2151 62 4.2661 15.9 5.2989 4.5
any_distance_person any_distance_person35.jpg 2040 1112 2.77 2.6756 3.4 3.248 17.3 2.2035 20.5 2.737 1.2
any_distance_person any_distance_person35.jpg 1621 1188 5.11 4.8407 5.3 5.8762 15 3.0453 40.4 3.7826 26
any_distance_person any_distance_person35.jpg 971 1237 2.96 4.1929 41.7 5.0898 72 2.5605 13.5 3.1804 7.4
any_distance_person any_distance_person35.jpg 2818 1305 0.95 1.7565 84.9 2.1322 124.4 1.4691 54.6 1.8248 92.1
any_distance_person any_distance_person36.jpg 3077 1032 4.24 2.2393 47.2 2.7183 35.9 2.5882 39 3.2148 24.2
any_distance_person any_distance_person36.jpg 555 1072 1.76 1.1758 33.2 1.4273 18.9 1.0959 37.7 1.3612 22.7
any_distance_person any_distance_person36.jpg 2388 1338 4.68 2.5123 46.3 3.0498 34.8 3.0252 35.4 3.7576 19.7
any_distance_person any_distance_person36.jpg 3463 1912 3.42 1.9718 42.3 2.3936 30 2.0815 39.1 2.5854 24.4
any_distance_person any_distance_person37.jpg 1204 1458 6.21 5.9242 4.6 7.1915 15.8 3.8953 37.3 4.8384 22.1
any_distance_person any_distance_person37.jpg 2030 1576 4.07 5.9638 46.5 7.2396 77.9 2.473 39.2 3.0717 24.5
any_distance_person any_distance_person37.jpg 2468 1590 2.79 1.4664 47.4 1.7801 36.2 1.2305 55.9 1.5284 45.2
any_distance_person any_distance_person38.jpg 2360 1070 6.53 9.7807 49.8 11.8729 81.8 4.9272 24.5 6.12 6.3
any_distance_person any_distance_person38.jpg 2727 1254 3.35 5.4429 62.5 6.6072 97.2 3.2591 2.7 4.0481 20.8
any_distance_person any_distance_person38.jpg 1536 1275 6.83 11.328 65.9 13.7512 101.3 5.3937 21 6.6995 1.9
any_distance_person any_distance_person38.jpg 517 2037 1.55 1.7808 14.9 2.1617 39.5 1.3654 11.9 1.696 9.4
any_distance_person any_distance_person39.jpg 1397 816 2.26 2.1402 5.3 2.5981 15 1.2925 42.8 1.6055 29
any_distance_person any_distance_person39.jpg 2774 1164 1.67 2.0005 19.8 2.4285 45.4 1.6678 0.1 2.0715 24
any_distance_person any_distance_person39.jpg 1936 1550 3.33 3.0192 9.3 3.6651 10.1 2.3514 29.4 2.9206 12.3
any_distance_person any_distance_person39.jpg 3082 1691 1.21 1.6583 37.1 2.013 66.4 1.4748 21.9 1.8319 51.4
any_distance_person any_distance_person4.jpg 3065 1025 2.1 1.6073 23.5 1.9511 7.1 1.4158 32.6 1.7586 16.3
any_distance_person any_distance_person4.jpg 1009 1084 3.09 2.5451 17.6 3.0896 0 1.9296 37.6 2.3967 22.4
any_distance_person any_distance_person4.jpg 590 1124 5.46 3.7136 32 4.5079 17.4 3.3512 38.6 4.1625 23.8
any_distance_person any_distance_person4.jpg 1837 1592 1.65 1.2022 27.1 1.4594 11.6 1.0509 36.3 1.3053 20.9
any_distance_person any_distance_person40.jpg 1677 948 1.79 3.4951 95.3 4.2427 137 2.1523 20.2 2.6734 49.3
any_distance_person any_distance_person40.jpg 1844 983 2.54 3.5051 38 4.2549 67.5 2.7888 9.8 3.464 36.4
any_distance_person any_distance_person40.jpg 1305 990 1.04 1.998 92.1 2.4254 133.2 1.3648 31.2 1.6953 63
any_distance_person any_distance_person40.jpg 2355 1538 5.59 4.9749 11 6.0391 8 4.4728 20 5.5557 0.6
any_distance_person any_distance_person41.jpg 3407 976 0.48 1.0557 119.9 1.2816 167 0.4725 1.6 0.5869 22.3
any_distance_person any_distance_person41.jpg 2352 992 0.93 4.4332 376.7 5.3815 478.7 2.1174 127.7 2.63 182.8
any_distance_person any_distance_person41.jpg 1903 1011 1.35 2.916 116 3.5398 162.2 1.2486 7.5 1.5509 14.9
any_distance_person any_distance_person41.jpg 430 1044 0.93 3.2141 245.6 3.9016 319.5 0.8646 7 1.0739 15.5
any_distance_person any_distance_person41.jpg 1225 1160 0.31 0.9133 194.6 1.1087 257.7 0.413 33.2 0.513 65.5
any_distance_person any_distance_person42.jpg 1941 1011 2.92 2.4616 15.7 2.9882 2.3 1.6918 42.1 2.1014 28
any_distance_person any_distance_person42.jpg 1070 1350 1.62 3.1507 94.5 3.8246 136.1 1.5914 1.8 1.9766 22
any_distance_person any_distance_person42.jpg 1505 1402 1.34 2.785 107.8 3.3808 152.3 1.2486 6.8 1.5508 15.7
any_distance_person any_distance_person42.jpg 2251 1435 1.14 2.2329 95.9 2.7106 137.8 1.0803 5.2 1.3418 17.7
any_distance_person any_distance_person42.jpg 2814 1663 0.65 1.4264 119.4 1.7315 166.4 0.6114 5.9 0.7594 16.8
any_distance_person any_distance_person43.jpg 1922 1280 2.02 2.7082 34.1 3.2875 62.7 1.0229 49.4 1.2706 37.1
any_distance_person any_distance_person43.jpg 2562 1343 1.69 2.045 21 2.4825 46.9 0.774 54.2 0.9614 43.1
any_distance_person any_distance_person43.jpg 2270 1376 1.37 1.8147 32.5 2.2029 60.8 0.732 46.6 0.9092 33.6
any_distance_person any_distance_person43.jpg 1152 1407 1.19 2.4554 106.3 2.9807 150.5 0.8228 30.9 1.022 14.1
any_distance_person any_distance_person43.jpg 1555 1576 0.78 1.4083 80.5 1.7095 119.2 0.5583 28.4 0.6935 11.1
any_distance_person any_distance_person44.jpg 2889 1054 1.68 2.0528 22.2 2.492 48.3 0.9037 46.2 1.1225 33.2
any_distance_person any_distance_person44.jpg 2400 1103 0.98 2.2109 125.6 2.6839 173.9 0.9736 0.7 1.2093 23.4
any_distance_person any_distance_person44.jpg 1668 1569 2.6 2.3394 10 2.8398 9.2 1.244 52.2 1.5451 40.6
any_distance_person any_distance_person44.jpg 1995 1672 2.2 1.9678 10.6 2.3888 8.6 1.2419 43.5 1.5426 29.9
any_distance_person any_distance_person44.jpg 1065 1788 1.8 1.7819 1 2.1631 20.2 0.9229 48.7 1.1464 36.3
any_distance_person any_distance_person45.jpg 903 489 1.09 1.6864 54.7 2.0471 87.8 0.9259 15.1 1.1501 5.5
any_distance_person any_distance_person45.jpg 2336 795 2.93 2.7333 6.7 3.3179 13.2 1.4971 48.9 1.8595 36.5
any_distance_person any_distance_person45.jpg 1717 1087 2.18 2.2971 5.4 2.7885 27.9 1.112 49 1.3812 36.6
any_distance_person any_distance_person45.jpg 2289 1948 1.51 1.4684 2.8 1.7825 18 0.8688 42.5 1.0791 28.5
any_distance_person any_distance_person46.jpg 2160 1105 4.36 5.2388 20.2 6.3594 45.9 4.3256 0.8 5.3728 23.2
any_distance_person any_distance_person46.jpg 1635 1334 5.21 5.8836 12.9 7.1422 37.1 4.5454 12.8 5.6458 8.4
any_distance_person any_distance_person46.jpg 2287 1451 3.81 4.5857 20.4 5.5667 46.1 3.6578 4 4.5433 19.2
any_distance_person any_distance_person46.jpg 574 1912 1.68 1.4857 11.6 1.8035 7.3 1.4661 12.7 1.8211 8.4
any_distance_person any_distance_person47.jpg 2167 1272 3.4 4.3984 29.4 5.3392 57 2.307 32.1 2.8655 15.7
any_distance_person any_distance_person47.jpg 2654 1369 2.22 4.1236 85.7 5.0057 125.5 1.6727 24.7 2.0777 6.4
any_distance_person any_distance_person47.jpg 1512 1378 1.86 2.9395 58 3.5682 91.8 0.9353 49.7 1.1618 37.5
any_distance_person any_distance_person47.jpg 1875 1475 1.41 2.8547 102.5 3.4654 145.8 0.8973 36.4 1.1145 21
any_distance_person any_distance_person47.jpg 3510 1790 0.91 1.943 113.5 2.3586 159.2 0.5962 34.5 0.7405 18.6
any_distance_person any_distance_person48.jpg 3122 912 0.53 1.0141 91.3 1.2311 132.3 0.6682 26.1 0.83 56.6
any_distance_person any_distance_person48.jpg 543 927 1.13 1.2939 14.5 1.5707 39 1.0706 5.3 1.3297 17.7
any_distance_person any_distance_person48.jpg 2115 985 1.63 2.9496 81 3.5805 119.7 1.7285 6 2.1469 31.7
any_distance_person any_distance_person48.jpg 1564 990 2.57 2.4184 5.9 2.9357 14.2 2.0549 20 2.5523 0.7
any_distance_person any_distance_person48.jpg 1901 1011 3.75 2.7321 27.1 3.3165 11.6 2.5898 30.9 3.2167 14.2
any_distance_person any_distance_person49.jpg 1665 578 2.88 2.9737 3.3 3.6099 25.3 2.7566 4.3 3.4239 18.9
any_distance_person any_distance_person49.jpg 1522 1494 2.43 2.5064 3.1 3.0425 25.2 2.2546 7.2 2.8004 15.2
any_distance_person any_distance_person49.jpg 2494 1832 2.03 2.3558 16 2.8597 40.9 1.9776 2.6 2.4564 21
any_distance_person any_distance_person5.jpg 1654 877 4.56 3.644 20.1 4.4235 3 3.6971 18.9 4.5921 0.7
any_distance_person any_distance_person5.jpg 442 1120 1.54 2.7951 81.5 3.3931 120.3 2.2768 47.8 2.8281 83.6
any_distance_person any_distance_person5.jpg 1058 1188 2.47 2.56 3.6 3.1076 25.8 2.1405 13.3 2.6587 7.6
any_distance_person any_distance_person5.jpg 2941 1560 1.12 0.9918 11.4 1.204 7.5 0.5947 46.9 0.7387 34
any_distance_person any_distance_person50.jpg 1312 251 4.43 2.6644 39.9 3.2344 27 2.4569 44.5 3.0516 31.1
any_distance_person any_distance_person50.jpg 1701 1134 3.59 2.77 22.8 3.3625 6.3 2.0741 42.2 2.5762 28.2
any_distance_person any_distance_person50.jpg 1750 1432 2.97 2.5163 15.3 3.0546 2.8 1.9937 32.9 2.4764 16.6
any_distance_person any_distance_person50.jpg 1752 1887 2.35 2.2427 4.6 2.7224 15.8 1.9454 17.2 2.4164 2.8
any_distance_person any_distance_person51.jpg 2543 988 4.79 3.559 25.7 4.3203 9.8 3.7954 20.8 4.7142 1.6
any_distance_person any_distance_person51.jpg 1694 1070 5.95 4.5691 23.2 5.5464 6.8 4.8194 19 5.9861 0.6
any_distance_person any_distance_person51.jpg 2607 1461 3.79 3.1486 16.9 3.8221 0.8 2.9404 22.4 3.6523 3.6
any_distance_person any_distance_person51.jpg 1910 1941 3.09 2.655 14.1 3.223 4.3 2.265 26.7 2.8134 9
any_distance_person any_distance_person52.jpg 2611 1517 3.44 1.4437 58 1.7525 49.1 1.8375 46.6 2.2823 33.7
any_distance_person any_distance_person52.jpg 2190 1621 4.69 3.9359 16.1 4.7778 1.9 3.386 27.8 4.2057 10.3
any_distance_person any_distance_person52.jpg 1461 1705 3.85 3.1885 17.2 3.8705 0.5 3.2451 15.7 4.0307 4.7
any_distance_person any_distance_person52.jpg 1938 2077 1.72 1.8132 5.4 2.2011 28 1.596 7.2 1.9823 15.3
any_distance_person any_distance_person53.jpg 1863 1007 2.28 1.9445 14.7 2.3604 3.5 1.2615 44.7 1.5669 31.3
any_distance_person any_distance_person53.jpg 2435 1355 1.27 1.1871 6.5 1.441 13.5 0.8579 32.5 1.0655 16.1
any_distance_person any_distance_person53.jpg 1272 1362 1.38 1.5408 11.6 1.8704 35.5 1.0274 25.5 1.2762 7.5
any_distance_person any_distance_person53.jpg 1611 1564 0.93 1.1037 18.7 1.3397 44.1 0.8574 7.8 1.065 14.5
any_distance_person any_distance_person54.jpg 310 889 2.8 2.2457 19.8 2.726 2.6 2.2368 20.1 2.7783 0.8
any_distance_person any_distance_person54.jpg 2924 917 1.83 1.5162 17.1 1.8405 0.6 1.3418 26.7 1.6667 8.9
any_distance_person any_distance_person54.jpg 2063 957 4.4 3.0253 31.2 3.6724 16.5 2.7103 38.4 3.3665 23.5
any_distance_person any_distance_person54.jpg 1665 1042 3.59 2.8882 19.5 3.5061 2.3 2.6209 27 3.2554 9.3
any_distance_person any_distance_person55.jpg 3040 1192 2.33 2.8962 24.3 3.5158 50.9 1.7715 24 2.2004 5.6
any_distance_person any_distance_person55.jpg 2044 1275 2.07 1.9411 6.2 2.3563 13.8 1.139 45 1.4147 31.7
any_distance_person any_distance_person55.jpg 312 1435 1.55 1.4446 6.8 1.7537 13.1 0.9546 38.4 1.1857 23.5
any_distance_person any_distance_person55.jpg 1188 1609 1.01 1.0487 3.8 1.273 26 0.7351 27.2 0.913 9.6
any_distance_person any_distance_person56.jpg 1534 1291 2.26 4.896 116.6 5.9433 163 1.8059 20.1 2.2431 0.7
any_distance_person any_distance_person56.jpg 2647 1416 1.73 4.4027 154.5 5.3444 208.9 1.2355 28.6 1.5346 11.3
any_distance_person any_distance_person56.jpg 1990 1447 1.29 3.2964 155.5 4.0015 210.2 0.919 28.8 1.1415 11.5
any_distance_person any_distance_person56.jpg 604 1557 1.08 2.9446 172.6 3.5745 231 0.9158 15.2 1.1375 5.3
any_distance_person any_distance_person56.jpg 3496 1783 0.7 2.1659 209.4 2.6292 275.6 0.6028 13.9 0.7488 7
any_distance_person any_distance_person6.jpg 3468 1000 1.15 0.9167 20.3 1.1128 3.2 0.6487 43.6 0.8057 29.9
any_distance_person any_distance_person6.jpg 1837 1051 2.26 2.8627 26.7 3.4751 53.8 1.6915 25.2 2.101 7
any_distance_person any_distance_person6.jpg 164 1228 1.83 1.5889 13.2 1.9288 5.4 1.5862 13.3 1.9702 7.7
any_distance_person any_distance_person7.jpg 2077 849 4.45 3.4487 22.5 4.1864 5.9 2.4392 45.2 3.0297 31.9
any_distance_person any_distance_person7.jpg 3035 1112 1.18 0.9226 21.8 1.1199 5.1 0.7807 33.8 0.9697 17.8
any_distance_person any_distance_person7.jpg 437 1138 2.18 1.8825 13.6 2.2852 4.8 1.4642 32.8 1.8187 16.6
any_distance_person any_distance_person7.jpg 2023 1155 3.49 2.4012 31.2 2.9148 16.5 1.688 51.6 2.0966 39.9
any_distance_person any_distance_person8.jpg 1357 1150 5.68 4.3166 24 5.24 7.7 2.411 57.6 2.9947 47.3
any_distance_person any_distance_person8.jpg 684 1385 2.65 1.8918 28.6 2.2964 13.3 1.4419 45.6 1.7909 32.4
any_distance_person any_distance_person8.jpg 2741 1454 1.5 1.2737 15.1 1.5462 3.1 1.243 17.1 1.5439 2.9
any_distance_person any_distance_person9.jpg 1847 776 7.8 8.1295 4.2 9.8685 26.5 5.9813 23.3 7.4293 4.8
any_distance_person any_distance_person9.jpg 2009 1388 3.66 2.4788 32.3 3.0091 17.8 2.3249 36.5 2.8878 21.1
any_distance_person any_distance_person9.jpg 2418 1562 5.18 3.1838 38.5 3.8649 25.4 3.207 38.1 3.9834 23.1
any_distance_person any_distance_person9.jpg 896 1595 1.83 1.7596 3.8 2.136 16.7 1.4861 18.8 1.8458 0.9

Thanks for posting both CSV sections and the scripts, @hhhFuture. Reading the code, your delta1 formula is correct for positive, finite predictions. However, this is a point-level evaluation, not an exact reproduction of calibration scoring: you take one median prediction per full-resolution annotation disk, whereas calibration scores valid pixels on the resized maps and averages held-out fold scores. The calibration implementation also scores both fixed candidates across every fold, so the fold split alone should not be treated as the explanation for the reversed ordering. My earlier explanation was incomplete; the discrepancy remains unresolved without matching those evaluation populations.

The pasted rows do show approximately constant calibrated/released ratios—about 1.214 for n and 1.242 for m—which is consistent with a global scale change, rather than calibration changing scene structure.

For fine-tuning, I would start with the released m checkpoint because it is your stronger baseline. Use this as a conservative pilot, adapting the documented depth fine-tuning recipe while retaining your existing imgsz=768 evaluation resolution. These are starting values, not settings validated on your dataset.

from ultralytics import YOLO

model = YOLO("yolo26m-depth.pt")
model.train(
    data="train_depth.yaml",  # separate train/val splits
    imgsz=768,
    epochs=20,
    batch=4,
    optimizer="AdamW",
    lr0=1e-4,
    warmup_bias_lr=1e-4,
    freeze=11,
)

Here, freeze=11 freezes backbone layers 0–10. I would compare that pilot against a separate run with freeze=0, rather than assume freezing is necessarily better for your viewpoint shift. The freezing guide explains the argument’s behavior.

One important sparse-label check: inspect how many labeled pixels survive resizing and augmentation. The depth loss returns zero loss when a batch has fewer than 10 valid pixels, and gradient supervision requires neighboring valid pixels. Five measured locations therefore provide limited structural supervision even when expanded into disks; avoid enlarging those disks onto surfaces whose depth you did not measure.

Keep a scene-separated test set untouched by training and calibration. Training automatically calibrates its saved checkpoints on validation data, so compare the resulting checkpoint against your released and calibrated baselines using your point-level script on that independent test set before deciding whether to collect denser labels.

Hi @pderrenger, thanks for the recipe — I’m going the fine-tuning route now.

Quick context on where my labels come from, in case it helps anyone: my camera has no depth sensor, so the 123 sparse label sets were collected manually. I put small sticker markers on flat surfaces in the scene, measured each one with a laser rangefinder (perpendicular distance to the camera plane), then used a small script to write those distances into sparse NPY maps (one disk per measured point). It works, but it’s slow — so for fine-tuning I plan to generate dense pseudo-GT with Depth Anything 3, metric-scaled via the hfov formula. Per image it’s much closer to my laser measurements than the raw YOLO output (though it still fails in some scenes), and as you suggested I’ll validate it against the laser points before trusting it.

A few questions before I start:

  1. Is dense pseudo-GT fine for fine-tuning, assuming it’s accurate? All the previous guidance (and my calibration runs) used accurate SPARSE labels. I’ve read the doc tip about mixing in ~5–10% diverse general images to reduce catastrophic forgetting — but I want to confirm the dense pseudo-GT itself won’t degrade the model. Related: can I mix sparse laser NPYs and dense DA3 NPYs in one training set? (I believe the loss masks invalid pixels so this should be OK — just confirming.)

  2. Should the val split be laser-labeled images, since training auto-calibrates on it? You mentioned training automatically calibrates the saved checkpoints on the validation data. If my val split were DA3 pseudo-labeled, the auto-calibration would fit DA3’s residual bias into the checkpoint, right? So my plan is: train on DA3 dense (train split), validate on laser sparse (accurate). Does that sound correct?

  3. Should I scale-align DA3 to my laser points per image before using it as GT? I have 5 laser points per image. I could fit one scale factor per image against those points (median ratio) and correct the DA3 map, instead of trusting the raw hfov-scaled output. Good idea or overkill? And is there a rule of thumb for rejecting bad pseudo-labels — e.g. drop images where the median abs-rel vs laser points exceeds some threshold?

  4. Roughly how many images do I need, and what matters more — images or valid pixels? For sparse supervision specifically: does the model effectively “see” the number of valid pixels, or the number of images? Trying to figure out whether to prioritize more scenes or more measured points per scene.I’m not entirely sure if these 123 images are sufficient (based on the experience of previous training models for object detection, I think they probably aren’t).

Thanks again!

Hi @hhhFuture, training on checked DA3 pseudo-labels and validating/calibrating on separate laser-labeled images is a sensible pilot. A few important distinctions before you start.

Dense pseudo-labels are supported, but improvement is not guaranteed. YOLO26 depth pretraining itself uses DA3-generated labels, as described in the pseudo-labeled ImageNet documentation. That establishes the approach—not that every teacher map is reliable. I would exclude obvious teacher failures rather than train YOLO to reproduce them; matching five measured points does not verify the rest of the map.

You can mix sparse laser NPYs and dense pseudo-label NPYs across images in the same training split, keeping both in meters and unknown/untrusted pixels at 0. However, mixing does not give the two sources equal weight: the current depth loss implementation pools valid pixels across the batch for SILog, so dense maps can dominate sparse measurements in mixed batches. Gradient matching also requires neighboring valid pixels. I would therefore compare a pseudo-label-only pilot against a mixed-label pilot rather than assume adding sparse images automatically anchors the dense labels.

Yes, use representative laser-labeled validation images. The automatic calibration workflow selects calibration on validation labels after training. With pseudo-labeled validation data, that selection would judge agreement with DA3 rather than independently measured depth, potentially retaining its scale bias. Keep validation scenes out of training even if their training labels would have come from DA3, and retain a separate laser-labeled test set untouched by either process.

Per-image scale alignment is worth testing on the training images. I would try scale = median(laser_depth / da3_depth) at valid measured locations, then multiply the whole map by that scale. This can correct a global mismatch, but cannot repair incorrect scene structure—the same limitation as scale-only calibration. Inspect residual errors at every measured point, not only their median. I don’t have a validated rejection threshold for your setup; choose one from your application’s error tolerance, and consider leaving one laser point out of the fit to check whether the correction helps beyond the points used to estimate it. Do not report fitted-point agreement as independent validation.

Treat 123 images as an experiment, not a demonstrated sufficient dataset. Mechanically, the loss uses valid pixels, not an image-count quota, but many neighboring pixels are not independent scenes. Its pixel pooling and local gradient supervision explain why both label coverage and scene diversity matter. My recommendation is to prioritize new scenes/viewpoints—especially your low-camera failures—while placing measurements across different surfaces and distances within each scene. Start the pilot now, then expand based on held-out laser errors rather than targeting an unsupported minimum image count.