Spaces:
Sleeping
Sleeping
| title: RefDiffNet | |
| emoji: 🔬 | |
| colorFrom: blue | |
| colorTo: green | |
| sdk: gradio | |
| sdk_version: "5.23.0" | |
| python_version: "3.10" | |
| app_file: app.py | |
| pinned: false | |
| license: agpl-3.0 | |
| # RefDiffNet — PCB Reference–Defect Enrichment (A11_CA) | |
| **Space:** [vinayedula/RefDiffNet](https://huggingface.co/spaces/vinayedula/RefDiffNet) | |
| Standalone Gradio demo for the **A11_CA** prebackbone (no Ultralytics at runtime). | |
| - **Inputs:** defect PCB image + golden reference image | |
| - **Output:** enriched image (`enriched = defect + α · gate · delta`) | |
| Weights: `weights/prebackbone_a11_ca.pt` (~few MB) | |
| ## Deploy to Hugging Face Spaces | |
| ### 1. Prepare the Space folder locally | |
| From the VYOLO repo root: | |
| ```bash | |
| cd /mnt/data/vinay/work/VYOLO | |
| bash hf_prebackbone_demo/prepare_space.sh | |
| ``` | |
| This will: | |
| - Extract `prebackbone_a11_ca.pt` from `best.pt` (uses the VYOLO ultralytics fork **once** on your machine) | |
| - Copy example image pairs into `examples/` | |
| - Remove legacy `vendor/` if present | |
| ### 2. Push to [vinayedula/RefDiffNet](https://huggingface.co/spaces/vinayedula/RefDiffNet) | |
| ```bash | |
| cd hf_prebackbone_demo | |
| bash deploy_to_refdiffnet.sh | |
| ``` | |
| > **Note:** The Space ships only `a11_ca.py`, `prebackbone_infer.py`, and `prebackbone_a11_ca.pt` — not the full ultralytics tree. | |
| ### 3. Space settings (recommended) | |
| | Setting | Value | | |
| |---------|--------| | |
| | Hardware | CPU Basic (works) or **GPU** for faster inference | | |
| | Secrets | Optional: `HF_TOKEN` if weights are in a private model repo | | |
| ### Alternative: host weights on the Hub | |
| ``` | |
| HF_MODEL_REPO=YOUR_USER/YOUR_MODEL | |
| ``` | |
| The app downloads `prebackbone_a11_ca.pt` from that repo. | |
| ## Run locally | |
| ```bash | |
| cd hf_prebackbone_demo | |
| # Clean broken Gradio 4.x + starlette 1.x mix if you hit jinja2 / localhost errors: | |
| pip uninstall -y gradio gradio-client starlette fastapi uvicorn 2>/dev/null || true | |
| pip install -r requirements.txt | |
| pip install --force-reinstall "numpy>=1.23.0,<2" | |
| export PREBACKBONE_ONLY_WEIGHTS=weights/prebackbone_a11_ca.pt | |
| python app.py | |
| ``` | |
| Open **http://127.0.0.1:7860** (default bind). Remote server: `GRADIO_SERVER_NAME=0.0.0.0 python app.py` or SSH port-forward. | |
| ### One-time weight extraction (from full `best.pt`) | |
| Only needed if you do not already have `prebackbone_a11_ca.pt`: | |
| ```bash | |
| ULTRALYTICS_ROOT=../ultralytics python extract_prebackbone_weights.py \ | |
| --ckpt ../ultralytics/Proposed/yolo12_training/HRIPCB_Results/yolo12n_hripcb_200epochs_batch16/weights/best.pt | |
| ``` | |
| ## Layout | |
| | File | Role | | |
| |------|------| | |
| | `a11_ca.py` | Standalone A11_CA module definition | | |
| | `prebackbone_infer.py` | Load weights, run enrichment (same H×W inputs) | | |
| | `gradio_patch.py` | Gradio 5.16 / client 1.7 compatibility patch | | |
| | `app.py` | Gradio UI | | |
| | `weights/prebackbone_a11_ca.pt` | Prebackbone weights only | | |
| ## Environment variables | |
| | Variable | Description | | |
| |----------|-------------| | |
| | `PREBACKBONE_ONLY_WEIGHTS` | Path to `prebackbone_a11_ca.pt` | | |
| | `HF_MODEL_REPO` | Hub repo with `prebackbone_a11_ca.pt` | | |
| | `PREBACKBONE_DEVICE` | `cpu` or `cuda` (default: auto) | | |
| | `PORT` | Gradio port (default `7860`) | | |