Repository files navigation

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Xirui Li, Charles Herrmann, Kelvin C.K. Chan, Yinxiao Li, Deqing Sun, Chao Ma, Ming-Hsuan Yang

Paper PDFProject Page

TL;DR: The proposed UniCon enables diverse generation behavior in one model for a target image-condition pair.

teaser.mp4
Abstract

Recent progress in image generation has sparked research into controlling these models through condition signals, with various methods addressing specific challenges in conditional generation. Instead of proposing another specialized technique, we introduce a simple, unified framework to handle diverse conditional generation tasks involving a specific image-condition correlation. By learning a joint distribution over a correlated image pair (e.g. image and depth) with a diffusion model, our approach enables versatile capabilities via different inference-time sampling schemes, including controllable image generation (e.g. depth to image), estimation (e.g. image to depth), signal guidance, joint generation (image & depth), and coarse control. Previous attempts at unification often introduce significant complexity through multi-stage training, architectural modification, or increased parameter counts. In contrast, our simple formulation requires a single, computationally efficient training stage, maintains the standard model input, and adds minimal learned parameters (15% of the base model). Moreover, our model supports additional capabilities like non-spatially aligned and coarse conditioning. Extensive results show that our single model can produce comparable results with specialized methods and better results than prior unified methods. We also demonstrate that multiple models can be effectively combined for multi-signal conditional generation.

Setup

  1. Clone the repository and install requirements.
git clone https://github.com/lixirui142/UniCon
cd UniCon
pip install -r requirements.txt
  1. Download pretrained UniCon model weights from here to "weights" dir by running:
python download_pretrained_weights.py

Now we have four unicon models (depth, edge, pose, id) based on SDv1-5.

Usage

Gradio Demo

We provide a gradio demo to showcase the usage of UniCon models. There are some examples to get you familiar with inference options for different tasks. To run the demo:

python gradio_unicon.py

Notebook Demo

We provide a jupyter notebook demo to introduce how to load, set and infer with UniCon models.

Train

To train UniCon Depth, Edge and Pose model on PascalVOC, first download and annotate the PascalVOC dataset:

bash train/download_pascal.sh
python annotate_pascal.py

It will download the dataset to data dir and generate condition maps and captions. Some json files are created to save the dataset information. Then run the training script:

bash train/train_unicon_depth.sh
bash train/train_unicon_hed.sh
bash train/train_unicon_pose.sh

It costs about 13 hours to train one model on single NVIDIA A100 80G. You can run python train_unicon.py --help to check available training parameters.

TODO

  • Provide notebooks and python scripts for more inference cases.
  • Clean and release training code.

Citation

If you find this work useful for your research, please consider citing our paper:

@inproceedings{li2024unicon,
title={A Simple Approach to Unifying Diffusion-based Conditional Generation},
author={Li, Xirui and Herrmann, Charles and Chan, Kelvin CK and Li, Yinxiao and Sun, Deqing and Yang, Ming-Hsuan},
booktitle={The Thirteenth International Conference on Learning Representations}
year={2025}
}

About

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Resources

Stars

38 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Xirui Li, Charles Herrmann, Kelvin C.K. Chan, Yinxiao Li, Deqing Sun, Chao Ma, Ming-Hsuan Yang

Paper PDFProject Page

TL;DR: The proposed UniCon enables diverse generation behavior in one model for a target image-condition pair.

teaser.mp4
Abstract

Recent progress in image generation has sparked research into controlling these models through condition signals, with various methods addressing specific challenges in conditional generation. Instead of proposing another specialized technique, we introduce a simple, unified framework to handle diverse conditional generation tasks involving a specific image-condition correlation. By learning a joint distribution over a correlated image pair (e.g. image and depth) with a diffusion model, our approach enables versatile capabilities via different inference-time sampling schemes, including controllable image generation (e.g. depth to image), estimation (e.g. image to depth), signal guidance, joint generation (image & depth), and coarse control. Previous attempts at unification often introduce significant complexity through multi-stage training, architectural modification, or increased parameter counts. In contrast, our simple formulation requires a single, computationally efficient training stage, maintains the standard model input, and adds minimal learned parameters (15% of the base model). Moreover, our model supports additional capabilities like non-spatially aligned and coarse conditioning. Extensive results show that our single model can produce comparable results with specialized methods and better results than prior unified methods. We also demonstrate that multiple models can be effectively combined for multi-signal conditional generation.

Setup

  1. Clone the repository and install requirements.
git clone https://github.com/lixirui142/UniCon
cd UniCon
pip install -r requirements.txt
  1. Download pretrained UniCon model weights from here to "weights" dir by running:
python download_pretrained_weights.py

Now we have four unicon models (depth, edge, pose, id) based on SDv1-5.

Usage

Gradio Demo

We provide a gradio demo to showcase the usage of UniCon models. There are some examples to get you familiar with inference options for different tasks. To run the demo:

python gradio_unicon.py

Notebook Demo

We provide a jupyter notebook demo to introduce how to load, set and infer with UniCon models.

Train

To train UniCon Depth, Edge and Pose model on PascalVOC, first download and annotate the PascalVOC dataset:

bash train/download_pascal.sh
python annotate_pascal.py

It will download the dataset to data dir and generate condition maps and captions. Some json files are created to save the dataset information. Then run the training script:

bash train/train_unicon_depth.sh
bash train/train_unicon_hed.sh
bash train/train_unicon_pose.sh

It costs about 13 hours to train one model on single NVIDIA A100 80G. You can run python train_unicon.py --help to check available training parameters.

TODO

  • Provide notebooks and python scripts for more inference cases.
  • Clean and release training code.

Citation

If you find this work useful for your research, please consider citing our paper:

@inproceedings{li2024unicon,
title={A Simple Approach to Unifying Diffusion-based Conditional Generation},
author={Li, Xirui and Herrmann, Charles and Chan, Kelvin CK and Li, Yinxiao and Sun, Deqing and Yang, Ming-Hsuan},
booktitle={The Thirteenth International Conference on Learning Representations}
year={2025}
}

About

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Resources

Stars

38 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Xirui Li, Charles Herrmann, Kelvin C.K. Chan, Yinxiao Li, Deqing Sun, Chao Ma, Ming-Hsuan Yang

Paper PDFProject Page

TL;DR: The proposed UniCon enables diverse generation behavior in one model for a target image-condition pair.

teaser.mp4
Abstract

Recent progress in image generation has sparked research into controlling these models through condition signals, with various methods addressing specific challenges in conditional generation. Instead of proposing another specialized technique, we introduce a simple, unified framework to handle diverse conditional generation tasks involving a specific image-condition correlation. By learning a joint distribution over a correlated image pair (e.g. image and depth) with a diffusion model, our approach enables versatile capabilities via different inference-time sampling schemes, including controllable image generation (e.g. depth to image), estimation (e.g. image to depth), signal guidance, joint generation (image & depth), and coarse control. Previous attempts at unification often introduce significant complexity through multi-stage training, architectural modification, or increased parameter counts. In contrast, our simple formulation requires a single, computationally efficient training stage, maintains the standard model input, and adds minimal learned parameters (15% of the base model). Moreover, our model supports additional capabilities like non-spatially aligned and coarse conditioning. Extensive results show that our single model can produce comparable results with specialized methods and better results than prior unified methods. We also demonstrate that multiple models can be effectively combined for multi-signal conditional generation.

Setup

  1. Clone the repository and install requirements.
git clone https://github.com/lixirui142/UniCon
cd UniCon
pip install -r requirements.txt
  1. Download pretrained UniCon model weights from here to "weights" dir by running:
python download_pretrained_weights.py

Now we have four unicon models (depth, edge, pose, id) based on SDv1-5.

Usage

Gradio Demo

We provide a gradio demo to showcase the usage of UniCon models. There are some examples to get you familiar with inference options for different tasks. To run the demo:

python gradio_unicon.py

Notebook Demo

We provide a jupyter notebook demo to introduce how to load, set and infer with UniCon models.

Train

To train UniCon Depth, Edge and Pose model on PascalVOC, first download and annotate the PascalVOC dataset:

bash train/download_pascal.sh
python annotate_pascal.py

It will download the dataset to data dir and generate condition maps and captions. Some json files are created to save the dataset information. Then run the training script:

bash train/train_unicon_depth.sh
bash train/train_unicon_hed.sh
bash train/train_unicon_pose.sh

It costs about 13 hours to train one model on single NVIDIA A100 80G. You can run python train_unicon.py --help to check available training parameters.

TODO

  • Provide notebooks and python scripts for more inference cases.
  • Clean and release training code.

Citation

If you find this work useful for your research, please consider citing our paper:

@inproceedings{li2024unicon,
title={A Simple Approach to Unifying Diffusion-based Conditional Generation},
author={Li, Xirui and Herrmann, Charles and Chan, Kelvin CK and Li, Yinxiao and Sun, Deqing and Yang, Ming-Hsuan},
booktitle={The Thirteenth International Conference on Learning Representations}
year={2025}
}

About

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Resources

Stars

38 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Xirui Li, Charles Herrmann, Kelvin C.K. Chan, Yinxiao Li, Deqing Sun, Chao Ma, Ming-Hsuan Yang

Paper PDFProject Page

TL;DR: The proposed UniCon enables diverse generation behavior in one model for a target image-condition pair.

teaser.mp4
Abstract

Recent progress in image generation has sparked research into controlling these models through condition signals, with various methods addressing specific challenges in conditional generation. Instead of proposing another specialized technique, we introduce a simple, unified framework to handle diverse conditional generation tasks involving a specific image-condition correlation. By learning a joint distribution over a correlated image pair (e.g. image and depth) with a diffusion model, our approach enables versatile capabilities via different inference-time sampling schemes, including controllable image generation (e.g. depth to image), estimation (e.g. image to depth), signal guidance, joint generation (image & depth), and coarse control. Previous attempts at unification often introduce significant complexity through multi-stage training, architectural modification, or increased parameter counts. In contrast, our simple formulation requires a single, computationally efficient training stage, maintains the standard model input, and adds minimal learned parameters (15% of the base model). Moreover, our model supports additional capabilities like non-spatially aligned and coarse conditioning. Extensive results show that our single model can produce comparable results with specialized methods and better results than prior unified methods. We also demonstrate that multiple models can be effectively combined for multi-signal conditional generation.

Setup

  1. Clone the repository and install requirements.
git clone https://github.com/lixirui142/UniCon
cd UniCon
pip install -r requirements.txt
  1. Download pretrained UniCon model weights from here to "weights" dir by running:
python download_pretrained_weights.py

Now we have four unicon models (depth, edge, pose, id) based on SDv1-5.

Usage

Gradio Demo

We provide a gradio demo to showcase the usage of UniCon models. There are some examples to get you familiar with inference options for different tasks. To run the demo:

python gradio_unicon.py

Notebook Demo

We provide a jupyter notebook demo to introduce how to load, set and infer with UniCon models.

Train

To train UniCon Depth, Edge and Pose model on PascalVOC, first download and annotate the PascalVOC dataset:

bash train/download_pascal.sh
python annotate_pascal.py

It will download the dataset to data dir and generate condition maps and captions. Some json files are created to save the dataset information. Then run the training script:

bash train/train_unicon_depth.sh
bash train/train_unicon_hed.sh
bash train/train_unicon_pose.sh

It costs about 13 hours to train one model on single NVIDIA A100 80G. You can run python train_unicon.py --help to check available training parameters.

TODO

  • Provide notebooks and python scripts for more inference cases.
  • Clean and release training code.

Citation

If you find this work useful for your research, please consider citing our paper:

@inproceedings{li2024unicon,
title={A Simple Approach to Unifying Diffusion-based Conditional Generation},
author={Li, Xirui and Herrmann, Charles and Chan, Kelvin CK and Li, Yinxiao and Sun, Deqing and Yang, Ming-Hsuan},
booktitle={The Thirteenth International Conference on Learning Representations}
year={2025}
}

About

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Resources

Stars

38 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Xirui Li, Charles Herrmann, Kelvin C.K. Chan, Yinxiao Li, Deqing Sun, Chao Ma, Ming-Hsuan Yang

Paper PDFProject Page

TL;DR: The proposed UniCon enables diverse generation behavior in one model for a target image-condition pair.

teaser.mp4
Abstract

Recent progress in image generation has sparked research into controlling these models through condition signals, with various methods addressing specific challenges in conditional generation. Instead of proposing another specialized technique, we introduce a simple, unified framework to handle diverse conditional generation tasks involving a specific image-condition correlation. By learning a joint distribution over a correlated image pair (e.g. image and depth) with a diffusion model, our approach enables versatile capabilities via different inference-time sampling schemes, including controllable image generation (e.g. depth to image), estimation (e.g. image to depth), signal guidance, joint generation (image & depth), and coarse control. Previous attempts at unification often introduce significant complexity through multi-stage training, architectural modification, or increased parameter counts. In contrast, our simple formulation requires a single, computationally efficient training stage, maintains the standard model input, and adds minimal learned parameters (15% of the base model). Moreover, our model supports additional capabilities like non-spatially aligned and coarse conditioning. Extensive results show that our single model can produce comparable results with specialized methods and better results than prior unified methods. We also demonstrate that multiple models can be effectively combined for multi-signal conditional generation.

Setup

  1. Clone the repository and install requirements.
git clone https://github.com/lixirui142/UniCon
cd UniCon
pip install -r requirements.txt
  1. Download pretrained UniCon model weights from here to "weights" dir by running:
python download_pretrained_weights.py

Now we have four unicon models (depth, edge, pose, id) based on SDv1-5.

Usage

Gradio Demo

We provide a gradio demo to showcase the usage of UniCon models. There are some examples to get you familiar with inference options for different tasks. To run the demo:

python gradio_unicon.py

Notebook Demo

We provide a jupyter notebook demo to introduce how to load, set and infer with UniCon models.

Train

To train UniCon Depth, Edge and Pose model on PascalVOC, first download and annotate the PascalVOC dataset:

bash train/download_pascal.sh
python annotate_pascal.py

It will download the dataset to data dir and generate condition maps and captions. Some json files are created to save the dataset information. Then run the training script:

bash train/train_unicon_depth.sh
bash train/train_unicon_hed.sh
bash train/train_unicon_pose.sh

It costs about 13 hours to train one model on single NVIDIA A100 80G. You can run python train_unicon.py --help to check available training parameters.

TODO

  • Provide notebooks and python scripts for more inference cases.
  • Clean and release training code.

Citation

If you find this work useful for your research, please consider citing our paper:

@inproceedings{li2024unicon,
title={A Simple Approach to Unifying Diffusion-based Conditional Generation},
author={Li, Xirui and Herrmann, Charles and Chan, Kelvin CK and Li, Yinxiao and Sun, Deqing and Yang, Ming-Hsuan},
booktitle={The Thirteenth International Conference on Learning Representations}
year={2025}
}

About

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Resources

Stars

38 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Xirui Li, Charles Herrmann, Kelvin C.K. Chan, Yinxiao Li, Deqing Sun, Chao Ma, Ming-Hsuan Yang

Paper PDFProject Page

TL;DR: The proposed UniCon enables diverse generation behavior in one model for a target image-condition pair.

teaser.mp4
Abstract

Recent progress in image generation has sparked research into controlling these models through condition signals, with various methods addressing specific challenges in conditional generation. Instead of proposing another specialized technique, we introduce a simple, unified framework to handle diverse conditional generation tasks involving a specific image-condition correlation. By learning a joint distribution over a correlated image pair (e.g. image and depth) with a diffusion model, our approach enables versatile capabilities via different inference-time sampling schemes, including controllable image generation (e.g. depth to image), estimation (e.g. image to depth), signal guidance, joint generation (image & depth), and coarse control. Previous attempts at unification often introduce significant complexity through multi-stage training, architectural modification, or increased parameter counts. In contrast, our simple formulation requires a single, computationally efficient training stage, maintains the standard model input, and adds minimal learned parameters (15% of the base model). Moreover, our model supports additional capabilities like non-spatially aligned and coarse conditioning. Extensive results show that our single model can produce comparable results with specialized methods and better results than prior unified methods. We also demonstrate that multiple models can be effectively combined for multi-signal conditional generation.

Setup

  1. Clone the repository and install requirements.
git clone https://github.com/lixirui142/UniCon
cd UniCon
pip install -r requirements.txt
  1. Download pretrained UniCon model weights from here to "weights" dir by running:
python download_pretrained_weights.py

Now we have four unicon models (depth, edge, pose, id) based on SDv1-5.

Usage

Gradio Demo

We provide a gradio demo to showcase the usage of UniCon models. There are some examples to get you familiar with inference options for different tasks. To run the demo:

python gradio_unicon.py

Notebook Demo

We provide a jupyter notebook demo to introduce how to load, set and infer with UniCon models.

Train

To train UniCon Depth, Edge and Pose model on PascalVOC, first download and annotate the PascalVOC dataset:

bash train/download_pascal.sh
python annotate_pascal.py

It will download the dataset to data dir and generate condition maps and captions. Some json files are created to save the dataset information. Then run the training script:

bash train/train_unicon_depth.sh
bash train/train_unicon_hed.sh
bash train/train_unicon_pose.sh

It costs about 13 hours to train one model on single NVIDIA A100 80G. You can run python train_unicon.py --help to check available training parameters.

TODO

  • Provide notebooks and python scripts for more inference cases.
  • Clean and release training code.

Citation

If you find this work useful for your research, please consider citing our paper:

@inproceedings{li2024unicon,
title={A Simple Approach to Unifying Diffusion-based Conditional Generation},
author={Li, Xirui and Herrmann, Charles and Chan, Kelvin CK and Li, Yinxiao and Sun, Deqing and Yang, Ming-Hsuan},
booktitle={The Thirteenth International Conference on Learning Representations}
year={2025}
}

About

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Resources

Stars

38 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Xirui Li, Charles Herrmann, Kelvin C.K. Chan, Yinxiao Li, Deqing Sun, Chao Ma, Ming-Hsuan Yang

Paper PDFProject Page

TL;DR: The proposed UniCon enables diverse generation behavior in one model for a target image-condition pair.

teaser.mp4
Abstract

Recent progress in image generation has sparked research into controlling these models through condition signals, with various methods addressing specific challenges in conditional generation. Instead of proposing another specialized technique, we introduce a simple, unified framework to handle diverse conditional generation tasks involving a specific image-condition correlation. By learning a joint distribution over a correlated image pair (e.g. image and depth) with a diffusion model, our approach enables versatile capabilities via different inference-time sampling schemes, including controllable image generation (e.g. depth to image), estimation (e.g. image to depth), signal guidance, joint generation (image & depth), and coarse control. Previous attempts at unification often introduce significant complexity through multi-stage training, architectural modification, or increased parameter counts. In contrast, our simple formulation requires a single, computationally efficient training stage, maintains the standard model input, and adds minimal learned parameters (15% of the base model). Moreover, our model supports additional capabilities like non-spatially aligned and coarse conditioning. Extensive results show that our single model can produce comparable results with specialized methods and better results than prior unified methods. We also demonstrate that multiple models can be effectively combined for multi-signal conditional generation.

Setup

  1. Clone the repository and install requirements.
git clone https://github.com/lixirui142/UniCon
cd UniCon
pip install -r requirements.txt
  1. Download pretrained UniCon model weights from here to "weights" dir by running:
python download_pretrained_weights.py

Now we have four unicon models (depth, edge, pose, id) based on SDv1-5.

Usage

Gradio Demo

We provide a gradio demo to showcase the usage of UniCon models. There are some examples to get you familiar with inference options for different tasks. To run the demo:

python gradio_unicon.py

Notebook Demo

We provide a jupyter notebook demo to introduce how to load, set and infer with UniCon models.

Train

To train UniCon Depth, Edge and Pose model on PascalVOC, first download and annotate the PascalVOC dataset:

bash train/download_pascal.sh
python annotate_pascal.py

It will download the dataset to data dir and generate condition maps and captions. Some json files are created to save the dataset information. Then run the training script:

bash train/train_unicon_depth.sh
bash train/train_unicon_hed.sh
bash train/train_unicon_pose.sh

It costs about 13 hours to train one model on single NVIDIA A100 80G. You can run python train_unicon.py --help to check available training parameters.

TODO

  • Provide notebooks and python scripts for more inference cases.
  • Clean and release training code.

Citation

If you find this work useful for your research, please consider citing our paper:

@inproceedings{li2024unicon,
title={A Simple Approach to Unifying Diffusion-based Conditional Generation},
author={Li, Xirui and Herrmann, Charles and Chan, Kelvin CK and Li, Yinxiao and Sun, Deqing and Yang, Ming-Hsuan},
booktitle={The Thirteenth International Conference on Learning Representations}
year={2025}
}

About

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Resources

Stars

38 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Xirui Li, Charles Herrmann, Kelvin C.K. Chan, Yinxiao Li, Deqing Sun, Chao Ma, Ming-Hsuan Yang

Paper PDFProject Page

TL;DR: The proposed UniCon enables diverse generation behavior in one model for a target image-condition pair.

teaser.mp4
Abstract

Recent progress in image generation has sparked research into controlling these models through condition signals, with various methods addressing specific challenges in conditional generation. Instead of proposing another specialized technique, we introduce a simple, unified framework to handle diverse conditional generation tasks involving a specific image-condition correlation. By learning a joint distribution over a correlated image pair (e.g. image and depth) with a diffusion model, our approach enables versatile capabilities via different inference-time sampling schemes, including controllable image generation (e.g. depth to image), estimation (e.g. image to depth), signal guidance, joint generation (image & depth), and coarse control. Previous attempts at unification often introduce significant complexity through multi-stage training, architectural modification, or increased parameter counts. In contrast, our simple formulation requires a single, computationally efficient training stage, maintains the standard model input, and adds minimal learned parameters (15% of the base model). Moreover, our model supports additional capabilities like non-spatially aligned and coarse conditioning. Extensive results show that our single model can produce comparable results with specialized methods and better results than prior unified methods. We also demonstrate that multiple models can be effectively combined for multi-signal conditional generation.

Setup

  1. Clone the repository and install requirements.
git clone https://github.com/lixirui142/UniCon
cd UniCon
pip install -r requirements.txt
  1. Download pretrained UniCon model weights from here to "weights" dir by running:
python download_pretrained_weights.py

Now we have four unicon models (depth, edge, pose, id) based on SDv1-5.

Usage

Gradio Demo

We provide a gradio demo to showcase the usage of UniCon models. There are some examples to get you familiar with inference options for different tasks. To run the demo:

python gradio_unicon.py

Notebook Demo

We provide a jupyter notebook demo to introduce how to load, set and infer with UniCon models.

Train

To train UniCon Depth, Edge and Pose model on PascalVOC, first download and annotate the PascalVOC dataset:

bash train/download_pascal.sh
python annotate_pascal.py

It will download the dataset to data dir and generate condition maps and captions. Some json files are created to save the dataset information. Then run the training script:

bash train/train_unicon_depth.sh
bash train/train_unicon_hed.sh
bash train/train_unicon_pose.sh

It costs about 13 hours to train one model on single NVIDIA A100 80G. You can run python train_unicon.py --help to check available training parameters.

TODO

  • Provide notebooks and python scripts for more inference cases.
  • Clean and release training code.

Citation

If you find this work useful for your research, please consider citing our paper:

@inproceedings{li2024unicon,
title={A Simple Approach to Unifying Diffusion-based Conditional Generation},
author={Li, Xirui and Herrmann, Charles and Chan, Kelvin CK and Li, Yinxiao and Sun, Deqing and Yang, Ming-Hsuan},
booktitle={The Thirteenth International Conference on Learning Representations}
year={2025}
}

About

UniCon: A Simple Approach to Unifying Diffusion-based Conditional Generation (ICLR 2025)

Resources

Stars

38 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages