ddcolor / README.md
isword14's picture
Update model card
4755ae9 verified
|
Raw
History Blame Contribute Delete
3.6 kB
---
license: apache-2.0
pipeline_tag: image-to-image
tags:
- onnx
- onnxruntime-web
- image-colorization
- ddcolor
---
# DDColor-tiny — fp16 ONNX (512×512)
An ONNX export of **DDColor-tiny** ([piddnad/DDColor](https://github.com/piddnad/DDColor),
ICCV 2023) for black-and-white / grayscale **image colorization**, exported for
in-browser inference with [onnxruntime-web](https://onnxruntime.ai/).
This is the model behind the **[Edge Tools](https://app.edgetools.io) Image
Colorizer** ([`/colorize-image`](https://app.edgetools.io/colorize-image)), which
runs it fully client-side — images are never uploaded anywhere.
## Files
| File | Size | What |
| --- | --- | --- |
| `ddcolor-tiny-fp16.onnx` | ~130 MB | DDColor-tiny, float16 **weights**, float32 I/O, fixed 512×512 input |
## Tensor contract
| | Name | Shape | dtype |
| --- | --- | --- | --- |
| Input | (first input) | `(1, 3, 512, 512)` | `float32` |
| Output | (first output) | `(1, 2, 512, 512)` | `float32` |
The weights are float16 but the **I/O boundary is plain float32**
(`keep_io_types=True`), so no fp16 tensor plumbing is needed and op support on the
ORT wasm execution provider stays maximal.
## Pre / post-processing
DDColor predicts **chroma only**; luminance comes from the source image. Using
CIE Lab in OpenCV's float convention (`L∈[0,100]`, `a,b∈~[-127,127]`, D65 white,
sRGB gamma — DDColor is trained against `cv2.cvtColor` float Lab):
1. Normalise input to `[0,1]` and compute the **original-resolution L** channel.
2. Resize to 512×512, rebuild a grayscale RGB from L (`a=b=0`, Lab→RGB) and feed
it as `(1,3,512,512)` float32. **No ImageNet normalisation** (`do_normalize=False`).
3. The model returns **ab** as `(1,2,512,512)`.
4. Resize ab back to the original size, concatenate with the **original-resolution
L**, and convert Lab→RGB. Only chroma is low-res; full-res luminance is preserved.
## Provenance
Exported from the upstream PyTorch checkpoint — reproducible from public sources:
- **Architecture code**: [`piddnad/DDColor`](https://github.com/piddnad/DDColor)
pinned at `2adb63f2656ac41cbdf7b894cddd94121a3faf13`
(`basicsr.archs.ddcolor_arch`, `encoder_name="convnext-t"`,
`decoder_name="MultiScaleColorDecoder"`, `num_output_channels=2`,
`last_norm="Spectral"`, `num_queries=100`, `num_scales=3`, `dec_layers=9`).
- **Weights**: [`piddnad/ddcolor_paper_tiny`](https://huggingface.co/piddnad/ddcolor_paper_tiny)
`pytorch_model.bin`, SHA-256-verified
(`8a1277bc90a1bfbb6d2d83933a9a6bc821931879ca93e26e4fcec12165d41fce`).
- **Export**: `torch.onnx.export`, **opset 17**, fixed 512×512 input, then weights
cast to float16 via `onnxconverter_common.float16.convert_float_to_float16(
..., keep_io_types=True)`. `onnxsim` / symbolic-shape-infer are skipped — the
input is fixed-size, so shapes are already static.
- **Validation**: every published build is checked by an automated colorization
test against this exact artifact before upload — a grayscale input must come
back with real chroma while preserving the source luminance.
## License
**Apache-2.0**, inherited from the upstream DDColor project
([LICENSE](https://github.com/piddnad/DDColor/blob/master/LICENSE)).
## Citation
```bibtex
@inproceedings{kang2023ddcolor,
title={DDColor: Towards Photo-Realistic Image Colorization via Dual Decoders},
author={Kang, Xiaoyang and Yang, Tao and Ouyang, Wenqi and Ren, Peiran and Li, Lingzhi and Xie, Xuansong},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
year={2023}
}
```