AlbeRota commited on
Commit
71513cb
·
verified ·
1 Parent(s): 71c3a1c

Upload weights, notebooks, sample images

Browse files
Files changed (1) hide show
  1. README.md +81 -75
README.md CHANGED
@@ -1,103 +1,114 @@
1
- ---
2
- license: mit
3
- tags:
4
- - image-to-image
5
- - reflection-removal
6
- - highlight-removal
7
- - computer-vision
8
- - dinov3
9
- - surgical-imaging
10
- ---
11
-
12
- # UnReflectAnything: RGB-Only Highlight Removal
13
 
14
- [![Project](https://img.shields.io/badge/Project-webpage-ff611b?logo=googlehome&logoColor=ff611b)](https://alberto-rota.github.io/UnReflectAnything/)
15
- [![PyPI](https://img.shields.io/badge/pip%20install-PyPI-76b1f3?logo=python&logoColor=76b1f3)](https://pypi.org/project/unreflectanything/)
16
  [![Paper](https://img.shields.io/badge/Paper-arXiv-B31B1B?logo=arxiv&logoColor=B31B1B)](https://arxiv.org/abs/2512.09583)
17
- [![Weights](https://img.shields.io/badge/Weights-HF%20-FFD21E?logo=huggingface&logoColor=FFD21E)](https://huggingface.co/spaces/AlbeRota/UnReflectAnything)
18
- [![Demo](https://img.shields.io/badge/Demo-HF%20-FFD21E?logo=huggingface&logoColor=FFD21E)](https://huggingface.co/AlbeRota/UnReflectAnything)
19
-
20
- **UnReflectAnything** is a foundation-model-powered framework that inputs any RGB image and removes specular highlights, returning a clean, diffuse-only output. Unlike traditional methods, it does not require polarization or multi-view data.
21
-
22
- ---
23
-
24
- ## Model Capabilities
25
- * **Domain Versatility**: Works effectively on both natural indoor scenes and specialized surgical/endoscopic domain data.
26
- * **Synthetic Supervision**: Trained by synthesizing specularities and supervising the reconstruction in the **DINOv3 feature space**.
27
- * **Foundation Power**: Leverages robust feature representations to generalize highlight removal across diverse lighting conditions.
28
-
29
- ![Architecture](https://raw.githubusercontent.com/alberto-rota/UnReflectAnything/refs/heads/main/assets/architecture.png)
30
-
31
- ---
32
 
33
- ## Available Weights
34
- The following checkpoints are provided for different integration needs:
35
 
36
- | File | Description |
37
- | :--- | :--- |
38
- | **`fullmodel_896.pt`** | Full model checkpoint; recommended for standard inference. |
39
- | `decoder_896.pth` | Decoder weights optimized for 896px resolution. |
40
- | `token_inpainter.pth` | Weights for the specialized token inpainter module. |
41
- | `rgb_decoder.pth` | Standard RGB decoder weights. |
42
- | `rgb_film_decoder.pth` | RGB FiLM (Feature-wise Linear Modulation) decoder weights. |
43
 
44
  ---
 
45
 
46
- ## Installation & Quick Start
47
-
48
- ### 1. Install via pip
49
  ```bash
50
  pip install unreflectanything
51
-
52
  ```
 
 
 
53
 
54
- *Note: Minimum Python 3.11 is required; 3.12 is recommended.*
55
 
56
- ### 2. Download Weights
57
 
58
- Use the built-in CLI to fetch the necessary files:
 
59
 
 
60
  ```bash
61
- # Alias 'ura' or 'unreflect' also work
62
  unreflectanything download --weights
63
-
 
 
 
64
  ```
65
 
66
- ### 3. Basic Python Usage
67
-
68
- ```python
69
- import unreflectanything
70
- import torch
71
 
72
- # Load the pretrained model (uses cached weights)
73
- unreflect_model = unreflectanything.model(pretrained=True)
74
 
75
- # Run inference on a tensor [B, 3, H, W] in range [0, 1]
76
- images = torch.rand(2, 3, 448, 448).cuda()
77
- diffuse_output = unreflect_model(images)
 
 
 
78
 
79
- # Simple file-based inference
80
- unreflectanything.inference("input_with_highlights.png", output="diffuse_result.png")
81
 
 
 
 
 
82
  ```
 
83
 
84
- ---
 
 
 
 
 
 
 
 
 
 
 
85
 
86
- ## CLI Overview
87
 
88
- The package provides a comprehensive command-line interface via `ura`, `unreflect`, or `unreflectanything`.
 
 
89
 
90
- * **Inference**: `ura inference --input /path/to/images --output /path/to/output`
91
- * **Evaluation**: `ura evaluate --output /path/to/results --gt /path/to/groundtruth`
92
- * **Verification**: `ura verify --dataset /path/to/dataset`
93
 
94
- ---
 
 
 
95
 
96
- ## Citation
 
 
97
 
98
- If you use UnReflectAnything in your research or pipeline, please cite our paper:
 
99
 
100
- ```bibtex
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  @misc{rota2025unreflectanythingrgbonlyhighlightremoval,
102
  title={UnReflectAnything: RGB-Only Highlight Removal by Rendering Synthetic Specular Supervision},
103
  author={Alberto Rota and Mert Kiray and Mert Asim Karaoglu and Patrick Ruhkamp and Elena De Momi and Nassir Navab and Benjamin Busam},
@@ -105,11 +116,6 @@ If you use UnReflectAnything in your research or pipeline, please cite our paper
105
  eprint={2512.09583},
106
  archivePrefix={arXiv},
107
  primaryClass={cs.CV},
108
- url={[https://arxiv.org/abs/2512.09583](https://arxiv.org/abs/2512.09583)},
109
  }
110
-
111
  ```
112
-
113
- ---
114
-
115
- **License**: This project is licensed under the [MIT License](https://mit-license.org/).
 
1
+ # UnReflectAnything
 
 
 
 
 
 
 
 
 
 
 
2
 
3
+ [![Project](https://img.shields.io/badge/Project-Webpage-ff611b?logo=googlehome&logoColor=ff611b)](https://alberto-rota.github.io/UnReflectAnything/)
4
+ [![PyPI](https://img.shields.io/pypi/v/unreflectanything?color=76b1f3&label=pip%20install&logo=python&logoColor=76b1f3)]
5
  [![Paper](https://img.shields.io/badge/Paper-arXiv-B31B1B?logo=arxiv&logoColor=B31B1B)](https://arxiv.org/abs/2512.09583)
6
+ [![Demo](https://img.shields.io/badge/Demo-HF%20-FFD21E?logo=huggingface&logoColor=FFD21E)](https://huggingface.co/spaces/AlbeRota/UnReflectAnything)
7
+ [![Modelcard](https://img.shields.io/badge/Model%20Card-HF%20-FFD21E?logo=huggingface&logoColor=FFD21E)](https://huggingface.co/AlbeRota/UnReflectAnything)
8
+ [![Wiki](https://img.shields.io/badge/API-Wiki-9187FF?logo=wikipedia&logoColor=9187FF)](https://github.com/alberto-rota/UnReflectAnything/wiki)
9
+ [![Licence](https://img.shields.io/badge/MIT-License-1E811F)](https://mit-license.org/)
10
+ ### RGB-Only Highlight Removal by Rendering Synthetic Specular Supervision
11
+ UnReflectAnything inputs any RGB image and removes specular highlights, returning a clean diffuse-only outputs. We trained UnReflectAnything by synthetizing specularities and supervising in DINOv3 feature space.
 
 
 
 
 
 
 
 
 
12
 
 
 
13
 
14
+ UnReflectAnything works on both natural indoor and surgical/endoscopic domain data.
 
 
 
 
 
 
15
 
16
  ---
17
+ ![examples](https://raw.githubusercontent.com/alberto-rota/UnReflectAnything/refs/heads/main/assets/header.png)
18
 
19
+ ## Installation
 
 
20
  ```bash
21
  pip install unreflectanything
 
22
  ```
23
+ Install UnReflectAnything as a Python Package.
24
+
25
+ The minimum required Python version is 3.11, but development and all experiments have been bases on **Python 3.12**.
26
 
27
+ For GPU support, make sure PyTorch comes with CUDA version for your system (see [PyTorch Get Started](https://pytorch.org/get-started/locally/)).
28
 
 
29
 
30
+ ## Setting up
31
+ After pip-installing, you can use the `unreflectanything` CLI command, which is also aliased to `unreflect` and `ura`. The three commands are equivalent.
32
 
33
+ With the CLI you can already download the model weights with
34
  ```bash
 
35
  unreflectanything download --weights
36
+ ```
37
+ and some sample images with
38
+ ```bash
39
+ unreflectanything download --images
40
  ```
41
 
42
+ Weights are stored by default in `~/.cache/unreflectanything/weights` (or `$XDG_CACHE_HOME/unreflectanything/weights` if set ; `%LOCALAPPDATA%\unreflectanything` for Windows). Use `--output-dir` to choose another location.
 
 
 
 
43
 
44
+ Both the weights and images are stored on the [HuggingFace Model Repo](https://huggingface.co/spaces/AlbeRota/UnReflectAnything).
 
45
 
46
+ ## Enable shell completion
47
+ Shell completion is available for the `bash` and `zsh` shells. Run
48
+ ```bash
49
+ unreflectanything completion bash
50
+ ```
51
+ and execute the `echo ...` command that gets printed.
52
 
 
 
53
 
54
+ ## Command Line Interface
55
+ Get an overview of the available CLI endpoints with
56
+ ```
57
+ unreflectanything --help # alias 'unreflect --help' alias 'ura --help'
58
  ```
59
+ Refer to the [Wiki](https://github.com/alberto-rota/UnReflectAnything/wiki) to get detailed documentation about each endpoint. We report a summary of the available subcommands. Remember that `ura` is aliased to the `unreflectanything` command
60
 
61
+ | Subcommand | Description | Command |
62
+ |------------|-------------|-------------|
63
+ | `inference` | Run inference on an image directory |`ura inference --input /path/to/images --output /path/to/unref_images` |
64
+ | `train` | Run training | `ura train --config config_train.yaml`|
65
+ | `test` | Run evaluation on a trained model |`ura test --config config_test.yaml`|
66
+ | `download` | Download checkpoint weights, sample images, notebooks |`ura download --weights`|
67
+ | `verify` | Verify weights installation and compatibility, as well as dataset directory structure | `ura verify --dataset /path/to/dataset`|
68
+ | `evaluate` | Compute metrics on output data | `ura evaluate --output /path/to/unref_images --gt /path/to/groundtruth_images/`|
69
+ | `completion` | Print shell completion (bash/zsh): |`ura completion bash` |
70
+ | `cite` | Print shell completion (bash/zsh)| `ura cite --bibtex` |
71
+
72
+ ## Python API
73
 
74
+ The same endpoints above are exposed as a Python API. Refer to the [Wiki](https://github.com/alberto-rota/UnReflectAnything/wiki) to get detailed documentation about each endpoint. A few examples are reported below
75
 
76
+ ```python
77
+ import unreflectanything as ura
78
+ import torch
79
 
80
+ # Get the model class (e.g. for custom setup or training)
81
+ ModelClass = ura.model()
 
82
 
83
+ # Get a pretrained model (torch.nn.Module) and run on batched RGB
84
+ uramodel = ura.model(pretrained=True) # uses cached weights; run 'ura download --weights' first
85
+ images = torch.rand(2, 3, 448, 448, device="cuda") # [B, 3, H, W], values in [0, 1]
86
+ model_out = uramodel(images) # [B, 3, H, W] diffuse tensor
87
 
88
+ # File-based or tensor-based inference (one-shot, no model handle)
89
+ ura.inference("input.png", output="output.png")
90
+ result = ura.inference(images) # tensor input returns tensor
91
 
92
+ # Run training or testing
93
+ ura.run_pipeline(mode="train") # or mode="test"
94
 
95
+ # Run inference from options
96
+ options = ura.InferenceOptions(
97
+ weights_path="path/to/full_model_weights.pt",
98
+ input_dir="path/to/input/images",
99
+ output_dir="path/to/output/diffuse",
100
+ )
101
+ ura.run_inference(options)
102
+ ```
103
+
104
+ ## Citation
105
+ If you include UnReflectAnything in your pipline or research work, we encourage you cite our work.
106
+ Get the citation entry with
107
+ ```bash
108
+ unreflectanything cite --bibtex
109
+ ```
110
+ or copy it directly from below
111
+ ```
112
  @misc{rota2025unreflectanythingrgbonlyhighlightremoval,
113
  title={UnReflectAnything: RGB-Only Highlight Removal by Rendering Synthetic Specular Supervision},
114
  author={Alberto Rota and Mert Kiray and Mert Asim Karaoglu and Patrick Ruhkamp and Elena De Momi and Nassir Navab and Benjamin Busam},
 
116
  eprint={2512.09583},
117
  archivePrefix={arXiv},
118
  primaryClass={cs.CV},
119
+ url={https://arxiv.org/abs/2512.09583},
120
  }
 
121
  ```