Data for study "The Storage Condition at Measurement Time Decides Denoiser Selection for Frozen Deep Pedestrian Detectors"
收藏资源简介:
Basic information---------------------------1. Journal article: The Storage Condition at Measurement Time Decides Denoiser Selection for Frozen Deep Pedestrian Detectors 2. DOI: concept DOI: 10.5281/zenodo.22643935 (resolves to the latest version) version 1: 10.5281/zenodo.22643936 (2026-09-07, files restricted) version 2 DOI: <assigned by Zenodo on publication> 3. Contact information Name: Vo Thanh Kiet Institution: VSB - Technical University of Ostrava E-mail: kiet.vo.thanh.st@vsb.cz ORCID: https://orcid.org/0009-0002-3278-8755 4. Dataset publication date: version 1: 2026-09-07; version 2: <set by Zenodo on publication> 5. Place of publication: Ostrava, Czechia ------------------------------------------------------------------6. Dataset Description================================================================================ This dataset contains the measurements, derived tables, statistical test outputs, dated analysisprotocols, frame hashes, own-trained denoiser checkpoints, the frozen detector of the core grid andthe source code behind the article named in item 1. The study asks under which storage condition afull-reference fidelity metric has to be measured before its choice of denoiser can be trusted, whenthe denoiser feeds a pedestrian detector whose weights are frozen and the frames carry additiveGaussian noise followed by a lossy Joint Photographic Experts Group (JPEG) storage stage. Its answeris that restoration fidelity, measured on uncompressed images, reads as a property of the denoiser,but in front of a frozen detector it is also a property of the storage condition under which it ismeasured.This version also holds, for the INRIA, CrowdHuman and CityPersons arms, the per-image detectorpredictions of a re-inference of their 367 detector cells and the paired frame-bootstrap confidenceintervals computed from them (gpu_runs/g1_perimage/). Selection regret is the detection cost, in mean average precision at intersection-over-union (IoU)0.50 (mAP@50; person AP@50 on INRIA, CrowdHuman and CityPersons), of deploying the denoiser a metricranks first instead of the best candidate of the same roster at the same operating point. Measuredon the frames the detector receives, the peak signal-to-noise ratio (PSNR) picks a near-optimaldenoiser; measured benchmark-style on the uncompressed pair it costs far more; on the losslesscontrols the two coincide by definition, so the cost comes from the mismatch between measurement anddeployment, not from the metric. An offline noise-level (sigma-hat) routing table and Restormer'spixel pass-through show the same dependence (values under "Numbers of the abstract"). PSNR needs aclean reference, so the selection is an offline step on frames in the deployment's storagecondition. All degradations are injected; natively degraded footage is not covered. Arms. An arm is one dataset under one storage recipe, evaluated as a unit over its noise levels.Eight are lossy -- the PnPLO (People and Person-Like Objects) main grid and PnPLO arm 1 at JPEGquality 95, the quality-sweep arms at 85 and 75 (E3), the PnPLO sigma = 50 arm (E4), and INRIA,CityPersons and CrowdHuman at quality 95 -- and two are lossless controls, PnPLO arm 1 and INRIA,whose noisy frames are stored as Portable Network Graphics (PNG). The benchmark-style measurementexists on both INRIA arms, both PnPLO arm-1 arms and the two E3 arms; CityPersons and CrowdHuman areJPEG only. Design. The core grid uses the 235-image PnPLO test split (944 / 160 / 235 train/val/test) and afrozen YOLOv9-M detector (mAP@50 0.745 clean; 0.695 / 0.542 / 0.399 noisy at sigma = 10 / 20 / 30).Stage order: Gaussian noise, JPEG quality-95 re-encode, the denoiser (output stored again as JPEGquality 95 on the main grid, E4, CrowdHuman and CityPersons), the frozen detector. The lever is thatJPEG stage, switched with all weights untouched (PnPLO arm 1, INRIA); the switch changes the framethe detector receives and does not isolate the storage stage as the sole cause. Twelve restorers:sigma-conditioned SwinIR, SCUNet and FFDNet; the level-blind Restormer (Gaussian-trained) andPromptIR (all-in-one); NAFNet (real noise, the Smartphone Image Denoising Dataset, SIDD); SCUNet-real; the own-trained DnCNN, convolutionalautoencoder (CAE) and CAE-PSO (particle swarm optimization); BM3D; a Gaussian filter. SwinIR andSCUNet run at the nearest available level (15 / 25 / 25 at sigma = 10 / 20 / 30, 50 at sigma = 50);FFDNet, the own-trained and the classical methods take the true sigma. Metrics: d_mAP50 (Delta-d inthe analysis files; the within-sigma mAP@50 change against the noisy baseline of the same arm),PSNR, the structural similarity index measure (SSIM) and the Structural Preservation Score(SPS_grad, SPS_edge), a supporting screen tested by the pre-specified gate V1 to V4; thestorage-condition claim rests on the selection regret, the noise-level table and the JPEG ablation.External arms: INRIA Person (nine detectors trained on clean INRIA, 90 test frames), CrowdHuman (500validation frames, four detectors pretrained on Common Objects in Context (COCO), zero-shot) andCityPersons (a fixed 200-frame subset, three COCO detectors, a pre-specified replication gate). Relation to version 1--------------------------------------------------------------------------------Version 1 (10.5281/zenodo.22643936) accompanied an earlier manuscript under an earlier title andclaim axis, which the article of this version withdraws: under lossy storage the level-blindrestorers are the LOWER-fidelity ones, and SPS is a supporting screen, not a contribution. Everyversion-1 data, result, checkpoint, smoke and code file is in this version at its version-1path, except that readme.txt and LICENSE.txt are rewritten, manifest/MANIFEST.csv and00_PATHS_README.txt regenerated, three figure scripts (make_p14_figs_v2.py, p14_stats_fig2.py,make_p14_f8.py) replaced by the copies that drew the current figures (wording and layout only; noinput, path or computation changed), and the four files of the version-1 protocol/ folder replacedby the redacted first-commit protocol set (the same three documents and six more). New:analysis_v2/, gpu_kits/ (the re-inference kit, called G1 in file names), gpu_runs/(its outputs), frames/, reports/, the protocol/ set,results/sigma_hat_imgset_identity.json, verify_jpeg_chroma_420.py with its output, and00_SANITISATION.csv. Sanitisation. Shipped code is as run, with local paths made relative or replaced by tokens such as<PNPLO_ROOT> (explained in 00_PATHS_README.txt), internal names replaced by role words ("theanalyst", "the first author"), authorship clauses reduced to their date and working notes removed,so it is not byte-identical to the files executed; a few data and provenance files were tokenised the same way.00_SANITISATION.csv gives the Secure Hash Algorithm 256-bit (SHA-256) hash of the original and ofthe shipped copy of every processed file; a hash recorded inside the package is that of theORIGINAL. smoke/task_b_permutation_LOCAL.json had its machine label neutralised and its line endingsset to Unix line feeds (LF) (version-1 SHA-256 793b8db20a0d4a2e368f9ed0ac16e1d852cfaae42671e6d8e7cfe25141a216c2; norow in 00_SANITISATION.csv). checkpoints/detector_yolov9m_clean/weights/best.pt is byte-identical toversion 1; its pickled training arguments keep the authors' Colab training paths, which thesanitised args.yaml holds as tokens. Not included-------------------------------------------------------------------------------- * Image data: the four corpora (PnPLO, INRIA Person, CrowdHuman, CityPersons), the noisy and the restored sets; frames/ names every input frame with its SHA-256. * The ground-truth boxes of INRIA, CrowdHuman and CityPersons (see "Parquet release"). * Third-party restorer checkpoints and code (SwinIR, SCUNet, SCUNet-real, FFDNet, Restormer, PromptIR, NAFNet); the further PnPLO and the nine INRIA detectors (available from the authors upon reasonable request); ultralytics downloads the COCO detectors. * Graphics processing unit (GPU) kits G2 to G4 and two unfinished central processing unit (CPU) analyses (nothing in the article rests on them), material for an unused figure, the parent-study notebook (core-grid noise, own-trained training), and the smoke outputs and caches of the version-2 analyses. What this version does NOT hold-------------------------------------------------------------------------------- * Per-image detector predictions for any PnPLO arm (main grid, arm 1, E3, E4, arms 2, 3 and 3b, cross-detector sweep): only set-level detection values; the G1 kit does not re-infer them. * Per-image fidelity and structure of the nine corrected own-trained cells (set-level only); their rows in data/pnplo/p14_sps_per_image.csv are the legacy tiling pass. * Per-image SSIM and SPS on the external arms (per-image PSNR of Restormer, PromptIR and SwinIR is in analysis_v2/p14_passthrough_audit_per_image.csv), and per-image latency timings (mean, median, standard deviation and count only). Per-image re-inference of the external arms (gpu_runs/g1_perimage/)--------------------------------------------------------------------------------After the analyses of the article were fixed, every detector cell of the stored external arms wasre-run with the kit on the stored frames, along each arm's original evaluation path and ultralyticspin, keeping every prediction: INRIA lossless (inria_png) and JPEG (inria_jpeg), 9 detectors x 13conditions each; CityPersons 3 x 19; CrowdHuman 4 x 19 (clean rows included); 367 cells. Nodenoising was run. env.json records five sessions on 2026-09-26, one NVIDIA A100 (40 GB) each,with software versions, GPU and script hashes: a kit-1.4 session (stopped by its tripwire at itsseventh cell; six cells kept), three kit-1.7 sessions and one kit-1.8 diagnosis of a single cell.The kit version of each cell is in the p14_g1_provenance record of its parquet file; the diagnosissession's checkpoint hash and data digest are in the flip record. Reproduction (p14_g1_ap_recomputed.csv, SUMMARY.json). Each cell's AP@50 is recomputed from itsparquet file and compared with the value stored in data/ (tolerance 0.002). Of the 360 cells with astored value, 358 PASS (largest difference 0.00026) and 2 are PASS_RECONCILED: the two YOLOv8m cellsof lossless INRIA, on opposite sides of the validator's conf = 0.25 gate (article Sec. 4,"Measurement floor"; analysis_v2/c15_ap_discretization.md). - clean: stored 0.8303 lacks one true positive scoring 0.2502 in this run, which reads 0.8384 (the JPEG arm's value on the same frames). Both branches are in the cell's note and g1_common.py (ANCHOR_RECONCILE), recorded after a failed first attempt (2026-09-25, kit 1.1), so post hoc; the stored branch was reproduced on a CPU (0.83027). - noisy, sigma = 20: stored 0.6625, re-inferred 0.6542. One true positive scores 0.2497, 3.4e-4 under the gate; admitting it (121 rather than 120 of 175) gives 0.66245, 5.1e-5 below the stored value: explained, not reproduced, and found after the cell failed its tripwire (post hoc). The kit note "honest readings of one protocol" overstates it: the stored branch is inferred from that box, not re-observed (gpu_runs/g1_perimage/flips/inria_png__YOLOv8m__noisy_s20.json).The tolerance was not changed; the parquet files hold the predictions as measured. Seven cells arePASS_UNANCHORED: the clean rows of CityPersons (3; clean frames PNG, noisy frames JPEG) andCrowdHuman (4), with no stored value. None is FLIP_1GRID, FLIP_UNRESOLVED, INVALID or NOT_RUN. Thedata_digest of each of the 100 clean and noisy cells equals the set_digest of its frame set inframes/frames_manifest.csv. Bootstrap (bootstrap/p14_v2_bootstrap_ci.csv, 895 rows; bootstrap_ci.py of kit 1.8, CPU): pairedimage bootstrap, B = 10,000, seed 20260925, one multinomial weight vector per resample and dataset,shared by all its arms, detectors and conditions (so the two INRIA arms are paired); each resamplerecomputes set-level AP@50 under the arm's own definition (ultralytics 101-point on INRIA,all-point PASCAL Visual Object Classes (VOC) elsewhere), never an average of per-image AP. Rows(cell AP, Delta-d, headroom, level-conditioned minus blind gap, storage contrasts) each give apointwise 95% percentile and bias-corrected and accelerated (BCa) interval, resampling frames withrestorers and detectors fixed. Notes: 24 of the 30 Delta-d rows of Restormer on JPEG INRIA (23 per-detector rows and the pooledrow at sigma = 30; its output is within two grey levels of its input) are degenerate: all zero, z0and accel "nan". The "cells" columnprints four significant digits (re-derived pooled points off by up to 1.5e-4). Lossless-INRIApoints use the re-inferred branch of the two gate cells (nine rows differ by more than 0.0015 fromstored-value arithmetic; gap rows unaffected). Percentile and BCa disagree on excluding zero in 19rows (17 on INRIA; z0 reaches -1.11); the article quotes the percentile interval and names BCathere. p_gt_0 and p_gt_thr are shares of resamples above 0 and 0.08, not probabilities. Parquet release. Every parquet file was rewritten for this release (pyarrow 21.0.0, the kit's writersettings) with two changes only: the provenance paths (schema key p14_g1_provenance) became tokens,with a key release_note added; and gt_xyxy (and, in the INRIA files, gt_xyxy_eval) are empty in every row, because theannotations are not redistributed (CityPersons: Cityscapes terms; CrowdHuman: non-commercialresearch only; INRIA treated the same). Frame names, n_gt and every prediction with box, score,class and both true-positive flags are kept; all other columns equal the originals, and everycell's AP@50 recomputes exactly. The recorded parquet hashes (parquet_sha256, flip record, bootstrapprovenance) are those of the files as the kit wrote them (pyarrow 23.0.1);gpu_runs/g1_perimage/00_PARQUET_SHA256_MAP.csv maps all 367 to the shipped files. env.json, the fliprecord and the bootstrap provenance had the same path replacement. read_cell(), cell_ap() andbootstrap_ci.py work without boxes; the kit's box re-matching checks need them. To re-attach them,rebuild each frame's YOLO-format labels as for the kit's inputs(source_code/task_a_crowdhuman/prep_crowdhuman.py from annotation_val.odgt;source_code/task_a_citypersons/prep_citypersons.py from anno_val.mat, whose Message-Digest 5 (MD5)hash data/citypersons/citypersons_provenance_manifest.json records; for INRIA the Roboflow exportof its test split, person = class 1), convert them as g1_common.load_gt_verbatim does and mapgt_xyxy_eval by the ratio_pad of eval_meta; n_gt is the count to check against. Not shipped from that run: the bootstrap cache, smoke runs, session logs, stale tripwire markers, anarchived partial run of 2026-09-25 (kit 1.1), and a superseded kit-1.4 parquet file with bitwiseidentical predictions. p14_g1_ap_recomputed.csv has 369 rows: read the last row per cell; the two earlier rows ofinria_png / YOLOv8m / noisy_s20 (INVALID, kit 1.4; FLIP_1GRID, kit 1.7) record how that cell washandled. Reproduce from the package root on a CPU (the first command, the default smoke mode with 200resamples, writing to <dir>/_smoke/, reproduces the point of all 895 rows; the second gives the10,000-resample intervals): python gpu_kits/g1_perimage_ci/bootstrap_ci.py --in gpu_runs/g1_perimage --out-dir <dir> python gpu_kits/g1_perimage_ci/bootstrap_ci.py --in gpu_runs/g1_perimage --out-dir <dir> --full Note on the image data. PnPLO is a public benchmark (Karthika and Chandran, 2020; distributed as"karthika95/pedestrian-detection"); INRIA Person, CrowdHuman and CityPersons come from theiroriginal providers, and CityPersons carries a non-commercial research licence. No frame of anycorpus is redistributed. Noise seeding: (a) core grid: np.random.seed(sigma) with sequential draws,in the parent-study notebook (not included); (b) main-notebook arms and both INRIA arms: a per-imagegenerator seeded by (140704, sigma, the 32-bit cyclic redundancy check (CRC32) of the image key);(c) CrowdHuman: default_rng(0), sequential (prep_crowdhuman.py); (d) CityPersons: the CRC32 of"stem|sigma" (prep_citypersons.py); (e) in-sample noise-level run: default_rng(20260720 + sigma)(validate_sigma.py); the held-out run uses (b). PnPLO clean frames are third-party JPEGs asdistributed, of mixed quality and subsampling (analysis_v2/p14_jpeg_header_forensics_clean.csv);every pipeline JPEG whose header was read is quality 95, 4:2:0. Note on third-party restorers. Their published weights and architecture code are not redistributed;the checkpoint used, its training corruption and level are in the article's checkpoint-provenancetable, download locations in the notebook headers. The notebooks fetch architecture files from theauthors' repositories on their default branch; after an upstream refactor the revision ofJuly-August 2026 may be needed. Loads use strict=True. Note on the two evaluation pipelines. An earlier tiling of the own-trained baselines under-coveredthe bottom and right image margins. All article numbers use outputs regenerated with the correctedtiling, with detection of the nine affected cells re-run in one ultralytics 8.4.98 session. Bothpasses are kept, told apart by "variant" in data/pnplo/p14_fidelity_test235_fixed.csv (old, fixed,control) and "arm" in data/pnplo/p14_1c_corrected_detection.csv (noisy, old, fixed, control_old,panel). The regeneration used other hardware with mixed precision, so the sigma = 30 shifts exceedthe margin effect alone (about +0.009 mAP@50). The corrected outputs come from the depositedown-trained checkpoints, the legacy outputs from an earlier set that is not deposited(analysis_v2/checkpoint_identity_summary.csv). Note on library versions and evaluators. Each arm other than the core grid is read within oneultralytics release: 8.4.90 (both INRIA arms, cross-detector sweep), 8.4.96 (CrowdHuman), 8.4.98(control re-evaluations, permutation gate), 8.4.105 (CityPersons). The detector was trained under8.4.58. The main pipeline notebook installs ultralytics unpinned and does not record it; itsYOLOv9-M cells reproduce in-session under 8.4.90 (SwinIR / noisy 0.638 / 0.399 at sigma = 30) and8.4.98. The validator (conf = 0.25, IoU 0.5, input 640) scores all arms except CrowdHuman andCityPersons, which use model.predict (conf = 0.001, non-maximum suppression IoU 0.7) and aself-contained VOC person AP@50 (eval_harddata.py, eval_citypersons.py); only directions andrelative gaps compare across the two. Note on the arms. CityPersons uses a custom person AP@50 protocol on a fixed 200-frame subset (the500-frame arm planned after the gate was not run), NOT the official log-average miss-rate (MR^-2)protocol, so its absolute numbers are not comparable with that benchmark's leaderboard. Its verdictwas partial replication: the separation direction holds in all nine detector-by-sigma cells and thepooled gap grows monotonically, but the sigma = 30 gap of +0.072 falls 0.008 short of the pre-stated+0.08 and PSNR does track the benefit there. Its protocol was committed after the run; its pre-rundating rests on a modification time and a working-log entry (protocol/PROTOCOLS_INDEX.md). The twoINRIA arms share their 90 clean frames, noise draws, detectors and pin, and differ by one JPEGquality-95 cycle of the noisy frames. Note on the shipped code. Code is shipped as run, subject to the sanitisation above. Scripts findthe package root from their location or P14_PKG_ROOT, and frames from P14_IMAGE_ROOT_PNPLO,P14_IMAGE_ROOT_INRIA, P14_IMAGE_ROOT_CROWDHUMAN and P14_IMAGE_ROOT_CITYPERSONS (andP14_CROWDHUMAN_SOURCE, P14_CITYPERSONS_SOURCE for two Colab notebooks); a missing image root printsa NOTICE, while the Colab notebooks keep their own fail-fast checks. Outputs go to P14_FIG_OUT(default fig_out/) or P14_OUT_DIR (default _rerun/<task>). The working notes (WORKFLOW.md files,notebook headers, the kit README) are contemporaneous internal work-orders kept for provenance; themain notebook's comments, messages and markdown cells are in Vietnamese, and the task_bcd andtask_letterbox notes are provided in English translation. In the working notes "the analyst" is a roleplaceholder, not a named person; an instruction to stop and report a failed check to "the analyst"means: stop, do not loosen the check, and contact the contact person of this record (item 3). On a staged copy (2026-09-26, CPU, no images) the stats scripts, thefigure scripts (ten data figures; PDF metadata differ) and the regret, panel, protocol-table,ablation and floor scripts of analysis_v2/ reproduced their outputs (c14_sigmahat_panel.tex up toits input-hash comment), and the kit self-test passed. analysis_v2/c9_probe_both_checkpoints.pycannot run (reference files not kept); the superseded p14_qual_fig.py and p14_qual_grid.py need theimage sets. IMPORTANT: Do not modify the file locations within the folder structure. Folder Structure-------------------------------------------------------------------------------- 14_sph_modern_denoisers_dataset (12 subfolders, readme.txt, LICENSE.txt, 00_SANITISATION.csv)├── analysis_v2 (NEW: CPU analyses of this version; 132 files)├── checkpoints (own-trained denoisers and the frozen YOLOv9-M detector; 15 files)├── data (measurements per benchmark; 17 files)├── frames (NEW: frame lists with the SHA-256 of every input frame; 33 files)├── gpu_kits (NEW: the re-inference kit g1_perimage_ci, version 1.8; 8 files)├── gpu_runs (NEW: g1_perimage, the kit's outputs on the external arms; 375 files)├── manifest (MANIFEST.csv and make_manifest.py; 2 files)├── protocol (dated protocols, redacted, index and conformance table; 19 files)├── reports (NEW: one run report; 1 file)├── results (statistics, gate verdicts, run environment; 17 files)├── smoke (side outputs, NOT article inputs; 8 files)├── source_code (notebooks, task bundles, statistics and figure scripts; 56 files)├── 00_SANITISATION.csv (NEW: original and shipped SHA-256 of every processed file)├── LICENSE.txt (authoritative licence)└── readme.txt (this file) File Descriptions--------------------------------------------------------------------------------data/ (as in version 1): pnplo/p14_gate_table.csv (core grid, 8 denoisers x 3 noise levels; d_map50 and d_f1 are the analysed within-sigma changes) with p14_sps_per_image.csv; arms_rows.csv (auxiliary arms: arm1/arm1_base = JPEG ablation, arm2, arm3, arm3b, e1_ffdnet, e2_nafnet, e3_qsweep, e4_sigma50); arms_latency.csv with its metadata; the corrected pass (p14_1c_corrected_detection.csv, p14_fidelity_test235_fixed.csv); xdet_full9_paper.csv (cross-detector); task_c_personlike_v2.csv (class-agnostic control) and p14_personlike_diag.csv (an earlier, unquoted diagnostic from a different evaluator, model.predict at conf = 0.001 with VOC AP, by a script not included; not comparable with task_c_personlike_v2.csv). inria/, crowdhuman/ and citypersons/ hold the external arms; citypersons_provenance_manifest.json (renamed from manifest.json) pins the 200 stems. IMPORTANT -- NINE SUPERSEDED CELLS: for autoencoder, dncnn and cae_pso at sigma = 10/20/30, d_map50 and d_f1 of p14_gate_table.csv are the legacy tiled pass, NOT the article's values (dncnn at sigma = 30: +0.149161 here, -0.054 in the article); use p14_1c_corrected_detection.csv and results/step2c_1c_results.json "tabgrid_new_d". source_code/figure_scripts/p14_fixed_patch.py replaces them before any figure or table is drawn. results/ (version 1 plus one file): step2_results.json, step2c_1c_results.json and step2d_results.json come from source_code/stats/. In step2_results.json, pnplo_v1_blocked (k = 4 of 5040, p = 7.9e-4) and pnplo_blocked_restorer (T = +0.076, k = 1 of 36, p = 0.028) are pre-correction, superseded by v1_new (k = 17 of 5040, p = 3.4e-3) and blocked9_new (T = +0.058, k = 8 of 36, p = 0.22) of step2c_1c_results.json; the city_* and crowdhuman_blocked keys of step2_results.json are current. The LEGACY precorrection verdict file (arms_gate_v2_verdict_LEGACY_precorrection.json) is the V1 to V4 gate before the corrected detection pass: SUPERSEDED for every detection entry (its rho 0.7857, p 1e-4 and V4 PASS differ from the published 0.821, 3.1e-5 / 3.4e-3 and "not resolved"), kept as the as-run gate record, and the file of record of the V3 Wilcoxon p (1.3228e-40), whose PSNR pairs are now in analysis_v2/cpu-regret_fidelity/ (no shipped script recomputes the p). perm_fixed_result.json (legacy detection; its rho 0.8214 matches, its per-sigma profile and p 6.0e-5 do not) and task_b_permutation.json (SAMPLED, p = 1.1e-4, although its key reads "p_exact") are SUPERSEDED; the V1 of record is rho_strat = 0.821 (per sigma 0.857 / 0.750 / 0.857) with the exact p 3.1e-5 of scunet_real_residuals.json. Also the tiling-regeneration gates and log (its permutation table pairs corrected fidelity with legacy detection and is not the published V1), corrected SSIM and SPS_edge results, task_d_env.txt (its seed line is construction (b); the core grid came from (a)), the IN-SAMPLE noise-level files (88.5 percent, no longer printed), sigma_hat_imgset_identity.json and qual_provenance.json. checkpoints/ (as in version 1): denoisers_own/ holds DnCNN, autoencoder (CAE) and CAE-PSO at sigma = 10/20/30 with the CAE-PSO *_params.yaml (sigma = 1 and 5 are not included). detector_yolov9m_clean/ holds weights/best.pt (about 41 MB; pickled training paths, see "Sanitisation"), args.yaml (paths as tokens) and results.csv (training log). source_code/: P14_SPH_Modern_Denoisers_Experiments.ipynb (main pipeline, outputs cleared; it reads the core-grid noisy and classical / own-trained denoised sets of the parent study); seven task_*/ bundles, one per follow-up experiment; cross_detector/ and inria_cross_dataset/; stats/ (three aggregation scripts and a byte-identical copy of step2d_results.json); sigma_hat/ (the wavelet estimator, validate_sigma.py); figure_scripts/ (figure scripts, p14_fixed_patch.py, style helpers, the side output qual_scan_cache.csv, verify_jpeg_chroma_420.py with its check CSV, and 00_PATHS_README.txt with the environment variables, path tokens and rewrite hashes). analysis_v2/ (new; flat because the scripts import each other; provenance hashes predate the release rewrite; image-reading scripts need --full for the complete run). Regret: c1_selection_regret.py, p14_selection_regret.csv (2,370 rows) with _candidates, _rosters, .tex (not used) and provenance; on the PnPLO main-grid rosters only three members have a benchmark measurement, so bench_psnr_uncompressed is partial there and not reported; c13_core_regret_table.* (Table 2). Noise level: sigma_hat_heldout.* (per-frame estimates, 14,765 rows; fitted on the 160 validation frames, scored on the 115 test frames no table was fitted on; one validation frame duplicates a test frame, val/image (156).jpg = test/image (204).jpg, which lies among the 120 in-sample frames, outside the held-out 115, and dropping it changes no figure) and c14_sigmahat_panel.* (Table 3). Storage (c5_*): pass-through audit (per-image file a superset at CrowdHuman sigma = 20 and 30; the summary uses the largest complete prefix), protocol verification, clean-frame forensics, CPU re-inference, discrepancy explainer (why the audit and the arm tables can differ slightly: PromptIR's PSNR loss on CityPersons at sigma = 10 is 4.58 dB in the audit, 60 frames, and 4.74 dB in the arm table, 200 frames), timestamp check, per-arm protocol table. Also c6 ablation, c8 latency, c9 checkpoint provenance, c15 measurement floor, p14_stats_values.* and cpu-regret_fidelity/ (49 per-image files, 235 frames each, with PSNR, SSIM, SPS_grad and SPS_edge of the JPEG-ablation arm 1, the quality-sweep E3 and the sigma = 50 E4 arms; summary fidelity_recomputed_summary.csv). protocol/: the nine dated protocols (#1 to #9 in PROTOCOLS_INDEX.md) at their first version-control commit, from the superseded first gate (protocol_2026-07-03_first-gate-derisk.md, verdict FAIL) to the corrected-detection pass, and three __revisions.md files. Personal names, internal codenames and role words, local paths and account identifiers are replaced by placeholders ([analyst], [author], [local-path], [project-path], [redacted]); no other character is altered. Four are in Vietnamese, five in English, untranslated. The documents version 1 shipped unredacted are #4, #5 and #7. The index gives commits and hashes; for #6 to #9 the first commit postdates the run and the preceding modification time is given. Also REDACTION_REPORT.csv, protocol_conformance.csv / .md (55 rows: conforms 23, deviation disclosed 11, deviation NOT disclosed 18, superseded 3), protocol_conformance_rev12_disclosures.csv and conformance_values.py / .json. frames/: 28 sets, 6,265 frames (clean references and stored noisy inputs; restored outputs are not hashed) in frames_<dataset>_<set>.csv, written by hash_frames.py; frames_manifest.csv gives each set's set_digest (the recipe of the kit's data_digest); check_frames.py writes frames_crosscheck.json. gpu_kits/g1_perimage_ci/ (kit 1.8, sanitised; its "G1" is unrelated to the gates G1 to G7 of the tiling regeneration): run_g1.py (driver), g1_common.py (arm registry, both AP definitions, ANCHOR_RECONCILE), bootstrap_ci.py, selftest_g1.py, build_colab.py and g1_colab.ipynb, run_g1_vsb.sh (non-Colab launcher), README.md (working note and changelog).gpu_runs/g1_perimage/: parquet/<arm>/<detector>/<cond_key>.parquet (367 files, one row per frame); p14_g1_ap_recomputed.csv and its provenance; SUMMARY.json (status counts; 143 cells whose lowest true positive lies within 0.001 of the gate are flagged FRAGILE, a flag, not a status; it lists the 50 with the largest swing, and conf_gate_margin in the CSV gives every cell's margin); env.json; the flip record (ap_hi 0.654218, ap_alt 0.662449, bound 0.00205 = the tolerance plus half a unit of the stored fourth decimal; the conf 0.001 predictions were not kept); bootstrap/ with its provenance; 00_PARQUET_SHA256_MAP.csv. reports/cpu-sigmahat_REPORT.json: the held-out noise-level run report, read by c14_sigmahat_panel.py. smoke/: no article element derives from it; p14_1c_corrected_detection_SMOKE.csv covers 3 of 33 cells on all 235 images and task_b_permutation_LOCAL.json is a full local replication of the sampled permutation; the other six are genuine smoke outputs. manifest/: MANIFEST.csv (size and SHA-256 of every other file, 685) and make_manifest.py. 00_SANITISATION.csv: original and shipped SHA-256 per processed file; changed = no marks a file left as it was. The four G1 files that ship as the kit wrote them are marked so: SUMMARY.json, p14_g1_ap_recomputed.csv and its provenance, and p14_v2_bootstrap_ci.csv. Known quirks of the shipped files (1) Seven CSV files start with '#' comment lines (read with comment='#'): in analysis_v2/, p14_arm_protocol_table.csv, p14_c5_mtime_check.csv, checkpoint_identity_test.csv, checkpoint_provenance.csv, checkpoint_provenance_imagesets.csv and p14_c5_discrepancy_decomposition.csv; and source_code/figure_scripts/jpeg_chroma_420_check.csv. (2) make_p14_xdet_fig_v2.py, make_p14_inria_fig_v2.py, p14_qual_fig.py and p14_qual_grid.py write preview PNGs; delete them (and fig_out/, _rerun/) before make_manifest.py --check. (3) Caveats in analysis_v2/p14_ablation_restated.provenance.json and p14_selection_regret.provenance.json say the G1 kit "regenerates per-image predictions" for PnPLO; they predate its final scope, the external arms only. (4) analysis_v2/c15_ap_discretization.provenance.json records g1_common.py of an earlier kit (2f81f9e8be480a914256ee5911c16402848cf588415eb16817997486987e25db); c15 reads only the arm registry, unchanged in kits 1.7 and 1.8, and re-runs identically. (5) "referee M1" to "referee M6", "Option D", "reviewer Rene" and "Sec. III" refer to the internal pre-submission review rounds of version 1 and to its manuscript's section numbering. (6) The superseded p14_qual_fig.py and p14_qual_grid.py keep Windows-style path joins below the image root; make_p14_figs_v2.py also writes a learned perceptual image patch similarity (LPIPS) figure that the article does not use. Relation to the article--------------------------------------------------------------------------------The conformance table in protocol/ lists, among its 55 rows, 18 departures that the manuscriptrevision it was read against (revision 8) did not state. Revision 18, which accompanies thisversion, discloses the major and moderate rows (4, 6, 23, 28, 35, 48) and the minor rows that toucha printed claim (8, 9, 11, 45); rows 12, 19, 20, 22, 26, 29, 43 and 52 are disclosed in this recordonly. protocol_conformance_rev12_disclosures.csv locates each disclosure in revision 18 (its file andcolumn names carry revision 12, for which it was first written; for rows 4 and 48 the second range,main_cas.tex:402-403, is the Data availability statement, which makes the same point in otherwords). Where the table and the manuscript differ, the table records what was pre-specified andwhat was run.Revision 18 also reports the re-inference (Sec. 4) and prints its intervals in Secs. 5.11 to 5.13. Article element -> file (numbering of the submitted manuscript; figure scripts are insource_code/figure_scripts/; "patched gate table" = data/pnplo/p14_gate_table.csv afterp14_fixed_patch.py; the LaTeX of Tables 4, 5, 6, 8 and 9 is typed; Tables 2 and 3 are generated) Fig. 1 schematic, graphical abstract: drawn in the manuscript source (TikZ; no data file). Figs. 2 and 5, qualitative: source_code/task_qual_figs/qual_figs.py (needs the image sets); audit record results/qual_provenance.json. Fig. 3 predictor comparison: make_p14_figs_v2.py; patched gate table, step2c_1c_results.json "shootout_new"; intervals in analysis_v2/p14_stats_values.json. Fig. 4 SPS vs detection: p14_stats_fig2.py; patched gate table, results/step2d_results.json. Figs. 6 JPEG ablation (arm1, arm1_base), 7 cost vs recovery (plus data/pnplo/arms_latency.csv and the patched gate table), 8 quality sweep (e3_qsweep), 9 sigma = 50 (e4_sigma50): make_p14_figs_v2.py; data/pnplo/arms_rows.csv. Fig. 10 cross-detector: make_p14_xdet_fig_v2.py; data/pnplo/xdet_full9_paper.csv. Fig. 11 INRIA detection: make_p14_inria_fig_v2.py; data/inria/p14_inria_xdataset.csv. Fig. 12 CrowdHuman: make_p14_crowdhuman_fig.py; data/crowdhuman/p14_harddata_crowdhuman.csv. Fig. 13 mechanism: make_p14_f8.py; gate table at sigma = 30 and "tabgrid_new_d". Table 1 checkpoints: documentary; *_params.yaml, analysis_v2/checkpoint_provenance.csv. Tables 2 and 3: analysis_v2/c13_core_regret_table.{py,tex,csv}, c14_sigmahat_panel.{py,tex,csv}. Table 4 discriminator: results/step2d_results.json "disc_table_new". Table 5 gate V1 to V4: V1 step2c_1c_results.json "v1_new", exact p scunet_real_residuals.json "exact_perm_note" and p14_stats_values.json "b_gate7_exact"; V2 step2d_results.json "v2_NEW"; V3 p14_ablation_restated.csv and the LEGACY file's "wilcoxon_p"; V4 step2d_results.json "v4_NEW". Table 6 CityPersons gate: data/citypersons/p14_citypersons.csv, step2_results.json city_*. Table 7 prior work: documentary. Table 8 deployment: analysis_v2/p14_latency_summary.csv, patched gate table, arms_rows.csv. Table 9 appendix grid: the gate table patched with all four corrected inputs. Algorithm 1: analysis_v2/p14_selection_regret.csv, alg1_cheapest_eligible (tau = infinity, delta = 0; an in-sample bound). Per-arm protocol table (this record only): analysis_v2/p14_arm_protocol_table.{csv,tex}. Re-inference (Sec. 4): gpu_runs/g1_perimage/p14_g1_ap_recomputed.csv (last row per cell), flips/, env.json. Intervals (Secs. 5.11 to 5.13): gpu_runs/g1_perimage/bootstrap/p14_v2_bootstrap_ci.csv, pct_lo and pct_hi (bca_* where BCa is named; p_gt_thr for +0.08). Numbers of the abstract (all in analysis_v2/) - Regret 0.0000 to 0.0021, worst 0.0169 <- c13_core_regret_table.csv, basis = cells, sigma = all, psnr_deployed: regret_mean 0.0000 (pnplo_main and the other lossy PnPLO arms) to 0.0021 (citypersons); regret_max 0.0169 (inria_jpeg; YOLOv8-ResNet18, sigma = 10). - Benchmark-style 0.1844 to 0.2500, worst 0.5636 <- bench_psnr_uncompressed: regret_mean 0.1844 (pnplo_e3_q75), 0.1952 (inria_jpeg), 0.2175 (pnplo_arm1_jpeg), 0.2500 (pnplo_e3_q85); regret_max 0.5636 (inria_jpeg; YOLO26m, sigma = 30). - Lossless controls 0.0025 and 0.0109 <- psnr_deployed on inria_lossless and pnplo_arm1_lossless. - 94.1% <- sigma_hat_heldout_metrics.csv, calibration = val160_q95_420, eval_set = heldout115, eval_condition = q95_420, kind = grid (433 of 460); 90.7% and 91.3% <- q75_420 and q85_420; 29.8% <- q95_444; 28.9% <- val160_lossless on q95_420; recalibration <- c14_sigmahat_panel.csv, panel A. - 100.00% to 100.52% <- p14_passthrough_audit.csv, method = restormer, noise_kept_Y_pct_mean (ITU-R BT.601 luma) over the twelve main-arm rows of the four benchmarks (pnplo_main, inria_jpeg, crowdhuman and citypersons at sigma = 10, 20, 30): 99.9999 (inria_jpeg) to 100.518 (pnplo_main_s10); 10% to 21% <- the five lossless rows (inria_png_s10/s20/s30, pnplo_a1_pure_s20/s30): 10.42 (inria_png_s30) to 20.965 (inria_png_s10). - +0.3799 to 0.0000 on 235 frames <- p14_ablation_restated.csv, block = arm1_q95, sigma = 30, restormer: d_pure 0.379887, d_jpeg 0.000000 (restored and noisy JPEG mAP@50 both 0.393176). How to verify this package-------------------------------------------------------------------------------- - Run "python make_manifest.py --check" inside manifest/. - Match a SHA-256 recorded inside the package to the shipped file through 00_SANITISATION.csv (original_sha256 -> sanitised_sha256). - Parquet: match recorded hashes through gpu_runs/g1_perimage/00_PARQUET_SHA256_MAP.csv; recompute a cell's AP@50 with read_cell() and cell_ap() of g1_common.py and compare with ap50_recomputed. - Frames: run frames/hash_frames.py on a local copy and compare set_digest in frames/frames_manifest.csv.-------------------------------------------------------------------------------- 7. Funding: This work was supported in part by the European Regional Development Fund under the project Research Platform for Digital Transformation and Society 5.0 CZ.02.01.01/00/23_021/0012599 within the Jan Amos Komensky Operational Program. This work was supported in part by the Ministry of Education of the Czech Republic (Project No. SP2026/012, SP2026/075). 8. Licence and reuse This record is NOT uniformly licensed. LICENSE.txt in the archive root is authoritative; the summary is: * CC BY 4.0 -- data/, results/, analysis_v2/, frames/, protocol/, reports/, gpu_runs/, smoke/, manifest/, readme.txt, 00_SANITISATION.csv, checkpoints/denoisers_own/ (the nine own-trained checkpoints, plain PyTorch, verified free of any ultralytics or AGPL string), and every file under source_code/ and gpu_kits/ that the AGPL rule below does not cover. * AGPL-3.0-or-later -- checkpoints/detector_yolov9m_clean/, every script or notebook under source_code/ and gpu_kits/ that imports ultralytics, and the two files of the G1 kit that port its code (gpu_kits/g1_perimage_ci/g1_common.py and bootstrap_ci.py). Enumerate the candidates with "grep -rl ultralytics source_code/ gpu_kits/ analysis_v2/" (44 paths as of 2026-09-26); documentation and scripts that only name the library, without importing it or porting its code, stay CC BY -- LICENSE.txt lists them. The detector checkpoint was produced with Ultralytics YOLO 8.4.58 and its own serialised metadata reads "license: AGPL-3.0 (https://ultralytics.com/license)". * Not redistributed, therefore not licensed by us -- all image data. The four evaluation corpora (PnPLO, INRIA Person, CrowdHuman, CityPersons) and the third-party restorer checkpoints (SwinIR, SCUNet, SCUNet-real, Restormer, PromptIR, FFDNet, NAFNet) must be obtained from their original providers under their own terms. CityPersons carries a non-commercial research licence. A uniform licence requires removing checkpoints/detector_yolov9m_clean/ and the AGPL-covered scripts, at the cost of the frozen detector the whole study depends on.



