| --- |
| license: mit |
| tags: |
| - image-classification |
| - domain-generalization |
| - fine-grained |
| - benchmark |
| - shortcut-learning |
| - pytorch |
| pretty_name: SpiceNet Reproducibility Archive |
| --- |
| |
| # SpiceNet: reproducibility archive |
|
|
| Artifacts for the paper **"SpiceNet: Measuring and Narrowing the Cross-Source Gap in |
| Fine-Grained Spice Recognition"** (Md. Noushad Jahan Ramim, Maisha Sameha, |
| Dr. Nazmun Nahid; University of Asia Pacific). |
|
|
| This repository contains everything needed to reproduce the paper **except the source |
| images**, which are not redistributed here (see Licensing). You reconstruct the |
| benchmark by downloading the two public image collections and applying the splits in |
| `manifests/`. |
|
|
| ## Contents |
|
|
| | Folder | What it holds | |
| |---|---| |
| | `manifests/` | The deterministic manifests and 70/15/15 splits (seed 42): the 22-class unified benchmark, the 8-class overlap in each source, and the de-duplicated variants. Each entry references a source image by its original identifier. | |
| | `code/` | All training, evaluation, audit, and figure scripts, plus the `src/` package (dataset, model, domain-generalization methods). | |
| | `results/` | The computed result tables and per-sample/per-seed JSON behind every number and figure in the paper. | |
| | `checkpoints/` | Trained model weights (`best.pth`) for every experimental run reported in the paper: the cross-source SpiceFusionNet matrix, the eight benchmark backbones, the single-source ARC-V/RSC/SD study over three seeds, the invariance model, and GranuFormer. Smoke tests and the Paper-2 leave-one-source-out runs are excluded. | |
| | `DATASHEET.md` | Datasheet for the benchmark (provenance, licences, splits, dedup). | |
|
|
| ## Download from the Hub |
|
|
| ```python |
| from huggingface_hub import snapshot_download |
| |
| local = snapshot_download(repo_id="Noushad999/SpiceNet", repo_type="model") |
| # manifests, code, results, and checkpoints are now under `local` |
| ``` |
|
|
| To pull a single checkpoint instead of the whole 6.5 GB: |
|
|
| ```python |
| from huggingface_hub import hf_hub_download |
| |
| ckpt = hf_hub_download(repo_id="Noushad999/SpiceNet", repo_type="model", |
| filename="checkpoints/arcv_sd_indian_s42/best.pth") |
| ``` |
|
|
| ## The two source datasets (download these) |
|
|
| The images are **not** in this repository. Obtain them from their original sources: |
|
|
| - **Studio source** - Mendeley Indian Spice dataset, Thite et al., *Data in Brief* |
| 57:110936, 2024. **CC BY 4.0**. doi:10.1016/j.dib.2024.110936 (Mendeley `vg77y9rtjb`). |
| - **In-the-wild source** - SpiceSpectrum, Ramim et al., *Data in Brief* 63:112097, |
| 2025. Image deposit **CC BY-ND 4.0**. doi:10.17632/5v7w2hx8n5.2. |
|
|
| ## Reconstructing the benchmark |
|
|
| 1. Download both collections above and note the local root path of each. |
| 2. The manifests in `manifests/` list, for every split, the source image identifiers |
| and the normalized class label. Map those identifiers to your local image paths. |
| 3. Apply the splits as given (do not reshuffle; the seed is 42). |
| 4. Reproduce the headline numbers without retraining using the released checkpoints: |
| - `code/eval_baseline_mcnemar.py` - single-source held-out accuracy and per-seed McNemar. |
| - `code/eval_commodity_matched.py` - the collapse with the coriander label-mismatch class removed. |
| - `code/eval_stats_hardening.py` - cluster bootstrap and seed-level paired tests. |
| Paths at the top of each script may need to point at your checkpoint and manifest |
| locations. |
|
|
| ## Licensing |
|
|
| - **Code** in `code/` is released under the MIT License. |
| - **Manifests, splits, and result files** are released CC BY 4.0. |
| - **Checkpoints** are the authors' own trained weights and contain no source images. |
| - **Source images** retain their original licences (studio CC BY 4.0, in-the-wild |
| CC BY-ND 4.0) and are obtained from the repositories above, not from this archive. |
|
|
| ## Citation |
|
|
| Please cite the paper and both source datasets. See `DATASHEET.md` for the dataset |
| references and the paper for the full bibliography. |
|
|