遇见数据集

Data for study "A Structural Preservation Framework for Denoiser Selection in YOLO-Based Pedestrian Detection under Sensor Noise"

收藏
Zenodo2026-09-30 更新2026-10-01 收录
官方服务:

资源简介:

README – Dataset for "A Structural Preservation Framework for Denoiser Selection in YOLO-Based Pedestrian Detection under Sensor Noise"================================================================== Created on: 2026-09-13Created by: Vo Thanh Kiet, Researcher (VSB-TUO, FEI, kiet.vo.thanh.st@vsb.cz)Last update: 2026-09-13Licence: CC BY 4.0 for everything in this archive. See LICENSE.txt and item 8 below for what is NOT redistributed here. ---------------------------Basic information---------------------------1. Journal article: A Structural Preservation Framework for Denoiser Selection in YOLO-Based Pedestrian Detection under Sensor Noise 2. DOI: 10.5281/zenodo.22871455 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: 2026-09-21 5. Place of publication: Ostrava, Czechia ------------------------------------------------------------------6. Dataset Description================================================================================ This dataset contains the per-cell structure and fidelity measurements, theper-run detection results of the 180 retraining runs, the aggregated tables andstatistical outputs of the analysis and of its 2026 major revision, theown-trained denoiser checkpoints, and the source code used to produce theresults, tables and figures presented in the article. The study asks whether areference-based image-quality metric can tell which denoiser should be placed infront of a You Only Look Once (YOLO) pedestrian detector when the incomingframes carry additive Gaussian sensor noise. It introduces the StructuralPreservation Score (SPS), a reference-based family of three variants -- edgeoverlap (Variant A), gradient-magnitude correlation (Variant B) andhigh-frequency energy retention (Variant C) -- which measure how faithfully adenoiser preserves the structure a detector relies on, rather than how faithfullyit reconstructs pixel values. SPS is validated against the detection shift thatdenoising actually causes, measured as the change in F1 score (the harmonic meanof precision and recall, written Delta-F1) under retraining and as the change inmean Average Precision at an intersection-over-union threshold of 0.5 (mAP50)under a frozen detector. The findings are that only Variant B and the GradientMagnitude Similarity Deviation (GMSD) reach unadjusted significance underretraining, that no metric survives multiplicity correction, that Variant C isdiagnostic of the over-smoothing collapse of mean-squared-error-traineddenoisers, that under a frozen detector the noise level confounds pooledmetric-based selection while within-level ranking is strong, and thatleave-one-method-out cross-validation (LOOCV) yields a negative coefficient ofdetermination, so the relationship does not extrapolate to unseen denoisers. Allexperiments use the People and Person-Like Objects (PnPLO) pedestrian dataset ofKarthika and Chandran, also referred to as the Karthy dataset. Experimental design. The factorial grid is five detectors (YOLOv8m, YOLOv9m,YOLOv10m, YOLOv11m, YOLOv12m, all in the medium configuration) times six noiselevels (sigma in {0, 1, 5, 10, 20, 30}, in 8-bit intensity units) times sixprocessing conditions (the noisy baseline with no denoising, plus Gaussiansmoothing with a 5x5 kernel, Block-Matching and 3D filtering (BM3D) with theexact transform-domain variance estimator and an oracle sigma, the blind17-layer denoising convolutional neural network (DnCNN) trained on the400-image Berkeley Segmentation Dataset, a convolutional autoencoder (CAE,called Autoencoder in the article) trained from scratch on the PnPLO trainingsplit under a mean-squared-error loss, and the same architecture with itshyperparameters selected by particle swarm optimization (PSO), denoted CAE+PSO)= 180 end-to-end training and evaluation runs. Every run trains from thepublicly released COCO weights for 500 epochs with an early-stopping patienceof 50 epochs at an input size of 640 x 640, on the standard PnPLO split of 944training, 160 validation and 235 test images over two classes (person andperson-like-object). Noise is injected with a per-image seed derived from theimage filename, so that the same realization is paired across methods anddetectors. The sigma = 0 cells are the identity case by convention: no denoisedset is archived at sigma = 0, so the pilot tables carry 1.0 for all three SPSvariants and 0 for Delta-F1 there as placeholders rather than as measurements,and every correlation analysis runs on the 25 active cells (5 methods x 5 noiselevels with sigma > 0). Structure and fidelity are measured per image on the235-image test split and aggregated per cell: SPS Variants A, B and C, the PeakSignal-to-Noise Ratio (PSNR), the Structural Similarity Index Measure (SSIM),and -- added for the major revision -- GMSD, the Feature Similarity Index(FSIM) and the Deep Image Structure and Texture Similarity (DISTS). A second,frozen-detector protocol reuses the clean-trained checkpoints and varies onlythe test-time processing, giving 25 inference-only cells and 125 per-detectorobservations. The revision statistics comprise a gate that reproduces everypublished anchor from the released comma-separated-value (CSV) tables beforeany new number is computed, Holm and Benjamini-Hochberg correction, a Steiger /Meng-Rosenthal-Rubin test of dependent correlations with a paired bootstrapinterval, a clustered bootstrap over method and over noise-level clusters, acrossed mixed-effects model on the 125 per-detector observations, aregression-weighted global fit, a one-way analysis of variance (ANOVA) and arepeated-measures ANOVA over the four active denoisers at sigma = 20 and sigma= 30 with Holm-corrected paired contrasts, and the frozen-detector re-readdescribed above. Note on the image data: this package provides the quantitative results, theown-trained denoiser checkpoints and the source code, not the underlyingimages. PnPLO is a third-party dataset distributed on Kaggle under the slug"karthika95/pedestrian-detection"(https://www.kaggle.com/datasets/karthika95/pedestrian-detection) anddescribed in Karthika and Chandran, "Addressing the False Positives inPedestrian Detection", Electronic Systems and Intelligent Computing, LectureNotes in Electrical Engineering vol. 686, Springer Singapore, 2020, pp.1083-1092 (https://doi.org/10.1007/978-981-15-7031-5_103). Its original imagesand annotations are NOT redistributed here and remain available from thatprovider under its own terms. The 25 denoised image sets (5 methods x sigma in{1, 5, 10, 20, 30}) are derivative works of those images and are likewise notredistributed. Each of the 25 is a complete YOLO dataset -- data.yaml togetherwith images/ and labels/ for 944 training, 160 validation and 235 test frames-- because in the retraining protocol the same processing is appliedconsistently to the training, validation and test splits, so reproducing oneof the 125 denoised runs at sigma > 0 needs the denoised training split andnot only the test frames. The 25 test splits together hold 5,875 image files,949.52 MB (949,519,696 bytes); the training and validation splits add 1,104further frames to each set and were not measured. They can be regenerated fromthe original frames by the noise recipe of Section "Noise Simulation" of thearticle and by the denoiser definitions and the denoising pipeline of theparent study, which are published in Zenodo record 10.5281/zenodo.20842879,loaded with the state dictionaries in checkpoints_denoisers/ -- subject to theprovenance caveat on those checkpoints below. No denoising code is included inthis package: source_code/ holds the analysis notebooks only, and they readthe denoised sets and never write them. The archived sets cover sigma > 0only, so the 25 denoised runs at noise level zero of the 180-run grid, one perdenoising method and detector, have no archived image set at all; this recorddoes not document how the inputs of those 25 runs were produced, and theparent-study pipeline notebook deposited at 10.5281/zenodo.20842879 is theonly place that could answer it. Their outputs are shipped all the same: theirmetrics sit in data/detection/ and their per-run training logs indata/training_curves/. No analysis in the article uses them, because everyanalysis runs on the 25 active cells with sigma > 0. What is released in placeof the images is the measurement layer computed on the 235 test frames: theper-image GMSD, FSIM and DISTS tables in revision_reanalysis/new_metrics/ andthe per-image gradient-correlation tableresults/run_20260419_135335/e5_perimg_sigma20.csv. Note on the parent experiment and the earlier Zenodo record: the 180 detectionruns analysed here were produced by the pipeline of our earlier study on YOLOnoise robustness, not by the code in this package, and they are alreadypublished byte for byte in Zenodo record 10.5281/zenodo.20842879 (CC BY 4.0).In that record, results/all_results.csv (180 rows) has SHA-256 550d440daabbfea7e5aa1219e48f98fbd2ba3fa779a6562bcaa020fd28fc7f96 and results/classification_metrics.csv (180 rows) has SHA-256 bb82167398444162191fcde96902afa4030f0e948cf9338ca0a534ef995f77c2 and between them they hold the 180-row grid of the five medium detectors.Every one of those values appears unchanged in data/detection/all_results.csvand data/detection/classification_metrics.csv here; no value was recomputed oredited. The two files shipped in this package are the SUPERSET from which thatgrid is taken: all_results.csv carries 323 rows and classification_metrics.csvcarries 314, because the parent experiment also trained YOLO26m and threeResNet-backbone YOLOv8 variants (yolov8-resnet18, yolov8-resnet50,yolov8-resnet18-gam) and because all_results.csv, unlikeclassification_metrics.csv, also carries one clean-baseline row per detectorat noise level minus one (9 of them, five belonging to the five mediumdetectors). None of those extra all_results rows belongs to the design of thepresent article, which uses the five medium detectors alone; a readercomparing a row count of 323 against the 180 of the earlier record is seeingthe superset, not a discrepancy. To recover the 180-row grid from either ofthe two shipped files, keep the rows whose model is one of yolov8m, yolov9m,yolov10m, yolo11m and yolo12m and drop the rows at noise level minus one; thatfilter returns exactly 180 rows from each of them. The third detection table,cross_eval_clean_model.csv, carries the same clean condition in its 6 B1_cleanrows, but those are the clean stage of the frozen-detector protocol, which ispart of this article's design, and they are described in that file's own entrybelow. Everything else in this package -- the SPS cell values, the LOOCV, theANOVA restricted to the four active denoisers, the frozen-detector analysisand the 2026 revision metrics -- is new to the present study. Note on the denoiser checkpoints: checkpoints_denoisers/ holds the threeown-trained denoisers (the convolutional autoencoder, DnCNN and CAE+PSO) ateach of the five active noise levels: 20 files, 29.60 MB (29,601,480 bytes).Gaussian smoothing and BM3D are parameter-free at inference and have nocheckpoint. These are the checkpoint files stored in the experiment'sdenoise_models folder, and 12 of them also appear in the companion deposit ofour frozen-detector study of modern denoisers, the data package named14_SPH_Modern_Denoisers_dataset; those are SHA-256 identical to the copiesprepared there (12 of 12 files compared, all identical, verified 2026-09-13),so the two records agree. That deposit's own Zenodo identifier had not beenassigned when this readme was written and is therefore not cited here; once itis published, the twelve shared files can be checked against it by name and bydigest, both of which manifest/MANIFEST.csv lists. One provenance caveat isstated here rather than left for a reader to discover. The experiment folderkeeps two distinct sets of denoiser checkpoints, and not one of the twentyfiles agrees between them. The set released here is the one held in theexperiment's denoise_models folder, dated 1 and 2 March 2026, and it isbyte-identical in all twenty files to the copy kept under ver_11, from whichthe two later version folders in turn inherit. The other set, dated 22 and 23February 2026, sits under ver_1, and the pointer file in the ver_7denoise_models folder -- ver_7 being the version whose results this articleanalyses -- refers the reader back through ver_6, ver_5, ver_4, ver_3 andver_2 to exactly that ver_1 set. The two sets differ in substance and not onlyin bytes: the autoencoder and DnCNN files have the same sizes but differentcontents, while every CAE+PSO file differs in size outright, because theparticle swarm converged on a different architecture and its parameter filechanged format. The archived denoised image sets are dated 23 and 24 February2026 in every set inspected, that is after the ver_1 checkpoints and beforethe ones released here, and a flag file in the experiment folder records apurge and a switch to a five-hundred-epoch configuration on 2 March 2026. Ondates alone the images were produced by the ver_1 set and the set releasedhere is a later retraining. It is released nonetheless because it is the setthat the companion deposit named above already publishes, so the two recordsagree. No pixel-level re-derivation was attempted, and this package does notclaim that these exact weight files generated the shipped metric values. Asecond caveat, on how the released files relate to the article's owndescription of the denoisers, is stated in the entry forcheckpoints_denoisers/ in the file descriptions below. Note on the superseded runs and the smoke outputs: the experiment folder holdsten executions of the same analysis notebook -- one written in place at the toplevel before run stamping was switched on, and nine later ones each writteninto its own timestamped folder, of which one (run_20260419_133608) is emptyand one (run_20260418_113006) is a partial run that wrote only two of thetables. Two of those ten are released here. The timestamped run_20260419_135335is released because its five figure files are byte-identical by SHA-256 to thefigure files of the submitted manuscript reproduced in figures/, and thetop-level layer is released as results/full_exp_shared/ because the revisiongate script reads those copies. The eight remaining timestamped folders areomitted. In the six complete ones every numeric table is byte-identical bySHA-256 to the released copy, the sole numeric exception being the run-summaryobject of the three earliest executions; what else differs is their vectorexports, which carry a fresh creation timestamp and font-subset identifier perexport, and a few abandoned figure layouts -- an early figure-naming scheme anda three-panel version of the comparison figure -- that no version of thearticle uses. One file from an omitted run is the exception: thecutoff-sensitivity figure of the article is drawn by a notebook cell thatreloads its table from run_20260418_053355 rather than recomputing it, sothat table is released in results/e8_cutoff_sweep/ togetherwith a copy of the per-cell grid behind it; without them that figure would haveno data file behind it. Separately, the script that computes GMSD, FSIM andDISTS defaults to a smoke test (two cells of eight images each) and writes itto a different folder; those smoke outputs are NOT article inputs -- theirmeans differ from the released ones because they are computed over 8 imagesrather than 235 -- and they are not included here. Run that script with theargument --full to produce the released tables, which it writes per cell andskips if already present, so an interrupted run resumes. One further omissionis deliberate and worth naming: the experiment folder holds two pre-computedANOVA tables that this article does not use, one adding Gaussian smoothing backas a fifth group and one spanning the eight-detector grid of the parent study.They are excluded because their F statistics would read as contradicting thearticle's, which is computed over the four active denoisers and the five mediumdetectors only; that test is reproduced fromdata/detection/classification_metrics.csv byrevision_reanalysis/stats_reanalysis.py, whose gate section prints it next tothe published value. Note on library versions and unrecorded settings: the article states that theexperiments were run under Python 3.10, PyTorch 2.1, the Ultralytics 8.2 YOLOdistribution and the bm3d 4.0 reference implementation, on a mix of NVIDIA A10040 GB and RTX 4090 24 GB hardware, for approximately 720 GPU-hours, with amaximum observed run-to-run F1 variance below 0.002. None of those is recordedin the artefacts released here: there is no environment file, no wall-clockledger and no repeated-seed run in this package, and no file in this depositrecords a toolkit version, so these values are stated in the article and arenot recorded here. The same applies to the training hyperparameters. Only theepoch budget and the patience are written into an artefact, in the note fieldof data/detection/experiment_meta.json. The rest -- momentum 0.937, an initiallearning rate of 1e-2 with cosine decay to 1e-4, weight decay 5e-4, batch size16, mosaic 1.0, horizontal flip 0.5, hue-saturation-value gains 0.015 / 0.7 /0.4, translation 0.1, scale 0.5 and seed 0 -- are stated in the article and arenot dumped anywhere in the released files. The reported Canny edge-detectionruntime of about 50 ms per 640 x 640 image on a single central-processing-unitcore was measured ad hoc and no timing log is part of this record. Two smallerimplementation details are recorded here because a replicator will meet them:the high-frequency variant applies a two-dimensional Hann window before thefast Fourier transform, which the printed equation does not mention, and theimage-listing helper of the notebooks globs both lower-case and upper-case fileextensions, which double-counts on a case-insensitive filesystem such asWindows (470 entries are found in the 235-image test folder) while behavingcorrectly on the Linux hosts where every result was produced. When using the source code, please follow the instructions provided in thenotebook header. The notebooks were written for Google Colab and the scriptsunder revision_reanalysis/ for a local workstation. In the released copies everypath constant resolves relative to the root of this package, so the programsthat need only the released tables run from a fresh extraction as they stand.The scripts that need the image sets stop with a message naming the folder tosupply; the notebooks print which image folders are absent and continue, so thecells that need frames write tables with empty metric columns into a _rerun/folder at the package root and the analysis cells fed by those tables thenfail. source_code/00_PATHS_README.txt lists every constant with what itpoints at, where each program writes, and the exact edits that separate thereleased copies from the working copies behind the article; those edits touchpath constants, comments and printed text only, never a computation. Somemarkdown and comment text in the notebooks is in Vietnamese, and the header ofthe pilot notebook still carries an earlier working title of the article; thecode itself is unaffected. The manifest folder holds a SHA-256listing of every file together with the script that produced it, so the integrityof the package can be checked after download by running"python make_manifest.py --check" from inside that folder. IMPORTANT: Do not modify the file locations within the folder structure. Folder Structure-------------------------------------------------------------------------------- 03_sps_denoiser_selection_dataset (contains 7 subfolders, readme.txt and LICENSE.txt; 453 files, 42.24 MB (42,243,483 bytes) in total)│├── data (the measured inputs of the analysis)│ ├── pilot (7 files: the 30-cell structure and shift tables)│ │ ├── pilot_all_variants.csv, pilot_delta_f1_v2.csv│ │ ├── pilot_sps_edge.csv, pilot_sps_grad.csv, pilot_sps_hf.csv│ │ └── pilot_v2_summary.json, pilot_v2_variants_scatter.pdf│ ├── detection (5 files: the detection metrics of the parent│ │ grid, of which the 180 runs of this article are a subset)│ │ ├── classification_metrics.csv, all_results.csv│ │ ├── cross_eval_clean_model.csv, origin_baseline_metrics.csv│ │ └── experiment_meta.json│ └── training_curves (323 per-run training logs, 9.11 MB)│ ├── <detector>_<method>_noise_<sigma>_results.csv│ └── <detector>_clean_results.csv (the nine clean-baseline runs)│├── results (the outputs of the analysis notebook)│ ├── run_20260419_135335 (29 files: the run that produced the figures│ │ │ of the article)│ │ ├── e3_psnr_ssim.csv, e3_correlations.json│ │ ├── e4_loocv_variant_B.csv, e4_loocv_combined.csv (+ _preds.csv each)│ │ ├── e5_perimg_sigma20.csv│ │ ├── e6_loocv_comparison.csv, e6_loocv_weighted.csv (+ _preds.csv),│ │ │ e6_weights.json│ │ ├── e7_per_yolo_version.csv, e7_per_yolo_deltaF1.csv│ │ ├── full_experiments_summary.json│ │ └── fig_02, fig_04, fig_05, fig_06, fig_07 (pdf + png + svg each)│ ├── full_exp_shared (16 files: the same tables from the shared│ │ top-level run; stats_reanalysis.py reads three of│ │ them)│ └── e8_cutoff_sweep (2 files: the cutoff sweep behind the│ cutoff-sensitivity figure)│├── revision_reanalysis (the 2026 major-revision statistics, 36 files)│ ├── stats_reanalysis.py, stats_reanalysis_output.json,│ │ stats_reanalysis_report.txt│ ├── infer_only_25cells.csv, infer_only_125obs.csv│ ├── new_metrics_gmsd_fsim_dists.py, new_metrics_correlate.py,│ │ new_metrics_correlations.json│ ├── loocv_verify.py, make_fig_infer_only.py│ └── new_metrics (26 files: 25 per-image tables + the cell│ aggregate)│├── checkpoints_denoisers (20 files, 29.60 MB)│ ├── autoencoder_sigma{1,5,10,20,30}.pt│ ├── dncnn_sigma{1,5,10,20,30}.pt│ └── cae_pso_sigma{1,5,10,20,30}.pt + matching _params.yaml│├── source_code (5 files)│ ├── full_experiments_final.ipynb (canonical generator, outputs cleared)│ ├── full_experiments__4_fixed.ipynb (earlier build, outputs kept)│ ├── full_experiments__3_fixed.ipynb (earlier build; the only copy of the│ │ cutoff-sweep computation)│ ├── pilot_generator/pilot_sps_v3_fixed.ipynb│ │ (generator of data/pilot)│ └── 00_PATHS_README.txt (how the code finds its inputs, and│ what was edited for release)│├── figures (6 files: the figure files of the submitted manuscript)│ ├── fig_02_cutoff_sensitivity.pdf, fig_04_perimg_violin.pdf│ ├── fig_05_per_yolo_version.pdf, fig_06_vs_classical.pdf│ └── fig_07_loocv.pdf, fig_08_infer_only.pdf│├── manifest│ ├── MANIFEST.csv (path, bytes, SHA-256 for every file)│ └── make_manifest.py│├── LICENSE.txt└── readme.txt Figures 1 and 3 of the article have no file here. Figure 1 is a schematic drawninline in the manuscript source and has no data behind it. Figure 3 is a barchart whose five coordinates are typed into the manuscript source, and it isreproduced from data/pilot/pilot_all_variants.csv, whose sps_hf_mean column atsigma = 20 multiplied by 100 gives the five values Figure 3 prints. File Descriptions-------------------------------------------------------------------------------- • data/pilot/pilot_all_variants.csv The single most load-bearing file of the package: the merged per-cell table of every SPS variant against the detection shift. 30 rows = 5 denoising methods x 6 noise levels. Columns: method, sigma, sps_edge_mean, sps_grad_mean, sps_hf_mean, delta_f1_mean, delta_f1_std, sps_hf_sim, sps_combined. sps_hf_sim is the high-frequency ratio folded into a similarity (one minus the absolute distance from unity, clipped to [0, 1]) and sps_combined is the unweighted mean of the three variant scores. Restricted to its 25 rows with sigma > 0 this file is the source of the correlation table of the article, of the LOOCV tables, of the scatter figure against PSNR and SSIM, and of the high-frequency retention figure. • data/pilot/pilot_sps_edge.csv, pilot_sps_grad.csv, pilot_sps_hf.csv The three per-variant component tables that pilot_all_variants.csv merges, 30 rows each over the same 5 x 6 grid. Columns: method, sigma, the variant mean, its standard deviation, the number of images matched and the number skipped (and a note column for the gradient and high-frequency variants). The per-cell standard deviations are population standard deviations (divisor n), not sample standard deviations. • data/pilot/pilot_delta_f1_v2.csv The detection-shift target, 30 rows over the same grid. Columns: method, sigma, delta_f1_mean, delta_f1_std, n_versions, note. delta_f1_mean is the mean over the five medium detectors of the F1 score of the denoised condition minus the F1 score of the noisy baseline at the same noise level, so n_versions is 5 throughout. Every value at sigma > 0 recomputes exactly from data/detection/classification_metrics.csv, in all 25 cells and to machine precision, the standard deviations with divisor n as above. The five rows at sigma = 0 carry the identity value 0 by convention, as their note column records, and so need not equal the difference computed from that file. • data/pilot/pilot_v2_summary.json The verdict object of the pilot round: the best variant on the active cells (Variant B, gradient), the corresponding Pearson coefficient on the 25 active cells and on all 30, the per-variant table, and the go/no-go decision the pilot reached. The value recorded as best_r_active is the correlation the article quotes for Variant B. • data/pilot/pilot_v2_variants_scatter.pdf The pilot diagnostic scatter of the three variants against the detection shift. It is not a figure of the article; it is included because it is what the pilot decision was read off. • data/detection/classification_metrics.csv The classification metrics of every training run of the parent grid, 314 rows. Columns: model, noise_sigma, denoise_method, Accuracy, F1-Score, Sensitivity, Specificity, Precision, TP, FP, FN, TN. The F1-Score column is the source of every Delta-F1 in this study, of the baseline table, of the ANOVA and of the paired contrasts. Filtered to the five medium detectors it is exactly the 180-row design of the article; see the note on the earlier Zenodo record above for the extra rows. One package-internal observation is recorded here because a reader who recomputes anything from this file will meet it. At noise level zero the rows of the noisy and the gaussian_filter conditions are identical for every one of the five medium detectors, and so are the rows of the autoencoder and the dncnn conditions: ten duplicate pairs over the whole metric tuple, measured 2026-09-13; among the five medium detectors there is no duplicate pair at any noise level above zero. Elsewhere in the parent grid there are more: two of the ResNet-backbone variants also duplicate at noise level zero, and yolo26m, whose metric rows are all zero, duplicates at every noise level above zero; neither is part of the article's design. The training logs of those same runs, in data/training_curves/, are not identical -- each of the ten pairs differs by SHA-256, and for yolo11m the autoencoder and dncnn runs stop at 102 and 139 epochs -- so the duplication is in the reported evaluation rows and not in the runs behind them. The same ten pairs are duplicated in data/detection/all_results.csv. This record does not explain them; those runs come from the parent experiment, and no analysis in the article uses the noise level zero cells. • data/detection/all_results.csv The detection metrics of the same runs, 323 rows. Columns: model, noise_sigma, denoise_method, mAP50, mAP50-95, Precision, Recall, Composite. No analysis in the article reads this file; it is the record behind the article's statement that every run logs its F1, mAP50 and mAP50-95, and it is the file whose 180-row subset is published in the earlier Zenodo record. Of the two retraining tables it is the only one that carries clean-baseline rows at noise level minus one: 9 of them, one per detector of the parent grid, of which five belong to the five detectors of this article. classification_metrics.csv has no such row at all; cross_eval_clean_model.csv carries 6, one per detector of its own six-detector grid, which likewise sit at noise level minus one, but those are its B1_clean stage, the clean condition of the frozen-detector protocol, and not part of the retraining design. The ten duplicate row pairs at noise level zero described under classification_metrics.csv are present in this file's own metric columns as well. • data/detection/cross_eval_clean_model.csv The frozen-detector grid, 192 rows. Like the two tables above it is the parent grid and not the design of this article: 192 rows = 6 detectors x 32 cells (one B1_clean, six B2_noisy, twenty-five B3_denoised), the sixth detector being YOLO26m, which this article does not use; filter to the five medium detectors before any reduction, as revision_reanalysis/stats_reanalysis.py does. Its 6 B1_clean rows carry noise_sigma = -1. Columns: model, stage, denoise_method, noise_sigma, mAP50, mAP50-95, Accuracy, F1-Score, Sensitivity, Specificity, Precision, TP, FP, FN, TN. The stage column takes the values B1_clean (the clean-trained detector on clean frames), B2_noisy (the same detector on noisy frames) and B3_denoised (the same detector on denoised frames). Averaged over the five medium detectors, the difference between the B3_denoised and B2_noisy mAP50 at the same noise level is the inference-only shift of the frozen-detector table and of the corresponding figure; revision_reanalysis/stats_reanalysis.py performs that reduction and writes it to infer_only_25cells.csv. • data/detection/origin_baseline_metrics.csv The clean-model baselines of the five medium detectors, 5 rows, one per detector. Columns: model, mAP50, mAP50-95, Accuracy, F1-Score, Sensitivity, Specificity, Precision, Recall, TP, FP, FN, TN. Its F1-Score column is the clean column of the baseline table of the article; the same values are derivable from classification_metrics.csv by selecting the rows with denoise_method = noisy and noise_sigma = 0. • data/detection/experiment_meta.json The description the parent experiment wrote for itself: the version tag, the timestamp, the list of models, the noise levels, the denoising methods, the total number of results, and the note recording the 500-epoch budget and the patience of 50. It describes the parent grid, which is wider than the design of this article; its own model list, however, predates the three ResNet-backbone additions and so names six detectors where the shipped tables carry nine. The authoritative model list is the model column of the CSV files. • data/training_curves/ 323 per-run training logs written by the Ultralytics trainer, one per run of the parent grid, 9.11 MB (9,108,554 bytes) in total. File names follow <detector>_<method>_noise_<sigma>_results.csv, except the nine clean-baseline runs, which are named <detector>_clean_results.csv and correspond to the nine rows of data/detection/all_results.csv that carry noise_sigma = -1. Each holds one row per epoch actually executed before early stopping and fifteen columns: epoch, time, the three training losses (box, class, distribution focal), the four validation metrics (precision, recall, mAP50, mAP50-95), the three validation losses, and the three learning rates. No number in the article is computed from these files; they are the only record that the stated training protocol was honoured, and their row counts are the actual epoch counts behind it. • results/run_20260419_135335/e3_psnr_ssim.csv, e3_correlations.json Per-cell PSNR and SSIM over the same 5 x 6 grid (30 rows; columns method, sigma, psnr_mean, psnr_std, ssim_mean, ssim_std, n_images, note) and the correlations of the structure and fidelity metrics against the detection shift. These are the PSNR and SSIM rows of the correlation table and the two comparison panels of the scatter figure. • results/run_20260419_135335/e4_loocv_variant_B.csv, e4_loocv_variant_B_preds.csv, e4_loocv_combined.csv, e4_loocv_combined_preds.csv Leave-one-method-out cross-validation of an ordinary least-squares fit of the detection shift on the structure score: five fold rows (columns rmse, r2, mae, method, coef, intercept), one per held-out denoising method, and the twenty-five held-out predictions (columns method, sigma, delta_f1_actual, delta_f1_predicted). The variant_B pair uses the gradient variant alone and the combined pair uses the unweighted combination. The fold coefficients of determination are referenced to the mean of the held-out fold, which is why they are negative; they are the per-fold table of the article and the two panels of its cross-validation figure. • results/run_20260419_135335/e5_perimg_sigma20.csv The per-image gradient-variant scores at sigma = 20, 1175 rows = 5 methods x 235 test images. Columns: method, sigma, sps_grad. This is the file behind the per-image violin figure. All five per-method means and all five population standard deviations of this file round to the values that figure prints beside its violins; the caption reports four of those five pairs, for BM3D, Autoencoder, CAE+PSO and DnCNN, and does not print a mean for Gaussian smoothing. The one divergence is BM3D, for which this file gives a mean of 0.968 (0.967817, standard deviation 0.016) and the figure's own in-panel annotation likewise reads plus 0.968 plus or minus 0.016, while the figure caption and the paragraph discussing it print plus 0.969. The released file and the figure are the authoritative values. The caption's other three means (Autoencoder plus 0.737, CAE+PSO plus 0.764, DnCNN plus 0.811) agree to three decimals. • results/run_20260419_135335/e6_loocv_comparison.csv, e6_loocv_weighted.csv, e6_loocv_weighted_preds.csv, e6_weights.json The predictor-configuration comparison of the cross-validation table: the mean coefficient of determination, root-mean-square error and mean absolute error of three of the five configurations the article tabulates (columns predictor, mean_rmse, mean_r2, mean_mae, worst_method, worst_rmse), namely Variant B alone, the unweighted combination and the regression-weighted combination; the Variant A and Variant C rows of that table are produced by revision_reanalysis/loocv_verify.py and printed in revision_reanalysis/stats_reanalysis_report.txt. The folder also holds the fold-level results of the regression-weighted three-variant combination, its held-out predictions, and the fitted weights. • results/run_20260419_135335/e7_per_yolo_version.csv, e7_per_yolo_deltaF1.csv The per-detector breakdown: one row per detector (5 rows; columns version, n, pearson_r, p_value, ci_low, ci_high, spearman_r, spearman_p) and the 125 underlying observations = 5 detectors x 25 active cells (columns version, method, sigma, delta_f1, sps_grad_mean). These feed the per-detector figure, and the 125-observation file is the input of the mixed-effects model of the revision. • results/run_20260419_135335/full_experiments_summary.json The consolidated summary the notebook writes at the end of a run: the correlations, the cross-validation summaries, the per-image statistics and the identity of the pilot round that produced data/pilot. It is the cross-check for every table above. • results/run_20260419_135335/fig_02_cutoff_sensitivity, fig_04_perimg_violin, fig_05_per_yolo_version, fig_06_vs_classical, fig_07_loocv (.pdf, .png, .svg) The figure exports of this run. The five PDF files are byte-identical by SHA-256 to the five correspondingly named files in figures/, which are the files the manuscript includes; they are kept in both places so that figures/ means "what the article prints" and results/ means "what this run produced". • results/full_exp_shared/ 16 files: the same e3 to e8 tables and the run summary, written by an earlier in-place execution of the same notebook at the top level of the experiment folder rather than into a timestamped run folder. They are included because revision_reanalysis/stats_reanalysis.py points at this folder rather than at the run folder above and reads three of its sixteen files, e3_psnr_ssim.csv, e7_per_yolo_deltaF1.csv and e6_weights.json. The folder is shipped whole so that the shared run is complete rather than reduced to the three files one script happens to open. Five of the fourteen files that exist in both places are byte-identical; in the other nine the values agree to about thirteen significant digits, the largest divergence being eight parts in ten to the fourteenth, and no published number depends on which copy is used. This folder also holds the two e8 tables that results/run_20260419_135335 does not contain. Of those two it is the only place that holds e8_cutoff_sensitivity.csv under that exact name; results/e8_cutoff_sweep/ carries the originating run's copy of the same sweep under a stamped name. The other, e8_hf_grid_by_cutoff.csv (125 rows; columns method, sigma, hf_mean, n, hf_sim, r_cutoff_frac), appears in both folders and the two copies are byte-identical, so that the figure's inputs sit together. • results/e8_cutoff_sweep/ 2 files: the cutoff sweep of the high-frequency variant. e8_cutoff_sensitivity__run_20260418_053355.csv is the exact file the cutoff-sensitivity figure cell of source_code/full_experiments_final.ipynb reloads (5 rows; columns r_cutoff_frac, n, pearson_r_ratio, p_value_ratio, pearson_r_sim, p_value_sim), and e8_hf_grid_by_cutoff.csv is the per-cell grid behind it, copied here from the shared top level so that the figure's inputs sit together; that copy is byte-identical to results/full_exp_shared/e8_hf_grid_by_cutoff.csv. results/full_exp_shared/e8_cutoff_sensitivity.csv is the top-level run's own copy of the same five-row sweep; the two agree to about fifteen significant digits, the largest divergence being five parts in ten to the sixteenth, and differ only in the floating-point text that the two executions wrote (494 and 495 bytes). The sweep itself was computed on an 80-image subsample per cell by the cell that survives only in source_code/full_experiments__3_fixed.ipynb. • revision_reanalysis/stats_reanalysis.py, stats_reanalysis_output.json, stats_reanalysis_report.txt The gate script of the 2026 major revision and its two outputs. The script first reproduces every traceable published anchor from the shipped tables and halts if any of them fails to match, then computes the Holm and Benjamini-Hochberg corrections over the six-metric family, the Steiger / Meng-Rosenthal-Rubin comparison of dependent correlations with a paired bootstrap interval, the clustered bootstrap, the crossed mixed-effects model, the regression-weighted global fit, the ANOVA and repeated-measures ANOVA with Holm-corrected paired contrasts, and the frozen-detector reduction. The report additionally carries an errata section listing every value that moved between the submitted and the revised manuscript, and the cross-validation audit trail appended by loocv_verify.py. The report's gate block is where the article's ANOVA is reproduced from data/detection/classification_metrics.csv. Note that the report prints the residual normality and homogeneity checks for the Delta-F1 residuals only; the corresponding checks on the raw F1 residuals, which the article also quotes, are recomputable from data/detection/classification_metrics.csv but are not printed by this script. • revision_reanalysis/infer_only_25cells.csv, infer_only_125obs.csv The frozen-detector cells written by that script: 25 rows (columns method, sigma, d_map50, sps_edge_mean, sps_grad_mean, sps_hf_sim, sps_combined, psnr_mean, ssim_mean) and the 125 per-detector observations behind them (columns model, method, sigma, d_map50, map50, map50_noisy, sps_grad_mean). The 25-cell file is the frozen-detector table of the article and the input of its figure. • revision_reanalysis/new_metrics_gmsd_fsim_dists.py Computes GMSD, FSIM and DISTS per image over the 235-image test split for each of the 25 active cells, from the clean frames and the archived denoised sets. It is checkpointed per cell (an existing output file is skipped, so an interrupted run resumes) and it defaults to a smoke test of two cells over eight images; run it with the argument --full to produce the released tables. It needs the image sets, which are not redistributed here. • revision_reanalysis/new_metrics/ 26 files: 25 per-image tables named <method>_s<sigma>.csv, each with 235 rows (columns image, gmsd, fsim, dists), plus new_metrics_cells.csv, which aggregates them to the 25 active cells (columns method, sigma, n, gmsd_mean, gmsd_std, fsim_mean, fsim_std, dists_mean, dists_std). This is the measurement layer released in place of the denoised images themselves. • revision_reanalysis/new_metrics_correlate.py, new_metrics_correlations.json Correlates the three added metrics against the detection shift in both regimes, negating GMSD and DISTS so that a higher value always means more structure preserved, and applies the nine-metric Holm and Benjamini-Hochberg corrections. The correlation table of the article reports its corrected p-values over the nine-metric family, so this pair is required: the six-metric correction printed in stats_reanalysis_report.txt is a different family and does not reproduce the table's columns. The six older p-values that enter the nine-metric family are typed into the script as four-decimal constants rather than recomputed; they are the values printed in revision_reanalysis/stats_reanalysis_report.txt and carried at full precision in stats_reanalysis_output.json, and recomputing them from data/pilot/pilot_all_variants.csv and results/full_exp_shared/e3_psnr_ssim.csv reproduces all six. The rounding is visible in three deposited numbers -- the Holm value for the gradient variant, 0.3016 against 0.301557 exactly, the Holm value for PSNR, 0.399 against 0.398938, and the Benjamini-Hochberg value for the negated GMSD, 0.16965 against 0.169626 -- and changes no digit of the article, which prints three decimals. • revision_reanalysis/loocv_verify.py An independent recomputation of every cross-validation configuration of the article from data/pilot/pilot_all_variants.csv, checked against the printed values and appended as an audit trail to stats_reanalysis_report.txt. • revision_reanalysis/make_fig_infer_only.py Draws the frozen-detector figure from infer_only_25cells.csv. The released copy writes the figure into a fig_out/ folder beside the script; the released figure it reproduces is figures/fig_08_infer_only.pdf. • checkpoints_denoisers/ The three own-trained denoisers at each of the five active noise levels: autoencoder_sigma<N>.pt (the convolutional autoencoder), dncnn_sigma<N>.pt and cae_pso_sigma<N>.pt, each with the matching cae_pso_sigma<N>_params.yaml recording the architecture and learning rate the particle swarm selected for that noise level (base_filters, kernel_size, lr). 20 files, 29.60 MB (29,601,480 bytes). They are plain PyTorch state dictionaries and carry no architecture definition; the module classes live in the parent-study pipeline notebook published at 10.5281/zenodo.20842879. Scanned 2026-09-13, none of the 20 files contains the string "ultralytics" or "AGPL". Gaussian smoothing and BM3D are parameter-free and have no checkpoint. The released files do not match every detail of the article's Table 3 and of the paragraph describing the denoisers, and that is stated here rather than left for a reader to find. The archive holds one checkpoint per noise level for each of the three learned denoisers, and the five files of a given denoiser are distinct weight sets rather than copies: for DnCNN the first convolution tensor (64 x 3 x 3 x 3) differs in all 1728 of its elements between sigma = 1 and every other level, and the five cae_pso_sigma<N>_params.yaml record a different base_filters and learning rate at each level (80, 45, 69, 38 and 96, and 0.000913, 0.001625, 0.000396, 0.000822 and 0.000554, at sigma = 1, 5, 10, 20 and 30). The article instead describes DnCNN as the blind variant trained on the 400-image Berkeley Segmentation Dataset with no fine-tuning on PnPLO, the autoencoder as trained at sigma in {5, 10, 20, 30}, and the CAE+PSO hyperparameter set as held fixed across noise levels; the released set is per-level and includes a sigma = 1 autoencoder. The autoencoder state dictionary likewise holds 417,795 parameters in four encoder convolutions and four decoder layers, of which two are learned 2 x 2 transposed convolutions, with a 3 x 3 output projection, where the article states approximately 1.2 M parameters with bilinear up-sampling and a final 1 x 1 projection. The released files are authoritative for what was deposited; the description is being reconciled with them for the journal proof stage. See also the provenance caveat in the note above. • source_code/full_experiments_final.ipynb The canonical generator of the analysis: it reads the five pilot tables and data/detection/classification_metrics.csv and writes every e3 to e7 table together with the five figure files; the released outputs of one such run are results/run_20260419_135335, and the released copy of the notebook writes a fresh run into _rerun/full_exp/ at the package root. Cell outputs are cleared. It carries the SPS implementations -- the edge variant, the gradient variant, the high-frequency variant with its cutoff fraction and its Hann window, and the bootstrap confidence-interval helper with its seed and resample count -- carried over from the pilot notebook into its sixth cell. Of the seven helpers the two notebooks share, three are textually identical and four differ only in docstrings, comments and line breaks, plus default values for the two Canny thresholds in the edge variant; none differs in what it computes. The pilot notebook, released under source_code/pilot_generator/, carries the same helpers and additionally the Canny-threshold calibration, which this notebook does not. • source_code/full_experiments__3_fixed.ipynb An earlier build of the same notebook, with cell outputs retained; in every retained output the prefix of the authors' experiment folder reads <EXPERIMENT_ROOT>, as source_code/00_PATHS_README.txt records. It is NOT optional: its cutoff-sweep cell is the only place in the whole record where the sweep behind results/e8_cutoff_sweep/ is actually computed, including the 80-image subsample per cell; the final notebook only reloads the resulting table. • source_code/full_experiments__4_fixed.ipynb The intermediate build between the two above, with cell outputs retained under the same <EXPERIMENT_ROOT> convention. It documents an abandoned multi-panel layout of the comparison figure and is included so that the three-notebook lineage is complete. • source_code/pilot_generator/pilot_sps_v3_fixed.ipynb The notebook that produced data/pilot: it calibrates the Canny thresholds, computes the three SPS variants per image over the 235-image test split for all 30 cells, derives the detection shift from data/detection/classification_metrics.csv, and writes the five pilot tables and the verdict object; the released copy writes them into _rerun/pilot/ at the package root. Cell outputs are retained under the same <EXPERIMENT_ROOT> convention. It is named as the pilot source in full_experiments_final.ipynb and in the run summaries; it needs the image sets, which are not redistributed here. Its header carries an earlier working title of the article. • source_code/00_PATHS_README.txt How the released notebooks and scripts find their inputs: the two roots they resolve against, every path constant per file with what it points at, where each program writes, and the edits that separate the released copies from the working copies, with the SHA-256 of each released file. Written for this deposit. • figures/ 6 files: the figure files the submitted manuscript includes, as submitted. fig_02_cutoff_sensitivity.pdf, fig_04_perimg_violin.pdf, fig_05_per_yolo_version.pdf, fig_06_vs_classical.pdf and fig_07_loocv.pdf are byte-identical by SHA-256 to their copies in results/run_20260419_135335/; fig_08_infer_only.pdf is the frozen-detector figure added in the revision and is produced by revision_reanalysis/make_fig_infer_only.py, so it has no run folder and no copy under results/, and it is the one figure released as a PDF alone. Figures 1 and 3 are drawn inline in the manuscript source and have no file; see the note under the folder tree. • manifest/MANIFEST.csv, manifest/make_manifest.py A listing of every file in the package with its size in bytes and its SHA-256 digest (452 rows), and the standard-library script that generates it. Run "python make_manifest.py" from inside the manifest folder to regenerate the listing, or "python make_manifest.py --check" to verify a downloaded copy against it; the check reports any missing, extra or altered file and exits non-zero if the package does not match. • Mapping between the names in the files and the names in the article The denoise_method and method columns of every table use the internal names gaussian_filter, bm3d, autoencoder, dncnn and cae_pso; the article calls them Gaussian smoothing, BM3D, Autoencoder, DnCNN and CAE+PSO respectively, and denoise_method = noisy is the noisy baseline, the reference condition against which every shift is taken. The detector names yolov8m, yolov9m, yolov10m, yolo11m and yolo12m are the article's YOLOv8m, YOLOv9m, YOLOv10m, YOLOv11m and YOLOv12m; note that the two most recent are written without the letter v in the files. The article's Variant C appears in the files under two different columns, and this is the one place where a reader who takes the obvious one gets a different number: the SPS_HF row of the correlation table is computed from sps_hf_sim, which is the column revision_reanalysis/stats_reanalysis.py reads and which gives r = +0.246 over the 25 active cells, while the high-frequency retention figure plots sps_hf_mean as a percentage; sps_hf_mean put through the same correlation gives r = +0.155 instead. In data/detection/all_results.csv and data/detection/cross_eval_clean_model.csv, noise_sigma = -1 together with denoise_method = clean denotes the clean condition, which is a distinct row from noise_sigma = 0; in data/detection/classification_metrics.csv and in the pilot tables there is no noise_sigma = -1 row at all and noise_sigma = 0 is the clean baseline of the 180-run design. The rows at sigma = 0 in the pilot tables are placeholders rather than measurements: no denoised set is archived at sigma = 0, which is why pilot_sps_edge.csv records n_images_matched = 0 and n_images_skipped = 235 for those five rows, while pilot_all_variants.csv enters 1.0 for every SPS variant and pilot_delta_f1_v2.csv enters 0 for the shift. The 0 entered as the shift is a convention and differs by up to 0.0135 from the value recomputable from data/detection/classification_metrics.csv at that noise level. All five rows are excluded from every analysis in the article, which therefore runs on the 25 cells with sigma > 0. The stage column of cross_eval_clean_model.csv takes the values B1_clean, B2_noisy and B3_denoised as described in its entry above. Standard deviations in the pilot tables are population standard deviations, computed with divisor n. What this package does not contain-------------------------------------------------------------------------------- • Image data from the dataset -- no original, noisy or denoised frame. The PnPLO frames are third-party material, the noisy and denoised sets are derivative works of them, and none of the three is redistributed here. (The 22 PDF, PNG and SVG files in this package are plots.) See the note on the image data above for where to obtain the originals and how to regenerate the rest. • The trained YOLO detector weights. The parent grid holds 323 best-epoch checkpoints, 32.52 GB (32,522,715,170 bytes), and 302 last-epoch checkpoints, 32.16 GB (32,161,801,019 bytes); twenty-one of the runs kept no last-epoch file. The 180 runs analysed in this article are a subset of those 323: their best-epoch checkpoints are 8.74 GB (8,740,241,351 bytes), and 161 of those runs also have a last-epoch checkpoint. They are not included here for size, and because they are produced by the Ultralytics YOLO toolkit and carry its AGPL-3.0 licence string in their own serialised metadata, so including them would make this otherwise uniform CC BY 4.0 record a mixed-licence one. They are available from the corresponding author on reasonable request. Nothing in the article depends on them: every table and figure follows from the summary tables, the pilot tables and the scripts released here. • The pipeline notebook that trained those detectors and generated the noisy and denoised sets. It belongs to the parent study and is already published in Zenodo record 10.5281/zenodo.20842879. • The eight superseded executions of the analysis notebook, the two pre-computed ANOVA tables that this article does not use, and the smoke-test outputs of the added-metrics script. See the note on the superseded runs and the smoke outputs above for why each is omitted. • The figure exports of the parent study that share the same experiment folder (several hundred megabytes of charts belonging to the earlier article), the spreadsheet duplicates of the shipped tables, the per-model pivot and improvement tables of the nine-detector parent grid, and the resume checkpoint of the results writer, which is byte-identical to data/detection/all_results.csv. • The response letter, the reviewer feedback and the authorship forms of the revision round. Those are correspondence, not data. • The weights that the perceptual-metric library downloads at run time for DISTS. They are the property of their authors and are fetched automatically.-------------------------------------------------------------------------------- 7. Funding The authors are extremely grateful to VSB--Technical University of Ostrava, Czech Republic, for their expertise and support in supporting this research. 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 article was funded by the Ministry of Education of the Czechia (Project No. SP2026/012, SP2026/075). The views and conclusions in this article are entirely those of the authors and do not necessarily reflect the views of the funding organizations. 8. Licence and reuse Everything in this archive is released under the Creative Commons Attribution 4.0 International licence (CC BY 4.0), https://creativecommons.org/licenses/by/4.0/. LICENSE.txt in the archive root is authoritative: one licence tier covers everything in the archive, and LICENSE.txt lists separately, under "tier 2", what is not redistributed and therefore not licensed by us. This matches the two earlier Zenodo records from this author group, 10.5281/zenodo.20842362 and 10.5281/zenodo.20842879, both CC BY 4.0 and both of resource type "Dataset". Not redistributed here, and therefore not licensed by us: all image data, namely the PnPLO frames and every noisy or denoised derivative of them, which remain available from the original provider under its own terms; the 323 trained YOLO detector checkpoints of the parent grid, 180 of them from the 180 runs of this article, which are Ultralytics-produced and carry their own AGPL-3.0 licence string, and which are available from the corresponding author on reasonable request; the parent-study pipeline notebook, already deposited at 10.5281/zenodo.20842879; and the weights the perceptual-metric library downloads at run time. The result tables in this archive were produced by running an AGPL-3.0 licensed program. Running a program does not make its output a derivative work of that program, and the toolkit does not claim its users' measurements; the licence attaches to the checkpoint and to the code, which is exactly what this archive does not contain. This file states what we believe the licensing position to be, as the depositors, based on the metadata the artifacts themselves carry. It is not legal advice. Last reviewed: 2026-09-13.

提供机构:
Zenodo
创建时间:
2026-09-29
二维码
社区交流群
二维码
科研交流群
商业服务